gpt4 book ai didi

linux - iperf UDP over IPv6

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:50 25 4
gpt4 key购买 nike

我正在通过 IPv6 使用 iperf ( https://iperf.fr/ ) 进行一些 UDP 带宽测试。使用带有以下命令行的 Linux UDP 客户端时,我得到了非常糟糕的结果:

iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m

在调查 Wireshark 的问题时,我发现客户端发送数据时出现了一些碎片。更准确地说,我看到交替出现大小为 1510 字节和 92 字节的 UDP 客户端传出数据包。例如,我看到的 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 时到底发生了什么。为什么我在 IPv6 上有分段而不是在 IPv4 上有 UDP 数据报大小的默认值?此外,为什么将 UDP 数据报大小减小到 1450 时没有碎片?

谢谢。

最佳答案

基本 IPv4 header 为 20 字节,基本 IPv6 header 为 40 字节,UDP header 为 8 字节。

对于 IPv4,总数据包大小为 1470+8+20=1498,小于默认的以太网 MTU 1500。

对于 IPv6,总数据包大小为 1470+8+40=1518,超过 1500,必须进行分段。

现在让我们看看您的观察结果。您会看到大小为 1510 和 92 的数据包。其中包括 14 字节的以太网 header 。因此,您的 IPv6 数据包为 1496 和 78 字节。大数据包的内容是:IPv6 报头(40 字节)、分片报头(8 个)、UDP 报头(8 个)和 1440 字节的数据。较小的数据包包含 IPv6 header (40)、分段 header (8) 和剩余的 30 字节数据。

关于linux - iperf UDP over IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com