我正在阅读来自Kurose的计算机网络,并且在TCP章节中阅读关于TCP和Go Back之间的差异的NI发现了一些我不完全理解的东西.书中说明了以下两种协议之间的一些差异:
"许多TCP实现缓冲正确接收但无序的segs而不是丢弃.
另外,假设seqof segs 1,2,... N按顺序正确接收,ACK(n),n <N,丢失,剩余的N-1个acks在各自超时之前到达发送方TCP重传最多一个seg ,即seg n,而不是pkts,n,n + 1,...,N,如果ACK(n + 1)在超时之前到达seg n,则TCP甚至不会重传seg n"
我理解无序段的缓冲,但我不理解其他行为,我认为这是因为我不完全理解返回N.遵循该示例,如果ACK(n + t)到达在Go Back N超时之前,协议将继续,好像seg n实际上是收到的,这是因为累积的ACKS ...所以,Go Back N不会重新传输该段....或者是我错过了什么?
我正在尝试使用UDP编写客户端服务器程序,并且等待和停止,但我没有那个部分,我仍然试图弄清楚这两个进程(服务器和客户端)如何通信,因为在我的客户端程序中,用户需要输入服务器名称或IP地址以及端口名称,然后发送服务器应计算的表达式.但是,我在互联网上挖了一些教程,并在编码后(或者我这么认为)我不能让客户端与服务器通信.下面是我的代码,请赐教我在做什么错误,如果它是的bind(),sendto(),recvfrom()或socket(),或全部.我看不出究竟是什么问题.我知道客户端不应该在无限循环上运行,但到目前为止我想让程序相互通信,之后我会抛光我的代码.谢谢!
客户端代码:
#include <stdio.h> // Default System Calls
#include <stdlib.h> // Needed for OS X
#include <string.h> // Needed for Strlen
#include <sys/socket.h> // Needed for socket creating and binding
#include <netinet/in.h> // Needed to use struct sockaddr_in
#include <time.h> // To control the timeout mechanism
#define EXPR_SIZE 1024
#define BUFLEN 512
#define TRUE 1
#define FALSE 0
#define SERVERLEN 1024
int main(int argc, char **argv){
long portNum; // Since it's possible …Run Code Online (Sandbox Code Playgroud)