TCP四次挥手相关知识

在这里插入图片描述
FIN:请求关闭报文
MSL:最长报文段寿命

举个栗子:
男生和女生分手
第一次挥手:女 ->男,我要和你分手
第二次挥手:男 ->女,知道了,只要男的不放弃,还会有联系
第三次挥手:男 -> 女 ,扛不住了,我也要和你分手
第四次挥手:女 -> 男 ,知道了。最终真分手嘞

为什么要四次挥手?

四次挥手:

TCP连接是全双工的,每个方向必须单独关闭;
释放连接之前,双方都处于已建立连接状态。

第一次挥手:

客户端主动关闭方发送请求释放连接报文(FIN=1)(序号seq=u,前面已传送过来数据的最后一个字节的序号+1),用来关闭客户端到服务端的数据传送,但时客户端仍可以接收数据,客户端进入(终止等待1)FIN-WAIT-1状态。

第二次挥手:

服务器收到请求,发送确认报文。ACK=1,报文段序号seq=v(),确认号ack=u+1。此时服务端进入关闭等待CLOSE-WAIT状态。客户端收到服务器端的确认后,进入终止等待2状态。客户端到服务器端的方向的连接就释放了。

第三次挥手:

服务器发送完数据之后,向客户端发送请求释放连接报文,ACK=1,FIN=1,seq=w,ack=u+1,服务器端进入最后确认状态LAST-ACK。等待客户端的确认。

第四次挥手:

客户端收到请求之后,发送确认报文,ACK=1,seq=u+1,ack=w+1。服务器端收到确认后进入CLOSED状态,客户端进入时间等待状态TIME-WAIT。必须经过时间等待计时器设置时间2MSL后,客户端进入CLOSED状态。结束整个TCP连接。

为什么客户端要在时间等待状态必须等待2MSL的时间?

1、为了保证客户端发送的最后一个确认报文段能够到达服务器端。
因为这个确认报文段可能会丢失,处于最后确认状态的服务器端收不到已发送的请求释放连接的报文段,会超时重传释放连接的报文段,客户端就能在2MSL时间内,收到并重传确认报文,重新启动计时器,直到双方都成功进入关闭状态。如果客户端没有时间等待状态,发送完确认报文段之后,立即释放连接,无法进行重传,就导致服务器端无法正常进入CLOSE状态。

2、防止已经失效的连接请求报文段出现。
在经过2MSL,就可以使本连接持续时间内产生的所有报文段都消失,下一个连接请求报文段中不会出现旧的连接请求报文端。

为什么会有CLOSE-WAIT?为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么?

服务器可能还有数据没有发送完,这个状态可以继续发送数据。
当服务器执行第二次挥手之后, 此时证明客户端不会再向服务端请求任何数据, 但是服务端可能还正在给客户端发送数据(可能是客户端上一次请求的资源还没有发送完毕),所以此时服务端会等待把之前未传输完的数据传输完毕之后再发送关闭请求

为什么连接时是三次挥手,关闭时是四次挥手?

因为TCP是全双工模式,每个方向都要单独关闭,发送关闭请求,而另一方要进行确认。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值