使用udp丢包率来验证网卡硬件是否存在异常

      之前分析过一个问题,某终端产品直播节目的时候总是会偶尔出现马赛克、花屏、卡顿问题,点播节目可以正常播放。其他型号的终端产品,播放同一个直播节目是正常的。

      上层通过日志分析,确认直播卡顿或者马赛克是因为出现了严重的丢包。这样就需要底层进行分析。

点播节目为什么不会丢包:

    点播是tcp协议进行网络传输,tcp在协议层会做丢包重传,这样,物理层或者网卡驱动丢了几个包在tcp协议栈会触发重传,通过重传机制,掩盖了底层轻微的丢包导致的数据波动。只要不是那种极度严重(比如一两秒的时间没有来一个包)的网络数据丢失,都不会影响应用层的播放数据的完整性。

    上层程序可以使用播放环境来测试丢包,对于底层来说,尽量找到问题的本质,然后使用简单的环境复现出问题。

    就这个问题来说,直播的丢包,对于底层来说其实就是udp的丢包。那我们就可以模拟一个udp的环境来模拟对比测试是否是真的丢包。

我的测试方法:

网上找iperf二进制包,或者自己编译一个包,分别放在pc端和终端设备端。将PC机和终端设备通过网线直连:

udp rx丢包率的命令:
iperf -u -s #终端设备输入
iperf.exe -u -c 192.168.1.12 -t 100 -i 2 -b 100M  #pc端输入,192.168.1.12是机顶盒的ip地址,测试100M就用100M,测试8M就把100M改成8M

 通过pc端发包,然后终端设备查看iperf -u -s的输出结果,重点关注Lost/Total Datagrams这一列的百分百数据(表示丢包率),数字越大表示丢包越严重。

通过对比平台的丢包率数据来确定是否是底层的问题。

要确定是哪一层出现的丢包,可以借助tcpdump日志来分析。tcpdump抓日志的时候,要把tcpdump的打印输出信息也抓到:

dropped by kernel一般是表示内核socket不够大导致的协议层丢包,为0表示没有丢。

dropped by interface是指网卡驱动或者物理层触发的数据丢失,这部分出现丢包就需要检查网卡驱动或者网卡的物理层(硬件)来确定哪里存在问题。

最后,我们的终端产品是确定硬件的某个元器件导致的问题。和对比终端交互了元器件就不会丢包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值