三次握手四次挥手之状态

状态有哪些

  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。
相关推荐
买辣椒用券7 小时前
ESP32开发入门(七):HTTP开发实践
网络协议·嵌入式
秦jh_8 小时前
【Linux网络】应用层协议HTTP
linux·运维·服务器·网络·网络协议·tcp/ip·http
qq_2602412310 小时前
SSL泄露源IP怎么办?(教学与防护)
网络协议·tcp/ip·ssl
嵌入式在学无敌大神10 小时前
TCP 与 UDP报文
网络协议·tcp/ip·udp
IP管家10 小时前
多级路由器如何避免IP冲突
网络·网络协议·tcp/ip·游戏·智能路由器·ip
10000hours13 小时前
【SGL】Scatter-Gather List内存传输技术
linux·数据结构·网络协议·list·存储·sgl
测试工程喵14 小时前
Bearer Token的神秘面纱:深入解析HTTP认证头的设计哲学
网络·功能测试·网络协议·http·接口测试·模块测试·登录认证
JAVA学习通15 小时前
[JAVAEE]HTTP协议(2.0)
网络·网络协议·http
TE-茶叶蛋17 小时前
HTTP请求与缓存、页面渲染全流程
网络协议·http·缓存
eguid_119 小时前
WebRTC流媒体传输协议RTP点到点传输协议介绍,WebRTC为什么使用RTP协议传输音视频流?
java·网络协议·音视频·webrtc·实时音视频