服务器网络问题分析之丢包
一、关于 ethtool:
-
获取设备信息及诊断信息
-
获取设备统计数据
-
控制因特网设备速率(speed)、全双工(duplex)、自动协商(autonegotiation)、流控(flow control)
-
控制 checksum offload 及其它设备 offload
-
控制 DMA ring sizes 及中断 moderation
-
multiqueue 设备的接收队列选择
-
闪存固件升级
二、丢包查看
ifconfig:
或:cat /proc/net/dev
三、error 查看:
ethtool -S eth0 | grep errors
根据相应的错误进行处理。
四、关于ring buffer:
网络数据传输:数据帧传输,由网卡读取并放入设备缓冲区ring buffer,当网络数据包到达的速率快于内核处理的速率时,ring buffer很快会被填满,新来的数据包将被丢弃。
查看 ring buffer 设置:ethtool -g eth0:
设置 ring buffer :ethtool -G eth0 rx 新值。
五、关于 netdev_max_backlog:
netdev_max_backlog是内核从网卡收到数据包后,交由协议栈(如IP、TCP)处理之前的缓冲队列。每个CPU核都有一个backlog队列,当协议栈处理速度满足不了接收包速率时会发生丢包。
查看数据处理情况:/proc/net/softnet_stat
行:一行代表一个cpu
列:第一列为接收的总包数;第二列为由于溢出丢弃的包数。
查看当前 netdev_max_backlog:cat /proc/sys/net/core/netdev_max_backlog
设置netdev_max_backlog:sysctl -w net.core.netdev_max_backlog=4096 或者 echo "4096" > /proc/sys/net/core/netdev_max_backlog
六、关于 rp_filter 反向路由过滤导致丢包:
反向路由过滤机制是Linux通过反向路由查询,检查收到的数据包源IP是否可路由(Loose mode)、是否最佳路由(Strict mode),如果没有通过验证,则丢弃数据包,设计的目的是防范IP地址欺骗攻击。rp_filter提供了三种模式供配置:
0 - 不验证
1 - RFC3704定义的严格模式:对每个收到的数据包,查询反向路由,如果数据包入口和反向路由出口不一致,则不通过
2 - RFC3704定义的松散模式:对每个收到的数据包,查询反向路由,如果任何接口都不可达,则不通过
查看设置:cat /proc/sys/net/ipv4/conf/eth0/rp_filter
设置:所有不验证:sysctl -w net.ipv4.conf.all.rp_filter=0 | 网卡eth0不验证:sysctl -w net.ipv4.conf.eth0.rp_filter=2
七、关于 tcp_max_syn_backlog 半连接队列:
TCP传输中服务器收到SYN包但还未完成三次握手的连接队列,服务器保持的半连接数超过tcp_max_syn_backlog,则丢弃新包。
查看:/proc/sys/net/ipv4/tcp_max_syn_backlog
设置:sysctl -w net.ipv4.tcp_max_syn_backlog=xxxxx
查看是否有丢弃情况:dmesg | grep "TCP: drop open request from"
查看队列使用情况(查询SYN_RECV状态):netstat -ant|grep SYN_RECV|wc -l
八、附加订阅