我正在使用iperf (https://iperf.fr/)在IPv6上进行一些UDP带宽测试。当我用以下命令行使用Linux客户端时,结果非常糟糕:
iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m
在研究Wireshark的问题时,我看到客户端在发送数据时出现了一些碎片。更准确地说,我看到UDP客户机输出的数据包大小为1510字节和92个字节,交替。例如,我看到的UDP数据包具有以下模式(大小):1510、92、1510、92、1510、92、...,1510、92、.
阅读iperf2文档我阅读了以下选项(-l):
读或写缓冲器的长度。iPerf的工作方式是多次编写len字节数组。默认情况下TCP为8KB,UDP为1470字节。注意:对于UDP,这是数据报大小,当使用IPv6寻址到1450或更低时,需要降低数据报大小,以避免碎片化。还请参阅-n和-t选项。
我试图通过用以下代码替换Linux客户端命令行来进行相同的带宽测试:
iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m -l1450
我看到了很好的结果。看着Wireshark的抓捕,我再也看不到碎片化了。
在IPv4上做同样的测试,我不需要改变默认的UDP数据报大小(我不需要使用'-l‘选项)来获得好的结果。
因此,我的结论是,碎片(通过IPv6)是造成较差的带宽性能。
无论如何,我想知道在IPv6上将UDP数据报大小设置为1450时到底会发生什么。为什么对于UDP数据报大小,我在IPv6上而不是在IPv4上有碎片?此外,为什么我在将UDP数据报大小减少到1450时没有碎片?
谢谢。
发布于 2015-09-25 08:13:30
发布于 2015-09-25 08:58:43
基本IPv4报头为20字节,基本IPv6报头为40字节,UDP报头为8字节。
对于IPv4,总的数据包大小是1470+8+20=1498,这比默认的以太网MTU 1500要小。
使用IPv6时,数据包的总大小是1470+8+40=1518,它超过1500个,必须是分段的。
现在让我们来看看你的观察。您可以看到大小分别为1510和92的数据包。其中包括以太网头,它是14个字节。因此,您的IPv6数据包是1496字节和78字节。大数据包的内容是: IPv6报头(40字节)、碎片报头(8)、UDP头(8)和1440字节的数据。较小的分组包含IPv6报头(40)、碎片报头(8)和剩余的30个字节的数据。
https://stackoverflow.com/questions/32777545
复制相似问题