服务器网络问题分析之丢包

一、关于 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

八、附加订阅

 

posted @ 2020-04-15 14:11  WindWant  阅读(2708)  评论(0编辑  收藏  举报
文章精选列表