TCP协议中三次握手和四次挥手整理

本文详细解析了TCP/IP协议中的三次握手和四次挥手过程,包括客户端与服务器如何通过SYN、ACK、FIN等标志位建立和断开连接,以及为何客户端在断开连接后需要等待2MSL时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在TCP/IP协议中,TCP是提供可靠连接的协议,建立连接的过程采用了三次握手:

             

第一次握手:

客户端向服务器发送SYN包(SYN = 1,seq = j),并进入SYN_SEND状态,等待服务器确认;

SYN:同步序列编号(Synchronize Sequence Number)

第二次握手:

服务器收到客户端所发送的SYN包(SYN = 1,seq = j)后,返回一个ACK包(ACK = 1,ack = j+1)表示确认收到,同时发送SYN包(SYN = 1,seq =k)给客户端,即向客户端发送SYN + ACK包,此时服务器进入SYN_RECIEVE状态;

ACK:确认字符(ACKnowledgement)

第三次握手:

客户端收到服务端发送的SYN+ACK包(SYN = 1,seq =k--ACK = 1,ack = j+1)后,验证ack是否等于(j+1)向服务器发送ACK包(ACK = 1,ack = k+1)进行确认,服务器收到后验证ack是否等于(k+1)后,服务器和客户端进入ESTABLISHED状态,完成握手。

 

 

由于TCP连接是全双工形式的,一方断开连接后,另一个方向仍能发送数据,因此TCP连接的断开需要四次挥手来确认断开:

                        

第一次挥手:

客户端向服务器发送FIN包(Fin = 1, seq = m)(m为最后一次发送数据的序列号+1),用来关闭客户端->服务器方向上的连接,此时客户端进入FIN_WAIT1 状态;

第二次挥手:

服务器收到客户端所发送的FIN包(Fin = 1, seq = m)后,向客户端发送ACK包(ACK = 1,ack = m+1),此时服务器进入CLOSE_WAIT状态,而客户端收到服务器发送的ACK包后验证序号是否为(m+1),进入FIN_WAIT2状态

第三次挥手:

当服务器->客户端方向的数据发送完之后,服务器向客户端发送FIN包(Fin = 1,seq = n),进入LAST_ACK状态,等待客户端发送的ACK包;

第四次挥手:

客户端收到服务器发送的FIN包(Fin = 1,seq = n)后,向服务器发送ACK包ACK = 1,ack = n+1)进行确认,进入TIME_WAIT状态。服务器收到客户端发送的ACK包后验证ack是否为n+1,确认后进入CLOSE状态,而客户端处于TIME_WAIT状态时开始计时,2*MSL(报文最长生存时间)后,进入CLOSE状态,至此,四次挥手结束,TCP连接断开。

客户端等待2MSL的原因:

MSL指报文最大生存时间,超过这个时间后报文将被丢弃,等待2MSL时间的原因是防止最后发送的ACK包没有被对方收到确认,此时对方检测超时后将会重新发送第三次挥手的FIN包,客户端收到后将重新发送ACK包,并重置计时器,直到2MSL后确认对方已收到, 关闭连接。

本文整理自:

https://blog.youkuaiyun.com/younglao/article/details/79453777

https://blog.youkuaiyun.com/yeweilei/article/details/79279963

 另附TCP三次握手四次挥手详解:https://blog.youkuaiyun.com/qzcsu/article/details/72861891

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值