好吧,在握手过程中,客户端只从服务器接收到一个数据包: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,因为他从服务器收到的最后一个数据包是 SEQ=0
另一个编辑:要真正了解发生了什么,您可能需要选择一个具有不同开头 SEQ 的示例(我已经写过,服务器和客户端的 SEQ 是独立的):
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