Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
三次握手
TCP三次握手变2次会有什么问题
- 客户端第一次发出连接请求,因为一些网络原因长时间滞留。
- 此时因为一直没有接到服务端确认应答,发出第二次连接请求。
- 第二次连接请求被服务端处理并建立了连接,当数据传输结束后关闭连接。
- 第一次因为网络原因长时间滞留的第一次的请求,终于到达了服务端。
- 服务端处理后又会建立连接,但是此时客户端已经结束任务了。
- 所以客户端会忽略服务端的确认,也不会进行数据传输。
- 所以服务端会一直等待客户端传输数据,造成资源浪费。
四次挥手
四次挥手释放连接时,等待2MSL的意义
MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
保证客户端发送的最后一个ACK报文段能够到达服务端
- 保证客户端发送的最后一个ACK报文段能够到达服务器,确保服务器也能正常关闭。
- 因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。
- 服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。 最后客户端和服务器都能正常的关闭。
- 假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
防止“已失效的连接请求报文段”出现在本连接中
- 客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。
参考资料
Panel | ||
---|---|---|
| ||
|