三次握手四次挥手之状态

状态有哪些

  1. ESTABLISHED(已建立):在正常的数据传输过程中,连接处于这个状态。双方可以互相发送和接收数据。

  2. FIN_WAIT_1(等待对方的FIN):当客户端发送了关闭请求(FIN),进入这个状态。此时客户端等待来自服务器的确认(ACK)。

  3. CLOSE_WAIT(等待关闭):当服务器收到客户端的关闭请求(FIN),服务器进入这个状态。服务器仍可以发送数据,但不再接收客户端的新数据。

  4. FIN_WAIT_2(等待对方的关闭请求):在这个状态,客户端等待服务器发送自己的关闭请求(FIN)。

  5. TIME_WAIT(等待一段时间):在完成四次挥手后,客户端和服务器都会进入这个状态。它是为了确保网络中滞留的最后一些数据包能够被正确处理和丢弃。这个状态持续一段时间后,连接将被彻底关闭,释放所有资源。该状态不一定需要对方响应,超时未响应自动进入下一状态。

  6. LAST_ACK(等待最后的ACK):在服务器发送自己的关闭请求后,进入这个状态。服务器等待来自客户端的最后一个确认(ACK),确认客户端已收到服务器的关闭请求。该状态同样不一定需要对方响应,超时未响应自动进入下一状态。

  7. CLOSED(已关闭):在TIME_WAIT状态结束后,连接最终处于关闭状态。双方的连接已经完全关闭,不再传输数据。

需要注意的是,每个状态都代表了连接关闭过程中的一个特定阶段。

注意!!!

服务器一直不关闭套接字,而客户端已发送关闭请求

客户端会发生什么?

如果服务器一直不关闭套接字,而客户端已经发送了关闭请求,那么客户端会进入到等待服务器响应的状态,也就是FIN_WAIT_2状态。在这个状态下,客户端会等待服务器发送自己的关闭请求(即发送自己的FIN标志)。

客户端在FIN_WAIT_2状态下会等待一段时间,如果服务器一直没有发送关闭请求,那么客户端可能会超时并认为服务器已经不再响应。在这种情况下,客户端可能会采取一些处理措施,例如终止连接并向应用程序报告连接异常。所以在这个过程中,客户端不会自动退出,而是会经历FIN_WAIT_1、FIN_WAIT_2和TIME_WAIT三个状态后,最终强制断开连接。

这种情况下,客户端和服务器之间的连接并没有正常关闭,而是出现了一种不符合协议规范的状态,可能会导致资源浪费或其他问题。因此,正常情况下,服务器应该在收到客户端的关闭请求后,按照协议规定的步骤发送自己的关闭请求,以确保连接可以正确地关闭并释放相关资源。

为什么会强制退出不等服务器响应呢,想想我们在使用CSDN的时候,你不想用了会等对面服务器准备好了再关网页吗,肯定不会。

服务器会发生什么?

不关闭套接字,会导致服务器一直处于close_wait状态,链接一直在被维护,套接字资源(文件描述符)泄漏导致服务器内的资源一直被占用。所以写代码要记得关文件描述符!!!

主动断开一方完成四次挥手后的动作

无论是服务器还是客户端,TCP规定主动断开的一方都会进入TIME_WAIT状态。虽然进入TIME_WAIT意味着四次挥手已经完成,但进入TIME_WAIT状态不代表就会立即释放资源,会等待一段时间。所以此时如果重启主动断开的一方的进程,我们是无法使用上一次的端口号,因为此时端口号还被上次的链接占用了。

如果服务端挂了,不能等TIME_WAIT状态需要立即重启怎么办

此时服务端是主动关闭的一方

比如双十一期间,大量用户与淘宝服务器建立连接,如果服务端突然挂掉,那就必须得立即重启,因为你要买东西,1秒成交量多少你想想,必然不能让你久等,可此时因为TIME_WAIT状态,端口被上次的连接占用了,那就必须得等该状态结束你才能重新上线。

那怎么办呢?

  • 关闭TCP连接重置:调用setsockopt()函数,可以在CLOSE时发送RST报文强制重置连接,不经过TIME_WAIT。
相关推荐
汤愈韬16 小时前
hcip-security_防火墙高可靠技术3_防火墙链路高可靠技术
网络·网络协议·网络安全
liulilittle17 小时前
TCP UCP v1.0:当 BBRv1 遇上卡尔曼滤波
网络·网络协议·tcp/ip
小娄~~18 小时前
TCP/IP协议和TFTP协议
网络·网络协议·tcp/ip
xiaoxue..19 小时前
HTTPS:更安全的HTTP,从加密原理、数字证书到TLS 握手全解析
网络协议·面试·https
liulilittle19 小时前
TCP UCP v1.0 拥塞控制算法(Linux Kernel CC-A)
linux·网络·网络协议·tcp/ip·c·通信·拥塞控制
仍然.20 小时前
传输层协议UDP
网络·网络协议·udp
Anastasiozzzz20 小时前
深度解析 AI 时代的“TCP/IP协议”:Agent-to-Agent (A2A) 通信架构与多智能体协同底层逻辑
大数据·开发语言·网络·数据库·网络协议·tcp/ip·架构
xlq2232220 小时前
56.自定义协议
linux·服务器·网络·网络协议
月落归舟21 小时前
深入理解Cookie与Session:解决HTTP无状态的核心方案
网络·网络协议·http
火车叼位1 天前
Windows 双网关自动切换:Node.js + 计划任务实现旁路由优先
网络协议·程序员