`

断开连接时,time_wait状态的解释和验证

阅读更多


time_wait状态的解释和验证:在TCP同步双工断开连接中,假设没有time-wait这个状态,那么在最后一个FIN N发送时,主动关闭方接到后,返回ack N+1.那么这个时候如果N+1这个包在没有正确达到,那么对方会一直处于LAST ACK的状态,而发送方因为没tim_wait这个状态,已经认为是正确发送了就退出了,造成接收方一直等待。 加入time_wait后,time_wait本身这个值也代表这个一个包在网络上能生存的时间,接收方就可以简单认为在这个时间内没收到N+1的包就可以认为
这次断开是失败的,那么要重新发送FIN N的序列号。而这个时候time_wait端也要将状态改为接
收这个FIN的状态,以进行下一次发送

对重复连接的socket连接:设想下,假设没这个time_wait,你刚退出这个套接字,四次断开还未
完成,你或许在CLOSE_WAIT就退出了,然后又马上连接,发出你的ACK。这个后果是很严重的,而
对方可能认为你还处于刚才的四次断开状态呢。。

第一无法验证。对第二个验证如下:在客户端bind一个sockaddr_in,指定端口。在断开时,马上再次连接,发现连接不起来
[tnsmcc@localhost client]$ ./client.exe 127.0.0.1 9000
fds
fds
fds
fds
fds
fds
[tnsmcc@localhost client]$ ./client.exe 127.0.0.1 9000
[tnsmcc@localhost client]$ ./client.exe 127.0.0.1 9000
[tnsmcc@localhost client]$ ./client.exe 127.0.0.1 9000

这个时候端口处于
127.0.0.1:9005          127.0.0.1:9000          TIME_WAIT
2
1
分享到:
评论

相关推荐

    MySQL wait_timeout连接超时

    MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...

    MySQL中interactive_timeout和wait_timeout的区别

    例如,如果你的应用需要保持长时间的连接以减少频繁的连接和断开开销,可能需要增大 `interactive_timeout` 或 `wait_timeout` 的值。反之,如果服务器资源紧张,为了避免因长时间无活动的连接占用资源,可以降低...

    lab13_实验报告1

    根据当前状态,它可能发送FIN和ACK来主动断开连接(从ESTABLISHED到FIN_WAIT_1或CLOSE_WAIT到LAST_ACK),或者直接关闭连接并释放资源。 2. **TCP连接管理**: - `tcp_sock_lookup_listen()`用于查找监听状态的TCP...

    TCP通信的三次握手和四次挥手详解.docx

    1. 客户端发送FIN标志的报文,请求断开连接,进入FIN_WAIT_1状态。 2. 服务器收到FIN后,回复一个ACK报文,进入CLOSE_WAIT状态。 3. 服务器完成剩余事务后,也发送FIN报文,进入LAST_ACK状态。 4. 客户端收到服务器...

    设计模式:状态模式TCPConnection案例

    在TCP连接中,状态模式的应用尤为常见,因为TCP连接在不同的阶段会有不同的行为,比如建立连接、数据传输、断开连接等。下面我们将详细探讨这个模式以及如何在TCP连接的案例中应用。 首先,我们来理解状态模式的...

    案例测试TCP的三次握手和四次挥手过程

    TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它是互联网...通过分析抓包结果,我们可以验证和学习TCP连接的建立与终止过程中涉及的各个报文段和状态转换,进一步深化对TCP协议的理解。

    计算机网络基础.docx

    这主要是因为TCP连接是全双工的,即两端都可以同时发送和接收数据,所以在断开连接时需要分两个方向分别进行。 **四次挥手流程**: 1. **第一次挥手**:客户端发送一个FIN报文请求关闭连接,同时携带一个序列号seq...

    实验1-Wireshark抓包分析1

    在释放连接过程中,如果应用程序提前断开连接,可能导致数据丢失或连接状态混乱。 通过这个实验,学生不仅能理解TCP连接的生命周期,还能学习如何利用Wireshark工具进行网络通信分析,提升对网络安全攻防技术的理解...

    计算机网络扩展---TCP编程-2019网工.zip

    3. **TCP状态转换**:TCP连接经历CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK和TIME_WAIT等状态。 4. **流量控制**:TCP通过滑动窗口机制实现...

    javaee mysql空闲关闭

    5. **合理设计事务和连接使用**:避免长时间持有数据库连接,尽快完成事务并释放连接回池,减少因`wait_timeout`导致的问题。 6. **应用层处理异常**:在应用代码中捕获并处理因连接超时引起的异常,当发生这类异常...

    利用Socket实现双机通信C++

    TCP状态机图描绘了连接从建立到关闭的各个阶段,包括SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK和TIME_WAIT等状态。理解这些状态对于调试和优化网络程序至关重要...

    渗透面试资料 渗透测试 安服 的面试题目

    它通过三次握手来建立连接,并通过四次挥手断开连接。 - **UDP**(User Datagram Protocol,用户数据报协议)是无连接的,发送数据前不需要建立连接,因此速度快但可靠性低。 **三次握手四次挥手的过程** - **三次...

    TCP_IP详解2-2

    5. **TCP连接管理**:包括三次握手建立连接和四次挥手断开连接的过程,以及TIME_WAIT和CLOSED状态的含义。 6. **TCP流量控制**:TCP通过滑动窗口机制来控制数据发送速率,防止接收方淹没。 7. **TCP拥塞控制**:...

    http 详解-应用层协议-https

    4. 客户端再次发送 ACK, 进入 TIME_WAIT 状态;服务器和客户端关闭连接 HTTP 协议具有以下特点: 1. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。 2. 灵活:HTTP 允许传输任意类型的数据对象。 3....

    tsl脚本命令

    check_bitmap(window, bitmap, time, [x, y, width, height])** 和 **obj_check_bitmap(object, bitmap, time, [x, y, width, height])**: 这两个命令用于比较窗口或对象的位图与预期的位图是否一致,用于验证界面...

    还原大备份mysql文件失败的解决方法分享.docx

    2. **wait_timeout** 和 **interactive_timeout**: 这两个参数分别设置了非交互式连接和交互式连接在无活动状态下等待新请求的秒数。设置`set global wait_timeout=2880000;`和`set global interactive_timeout=...

    mysql 8小时空闲后连接超时的问题

    即使连接在空闲一段时间后,连接池也会负责重新验证和恢复连接,从而避免因超时而断开的问题。 此外,如果你的应用程序是基于Java的,还可以使用JDBC的`Statement`对象的`setFetchSize()`方法来控制每次从数据库...

    Linux socket programming

    3. SO_LINGER:控制断开连接时的行为,决定是否发送RST包。 八、安全考虑 1. SSL/TLS加密:通过套接字API的扩展实现安全套接字层,确保数据传输的安全性。 2. 认证与授权:通过用户名、密码、证书等方式验证...

    tcp_reno:在UserSpace中通过模拟TCP Reno实现UDP上的可靠通信

    然后,需要模拟TCP连接的建立、数据传输、确认和断开过程,以及TCP的状态机,如CLOSED、LISTEN、SYN_SENT、SYN_RCVD、ESTABLISHED、CLOSE_WAIT、LAST_ACK、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT等状态。 对于流量控制...

Global site tag (gtag.js) - Google Analytics