我想澄清一下我在这里读到的一些内容:
第一个答案说,从客户端到服务器的序列号将相同,从服务器到客户端的确认也将相同,这将告诉您哪一方正在进行重新传输。但是,当我得到如下输出时:
10:58:15.317823 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040385, ack 56380, win 32768, length 117
10:58:15.317841 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040385:3040470, ack 56380, win 32768, length 85
10:58:15.550090 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040470, ack 56380, win 32768, length 202
10:58:15.811131 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040470, ack 56380, win 32768, length 202
10:58:16.133386 IP 1.2.3.4.50245 > 5.6.7.8.443: Flags [P.], seq 3040268:3040470, ack 56380, win 32768, length 202
在这个例子中,前两行具有不同的序列号和相同的确认,但它是从客户端到服务器的数据包,那么哪一端在这里进行重传?
在最后 3 行中,序列号和确认都相同,那么您如何知道哪一端正在重新传输数据包?请注意,在此示例中,1.2.3.4 是客户端,5.6.7.8 是服务器。
答案1
这些是从客户端到服务器的重新传输。以下是正在发生的事情:
- 客户端发送 2 个段。一个有 117 个字节,另一个有 85 个字节(pkts 1 和 2)
- 客户端等待服务器确认,但服务器始终没有回复
- 大约 200 毫秒后,客户端的重传计时器到期,因此它使用重新打包并将前两个段合并为一个 202 字节的段(pkt 3)
- 客户端重置其重传计时器,由于未收到 ACK,该计时器已过期,因此它再次重传(pkt 4)
- 客户端增加计时器,再次等待,计时器到期,然后再次重传(pkt 5)
我们知道这些是来自客户端的重传,因为所有数据包都是从客户端发送到服务器的。我们知道它们是重传,因为序列号相同,即它一遍又一遍地发送相同的数据。