三次握手四次挥手之状态

状态有哪些

  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。
相关推荐
电子科技圈1 小时前
Durin:Aliro标准赋能,打造无缝移动入户体验
人工智能·mcu·物联网·网络协议·智能家居·智能硬件·iot
TechWayfarer5 小时前
CDN智能调度实战:基于IP段归属查询实现电信/联通/移动流量分离(附Nginx Lua代码)
网络协议·tcp/ip·nginx
Vis-Lin5 小时前
BLE 协议栈:HCI ACL 数据详解
网络·物联网·网络协议·蓝牙·iot·ble
TechWayfarer5 小时前
攻防对抗:利用IP段归属查询快速定位攻击源并联动防火墙(iptables/UFW)自动封禁
网络·网络协议·tcp/ip
一个有温度的技术博主6 小时前
网安实验系列三:信息收集之Ip收集
网络·网络协议·tcp/ip
Hello_Embed7 小时前
嵌入式上位机开发入门(五):UDP 编程 —— Server 端实现
笔记·单片机·网络协议·udp·嵌入式
会飞的大可8 小时前
服务间通信:OpenFeign vs Dubbo 的 RPC 选型
网络协议·rpc·dubbo
松小白song8 小时前
Modbus RTU/TCP 的区别
网络·网络协议·tcp/ip
为爱停留8 小时前
HTTPS 域名访问与 Nginx 全链路说明
网络协议·nginx·https
白毛大侠8 小时前
WebSocket 核心:借 HTTP 建联,做自己的通信
websocket·网络协议·http