这里列出四种异常情况。
一、进程崩溃了
进程崩溃和自动退出没有本质区别,虽然进程崩溃了,但是只是应用层不可了,传输层的TCP连接还是存在的,因此这里会发生四次挥手来释放连接
二、主机正常关机了
正常的主机关机流程,关机需要肯定的时间,在这段时间中可以举行四次挥手
三、不正常关机
如果是不正常关机,例如台式机断电,那么四次挥手可能就没有挥完。举个例子,如果A关机之前发送了一个FIN,在收到 B 的 FIN 之后,A已经关机了,这就意味着B是永远都收不到 ACK的了,那么由于 B 迟迟没有收到 ACK,那么首先会以为发生了丢包,举行超时重传,当超时重传几次之后还是没有收到ACK,就会以为对端发生了严峻的错误,B就会自动放连接。
上面的情况是A发出去 FIN 之后,如果A突然断电,没有发送FIN:
1)接收方突然断电
那么这时间 发送方 发送的业务数据迟迟没有得到确认报文,那么 发送 首先会以为发生丢包开始举行超时重传,等到多次迟迟没有得到回应,这时间就会发触发 “重置TCP连接”,发送复位报文(标识位RST为1),【复位报文是指重新建立连接,重新来过发送数据】如果没有得到ACK,那么服务器会片面断开连接。
2)发送方突然断电
这时间客户端不知道是服务器挂了还是服务器只是没有继续发送数据了,那么客户端就会先等着,等候到肯定时间之后就会发送一个 “心跳包”,(心跳包只是为了触发ack,确认一下服务器是否存活,不携带任何业务数据)【这个也叫做保活机制,但是由于TCP发送心跳包的时间过长,一般我们会在应用层重新实现心跳包的逻辑代码】
四、网线断开了
这种情况,站在 A 的视角会以为是第三种情况,A末了会放弃连接
站在B 的视角会以为是第三种情况,B会自动放弃连接。
滑动窗口