就像wireshark
的输出一样,我捕获了两个TCP数据包,一个TCP数据包的序列号为149483和ack 149453,一个TCP数据包的序列号为149491和ack 146685。
我认为seq编号为149483的数据包首先发送(因为它的序列号较低),被确认为149453。
然后发送seq num 149491,但是为什么此数据包确认了已被第一个数据包确认的146685?
答案 0 :(得分:0)
从TCP的角度来看,序列号和确认号都是序列号,但是您必须记住,每侧都从32位空间中选择一个随机的初始序列号。换句话说,序列号和确认号之间没有关系。
主机A和主机B建立连接的方式。主机A将选择一个随机ISN,并在初始SYN中将其发送给B。主机B将确认该号码(RFC加上1)并选择自己的随机ISN。主机A将确认(再次加1)。从现在开始,序列号与段中发送的数据总量结合使用,以根据序列号重新组合段,其中序列号有效地用于跟踪在每个方向上发送的字节数TCP连接。
因为这是这样工作的,所以最好将确认号“低”和序列号“高”一起使用。拥有几乎可以想象的其他任何组合也是很好的选择。