在握手过程中,客户端只收到一个来自服务器的数据包: SEQ=0和ACK=1。有了这个信息,服务器就会告诉客户端“我现在正在等待一个带有SEQ=1的数据包”。你说对了。
现在,在握手的最后部分,客户端发送一个SEQ=1和ACK=1,这基本上与来自服务器的意思相同:“我现在正在使用SEQ=1等待您的数据包。”
但是:在TCP握手之后,客户端通常不会等待这个数据包被确认,而是已经发送了第一个数据包(实际上,数据可能已经包含在握手的最后一个数据包中-我假设在您的示例中就是这种情况,因为HTTP请求与最后一个握手数据包具有相同的SEQ )。所以任何下一个数据包都会有ACK=1。但是为什么呢?它再次显示“我正在等待来自您的带有SEQ=1的数据包”。这完全有意义:客户端从服务器接收的最后一个数据包具有SEQ=0 (在握手中)。还要记住,客户端和服务器都有独立的SEQ。这意味着,客户端可以发送100个数据包。只要服务器没有发送,客户端就会一直等待ACK=1,因为他从服务器收到的最后一个数据包是hat SEQ=0
另一个编辑:为了真正了解发生了什么,你可能想选择一个具有不同开头SEQ的示例(我已经写过了,服务器和客户端的SEQ是独立的):
代码语言:javascript复制Client -> SYN, SEQ=100
Client <- SYN, ACK, SEQ=700, ACK=101 <- Server
Client -> ACK = 701, SEQ=101 [50 Bytes of data]
Client -> ACK = 701 [Again, didn't receive sth from server yet], SEQ = 151