之前学习了TCP建立连接的三次握手,现在来学习一下TCP断开连接的四次挥手。
简单描述一下TCP断开连接的原理。
下面是我自己的理解图。
这里是比较官方的图。
重点说一下各个状态把:
MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失
established:建立连接状态
FIN_WAIT_1:客户端关闭等待
FIN_WAIT_2:客户端关闭等待
TIME_WAIT:客户端收到服务器可以关闭的通知(FIN=1)进入的状态
为什么需要TIME_WAIT?
1.可靠的关闭服务器资源。有可能服务器没有收到第四次握手的通知(客户端确认可以关闭的通知),那么服务器端将重试确认,但是此时如果客户端没有进入TIME_WAIT,直接关闭连接,将会导致服务器无法进入closed状态。造成资源的浪费。
2.防止失效请求。防止上一个TCP连接的延迟的数据包(发起关闭,但关闭没完成),被接收后,影响到新的TCP连接。(唯一连接确认方式为四元组:源IP地址、目的IP地址、源端口、目的端口)。也就是说如果新的tcp连接的四元组与旧的连接相同,那么在网络上延迟到达的客户端关闭连接FIN=1,将会关闭新连接。