因此,客户端通过使用seq向服务器发送SYN数据包来启动TCP连接。 #X。服务器然后用SYN + ACK响应X + 1。当关闭连接协议颁布时,FIN数据包也是如此。
所以我的问题是为什么服务器确认X + 1而不是X?我认为SYN和FIN数据包没有搭载任何数据。还有其他原因吗?我很困惑为什么服务器会确认X + 1而不是X.
答案 0 :(得分:3)
发送的序列号是下一个预期的序列号。如果没有增加,那么回复将表明该数据包未被接受,请重新发送。这将以无限循环结束。
SYN是一种特殊情况,它本身传输信息。 (它初始化目标上的接收计数。)ACK将用于下一个预期字节(SYN + 1)。
ACK计数并不总是增加,并且可能会增加超过1.考虑这种交换,其中数据包2被延迟并且不按顺序到达。
Received ACK 1 2 3 2 4 2 2 5