本文摘自PHP中文网,作者坏嘻嘻,侵删。
本篇文章给大家带来的内容是关于如何使用 iPerf 测试并排查 UDP 丢包问题,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。使用 iPerf 测试并排查 UDP 丢包问题
现象描述
使用高速通道打通同一个地域(Region)下的两台 VPC 网络类型的 ECS 实例后,通过 iPerf 测试两台实例内网之间 UDP 丢包率,测试带宽达到 50 Mbps 以上时出现了丢包现象,且随着带宽的增加,丢包率出现增长趋势。如下图:
问题分析
假设两台网络类型的 ECS 实例的私有 IP 为 VPC ECS A(192.168.104.235) 与 ECS B(10.182.83.13),并用 Netcat(NC)监听并发送 UDP 数据封包,则网络类型的 ECS 实例 A 与实例 B 通信链路图如下:
其数据流走向为:
1 |
|
我们需要对其链路进行排查分析,找出丢包的最终原因。
解决方法
注意:由于只看到了源 Netcat (即 NC 1) 和目的 Netcat (即 NC 2) 之前的通信,抓包排查要避免误区,即随意判断是 Netcat (NC) 之间的直接通信丢包。
排查时会发现源端 eth0 的抓包发给了 VGW,但是在目的端抓包发现外壳封装了目的 NC 2 IP,如示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
确认数据包通过 VGW 后,开始统计抓包信息:
ECS A 通过 iPerf 打 UDP 流量:iperf -c 10.182.83.13 -u -b 600m
ECS B 通过 iPerf 接收:iperf -u -s
在实例内部抓包。
1 2 |
|
在两个 NC eth0 处抓包。
1 2 3 4 |
|
在 ASW 和 LSW 部署流统。
1 |
|
注意:由于目的端包外壳自动封装了目的 NC 1 IP,所以 VGW 端数据包的报文格式为:100.105.59.3:46728 -> 100.105.59.9:250。
根据抓包结果分析。
ECS A 丢包/发包:171/510203
NC 1 eth0 发包:510204
ASW 和 LSW 流统计出包:510204
NC 2 eth0 收包:510204
ECS B 收包:510204,capture 507442, dropped by kernel 2162
以上分析定位到实例协议栈丢包,通过调整实例内部 UDP Buffer Sizes 来调整网络栈(Stack),默认的 UDF Buffer Size 为 212992(208 KB),您可以调整至 2097152(2 MB)。
1 2 |
|
调整后测试 UDP 丢包情况。
以上就是如何使用 iPerf 测试并排查 UDP 丢包问题的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
开通 ram 服务之后如何通过 api 使用实例 ram 角色
更多相关阅读请进入《Linux》频道 >>