看看下面的图片,取自 Ilya Grigorik 的书《高性能浏览器网络》,我可以理解 SYN 数据包会选择一个随机序列号,该序列号在 SYN ACK 数据包 (N+1) 中递增。最后,在 ACK 数据包中,序列号 (N+1) 和确认号 (N+1) 都会递增。
使用 Wireshark 测试时,我收到的 ACK 数据包的确认号为 N+1,但序列号 = N。作者说在 ACK 数据包中序列号和确认号都会增加,这是错误吗?
答案1
RFC 793状态反复确认号是该端希望接收的下一个数据包. 因此它将始终高于序列号。
例如,在第 2.6 节中:
段还携带一个确认号,该号是反向传输的下一个预期数据八位字节的序列号。
在第 3.1 节中:
确认号:32位
如果设置了 ACK 控制位,此字段包含段发送方期望接收的下一个序列号的值。一旦建立连接,此字段始终会被发送。
第 3.3 节详细解释了序列号的工作原理以及它们为什么这样工作。您可能会发现它比您的书更有启发性。