iperf UDP测试丢包问题分析

本文目的

分析同一region下两台vpc类型ECS之间iperf测试UDP丢包问题排查

问题描述

用户在同一个region下的两台ECS分属两个vpc,两个vpc通过高速通道打通,然后通过iperf测试二者内网之间UDP的丢包情况,当测试带宽达到50M以上的时候,出现了丢包现象,且随着带宽的增加,丢包率出现增长趋势。

ECS A:iperf -c <ECS_B_IP> -u -b <bandwidth>

ECS B: iperf -s -u

问题分析

vpc类型ECS A与vpc类型ECS B 通信链路图如下:

具体数据流走向

ECS A(192.168.104.235)-> NC1(100.105.59.3)-> vgw(10.141.166.253)-> NC2(100.105.59.9)-> ECS B(10.182.83.13)

排查思路

  • 丢包的第一感觉是网络丢包,抓包排查有个误区,由于只看到了源NC和目的NC之前的通信,故判断是NC和NC之间的直接通信

  • vpc同学介入一起排查,发现源端eth0的抓包,发给了vgx,但是在目的端抓包发现外壳封装了目的NC的IP
[Time ] 17:32:07.130844   Point: `input `
[ETHER] 24:4c:07:33:0e:02 -> 00:04:37:28:00:65, eth_type: 0x0800
[IPv4 ] 100.105.59.3 -> 10.141.166.253
proto: 17, ver: 04, ihl: 05, len: 1534, ident: 59824,R: 0, DF: 1, MF: 0, offset: 0, ttl: 60, chksum: 0xfe47
[UDP  ] sport: 46703, dport: 250, size: 1514, chksum: 0x0000
[VxLan] debug_flag: 0, vlan_tag: 0, payload_type: 0, version: 1, tunnel_id: 1878597, tos: 0, tof: 0
[IPv4 ] 192.168.104.235 -> 10.182.83.13
proto: 17, ver: 04, ihl: 05, len: 1498, ident: 55469,R: 0, DF: 1, MF: 0, offset: 0, ttl: 64, chksum: 0xd50e
[UDP  ] sport: 36687, dport: 5001, size: 1478, chksum: 0xa0aa
[Time ] 17:32:07.130854   Point: `output`
[ETHER] 24:4c:07:33:0e:02 -> 00:04:37:28:00:65, eth_type: 0x0800
[IPv4 ] 100.105.59.3 -> 100.105.59.9
proto: 17, ver: 04, ihl: 05, len: 1534, ident: 59824,R: 0, DF: 1, MF: 0, offset: 0, ttl: 60, chksum: 0x0000
[UDP  ] sport: 46703, dport: 250, size: 1514, chksum: 0x0000
[VxLan] debug_flag: 0, vlan_tag: 0, payload_type: 0, version: 1, tunnel_id: 2125861, tos: 0, tof: 0
[IPv4 ] 192.168.104.235 -> 10.182.83.13
proto: 17, ver: 04, ihl: 05, len: 1498, ident: 55469,R: 0, DF: 1, MF: 0, offset: 0, ttl: 64, chksum: 0xd50e
[UDP  ] sport: 36687, dport: 5001, size: 1478, chksum: 0xa0aa

  • 在确认数据包确认通过vgw后,开始统计抓包信息,方案如下

ECS A 通过iperf打UDP流量:iperf -c 10.182.83.13 -u -b 600m
ECS B 通过iperf接收:iperf -u -s


VM 内部抓包


ECS A:

sudo tcpdump -w ~/client.pcap -n -i eth0 src host  192.168.104.25 and src port 1234
ECS B:

sudo tcpdump -w ~/server.pcap -n -i eth0 src host  192.168.104.25 and src port 1234

两个NC eth0口抓包:


NC1: 

sudo houyi-tcpdump -w /apsara/i-6we6pnh19n2q7srkgomd.pcap -nnK -i eth0 udp and src inner_port 1234 and dst inner_host 10.182.83.13

