四次挥手扫清障碍

建立一个TCP链接需要三次握手,断开一个连接要经过四次挥手。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束的发送后还能接收来自另一端数据的能力。
TCP的链接拆除需要发送四个包,因此成为四次挥手(Four-way handshake),客户端和服务器军和主动发起挥手动作。

在这里插入图片描述

上述符号的意思

FIN:连接终止位
seq:发送的第一个字节的序号
ACK:确认报文段
ack:确认号,希望收到的下一个数据的第一个字节的序号

刚开始双发都处于ESTABLISHED状态,假设是客户端先发起的关闭请求,四次挥手的过程如下:
第一次握手

客户端发送一个FIN报文(请求链接终止:FIN=1),报文中会制定一个序列号seq=u。并停止在发送数据,主动关闭TCP连接。此时客户端处于FIN_WAIT1状态,等待服务端的确认。

FIN-WAIT1 等待远程TCP连接中断请求,或先前的链接中断请求的确认。

第二次握手

服务端收到FIN之后,会发送ACK报文,且把客户端的序列号+1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务器处理CLOSE_WAIT状态。

CLOSE_WAIR 等待从本地用户发来的链接中断请求;

此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认号,进入FIN_WAIT2(终止等待2)状态,等待服务端发胡的连接释放报文段

FIN-WAIT2从远程TCP等待连接中断请求

第三次挥手

如果服务端也想断开连接(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送FIN报文段,指定一个序列号。此时服务端处于LAST_ACK的状态,等待客户端确认

LAST_ACK 等待原来发向远程TCP的连接中断请求的确认

第四次挥手

客户端收到FIN之后,一样发送一个ACK报文作为应答(ack=w+1),并且把服务端的序列值+1作为自己ACK报文序列号值(seq=u+1),此时客户端处于TIME_WAIT(时间等待)状态

TIME-WAIT等待足够的时间以确认远程TCP连接接收到连接中断请求的确认

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值