TCP的三次握手建立连接与四次挥手释放连接

一、TCP的三次握手建立连接

三次握手,指通信双方建立TCP连接时,需要发送三次包,其执行过程如下图所示:

第一次握手:Client端联系Server端(SYN=1,seqc=x),意思是告诉对方“我想跟你建立连接”,同步信号SYN=1及我的初始序号为Seqc=x;

第二次握手:Server端回复Client端(SYN=1,ACK=1,ackc=x+1,seqs=y),意思是“好的,已收到,我同意建立连接”,同步信号SYN=1,确认信号ACK=1,对对方的初始序号的确认ackx+1我的初始序号Seqs=y;

第三次握手:Client回复Server端(ACK=1,acks=y+1,seqc=x+1),意思是“好的,已收到,我准备发送数据了”,确认信号ACK=1,对对方的序列号确认acks=y+1,如果自己这一端发送数据则Seqc=x+1

 

二、TCP四次挥手释放连接

四次挥手,指的是通信双方结束本次通话需要发送四次数据包,其过程如下图所示:

第一次挥手:主动方回复另一方(ACK=1,FIN=1,seq1=u),意思是“你刚才发的东西我已收到,我没有数据发送了”,所以ACK=1是对上一报文的确认,FIN=1表示自己这边已没有数据了;

第二次挥手:被动方回复主动方(ACK=1,ack1=u+1,seq2=v),意思是“收到你的信息,我可能还有数据要发”,所以ACK=1,ack1=m+1是对报文的确认,同时自己这边的序号到Seq2=v了;

第三次挥手:因为主动方没有数据了,一直处于等待状态,所以这一次由被动方发起(ACK=1,FIN=1,ack1=u+1,seq2=w),意思是“我也没有数据发送了,可以结束连接了”;

第四次挥手:主动方回复被动方(ACK=1,ack2=w+1,seq1=u+1),意思是“收到”。

然后主动方等待一定时间,如果没有收到对方重发的FIN报文则表示对方已成功关闭连接,自己这边也可以关闭连接了;如果对方等待超时仍没有收到ACK报文则肯定会重新发送FIN报文,所以这个一定时间就是指TIME_WAIT状态,所以等待是否重新发送ACK报文

 

借用一个状态图总结一下:

三、为什么建立连接需要三次握手,而释放连接需要四次握手?

:因为建立连接时,服务端一直就处于Listen状态下,当收到客户端的SYN请求后,就将ACK和SYN放在一个报文中发送给客户端;而释放连接时,主动方发送FIN报文只表示当前自己已没有数据发送了,但对方可能还有数据发送,所以被动方先回复一个ACK报文确认收到该报文,然后当被动方也没有数据发送时就会再发起一个FIN报文报告自己没有数据发送时,然后再被主动方确认后释放连接。

 

四、为什么TIME_WAIT状态需要等待一定时间才能真正释放连接?

:首先这个一定时间跟具体实现有关,而需要等待这段时间是为了确认主动方发送的ACK报文被对方收到了并且对方已关闭了连接,否则主动方直接关闭了连接而发送的ACK报文由于网络不可靠中途丢失了,那么另一方就要不断重发FIN报文苦等ACK报文而不得,空浪费资源。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值