TCP序列号

Sat*_*esh 6 tcp

我想知道如果两个相同序列号的段到达目的地,哪个段会被接受?

例如:

客户端向服务器发送数据包并等待确认。但是它没有在时间线内收到确认(由于一些网络问题,该段需要时间才能到达服务器),因此再次开始发送相同的段。现在在服务器端,如果两个数据包同时到达会发生什么。

Mik*_*ott 8

一个数据包被标记为重复并被丢弃。因为它们是相同的,所以不管是哪一个。见/sf/ask/901023231/


kas*_*erd 6

两个段同时到达的前提是没有意义的。一个总是先于另一个到达。但是在下一个数据到达之前,该数据可能尚未交付给应用程序。

根据RFC 793,将使用来自第一段的数据。

段按顺序处理。到达时的初始测试用于丢弃旧的重复项,但进一步处理按 SEG.SEQ 顺序进行。如果一个段的内容跨越新旧边界,则只应处理新部分。

也就是说,不难想象现实中的实现会有不同的表现。特别是部分重叠的片段可能非常有趣。