1. 概述:什么是掉包与常见表现
掉包指网络数据包在传输路径中未到达目的端。常见表现:ping 丢包、TCP 重传、应用超时、用户体验卡顿。先确认范围:单实例、子网、还是整个机房。
2. 准备工作:权限与工具清单
确保有服务器 root、阿里云控制台账号和可创建云监控/镜像的权限。工具:tcpdump、tshark、iperf3、mtr/traceroute、ethtool、iftop、sar、dstat、strace、ssh。可在分析机安装 Wireshark 用于打开 pcap。
3. 第一步:重现并初步定位
用连续 ping 和 mtr 捕获丢包时序:ping -i 0.2 -s 1200 目的IP;mtr -r -w 目标IP。用 iperf3 做流量压测:iperf3 -c 目标 -t 60 -P 4,观察丢包/带宽是否可稳定复现。
4. 第二步:主机侧抓包(详细命令)
在服务器上执行:tcpdump -i eth0 -s 0 -w /tmp/cap.pcap host <目标IP> and port <端口>。长期抓取可用分割:tcpdump -i eth0 -s 0 -C 100 -W 10 -w /tmp/cap.pcap。同时记录时间戳:tcpdump -ttt。
5. 第三步:开启云端流量镜像或抓包
在阿里云控制台 -> VPC -> 流量镜像,创建镜像会话(源ENI、目标分析ENI)。步骤:创建接收实例(分析机)、创建镜像会话并绑定源ENI,确认镜像策略后在分析机用tcpdump接收。若无法开镜像,使用控制台“云监控网络包”或申请运维协助抓包。
6. 第四步:比对抓包时间线与丢包点
使用 Wireshark 打开主机和镜像端的 pcap,比对序列号和 ACK,判断丢包是出现在主机网卡、VPC、还是更上游。查看是否为重复 ACK、SACK 或 RTO 导致重传,定位链路段。
7. 第五步:检查主机网络栈与网卡设置
查看 ethtool 和驱动:ethtool -i eth0;查看 offload:ethtool -k eth0。必要时关闭 GRO/GSO/TSO:ethtool -K eth0 gro off gso off tso off。调大内核缓冲:sysctl -w net.core.netdev_max_backlog=250000 net.core.rmem_max=268435456 net.core.wmem_max=268435456。
8. 第六步:内核日志与驱动/固件排查
检查 dmesg、/var/log/messages 是否有 NIC 错误或驱动警告:dmesg | egrep -i "eth|net|link|error"。若看到大量 tx/rx error,记录驱动版本并考虑升级或切换实例类型以使用不同网卡驱动。
9. 第七步:检查中断与 CPU 负载影响
观察 /proc/interrupts、top、mpstat:watch -n1 cat /proc/interrupts。若单核被打满,考虑绑核或调整 irq affinity:echo
> /proc/irq//smp_affinity,或开启 irqbalance、rps/xps 进行流量分发。
10. 第八步:VPC/路由/SLB 层面检查
在控制台检查路由表、NAT 网关、SLB 后端健康状态与会话泛滥。SLB 可查看监听器日志、并提升后端健康探测频率或调整超时。若使用 NAT,请检查转发规则与连接追踪(conntrack)是否饱和:cat /proc/net/nf_conntrack | wc -l。
11. 第九步:路径与 MTU 问题检测
用 traceroute/mtr -T 检查路径是否有中间设备丢包;若怀疑 PMTU 问题,使用 ping -M do -s 逐步减小测试。若 MSS 问题,可在服务器上用 iptables --clamp-mss-to-pmtu -t mangle -A FORWARD -p tcp 来强制调整。
12. 第十步:临时缓解与长期优化建议
短期:关闭网卡大包卸载、调整内核参数、增加实例类型带宽或切换可用区。长期:使用多可用区冗余、负载均衡、流量镜像结合监控告警、使用更高网络性能的实例(增强型网络),并建立自动化健康检测与自动切换。
13. 第十一步:上报阿里云工单的要点
若定位到云端问题,上报时需提供:抓包文件(主机与镜像)、mtr/traceroute 输出、时间范围、affected IP/端口、实例ID、控制台资源快照,并在工单中明确请求逐跳定位与交换机日志。
14. 第十二步:监控与告警策略建立
建议使用阿里云云监控 + Prometheus:监控丢包率、延迟、TCP 重传、网卡错误、conntrack 使用率。设定阈值告警并自动触发抓包脚本以便快速定位。
15. 常用排查命令汇总(便于复制使用)
ping -i 0.2 -s 1200
mtr -r -w
iperf3 -c -t 60 -P 4
tcpdump -i eth0 -s 0 -w /tmp/cap.pcap host
ethtool -K eth0 gro off gso off tso off
sysctl -w net.core.netdev_max_backlog=250000
16. 问答1:如何判断掉包是机房链路问题还是我的服务器问题?
答:先在服务器本地抓包并同时在云端流量镜像或旁路分析机抓包,比对两端 pcap。如果主机抓到的数据完整但云端镜像显示丢包,说明链路/交换机侧问题;若两处都看到错误且伴随网卡错误日志,优先排查服务器驱动与内核。
17. 问答2:如果确认掉包发生在阿里云交换机侧我该怎么上报?
答:在工单中附上主机与镜像的 pcap、mtr/traceroute 输出、时间戳、受影响实例ID、业务影响说明和峰值流量情况。请求阿里云查看交换机端口日志与链路统计,并提供对应时间段交换机队列/丢包指标。
18. 问答3:有哪些配置可以提升长期网络稳定性?
答:采用多可用区冗余、启用增强型网络实例、分配多个ENI并做负载分流、在内核层调优缓冲与 offload、开启流量镜像做持续分析、配合云监控建立自动化告警与自动切换流程。
来源:阿里云新加坡机房掉包现象排查与网络稳定性提升方案