TCP协议的三次握手和四次挥手

TCP协议的三次握手和四次挥手

1.1 三次握手

三次握手(three-way handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。

  1. 客户端向服务器:SYN=1,seq=m;客户端状态为:SYN_SENT
  2. 服务器向客户端:SYN=1,ACK=1,seq=n,ack=m+1;服务器状态为:SYN_RCVD
  3. 客户端向服务器:ACK=1,seq=m+1,ack=n+1;客户端状态为:ESTABLISHED

第三次握手的意义是:若没有第三次握手,当客户端没有收到服务器端确认时会再次发送一个连接请求,导致服务器和一个客户端之间存在多条连接,导致资源浪费。

1.2 四次挥手

       客户端和服务器均可主动发起挥手动作。

  1. 客户端向服务器端:FIN=1,seq=m,客户端状态为:FIN_WAIT_1
  2. 服务器端向客户端:ACK=1,seq=n,ack=m+1,服务器状态为:CLOSE_WAIT,客户端状态为:FIN_WAIT_2
  3. 服务器端向客户端:FIN=1,ACK=1,seq=k,ack=m+1,服务器状态为:LAST_ACK,客户端状态为:TIME_WAIT
  4. 客户端向服务器端:ACK=1,seq=m+1,ack=k+1,进入CLOSED状态

  1. 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

为了确保服务器端能收到客户端的最后一个ACK信号!若客户端不等待2MSL直接关闭,当服务器端没有收到最后一个ACK时,会再次重传FIN包,此时客户端已经关闭,会导致连接没有完全断开。

  1. 为什么连接时三次握手,关闭却要四次?

因为TCP是全双工的,每个方向的连接断开都需要发送和应答两次挥手,所以需要四次。

1.3 TCP状态转换图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值