NC2: sudo houyi-tcpdump -B 4096 -w /apsara/i-6we53i9h3ducbju5rmuw.pap -nn -i eth0  udp -K and src inner_host 192.168.104.235 and src inner_port 1234



网工配合在ASW和LSW部署流统

100.105.59.3:46728 ->10.141.166.253:250

由于目的端包外壳自动封装了目的NC的IP,所以vgw上的包的报文格式是

100.105.59.3:46728 -> 100.105.59.9:250


  • 抓包结果
ECS A 丢包/发包:171/510203

NC1 eth0 发包:510204

ASW和LSW流统计出包:510204

NC2 eth0 收包:510204

ECS B 收包:510204,capture 507442, dropped by kernel 2162

  • 以上分析定位到vm内部丢包,即协议栈丢包, 通过调整 vm 内部UDP buffer size来调整网络 stack,默认的UDF buffer size 为212992(208KB),调整至 2097152(2MB)
/proc/sys/net/core/rmem_default
/proc/sys/net/core/rmem_max

  • 调整后,再次测试发现基本不丢包

后记

  • 上述问题本身属于协议栈丢包的一种场景,关于排查协议栈丢包的传统方法是利用tcpdump或者更先进的wireshark来进行抓包分析,老板@铁竹推荐了大神@褚霸介绍的Dropwatch工具,其定位很清晰,就是用来查看协议栈丢包的问题。详情请看下面的连接

http://blog.yufeng.info/archives/2497

  • 还有就是我们组@砺辛自制的一款网络问题排查小工具,其中就包含了udp窗口过小导致的协议栈丢包,可以通过复现上述问题快速定位原因

https://www.atatech.org/articles/85295

时间: 2024-10-24 17:53:30

iperf UDP测试丢包问题分析的相关文章

rt-同时接收多个udp时丢包

问题描述 同时接收多个udp时丢包 udp广播,多个客户端同时回馈.广播端接收反馈数据会出现丢包.在android上测试,好的手机丢包情况明显改善.请教下有没有好的解决方案彻底解决. 解决方案 UDP丢包问题 解决方案二: UDP本身就是不可靠的.如果有丢包,你可以尝试再次广播,多发送几次,来接收数据

网络丢包诊断与分析的现实与理想

自从有了网络便有了网络故障,网络故障的最大体现是丢包.如何对丢包进行诊断一直是一个令工程师头疼的问题,可关注丢包原因分析的人却非常的少. 现实 目前对于网络中出现丢包的传统处理步骤如下: 首先,确定丢包的设备. 然后,确定报文在该设备的处理流程. 最后,一一核对对应处理流程的转发表项(从软件表项到硬件表项). 也许你会觉得一一核对转发流程表项太慢太麻烦,熟悉芯片的处理流程和功能之后你会找到如下一种处理方式: 首先,还是要确定丢包的设备. 然后,利用芯片提供的一些diagnosis功能进行确认,例

UDP 丢包 急。。谢谢

问题描述 我的udpclient端发送的太快,udpserver来不及接收?据说可以使用缓冲区来处理..麻烦哪位大牛帮忙说说怎么做?非常感谢. 解决方案 解决方案二:UDP协议丢包很正常.解决方案三:UDP就是丢包的没办法,如果你要自己实现UDP的差错控制的话,那还不如直接使用TCP解决方案四:我知道丢包很严重,可是这个对实时性要求很强,选择UDP是不错的..主要是我在接收的时候来不及接..我做处理了,.处理就是写入io流.如果不处理的话就有足够的时间来接了..麻烦哪位能说下,如何能把两者分开,

