linux系统内核UDP丢包原因分析

 2017-01-05更新

1、UDP校验和错误

现象:可以用netstat -su 查看到有UDP错包。

tcpdump捕包,在wireshark打开捕获的udp报文,开启校验和选项,若有错包。

方案:查找链路故障。

2、防火墙开启

现象:特定端口的包收不到

方案:使用service iptables stop关闭,7.0以上的CentOS和Redhat 使用service firewalld stop。

3、rp_filter开启

现象:tcpdump有包,协议栈收不到。某个地址发送的包一个包都收不到,而另一地只发过来的没问题。

方案:将/etc/sysctl.conf中rp_filter设为0,然后通过sysctl -p命令使修改生效,并注意命令执行后的是否报错。

如果只能修改net.ipv4.default.rp_filter,则需要重启机器后才会生效。

rp_filter将IP报文的原目的IP对调后查找路由,如果查找到的网卡与收包网卡不一致,就会把报文丢弃。

参见:http://serverfault.com/questions/163244/linux-kernel-not-passing-through-multicast-udp-packets

校验包的源地址与其网卡地址的开关,防止IP欺骗,linux 2.6.32默认开启。

4、系统缓冲区满

现象:可以用netstat -su 查看到有UDP receive errors

方案:

使用网络性能测试工具iperf进行测试,如果测试结果显示不丢包,则可以排除硬件和网络问题,查找应用和系统原因。首先尝试增加系统缓冲区,利用sysctl命令增加 net.core.rmem_max、net.core.rmem_default 的数值。

5、应用程序性能问题,缓冲区满

现象:可以用netstat -su 查看到有UDP

方案:使用vmstat、top、strace、ltrace等命令发现程序瓶颈,判断是否有cpu或IO过载。增大缓冲区,优化程序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值