数据包复制的影响

Effects of packet duplication

正在使用 TCP 传输数据。在这里我想分析一下系统对各种网络行为的性能。我正在使用 Netem 工具来产生数据包延迟、丢失、重新排序和重复。

我可以想象系统的性能会随着延迟、丢失和重新排序的增加而降低。即,重新传输数据包需要额外的时间。但是对于复制,性能没有显着变化。 Wireshark 日志显示正在发生数据包重复。

307328 266.723146 192.168.1.8 192.168.1.3 TCP 78 [TCP Dup ACK 307327#1] 44812 > http [ACK] Seq=149 Ack=3188408 Win=522880 Len=0 TSval=261765 TSecr =83169437 SLE=3186960 SRE=3188408

我可以理解数据包重复是在 TCP 层处理的,它可以丢弃重复的数据包。我想知道这个接收和丢弃重复数据包的过程是否会影响系统的性能[即它会引入任何时间延迟]吗?

它会引入一些延迟吗?也许......但可能没有什么值得注意的。

一旦您的机器接收到 TCP 数据包的第一个副本,它就会忽略其余部分。现在,这可能发生在软件中,这会导致您的 CPU 解释数据包并决定将其丢弃的延迟非常小,但我相信现在它会发生在硬件级别,并且您的CPU 不会注意到任何事情。这并不是说根本不会有任何影响 - 您正在用尽网络带宽来接收重复的数据包,因此如果您看到大量重复,您可能会注意到带宽有效下降。但是,在大多数情况下,这应该是次要的。

如果您使用的是半途而废的 TCP 套接字库,它应该只是为您提供一个数据流(可能在字节缓冲区中),其数据量与已按顺序接收的数据量一样多。现在,如果一个脑死亡的猴子写了你的库(我的意思是它实际上没有遵循 TCP 规范)那么你可能会在你的流中看到复制的数据。但是,我假设情况并非如此,因此唯一真正明显的影响是带宽浪费。