tcp四次挥手图解

TCP建立连接是通过三次握手方式,断开连接则是通过四次挥手方式。TCP是一种面向连接的协议,关闭连接的过程比建立连接要复杂一些,需要四次报文交互,这是为了保证数据的可靠传输和双向的关闭。下图展示的是TCP四次挥手的全过程,用于断开一个已建立的连接。下面我会逐项解释图中各个阶段的状态变迁及术语所代表的含义及作用。

左侧:客户端(发起方,主动关闭连接)

  • ESTABLISHED(已连接)

当前连接处于传输数据的状态。

  • FIN_WAIT_1

客户端发送了FIN报文,表示自己没有数据要发送了,请求断开连接。

  • FIN_WAIT_2

收到服务器对FIN的ACK确认,等待服务器也发送FIN。

  • TIME_WAIT(等待2MSL)

客户端收到服务器的FIN,并回复ACK,进入TIME_WAIT,确保ACK能成功到达服务器。

  • CLOSED

等待时间(2MSL)过后,彻底关闭连接。

右侧:服务器(响应方,被动关闭连接)

  • ESTABLISHED(已连接)

处于传输状态。

  • CLOSED_WAIT

收到客户端的FIN请求,进入准备关闭状态,可能还有数据要处理。

  • LAST_ACK

发送完最后的FIN后,等待客户端的ACK。

  • CLOSED

收到ACK后,连接完全断开。

中间:四次挥手过程

  • 第一次挥手:FIN=1,seq=u

客户端打算关闭连接,向服务器发送一个TCP首部FIN标志位被置为1的报文,即FIN报文,序列号为u,之后客户端进入FIN_WAIT_1状态。

含义:客户端表示“我已经没有数据要发送了,但还能接收数据”。

作用:请求断开客户端到服务器的数据传输。

  • 第二次挥手:ACK=1,seq=v,ack=u+1

服务器确认收到客户端发送的FIN报文,向客户端发送ACK应答报文,接着服务器进入CLOSED_WAIT状态。(这个时候,实际上服务器还没有关闭数据通道,还可以继续向客户端发送数据,客户端也可以接收数据但不能发送数据。)ACK=1,ack=u+1表示已经成功收到序列号为u的报文,下一次希望收到序列号为u+1的报文。seq=v是服务器的序列号。

作用:确认收到客户端的断开请求。

客户端收到服务器的ACK应答报文后,进入FIN_WAIT_2状态。

  • 第三次挥手:FIN=1,seq=w,ack=u+1

等待服务器处理完数据后,服务器打算关闭连接,也向客户端发送一个TCP首部FIN标志位被置为1的报文,即FIN报文,序列号为w,之后服务器进入LAST_ACK状态。ack=u+1表示再次确认收到客户端之前发送的FIN报文。

含义:服务器告诉客户端“我也没有数据要发送了”。

作用:请求断开服务器到客户端的数据传输。

  • 第四次挥手:ACK=1,seq=u+1,ack=w+1

客户端确认收到服务器发送的FIN报文,向服务器发送ACK应答报文,接着客户端进入TIME_WAIT状态。ACK=1,ack=w+1表示已经成功收到序列号为w的报文,seq=u+1是客户端的序列号。

作用:确认收到服务器的断开请求。

客户端在TIME_WAIT状态下继续等待2个最大报文寿命(2MSL),确保服务器收到ACK应答报文后才关闭连接,防止ACK丢失。

等待完2MSL后,客户端自动进入CLOSED状态,至此客户端完成连接的关闭。

服务器在收到ACK应答报文后,直接从LAST_ACK转为CLOSED状态,至此服务端也完成连接的关闭。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值