ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

掉线重连排查全攻略:从网卡、驱动到DNS的定位思路

掉线重连排查全攻略:从网卡、驱动到DNS的定位思路 接手“回购协议”业务系统的排障任务是在凌晨两点半的告警刷屏之后。那天的场面其实不复杂整个业务模块的连接状态每隔三五分钟就从“正常”跳成“断开”过几秒又自动重连白天还能勉强撑住一到业务高峰就直接断给客户看。业务同事开口就是“网卡有问题”网管测了一圈也倾向于换网卡但我觉得不对劲——掉线重连这个现象从来都不应该只有一个嫌疑人。这篇内容我默认读者是正在被网络问题折磨的运维、IT工程师或者刚入行的网络管理员。你不一定要懂很深层的网络原理但看完至少能把“掉线重连”的排查顺序拉直从第一眼判断到最终定位每一步都知道自己在干什么。接下来我就按照这次“回购协议”掉线重连的完整复盘把里面涉及的网卡、驱动、域控DNS、Linux自启、无线信道、虚拟化网卡这些坑挨个讲清楚。1. 先还原现场掉线重连到底长什么样1.1 “回购协议”业务连接的故障表象“回购协议”在技术层面其实不复杂就是一组运行在Linux服务器上的长连接客户端需要通过TCP会话往核心业务平台推送交易数据。故障最明显的特征是连接不是彻底断开而是反复“掉线 → 重连 → 维持一会儿 → 再掉线”应用日志里全是Connection reset by peer和retry count exceeded。我接手时已经有人换过两次网线、一次交换机端口甚至把服务器上的网卡驱动重装了一遍问题照旧。这说明表象背后的原因被忽略了掉线重连如果存在周期性和规律性通常不是硬件故障而是某个链路或协议层参数在特定条件下被触发重启。比如网卡节能策略、TCP会话超时、DNS解析失败导致的认证回退、甚至域控复制风暴引起的网络拥塞都可能让连接“看起来像网卡问题”。1.2 为什么“网卡”总是第一个被点名这是运维现场最典型的“背锅”现象。网卡作为服务器和外界通信的唯一物理触点一旦业务出现连接异常所有人第一反应就是网卡坏了。归根到底有三个原因第一网卡状态最容易观察指示灯闪烁异常或者工具显示Link down肉眼可见第二Windows系统右下角网络图标会直接弹出“网络连接已断开”用户感知最直接第三网卡驱动的报错日志里经常出现link down、tx timeout这类关键字看着就像实锤。但真到了排查阶段“网卡问题”这四个字是最没有信息量的。它既没说明是物理层断链还是驱动层异常也没说明是IP层失效还是应用层重置。掉线重连发生在哪个层面决定了你要看ethtool、看dmesg、看DNS配置还是看业务代码。把问题归因到网卡往往意味着排查才刚开始。2. 责任划分网卡、驱动、协议栈和环境各自该管什么2.1 物理链路层一眼能识别的网卡灯与协商状态物理层是最好排查的一层因为它有明确的硬件指标。网卡指示灯正常不代表链路健康需要看协商速率和双工模式是否匹配。比如交换机端口被强制成了百兆网卡自动协商也跟到百兆虽然连接没断但带宽瓶颈会让应用层频繁超时业务侧感知就是“时不时掉线”。判断物理层是否正常ethtool是Linux下最趁手的工具。ethtool eth0能看到Speed、Duplex、Link detected这些基础信息如果发现Speed: 100Mb/s而网卡明明支持千兆十有八九是线缆质量、对端端口协商或者水晶头触点的问题。这个阶段还要看ethtool -S eth0里面的rx_crc_errors、rx_frame_errors、tx_errors计数这些值在短时间内快速增加说明物理链路上存在干扰或硬件不稳定。2.2 系统与驱动层日志里的明账和暗坑系统层的掉线重连最直接的表现是网卡接口被系统主动down掉又自动up。Linux网卡驱动在检测到硬件异常或者长时间无响应时会触发tx timeout机制把网卡重启一遍。这时dmesg里会留下明显的NIC Link is Down、Link is Up记录看起来像硬件故障实际是驱动bug或者固件缺陷。Windows平台也有类似情况但入口不同。设备管理器里网卡属性的“电源管理”选项卡默认勾选了“允许计算机关闭此设备以节约电源”这个选项在系统空闲或负载波动时会把网卡断电随后再唤醒表现就是“长时间使用后突然断网重启就好”。Win11一些新版本驱动会隐藏这个选项卡但节能逻辑依然生效需要在“高级”选项卡里调整Energy Efficient Ethernet等参数。2.3 上层协议与环境DNS、域控和交换机才是隐藏变量真正让掉线重连变得复杂的是上层协议。如果业务服务器处于AD域环境网卡DNS配置错误会引发一连串连锁反应。域内3台DC域控制器每台DC的网卡DNS如果只指向自己或者指向外部DNS域控之间就无法完成正常的拓扑发现和复制客户端向DC发起认证时也会因为解析不到DC的IP而超时认证一超时依赖域账号的业务连接就会被中断看起来又是“掉线重连”。交换机和防火墙的环境因素同样不能忽略。交换机STP变更、端口VLAN配置错误、ACL策略限制都会导致报文被丢弃防火墙会话表超时时间设置过短长连接在空闲一段时间后就会被静默切断客户端重连时又重新建立会话造成周期性掉线的假象。2.4 四层责任一张表整理清楚把责任范围画清楚后面排查才不会东一榔头西一棒子。层面典型现象排查工具/入口常见根因物理链路层网卡灯熄灭/闪黄、协商降速ethtool、网线测试仪线缆损坏、端口接触不良、干扰驱动与系统层dmesg出现Link down/up、tx timeoutdmesg、ethtool -i、系统事件查看器驱动bug、固件缺陷、电源节能网络协议层IP冲突、ARP丢包、DNS解析失败ip neigh、nslookup、tcpdump抓包DNS配置错误、网卡多IP冲突应用与外部环境长连接空闲后断开、定时重置应用日志、抓包分析、防火墙会话表会话超时、STP变更、ACL策略这个表对排查思路最大的帮助是先把现象归类到某一层再决定从哪儿下手而不是一上来就怀疑网卡。3. 实战排查掉线瞬间的取证与修复动作3.1 拿到现场再动手抓取掉线瞬间的关键证据很多掉线问题查不出来是因为错过案发现场。掉线重连是状态切换过程如果不提前准备好采集手段等它掉完再登录服务器日志已经被新的连接覆盖了。我处理这类case的标准动作是先启动连续采集再复现问题。采集要看三类东西第一是网卡计数器和内核日志ethtool -S eth0和dmesg -w同时开着第二是系统网络状态ip -s link show eth0观察收发字节数和错误计数第三是业务连接的TCP跟踪用tcpdump -i eth0 host 业务服务器IP and tcp port 端口抓包必要时让网卡进入混杂模式捕获所有经过的流量。等下一次掉线发生看抓包里的SYN、RST、FIN标志位就能判断断开动作是谁先发起的。3.2 Linux服务器掉线三条命令和两个看门狗处理Linux服务器的掉线问题我每次必跑三条命令。第一条dmesg -T | grep -i link\|eth看内核有没有记录网卡链路变化和驱动重启第二条ethtool -S eth0 | grep -i err\|drop\|discard看驱动层有没有丢包和错误计数第三条ip -s link show eth0看系统统计里收发包的总量和错包率。三条命令跑完正常情况下能区分三种场景错误计数全零但应用还是掉线问题大概率在协议层或应用层错误计数快速增长物理链路或驱动有问题内核日志出现tx timeout基本可以锁死驱动重启。如果怀疑是上层协议导致长连接被切断我还会顺手检查防火墙会话超时和TCP keepalive参数。关于“两个看门狗”第一层叫链路看门狗负责盯网卡状态检测到carrier丢失就尝试用ip link set eth0 down/up重置链路第二层叫应用看门狗负责盯业务进程通过检测TCP会话状态决定是否重启业务服务。两层看门狗配合能覆盖绝大多数“网卡休眠、驱动卡死、服务假死”导致的掉线重连。3.3 Windows客户端掉线电源管理与高级选项两个入口Windows环境下的“掉线重连”至少有七成是省电策略引发的。设备管理器 → 网络适配器 → 右键属性 → 电源管理能看到“允许计算机关闭此设备以节约电源”这个复选框。很多新手不知道Win11部分网卡驱动会把这个选项卡整个隐藏导致想关也关不了这时候要从“高级”选项卡入手把Energy Efficient Ethernet、Green Ethernet、Wake on Magic Packet等参数禁用。要是机器上有多个网卡还需要设置网络跃点优先级。Windows对多网卡默认的自动跃点经常会把流量导向错误的接口比如明明插着有线网卡系统却优先走了无线网卡造成应用连接被反复重置。解决办法是到网卡的高级TCP/IP设置里取消“自动跃点”给主用网卡填一个较低的数字比如10备用网卡填20让主用链路优先承载流量。3.4 多网卡环境下顺序与优先级怎么设置多网卡服务器上的掉线问题往往不是物理链路断而是路由选路出错。比如一台Linux服务器同时有板载网卡和USB网卡分别接了内网和外网板载网卡的默认路由优先级反而比USB网卡低业务流量就会从错误的接口出去连接直接被对端拒绝。排查时要看ip route show重点检查default路由的metric值。Linux下的做法是给主用网卡设置更小的metric值例如ip route add default via 192.0.2.1 dev eth0 metric 100同时把其他默认路由删掉Ubuntu/Debian系的/etc/netplan配置和Rocky/CentOS系的/etc/sysconfig/network-scripts/ifcfg-*里都有路由优先级参数。Windows则通过注册表或网卡属性里的跃点设置来完成同样的事情。4. 复盘四类“真凶”它们都不是网卡缺勤4.1 驱动与固件RTL8125、YT6801的掉线旧账Realtek RTL8125 是2.5G网卡里出货量很大的一款但它踩过的坑也特别出名。Linux内核自带的r8169驱动虽然能识别RTL8125在高负载或者开启节能特性时间歇性掉链、NetworkController报错的情况并不少见。如果你手头是这类网卡建议直接到Realtek官网下载对应Linux驱动编译安装后确认ethtool -i显示的驱动版本已经变成官方版本而不是内核自带的r8169。国产网卡芯片YT6801是另一个典型。一些政企服务器和国产化系统比如麒麟V10里会用到它它的驱动更依赖厂家适配直接用系统自带驱动偶尔会出现协商速率异常、长时间传输后丢链路的问题。这类网卡的处理思路是优先找厂商适配版本的驱动装完以后固定ethtool -s里的速率和双工参数不要依赖自适应同时确认网卡的Tx/Rx环形缓冲区大小和中断合并参数是否合理。4.2 AD域内3台DC的DNS指向错误这是我处理过最“隐蔽”的一类掉线重连。故障现象是域内所有客户端的网络都间歇性卡顿但网卡状态显示正常抓包后发现大量DNS超时和LDAP重连。最后定位到域内3台DC域控制器的网卡DNS配置全部把自己的环回地址当成首选DNS没有指向对等DC。在AD域环境里DC的网卡DNS配置是有明确讲究的每台DC应该至少把一个DNS指向对等DC另一个DNS可以指向自己或者第三台DC形成交叉解析。这样即使其中一台DC故障其他DC重启后仍然能通过DNS解析到彼此的域控记录AD复制和客户端认证才不会中断。如果三台DC都只认自己一旦单点故障域内解析就彻底瘫痪所有依赖域认证的业务全都会出现“连接闪断”。4.3 Rocky Linux、麒麟V10重启后“网卡不启动”另一种“掉线重连”的变体是服务器重启之后网卡根本没起来业务发现了才告警。Rocky Linux比较常见的原因是在安装系统时开启的是NetworkManager但网络配置却写到ifcfg-*文件里且ONBOOTno主机重启后NetworkManager没有接管这个接口ip addr一看就是一个没有IP的网卡。麒麟V10上还有一个坑系统自带nmcli管理工具但配置文件里如果同时存在旧的ifcfg-ethX和新的NetworkManager连接配置重启后两个服务抢同一张网卡经常出现“网卡能up、IP没上去”的情况。处理方式是统一网络管理入口要么全部交给NetworkManager要么把NetworkManager停用并让network服务通过ifcfg-*管理改完检查ONBOOTyes保存配置后用reboot验证而不是只重启网卡服务。4.4 VMware虚拟网卡与特定WiFi掉线的环境坑虚拟环境里看到VMware虚拟机没有网卡第一反应别急着装驱动。新建虚拟机后在系统里找不到网卡通常是虚拟机的网卡类型和客户机系统驱动不匹配。VMware默认的vmxnet3需要安装VMware Tools才有驱动如果Tools没装就会看到“VMware虚拟网卡装不上”的现象。最简单的解法是先把虚拟机网卡类型改成e1000e或E1000这种兼容性更好的类型系统识别后再装Tools装完可以切回vmxnet3。无线环境的掉线更玄学。笔记本连接某一个特定WiFi频繁掉网卡换其他WiFi就正常这类问题我排查时优先看信道宽度。信道宽度设成80MHz甚至160MHz在拥挤的办公环境里很容易互相干扰导致网卡反复重新协商改成40MHz通常能肉眼可见地减少掉线。再配合刷新无线网卡驱动、关闭漫游激进度和802.11省电模式大部分“挑WiFi”的掉线都能解决。5. 治本方案把掉线重连扼杀在重复发生之前5.1 网卡固件、驱动与配置三件套的版本管理很多掉线重连其实是版本不一致造成的固件、驱动、配置文件三样必须同步管理。我遇到最多的情况是驱动被更新了但网卡固件还是出厂版本新驱动调用了新固件功能老固件响应异常最终触发tx timeout。固件升级不是小事要看厂家文档确认升级方式和回滚方案升级时尽量选择业务窗口期避免升级过程中链路中断。配置方面要形成基线。以Linux网卡为例关闭不必要的ethtool节能特性固定速率和双工设置合理的MTU默认1500特殊场景才调整同时把txqueuelen和中断合并参数调成与业务匹配的值。每次配置变更后都用命令导出当前配置留档方便后期对比定位。5.2 掉线自动恢复业务服务器上的Watchdog脚本不能每次掉线都靠人半夜爬起来处理部署一个自动恢复脚本能救急。下面这个脚本是我在业务服务器上常用的一种“链路看门狗”思路检测到连续多次ping失败后自动重启指定网卡。#!/bin/bash # /usr/local/bin/link_watchdog.sh # 每隔60秒检测一次连续3次丢包则重启网卡 LOG/var/log/link_watchdog.log TARGET_IP192.0.2.1 IFACEenp3s0 FAIL_COUNT0 while true; do if ping -c 3 -W 2 $TARGET_IP /dev/null 21; then FAIL_COUNT0 else FAIL_COUNT$((FAIL_COUNT 1)) echo $(date %F %T) ping fail, count$FAIL_COUNT $LOG fi if [ $FAIL_COUNT -ge 3 ]; then echo $(date %F %T) restart $IFACE $LOG ip link set $IFACE down sleep 2 ip link set $IFACE up FAIL_COUNT0 fi sleep 60 done脚本里这个ip link set down/up动作在静态IP配置的环境下网卡重启后IP会随着配置文件自动恢复但如果是DHCP环境脚本需要在网卡up之后手动执行一次dhclient或者dhcpcd。另外业务连接如果依赖长连接会话网卡重启后必须检查业务进程是否自动重连必要时加一行systemctl restart 业务服务。5.3 监控阈值与告警节奏设计掉线重连的监控不能只盯连接状态否则告警必然滞后。我的做法是分三层设置指标第一层链路层监控NetworkAdapter的LinkStatus、eth0的carrier变化一旦网卡状态从Up变Down立即告警第二层网络层监控丢包率、TCP重传率和建立连接数TCP重传率超过5%就要重点关注第三层应用层盯业务侧的心跳超时和重连次数重连次数在短时间内超过阈值就触发事件。告警节奏也有讲究。如果每掉线一次就发一条告警凌晨两点能把你手机打爆。我一般把告警聚合成“掉线事件”——在10分钟窗口内连续出现3次以上断连才算一次事件然后按严重级别分派避免被瞬时抖动干扰又不漏掉真正的故障。5.4 掉线重连排查速查表到最后还是给一张速查表遇到同类问题直接对号入座。排查方向确认命令/入口健康标准不健康时的处理物理链路ethtool eth0速率/双工与对端一致换线、换端口、检查协商驱动错误ethtool -S eth0错误与丢弃计数长期不增长更新驱动/固件、禁用节能内核日志dmesg -T无Link down/up、tx timeout查驱动bug降级或升级版本系统路由ip route show默认路由唯一且metric合理修正多网卡优先级DNS配置nslookup、dcdiagDC间能互相解析域控记录调整DC的DNS指向对等DC网络自启ifcfg-*、nmcli重启后IP自动恢复设置ONBOOTyes统一管理入口无线信道无线网卡驱动面板80MHz/160MHz下无重协商改40MHz、关节能、刷新驱动虚拟网卡虚拟机设备管理器网卡类型与驱动匹配先改e1000e识别后装Tools切vmxnet3我个人处理掉线重连这类问题的最大体会是把“网卡”这个词从口头禅里拿掉。凡是业务说“网卡有问题”我都默认当成“网络链路这块有异常”然后按层拆。拆到最后真正需要换网卡的case其实不到三成多数问题出在驱动版本、电源策略、DNS指向、路由优先级这些平时容易忽略的细节上。最后再分享一个小技巧掉线重连排查完以后别急着结束把当时抓的包、跑的日志和改掉的配置一起存档下次同类问题直接翻旧账能省下至少一半时间。
返回列表