网络断开几秒,原先的 TCP 连接还能否正常使用?
今天给大家分享一个有意思的问题,这是我在春节假期在《Linux 内核技术实战课》里看到的。
春节前,我开了个极客时间的大会员。 开完以后,感觉爽了很多。 打开 App 里的课,基本上是想学哪个学哪个。 这个问题是:“ 通过 ssh 登录到服务器上,然后把网络关掉,过几秒后再打开,请问这个 ssh 连接还正常吗? ”
这几天极客邦在搞活动,一年才 499。我的粉丝通过如下二维码购买,我还会把极客的 50 元返现都送给大伙儿,一年 449 就下来了。
这是我的微信二维码(也欢迎加我好友互相围观)
如果你确实就只对《Linux内核技术实战课》这一门课感兴趣的话,想单独下单也可以!
春节前,我开了个极客时间的大会员。 开完以后,感觉爽了很多。 打开 App 里的课,基本上是想学哪个学哪个。 这个问题是:“ 通过 ssh 登录到服务器上,然后把网络关掉,过几秒后再打开,请问这个 ssh 连接还正常吗? ”
其实我之前也想过给大家分享这个问题,正好在极客时间里看到了这个问题的答案,就直接引用他山之石了。
先说结论,这个问题的结论是大概率 ssh 连接还能继续使用,不过不是 100% 确定的。
原先的 ssh 连接能否使用主要取决于网络断开期间是否有数据传输。如果没有数据传输,很有可能这个连接还能接着用。
ssh 使用的 TCP 连接,这个连接对于内核对象来说其实就是一个 struct socket 内核结构体,是保存在内存里的。在这个结构体里(内存里)会记录当前 TCP 连接的状态。当关闭网络后,该结构体的内容并不会发生变化。也就是说连接的状态也会“保持不变”。
但如果网络断开期间有过数据主动传输,此时内核会检查到该连接出问题了,就会去处理 TCP 连接状态,就有可能会断开这个连接。
另外还有一个细节就是 TCP 的 keepalive 机制,如果该连接长时间没有数据,keepalive 机制也会挑出来检查连接是否可用,发现有问题也会把该连接给关闭掉。
实践是检验真理的唯一标准。因此我专门实际动手在我的台式机上试了一下。首先在 mobaxterm 上启动 ssh 连接上某台服务器。然后把机器的网线拔掉 3 秒,再插上。等 Windows 显示网络已连接的时候再使用一个这个 ssh,发现确实还能继续使用。这个问题是不是有点意思,所以我今天把它分享给大家。
这门《Linux 内核技术实战课》的作者是 Linux Kenrel 活跃贡献者邵亚方,给内核提交过不少源码,是一个实战派。他在这门课里从内核视角分了 PageCache 管理、内存泄露、TCP 重传、内核态 CPU 利用率飙高 等四部分来展开的。 不过我并不推荐你单独购买这个课程(因为我觉得不够划算)。更建议你和我一样直接开通一个极客时间的会员。 有了会员,不管你的兴趣点在哪个方向,每个领域都是15 - 20 门的课程可供你学习。
这个会员可以多次购买,第一年买完以后会送一张 50 元的代金券。继续用下方二维码,第二年更是折合 399 就能下来,超值!
另外咱们一位读者(点名感谢Guodong)还帮我们找到了一个再打九折的办法,先购买极客的充值卡,再用充值卡下单会员。复制打开极客商城链接: http://gk.link/a/118Lz
如果你确实就只对《Linux内核技术实战课》这一门课感兴趣的话,想单独下单也可以!