5.9.2 TCP的连接释放

  • 若通信完不释放连接,连接就会一直存在,占用资源。

  • TCP的 连接释放 是一个 四报文握手

  • 传输结束后,通信双方都可以释放连接。
    现在A和B都处于 ESTABLISHED状态 ,如下图。
    在这里插入图片描述
    A的应用进程 先向 其TCP 发出 连接释放报文段 ,并停止发送数据,主动关闭TCP连接。① A把 连接释放报文段 首部的 终止控制位FIN 置1,其序号seq=u,等于前面已传送过的数据的最后一个字节的序号加1。此时A进入了 FIN-WAIT-1(终止等待1)状态 ,等待B的确认。(注意FIN报文段即使不携带数据,也会消耗掉一个序号)。
    ② B收到 连接释放报文段 后就发回 确认 ,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入 CLOSE-WAIT(关闭等待)状态TCP服务器进程 此时通知 高层应用进程 ,此时 从A到B的这个方向的连接 就释放了,TCP连接处于 半关闭状态 :A无数据要发送,若B有数据要发送,A仍要接收即B到A这个方向上的连接未关闭,此状态可能要持续一段时间。
    A收到来自B的确认之后,进入 FIN-WAIT-2(终止等待2)状态 ,等待B发出的 连接释放报文段
    ③ 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。此时B发出的 连接释放报文段 必须使FIN=1。先假定B的序号为w(在半关闭状态 B可能又发送了一些数据)。B还必须重复上次已经发送过的确认号ack=u+1。这时B就进入了 LAST-ACK(最后确认)状态 ,等待A的确认。
    ④ A在收到B的 连接释放报文段 后,必须对此发出确认。在确认报文段中把ACK置1,确认号ack=w+1,而自己的序号是seq=u+1(TCP标准规定前面发送过的SYN、FIN报文段需要消耗掉一个序号,确认报文段不消耗序号。)。然后进入到 TIME-WAIT(时间等待)状态
    此时TCP连接还没有释放掉。必须经过 时间等待计数器 设置的时间到了,A才进入 CLOSED状态 ,才能开始建立下一个新的连接。

  • TIME-WAIT状态存在的必要性
    1、为了保证 A发送的最后一个ACK报文段 能够到达B。这个ACK报文段可能丢失,B收不到对 自己向A发送的FIN+ACK报文段 的确认(B无法进入 CLOSED状态 ),B就会超时重传这个FIN+ACK报文段,而A在此延时状态下便能收到这个报文段,A也重传一次确认,重新启动时间等待计时器。
    2、防止 已失效的连接请求报文段 出现在本连接中。A发送完最后一个ACK报文段后,等待给定的时间。可以使本连接持续的时间内所产生的的所有报文段都从网络中消失。

  • B只要收到了A发出的确认,就进入了 CLOSED状态
    B此时撤销相应的传输控制块,结束本次TCP连接。
    B结束TCP连接的时间 要比 A 早一些。

  • 保活计时器
    客户已主动与服务器建立了TCP连接,后来客户端的主机突然出故障。
    服务器以后就不能再收到客户发来的数据,需要有措施使服务器不要再白白等待下去。即采用保活计时器。
    保活计时器的时间 通常设置为两小时,若两小时没收到客户的数据,服务器就发送一个 探测报文段 ,以后每隔75秒钟发送一次。
    若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值