(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?

这篇具有很好参考价值的文章主要介绍了(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

客户端突然出现故障

客户端出现故障指的是客户端的主机发生了宕机或者断电的场景。发生这种情况的时候,如果服务端一直不会发送数据给客户端,那么服务端是永远无法感知到客户端宕机这件事的,也就是服务端的TCP连接将一直处于ESTABLISH 状态,占用着资源。

为了避免这种情况,TCP有一个保活机制

原理
定义了一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的TCP连接已经死亡,系统内核将错误信息通知给上层应用程序。

在linux内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔,默认值:

net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75  
net.ipv4.tcp_keepalive_probes=9
  • tcp_keepalive_time =7200:表示保活时间是7200秒(2小时),也就是2小时内如果没有任何连接相关的活动,则会启动保活机制
  • tcp_keepalive_intvl = 75:表示每次检测时间间隔75秒
  • tcp_keepalive_probes=9:表示检测9次无响应,认为对方是不可达的,从而中断本次连接

也就是说在Linux系统中,最少需要经过2小时11分15秒才能够发现一个死亡连接
(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?,计算机网络,tcp/ip,学习,笔记
PS:应用程序若想使用TCP保活机制需要通过socket接口设置SO_KEEPALIVE 选项才能够生效,如果没有设置那么就无法使用TCP保活机制。

如果开启了TCP保活机制就要考虑以下几种情况:

  • 第一种,对端程序正常工作。当TCP保活的探测报文发送给对端,对端会正常响应,这样TCP保活时间会被重置,等待下一个TCP保活时间的到来。
  • 第二种,对端主机宕机并重启。当TCP保活的探测报文发送给对端后,对端是可以响应的,但由于没有该连接的有效信息,会产生一个RST报文 ,这样很快就会发现TCP连接已经被重置。
  • 第三种,对端主机宕机(注意不是进程崩溃,进程崩溃后操作系统会在回收进程资源的时候,会发送FIN报文,而主机宕机则是无法感知的,所以需要TCP保活机制来探测对方是不是发生了主机宕机),或对端主机由于其他原因导致报文不可达。当TCP保活的探测报文发送给对端后没有响应,连续几次,达到保活探测次数后,TCP会报告该TCP连接已经死亡

TCP保活的这个机制检测时间有点长,可以自己在应用层实现一个心跳机制。


比如,web服务软件一般都会提供== keepalive_timeout == 参数,指定HTTP长连接的超时时间。如果设置了HTTP长连接的超时时间是60秒,web服务软件就会启动一个定时器,如果客户端在完成一个HTTP请求后,在60秒内都没有再发起请求,定时器的时间一到,就会触发回调函数来释放该连接
(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?,计算机网络,tcp/ip,学习,笔记


服务端进程崩溃

TCP的连接信息是由内核维护的,所以当服务器的进程崩溃后,内核需要回收该进程的所有TCP资源,于是内核会发送第一次握手FIN报文,后续的挥手过程也是在内核完成的,并不需要进程的参与,所以即使服务端的进程退出了,还是能与客户端完成TCP四次挥手的过程文章来源地址https://www.toymoban.com/news/detail-595078.html

到了这里,关于(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包