网线重新插拔一下就好了?它到底“重置”了什么?答案没你想的那么简单!

4次阅读
没有评论

**关键词**

网络故障排查 网线拔插原理 TCP连接状态 广播风暴成因 环路检测 运维干货

读完本文你能带走:

     拔网线这个动作在不同场景下到底”重置”了什么、TCP连接拔掉网线后为什么可能”死而复生”、广播风暴导致网络瘫痪的成因和拔网线为什么能救回来、交换机环路和端口自环的区别,以及网络工程师面对”拔网线就好了”时的技术判断逻辑。以后别人再说你”玄学修网”,你可以甩这篇给他看。

网线重新插拔一下就好了?它到底“重置”了什么?答案没你想的那么简单!

01

 那次我拔了一根网线,被同事说“IT也就会拔网线”

记得刚入职那会儿,有次整个办公室网络卡得不行,ping网关丢包超过50%。领导在群里@我:“网络怎么回事?赶紧处理一下!”我跑去机房,排查了路由、检查了DHCP、看了交换机日志,都没发现异常。当时急得满头汗,突然发现交换机上有一根网线的灯闪得特别不正常——比别的端口快很多。

我犹豫了一下,伸手把那根网线拔了。不到五秒,群里有人说“好像好了”。然后我又插回去,一切正常。

后来同事开玩笑说:“你也就这点本事,拔网线谁不会啊。”我当时没说话,但后来我发现,这根网线连着的是一个测试交换机,那台交换机上有一个端口自环了,导致广播包在整个网络里乱窜。我拔的那一下,等于切断了风暴源。

不是因为我会拔网线,而是因为我知道该拔哪一根。

 拔网线到底“重置”了什么?取决于你在哪拔

拔网线这个动作,在不同网络层级上“重置”的东西完全不一样。分三种情况说:

情况一:拔的是你电脑到墙上的那根网线

重置的是网卡和交换机的物理链路状态。你拔出网线,电脑网卡检测到链路断开,操作系统知道这个网卡没有物理连接了。插回去之后,网卡重新协商速率(10/100/1000Mbps自动协商),重新建立链路。

情况二:拔的是交换机之间或交换机到路由器的主干网线

这种操作能救回网络的概率最高,原因往往是广播风暴。广播风暴就是网络中充斥着大量广播数据包,把正常的点对点通信全挤死了。当广播包数量占到通讯总量的30%时,网络传输效率就会明显下降。

有网络工程师回忆过一个真实场景:2006年F1上海国际赛车场新闻中心,刚插上一根网线,然后很多用户立马无法上网,也无法登录交换机。检查后发现网线有问题,拔掉故障线路后,网络立马恢复。

什么情况会导致广播风暴?一块故障网卡、一个故障端口,甚至是一根网线收发线短接,都可能导致广播包在环路中无限循环。拔掉主干网线,相当于切断了风暴的源头,等风暴平息了再插回去,网络恢复正常。

情况三:拔的是服务器网线

这个场景和前面两种情况完全不同。拔服务器网线解决的不是网络堵塞问题,而是TCP连接状态的问题。03

 TCP连接拔了网线还能恢复?答案分两种情况

很多人以为网线都拔了,TCP连接肯定断了。这个理解不全对。TCP连接在Linux内核中是一个结构体,拔掉网线并不会改变这个结构体的任何内容,所以TCP连接的状态不会因为网线被拔而自动变化。

关键在于拔了网线之后,有没有数据传输

场景一:拔了网线之后,有数据传输

假设服务端正好往客户端发了数据,收不到ACK确认包,就会触发TCP超时重传。Linux系统有个参数叫tcp_retries2,默认值15,控制超时重传的最大次数。

如果在服务端重传还没达到最大次数之前,你插回了网线,客户端TCP连接状态还是ESTABLISHED,能正常接收数据包,然后回ACK。这时候,连接恢复了,上层应用根本感觉不到网线被拔过。

但如果插回网线之前,服务端重传次数已经用完了,服务端判定连接出问题,主动断开。等客户端插回网线再发数据,服务端已经没有对应的连接信息了,回复RST报文。这时候,TCP连接就彻底断了。

场景二:拔了网线之后,没有任何数据传输

如果双方都没有开启TCP KeepAlive(保活机制),又没有数据传输,TCP连接理论上可以一直保持ESTABLISHED状态。即使网线拔了一天再插回去,连接可能还在。

如果开启了TCP KeepAlive,Linux默认配置是:7200秒(2小时)没有活动才开始探测,每75秒探测一次,连续9次无响应才判定连接死亡。也就是说,至少需要2小时11分才能发现一个“死亡”连接。

所以,你平时拔一下网线再插回去,大概率TCP连接还在——因为时间太短,系统还没来得及判定它死了。04

 那交换机环路呢?拔网线为什么能救?

交换机环路是另一种完全不同的场景。一根网线插到交换机的两个不同端口上,或者网线收发线短接,都会形成环路。广播包在环路中无限循环,大量消耗交换机CPU,网络瘫痪。

排查环路最直接的方法就是物理拔线:把网线一根根拔掉,拔到哪根网络恢复正常,那根线就是问题所在。这就是“拔网线就好了”的另一个技术场景——拔掉了环路的“元凶”。

网线重新插拔一下就好了?它到底“重置”了什么?答案没你想的那么简单!

TP-Link官网的技术文档也明确提到:对于不支持环路检测功能的非网管交换机,只能采用手动拔线的方式排查。05 

写在最后

“拔网线”听起来像玄学,但背后是有技术逻辑的。现在我能理直气壮地跟同事解释:

  • 拔电脑网线:重置物理链路协商,网卡和交换机重新“握手”
  • 拔主干网线:切断了广播风暴的源头,或者拔掉了造成环路的线路
  • 拔服务器网线:TCP连接可能还在(拔的时间短+重传没超时),也可能断了(重传超时了)

所以别再觉得网管只会拔网线了。拔哪根、什么时候拔、拔完会触发什么机制,这里面全是技术判断。

正文完
 0