点击下方名片,设为星标!

网络丢包是运维工作中最常见也最令人头疼的问题之一。当应用出现卡顿、延迟飙升、连接超时等现象时,背后往往隐藏着丢包的影子。理解丢包的本质,需要我们先从 Linux 网络收发包的核心流程说起。
当网卡收到数据包时,Linux 内核经历以下处理流程:

关键步骤说明:
发送数据包是收包的逆过程:

关键步骤说明:
根据收发包流程,我们梳理常见丢包场景:
现象:网络流量突增时丢包
定位:
# 查看网卡统计ethtool -S eth0 | grep -E "(rx_missed|rx_errors|rx_dropped)"# 查看 Ring Buffer 大小ethtool -g eth0
解决:
# 增大 Ring Bufferethtool -G eth0 rx 4096 tx 4096
现象:CPU 某个核使用率 100%,网络延迟高
定位:
# 查看软中断分布cat /proc/interrupts | grep eth0# 查看 ksoftirqd CPU 占用top -p $(pgrep ksoftirqd | tr'\n'',' | sed 's/,$//')
解决:
# 开启 RPS(Receive Packet Steering)echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
现象:大量连接时出现 "nf_conntrack: table full" 报错
定位:
# 查看 conntrack 使用情况cat /proc/net/nf_conntrack | wc -lcat /proc/sys/net/netfilter/nf_conntrack_max
解决:
# 增大 conntrack 表sysctl -w net.netfilter.nf_conntrack_max=1048576
现象:应用处理慢导致丢包
定位:
# 查看 Socket 统计ss -s# 查看丢包计数cat /proc/net/snmp | grep Tcpcat /proc/net/snmp | grep Udp
解决:
# 增大 Socket 缓冲区sysctl -w net.core.rmem_max=16777216sysctl -w net.core.wmem_max=16777216
现象:"neighbor table overflow" 报错
定位:
# 查看 ARP 表cat /proc/net/arp | wc -lcat /proc/sys/net/ipv4/neigh/default/gc_thresh1
解决:
# 增大 ARP 表限制echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
功能:结合 traceroute 和 ping,实时显示每一跳的丢包率和延迟
常用命令:
# 基础用法(实时刷新)
mtr www.example.com
# 生成报告模式(100次探测后停止)
mtr --report --report-cycles 100 www.example.com
# 指定 TCP 探测(默认ICMP可能被防火墙拦截)
mtr --tcp --port 443 www.example.com
# 显示 ASN(自治系统号)信息
mtr --aslookup www.example.com
优势:
ss:替代 netstat,查看 Socket 状态
常用命令:
# 查看连接统计摘要
ss -s
# 查看所有 ESTABLISHED 的 TCP 连接
ss -t state established
# 查看指定端口的连接
ss -tan | grep :80
# 查看进程和连接对应关系
ss -tp
# 查看连接队列溢出情况(排查丢包)
ss -tan | grep -E "(Recv-Q|Send-Q)"
# 按连接数排序显示进程
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
关键指标:
# 基本监控(实时显示丢包)
sudo dropwatch -l kas
# 解释:
# -l kas:使用内核地址符号表,显示函数名而非地址
# 输出示例:
# drop at: tcp_v4_rcv+0x123 (0xffffffff12345678)
# 表示在 tcp_v4_rcv 函数处丢包
3、其他使用工具

网络丢包排查需要理解收发包流程,从网卡、中断、协议栈到应用层逐层定位。掌握 Ring Buffer、软中断、Conntrack 等关键机制,配合 mtr、ss 等工具,可以快速定位并解决大部分网络丢包问题。
=========== 到此结束 ==========
//往期推荐//
Linux系统kswapd0进程CPU占用过高问题深度解析与解决方案
如果觉得本次分享对你有所帮助的话,希望点击“在看”给予鼓励,谢谢!
敬请关注公众号:运维来点料