【发布时间】:2015-09-25 08:03:57
【问题描述】:
我正在通过 IPv6 使用 iperf (https://iperf.fr/) 进行一些 UDP 带宽测试。使用带有以下命令行的 Linux UDP 客户端时,我的结果非常糟糕:
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 的默认值为 8 KB,UDP 的默认值为 1470 字节。请注意,对于 UDP,这是数据报大小,在使用 IPv6 寻址时需要将其降低到 1450 或更少以避免碎片。另请参阅 -n 和 -t 选项。
我已尝试通过将 Linux iperf UDP 客户端命令行替换为以下内容来进行相同的带宽测试:
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时没有分片?
谢谢。
【问题讨论】:
标签: linux udp ipv6 bandwidth iperf