作者:中国移动云能力中心 ——孙华敏
概要:iperf3工具是大家常用的一款tcp、udp打流工具,我们常常用来进行限速、带宽之类的测试。因此,对iperf3这款工具就不详细介绍了。回到标题,Iper3打流时所支持的UDP协议是真的UDP吗?
iperf3工具是大家常用的一款tcp、udp打流工具,我们常常用来进行限速、带宽之类的测试。因此,对iperf3这款工具就不详细介绍了。回到标题,Iper3打流时所支持的UDP协议是真的UDP吗?
我们不妨做个测试。在我们的移动云上同VPC下创建两个云主机,并设置云主机的安全组,使安全组只放通udp协议。
然后我们在两个云主机vm1和vm2上安装iperf3工具,并在vm1上开启iperf3 server,在vm2上开启iperf3 client,向vm1发送udp报文
vm1:iperf3 -s -i -p 1234
vm2:iperf3 -c 192.168.33.4 -i 1 -p 1234 -t 60 -b 100M -u
这个时候我们会发现,vm1收到不vm2的iperf3打流的报文
首先,安全组肯定是没有问题的。但为什么UDP不通呢?
抓个包试试。通过抓包发现,vm2向vm1发的竟然是TCP报文
那iperf3的udp模式真的是披着TCP外衣的假UDP吗?
再做个测试,我们把安全组规则改成只放通TCP协议,再测试一下,看放通TCP后,ipef3打UDP是否能通
结果发现,依旧不通
但是多了个现象,vm1侧的server端出现了这样的现象:连接被clinet断了!因为我们只放通了TCP,因此这个所谓的连接只可能是TCP。但是建立了TCP连接后,又收不到报文
只能再次抓包。通过抓包发现,竟然有UDP报文了,但是由于安全组没开UDP,所以被对端丢弃了。
到这里基本就明白了,iperf3的udp功能,需要先建立tcp连接成功后,再建立UDP连接发送udp的报文。为了验证一下我们的猜测,我们把安全组规则放通TCP和UDP
再用iperf3进行打UDP的流量,这时通了
我们到vm1后台看一下端口情况,发现确实建立了两个连接,一个tcp连接,一个udp连接
真相大白。那iperf3的udp是真的udp吗?答案是真的,但iperf3 udp的功能要依赖tcp建连成功。当我们用iperf3去进行udp打流的时候,iperf3的client和server首先会进行TCP握手,当TCP建连成功后,再建立UDP连接,之后才开始进行UDP报文的发送和接收。
最后,如果我们需要测试比如安全组、虚拟防火墙等用例中只开放UDP的规则时,尽量不要用ipef3去测试,因为需要依赖TCP规则的放通。可以试试udpsend&udpreceive这款工具。
版权声明 (原创):本文内容由移动云用户自发贡献,版权归原作者所有,移动云开发者社区不拥有其著作权,亦不承担相应法律责任。如果您发现本社区有涉嫌抄袭的内容,可填写举报信息,一经查实,本社区将立刻删除涉嫌侵权内容。