TCP的运输连接管理(3次握手,4次握手)

TCP简历链接时3次握手
第一次握手:建立连接,客户端发送SYN包(syn=1, seq=x)到服务器,并进入SYN-SENT(同步,已发送)状态,等待服务器确认; (备注,syn=1,ack=0表示链接建立请求,ack=0时,确认号无效,即客户端发出请求的时候,它不需要向服务端确认收到的序号是什么)

第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=1,seq=y),即SYN+ACK包,此时服务器进入SYN-RECVD(同步,收到)状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(已建立连接)状态,完成三次握手。
(备注:此时syn=x,这个确认报文段可以携带数据,携带数据的话,seq=x+1;如果不携带数据,此次的确认报文段不消耗序号,则下次发送的数据报文段的seq=x+1。
TCP的标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,这种情况下,下一个数据报文段的序号仍是seq=x+1)


TCP断开链接时的4次挥手
第一次,客户端主动发出释放报文段(fin=1,seq=u=最后一次发送完的数据的最后一个字节的序号+1),这时,客户端进入FIN-WAIT-1(终止等待1)状态,TCP 规定,fin报文段即使不携带数据,也要消耗序号。

第二次,服务器接收到fin包并确认(ack=u+1,seq=v=最后一次发送到客户端数据的最后一个字节的序号+1,ACK=1),服务器进入CLOSE-WAIT(等待关闭、半关闭)状态,此时服务器到客户端的连接未关闭,服务器仍可以向客户端发送数据,且客户端需要接收并确认。
客户端收到服务器的确认后,进入FIN-WAIT-2(终止-等待-2),等待服务器发送释放报文段。

第三次,服务器没有更多的数据需要发送时,发送释放报文段到客户端(fin=1,seq=w,ack=u+1),此时,服务器进入LAST-ACK(最后确认)状态,等待客户端确认收到释放。

第四次,客户端收到释放报文段后,必须确认(ack=w+1,seq=u+1。TCP规定,前面发送的fin消耗一个序号)。进入TIME-WAIT(时间等待状态),此时还没有断开连接,必须经过2MSL(最长报文段寿命)后,客户端才进入CLOSED(关闭)状态。RFC793建议MSL=2minutes(对于现在来说有点长)。所以,客户端确认服务器的FIN+ACK包后,需要等待4minutes才进入CLOSED状态,同样,服务器在接收到客户端的确认包后,进入CLOSED 状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值