解决网络丢包问题及故障判断方法

  我们首先来认识一下什么是丢包,以及什么样的现象被成为是网络丢包: 数据在INTERNET上是以数据包为单位传输的,每包nK,不多也不少.这就是说,不管网络线路有多好.网络设备有多强悍,你的数据都不会是以线性(就象打电话一样)传输的,中间总是有空洞的.数据包的传输,不可能百分之百的能够完成,因为种种原因,总会有一定的损失.碰到这种情况,INTERNET会自动的让双方的电脑根据协议来补包和重传该包.如果网络线路好.速度快,包的损失会非常小,补包和重传的工作也相对较易完成,因此可以近似的将所传输的

什么是丢包?网络丢包问题及故障判断方法

我们首先来认识一下什么是丢包,以及什么样的现象被成为是网络丢包: 数据在INTERNET上是以数据包为单位传输的,每包nK,不多也不少.这就是说,不管网络线路有多好.网络设备有多强悍,你的数据都不会是以线性(就象打电话一样)传输的,中间总是有空洞的.数据包的传输,不可能百分之百的能够完成,因为种种原因,总会有一定的损失.碰到这种情况,INTERNET会自动的让双方的电脑根据协议来补包和重传该包.如果网络线路好.速度快,包的损失会非常小,补包和重传的工作也相对较易完成,因此可以近似的将所传输的数据

如何解决网络丢包问题

  数据在INTERNET上是以数据包为单位传输的,每包nK,不多也不少.这就是说,不管网络线路有多好.网络设备有多强悍,你的数据都不会是以线性(就象打电话一样)传输的,中间总是有空洞的.数据包的传输,不可能百分之百的能够完成,因为种种原因,总会有一定的损失.碰到这种情况,INTERNET会自动的让双方的电脑根据协议来补包和重传该包.如果网络线路好.速度快,包的损失会非常小,补包和重传的工作也相对较易完成,因此可以近似的将所传输的数据看做是无损的.但是,如果网络线路较差,数据的损失量就会非常大,

分析两例特殊的网络丢包排错

远程商业窃密引发丢包中天设计院是甘肃省建设厅直属单位,网络规模不大.152台主机根据单位职能部门分为5个子网,分别由Hub连接到交换机.由于公司内部的协同办公比较频繁,除了一个在线视频系统外还部署了一台文件服务器,单独为一个子网提供数据的共享和交流.单位对外的Internet需求不是很大,通过路由器连接到Internet.故障现象某天,该单位的网络突然出现严重堵塞,主机间的数据频频中断导致协同办公不能正常进行,在线视频系统经常掉线.另外,无论是从文件服务器上传还是下载文件都异常缓慢,有时会因超时

ping 丢包或不通时链路测试说明

当客户端访问目标服务器出现 ping 丢包或 ping 不通时,可以通过 tracert 或 mtr 等工具进行链路测试来判断问题来源.本文先介绍了进行链路测试的相关工具,然后对测试结果分析及测试步骤进行了说明. 链路测试工具介绍 根据操作系统类型的不同,链路测试所使用的工具也有所不同.分别简要介绍如下. Linux 环境下链路测试工具介绍 Windows 环境下链路测试工具介绍 Linux 环境下链路测试工具介绍 traceroute 命令行工具 mtr 命令行工具(建议优先使用) trace

线程-UDP传输文件,通过网线直连,低速传输正常,高速传输丢包的问题

问题描述 UDP传输文件,通过网线直连,低速传输正常,高速传输丢包的问题 用UDP传输视频文件,VC发送数据到安卓端,安卓端监听端口接收数据,采用网线直连,排除网络原因造成的丢包.当VC发送数据延时50ms(大概几百K每秒的速度发包),JAVA端能正确接收.可是不延时50ms发送时(大概2M/S的速度发包)JAVA端接收就出现丢包.JAVA开了两个线程,一个线程接收并放到缓冲队列,另一个线程从缓冲队列取出数据写入U盘.缓冲队列大小也比发送的文件要大,也不可能是缓冲队列不够大的问题.希望得到大神指