目录
思考题:底层线路限速10Mbps,为什么iperf3打流显示的速率不到10Mbps?
思考题:底层线路限速10Mbps,为什么iperf3打流显示的速率不到10Mbps?
一、实验拓扑:
【客户端】(10.255.0.2)------(iperf打流)------>【服务端】(10.255.1.2)
二、iperf TCP打流情况分析:
如下图所示,iperf tcp打流9Mbps,iperf显示有9Mbps;打流10Mbps,显示只有9.56Mbps。
-l指定1400字节,iperf tcp打流10Mbps,显示只有9.56Mbps。
通过【iperf实验验证及抓包分析系列一:iperf3中通过-l参数指定的是哪部分数据的大小?】文章,我们知道了iperf中指定/显示的速率应该只是拿Data部分的数据进行计算,-l可以简单理解成是TCP/UDP Data部分的长度,最终形成的数据包还会加上TCP/UDP报头、IP包头、二层帧头,对于TCP包会再加上12(TCP Option)+20(TCP报头)+20(IP包头)+14(二层帧头)=66字节的额外开销。TCP是逐流转发,会把小包合成大包,又因为以太网默认最大MTU是1500字节,超过此长度会被分片,所以以太网线路中最大帧大小就是1518(1500+14字节帧头+4字节帧尾部FCS),那么对于iperf TCP流的Data部分在整个帧中的占比就是(1518-66)/1518=95.6%。所以底层线路带宽是10Mbps,iperf显示就是10Mbps*95.6%=9.56Mbps左右。
通过在底层线路上抓包,我们也可以看到10Mbps基本上已经是跑满了。
三、iperf UDP打流情况分析:
对于iperf UDP包的情况,-l可以简单理解成是UDP Data部分的长度,最终形成的数据包还会加上UDP头(8字节)+IP头(20字节)+二层帧头(14)=42字节的额外开销。
所以当-l 1472字节(最大值了,不然就IP分片,影响速率了)打UDP流时,对于iperf UDP流的Data部分在整个帧中的占比就是1472/(1472+42)=97.2%。所以底层线路带宽是10Mbps,iperf显示就是10Mbps*97.2%=9.72Mbps左右。
【扩展】当-l 1473,最终形成的数据包是1473+42=1515,超过最大MTU发生IP分片,速率反而是下降了的。
所以当-l 1400字节打UDP流时,对于iperf UDP流的Data部分在整个帧中的占比就是1400/(1400+42)=97%。所以底层线路带宽是10Mbps,iperf显示就是10Mbps*97%=9.7Mbps左右。
当-l 64字节打UDP流时,对于iperf UDP流的Data部分在整个帧中的占比就是64/(64+42)=60.4%。所以底层线路带宽是10Mbps,iperf显示就是10Mbps*60.4%=6.04Mbps左右。