TCP 的三次握手和四次挥手

三次握手:

 

  • 第一次握手:server确认自己的收信能力和client的发信能力
    • client(客户端)发送了一个SYN(J)包给server(服务器),然后等待server的ACK回复,client进入 SYN-SENT 状态 即主动半打开状态。

 

  • 第二次握手:client确认自己的发信能力和server的收信能力
    • server接收到SYN(seq=J)包后就返回一个ACK (J+1)包以及一个自己的SYN(K)包,然后等待client的ACK回复,server进入 SYN-RECIVED 状态 即被动半打开状态。

 

  • 第三次握手:server确认自己的发信能力和client的收信能力
    • client接受到server发回的ACK(J+1)包后,client进入 ESTABLISHED (确认)状态。然后根据server发来的SYN(K)包,返回给等待中的server一个ACK(K+1)包。等待中的server收到ACK回复,也罢自己的状态设为 ESTABLISHED 。到此TCP三次握手完成。

 

注:

  • 三次握手是为了满足“在不可靠信道上可靠的传输信息”。

 

四次挥手:

 

  • 第一次挥手:client主动请求结束连接
    • client发送一个FIN(M)包,此时client进入FIN-WAIT-1状态,这表明client已经没有数据要发送了。

 

  • 第二次挥手:server回复client,表示同意结束连接
    • server收到了client发来的FIN(M)包后,向client发回一个ACK(M+1)包,此时server进入 CLOSE-WAIT 状态,client进入 FIN-WAIT-2 状态。

 

  • 第三次挥手:server请求结束连接
    • server向client发送FIN(N)包,请求关闭连接,同时server进入 LAST-ACK 状态。

 

  • 第四次挥手:client回复server,表示同意结束连接,server关闭,client4分钟后自动关闭
    • client收到server发送的FIN(N)包,进入 TIME-WAIT 状态。向server发送ACK(N+1)包,server收到client的ACK(N+1)包以后,进入 CLOSE 状态;client等待 一段时间 还没有得到回复后,判断server已经正式关闭,进入 CLOSE 状态。

 

注:

  • 一段时间:
    • 一般为4分钟,4分钟就是2个MSL(最长报文寿命)。

 

  • 四次挥手中间两次不合并:
    • 握手过程,通信只需要处理连接。而挥手过程,通信需要处理 数据+连接。
    • 当收到客户端断开连接请求时(第一次挥手),服务器端可能还在处理客户端的数据 / 向客户端发送数据,如果二三次挥手合并,此时客户端需等待服务器端处理完数据,造成资源浪费。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值