Linux "dropped"常见问题解析
在Linux系统中,"dropped"主要指网络数据包在传输或处理过程中被丢弃的情况,常见于网络接口统计(如rx-dropped接收丢弃、tx-dropped发送丢弃)、系统日志或监控工具(如netstat -i、ip -s link show)的输出中。它反映了网络链路或系统处理能力的异常,需结合具体场景分析原因。
当网络中的数据包流量超过设备(如路由器、交换机)或链路的处理能力时,会导致数据包排队等待处理,超出缓冲区容量的数据包会被丢弃。常见场景包括高峰时段带宽耗尽、突发流量(如视频会议、大文件传输)等。
dropped增加;net.core.netdev_max_backlog(网络设备接收队列最大长度)设置过小,无法处理突发流量;net.core.rmem_max/wmem_max(TCP接收/发送缓冲区最大值)设置不合理,导致缓冲区溢出;iptables、ufw)的DROP规则可能误拦截正常数据包(如特定端口、IP段的流量)。dmesg中出现网卡错误日志),均可能导致dropped增加。为防御DDoS攻击、端口扫描等恶意行为,系统或防火墙会主动丢弃可疑数据包(如SYN Flood攻击中的大量半连接请求、非法IP地址的流量)。这种丢包是安全策略的正常行为,但需避免误判正常流量。
ping命令测试目标主机的连通性(如ping example.com),观察是否有高延迟或丢包(packet loss);netstat -i或ip -s link show查看网络接口的dropped计数(如rx-dropped),确认丢包是否持续增长;tcpdump或Wireshark抓包(如tcpdump -i eth0),分析数据包的流向和丢失位置(如是否在特定端口、IP段出现丢包)。smartctl -a /dev/sda(替换为实际磁盘设备)检查硬盘健康状态,排除硬盘故障导致的IO问题;memtest86(需制作启动盘)检测内存是否存在坏道,内存故障会导致系统不稳定,进而引发丢包;dmesg命令查看内核日志,寻找与网络或硬件相关的错误信息(如eth0: link down表示网卡断开,NETDEV WATCHDOG: eth0 (e1000): transmit queue 0 timed out表示网卡发送队列超时);journalctl -xe查看系统日志,定位具体的错误模块(如networkd、firewalld)。/etc/sysctl.conf文件,优化网络参数(示例):net.core.netdev_max_backlog = 5000 # 增加网络设备接收队列长度
net.core.rmem_max = 16777216 # 增加TCP接收缓冲区最大值(16MB)
net.core.wmem_max = 16777216 # 增加TCP发送缓冲区最大值(16MB)
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME-WAIT状态的连接(减少端口占用)
运行sudo sysctl -p使配置生效。sudo apt update && sudo apt upgrade(Ubuntu/Debian)、sudo yum update(CentOS/RHEL)),修复已知的系统bug;ubuntu-drivers autoinstall)。tc(Traffic Control)工具配置QoS,优先处理重要业务流量(如VoIP、视频会议)。示例:将SSH流量(端口22)标记为高优先级(htb队列):tc qdisc add dev eth0 root handle 1: htb default 20
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200mbit prio 1 # 高优先级队列
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
iptables -L -v -n --line-numbers),删除不必要的DROP规则(如针对合法IP段的拦截);iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min -j ACCEPT),防止SYN Flood等攻击;sudo systemctl stop telnet),减少攻击面。