TCP通信过程中异常情况整理

TCP通信过程中异常情况整理
本文主要叙述,客户端与服务器端在TCP链接已经建立且正常通信过程中,发生以下几种异常情况时TCP链接会产生的各种现象。

服务器主机崩溃
服务器主机崩溃后重启
服务器主机断网或者中间路由器出现故障
服务器主机断网或者中间路由器出现故障后又恢复
服务器关机或服务器进程被终止
服务器的端口被关闭
TCP的保活机制
1. 服务器主机崩溃
  客户端在给服务器发送数据时,由于收不到服务器端回传的ACK确认报文,正常情况下,客户端TCP均会进行超时重传,一般为重传12次大约9分钟后才放弃重传,并关闭客户端TCP链接。

2. 服务器主机崩溃后重启
  如果服务器主机在崩溃重启的这段时间里,客户端没有向服务器发送数据,即客户端没有因重传次数超过限制关闭TCP链接。则在服务器重启后,当客户端再向服务器发送TCP报文时,由于服务器中的TCP链接已经关闭,会直接向客户端回复RST报文,客户端在接收RST报文后关闭自己的TCP链接。

3. 服务器主机断网或者中间路由器出现故障
  与情况1类似,客户端会进行超时重传,直到重传次数超过后放弃重传,并关闭客户端TCP链接。(因为TCP中会忽略目的主机不可达和目的网络不可达的ICMP报文,并进行重传,直到重传总时间超过限制)

4. 服务器主机断网或者中间路由器出现故障后又恢复
  如果在服务器主机断网或者中间路由器出现故障这段时间内,客户端和服务器之间没有进行相互通信,即双方均没有察觉对方目的不可达,则在恢复网络链接后两端的TCP链接均有效,能够正常继续进行通信。

  如果在服务器主机断网或者中间路由器出现故障这段时间内,客户端因向服务器发送数据超时,并重传总时间超过限制关闭TCP链接。则再网络恢复后,服务器再向客户端发送TCP报文时,客户端也会直接恢复RST报文,服务器再收到RST报文后关闭自己的TCP链接。

5. 服务器关机或服务器进程被终止
  正常情况下服务器主机被关机时,操作系统都会事先通知所有仍在运行的进程,并先将所有进程终止后,再继续关闭电脑。而所有的进程在被终止时,Unix操作系统内核都会事先去关闭所有已经打开的TCP链接,即向客户端发生FIN标志报文,进行四次握手关闭连接。 
  因此,对于这种情况,客户端是能够察觉到并正常关闭TCP链接。

6. 服务器的端口被关闭
  如果在通信过程中,服务器的监听端口被管理员或系统禁掉,则当客户端再向服务器发送TCP报文时,服务器在收到该报文后,由于发送该目的端口没有处于监听状态,则会直接向客户端发送RST报文,客户端在收到RST报文后会直接关闭自己TCP链接。

7. TCP的保活机制
  TCP中的保活机制是一个可选项,并不是必须的。 
  主要用在服务器端,用于检测已建立TCP链接的客户端的状态,防止因客户端崩溃或者客户端网络不可达,而服务器端一直保持该TCP链接,占用服务器端的大量资源(因为Linux系统中可以创建的总TCP链接数是有限制的)。 
  保活机制原理:设置TCP保活机制的保活时间keepIdle,即在TCP链接超过该时间没有任何数据交互时,发送保活探测报文;设置保活探测报文的发送时间间隔keepInterval;设置保活探测报文的总发送次数keepCount。如果在keepCount次的保活探测报文均没有收到客户端的回应,则服务器端即关闭与客户端的TCP链接。 
  保活探测报文: 
  TCP保活探测报文的内容为,将之前已发送数据的最大序列号序列的减1,并设置数据大小为1个字节,数据内容为“0”,然后发送到客户端,如下图所示: 
 
发送keepalive probe报文之前的TCP报文 
 
TCP keepalive probe保活报文
  客户端对服务器端保活探测报文的确认报文,其报文格式如下: 
 
TCP keepalive ACK客户端对服务器端保活探测报文的确认报文
--------------------- 
作者:自由不死 
来源:CSDN 
原文:https://blog.csdn.net/yyc1023/article/details/80242815 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值