Network Protocol
Last Update:
Word Count:
Read Time:
Network Protocol
TCP 三次握手/三次挥手
TCP 连接的建立
TCP 连接的建立采用“三次握手”过程,具体步骤如下:
第一次握手:
客户端发送一个 SYN(同步)报文段到服务器,表示请求建立连接。此时,客户端处于 SYN_SEND 状态。
报文中包含客户端的初始序列号(ISN)。
第二次握手:
服务器收到 SYN 报文后,回复一个 SYN-ACK(同步-确认)报文段,表示同意建立连接。此时,服务器处于 SYN_RECEIVED 状态。
报文中包含服务器的初始序列号(ISN)和对客户端序列号的确认(ACK)。
第三次握手:
客户端收到 SYN-ACK 报文后,发送一个 ACK(确认)报文段给服务器,表示连接建立成功。此时,客户端和服务器都进入 ESTABLISHED(已连接)状态。
TCP 连接的断开
TCP 连接的断开采用“四次挥手”过程,具体步骤如下:
第一次挥手:
客户端发送一个 FIN(结束)报文段,表示希望关闭连接。此时,客户端进入 FIN_WAIT_1 状态。
第二次挥手:
服务器收到 FIN 报文后,回复一个 ACK 报文段,确认收到关闭请求。此时,服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
第三次挥手:
服务器准备关闭连接时,发送一个 FIN 报文段给客户端,表示可以关闭连接。此时,服务器进入 LAST_ACK 状态。
第四次挥手:
客户端收到 FIN 报文后,发送一个 ACK 报文段给服务器,确认关闭请求。此时,客户端进入 TIME_WAIT 状态,等待一段时间以确保服务器收到 ACK 报文后,最终进入 CLOSED 状态。服务器在收到 ACK 后也进入 CLOSED 状态。
总结
连接建立:通过三次握手确保双方都准备好进行数据传输。
连接断开:通过四次挥手确保双方都完成数据传输并安全关闭连接。
这种机制确保了 TCP 连接的可靠性和数据的完整性。
问题 服务器大量close_wait状态
- 应用程序未关闭连接:应用程序在接收到远程端的关闭请求后,没有调用 close() 函数来关闭本地的套接字。
- 资源泄漏:应用程序可能在处理连接时出现了资源泄漏,导致未能正确关闭连接。
- 高并发:在高并发情况下,应用程序可能无法及时处理所有的连接,导致 CLOSE_WAIT 状态的连接积累。
- 长时间运行的请求:如果应用程序处理请求的时间过长,可能会导致连接在 CLOSE_WAIT 状态下停留较长时间。
打赏点小钱

