假设机器A要发送数据给机器B,中间有很多个路由器,比如说100个。
需要发送的数据量为 1000000 字节。我的问题是,将数据拆分为数据包大小(例如 1000 字节的数据包)是否会减少端到端延迟,而不是一次发送所有数据?
我非常感激任何能解答我这个疑问的信息。
谢谢!
答案1
您可能会问是否应该使用以太网巨型帧(维基百科链接),定义为有效载荷超过 1500 字节的数据包。巨型帧通常携带 9000 字节的有效载荷。
测量结果表明,这种较大的数据包可以改善端到端 TCP 性能的延迟。但是,当通过低带宽链路时,它们可能会产生负面影响(现在这种情况不太可能发生)。
您可以在上面的维基百科链接及其参考资料部分中找到更多信息。
我个人的看法:在使用 MTU 大小时,将 MTU 大小设置为大于默认值 (1500) 时,我从未在大型传输方面取得太大改进。但是,在没有进行任何精确测量的情况下,我认为使用太小的数据包大小会更慢。因此,我认为您不应该更改默认的 MTU。
如果我理解正确,您问的是全部发送还是部分发送,我建议发送完全填满一个以太网数据包的有效载荷。请记住,您发送的数据是有效载荷,随后将与协议标头一起包装,对于 IPv6 来说,协议标头比 IPv4 更大(看到这个)。发送大数据块会自动为您完成此操作,因为操作系统会将其按 MTU 大小进行最大重新打包。因此请发送大块,但发送超大块不会带来任何改进。
答案2
简而言之:是的,数据包的大小会影响有效传输速度,数据包越大,所需数据包的数量越少,因此取决于所使用的协议等,总体上所需的开销越少。
在某些情况下可以使用巨型帧(并非所有介质/硬件都支持它)来进一步减少开销。
但是,还有其他因素会对传输速度产生更大的影响。如果中间有 100 个跳数/设备,则会出现其他问题,例如路由和数据包交换,这些问题会给传输速度带来很大的负担。此时,不仅可能不允许使用巨型帧,而且您是否能够使用完整的 1500 字节数据包也值得怀疑,而且仅处理本身就已变得非常困难,以至于 MTU 不再那么重要。
对于 1000000 字节,MTU 甚至不那么重要,因为它只有 1mb,大约需要 1 秒钟才能完成。对于定期的 1Tb,则需要考虑优化。即使你将文件“预先分割”成多个,也不会使其运行得更快。但实际上可能会使其变慢,因为即使你分成 1 个数据包文件,你的接口也可能认为该数据包可以进一步分割。连接是通过“最小可用”MTU 计算的,这意味着数据包所采用的路径中最小的“间隙”(特定链路的 MTU)是将协商连接的大小。也就是说,如果它没有因为其他东西(如 ppp 连接、mpls 网络、加密和隧道等)的“看不见的”开销而进一步碎片化……