TCP第四次挥手为什么要等待2MSL

当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢??? 
这里写图片描述

这最主要是因为两个理由:

1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

2、他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

注意:在服务器发送了FIN-ACK之后,会立即启动超时重传计时器。客户端在发送最后一个ACK之后会立即启动时间等待计时器。

TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。为了确保数据的可靠传输,TCP使用三次握手建立连接,使用四次挥手断开连接。下面是TCP三次握手和四次挥手的流量图及其解释: ### 三次握手 1. **第一次握手**:客户端发送一个SYN(同步序列编号)包到服务器,并进入SYN_SENT状态,等待服务器确认。 2. **第二次握手**:服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。 3. **第三次握手**:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(已建立)状态,完成三次握手。 ``` 客户端 服务器 | | |--- SYN ---> | | | |<-- SYN+ACK --| | | | |--- ACK ---> | | | ``` ### 四次挥手 1. **第一次挥手**:客户端发送一个FIN(结束)包到服务器,进入FIN_WAIT_1状态,表示客户端没有数据要发送给服务器了。 2. **第二次挥手**:服务器收到FIN包后,发送一个ACK包给客户端,进入CLOSE_WAIT状态,表示服务器已经知道客户端没有数据要发送了。 3. **第三次挥手**:服务器发送一个FIN包给客户端,表示服务器也没有数据要发送给客户端了,进入LAST_ACK状态。 4. **第四次挥手**:客户端收到服务器的FIN包后,发送一个ACK包给服务器,进入TIME_WAIT状态,等待可能出现时间(2MSL)后,客户端进入CLOSED状态。服务器收到ACK包后,也进入CLOSED状态。 ``` 客户端 服务器 | | |--- FIN ---> | | | |<-- ACK ----| | | | |<---> | | | ``` 通过三次握手和四次挥手TCP确保了连接的可靠建立和断开,从而保证了数据的可靠传输。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值