使用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层中处理的,它可以丢弃重复的数据包。我想知道这个接收和丢弃重复数据包的过程是否会影响系统的性能[即它会引入任何时间延迟]吗?
答案 0 :(得分:2)
会引入一些滞后吗?也许......但可能没有什么值得注意的。
一旦您的机器收到TCP数据包的第一个副本,它将忽略其余部分。现在,这可能发生在软件中,这会导致CPU解释数据包的时间非常小,并决定将其丢弃,但我相信现在它将发生在硬件级别,而你的CPU不会注意到一件事。这并不是说根本不会产生任何影响 - 你正在使用网络带宽来接收重复的数据包,所以如果你看到重复的TON,你可能会注意到带宽的有效下降。但是,在大多数情况下,这应该是次要的。
如果你正在使用一个不错的TCP套接字库,它应该只是为你提供一个数据流(可能在字节缓冲区中),其数据量与按顺序接收的数据量一样多。现在,如果一个脑侠猴子写了你的库(并且我的意思是它实际上并没有遵循TCP的规范)那么你可能会在你的流中看到复制的数据。但是,我将假设情况并非如此,因此唯一真正明显的效果将是浪费带宽。