tcp三次握手和四次挥手全过程
TCP(Transmission Control Protocol)是一种可靠的面向连接的通信协议,其三次握手和四次挥手是建立和终止连接的重要过程。
三次握手:
- 客户端发起syn(同步)请求:客户端首先随机生成一个序列号seq,并发送SYN标志的TCP包给服务器,同时包含初始序列号seq。
- 服务器确认syn并设置ack(确认):服务器收到请求后,检查该包是否合法,如果合法则回应一个SYN+ACK包,确认序列号为客户端的seq+1,并设置自己的序列号seq_serve。
- 客户端确认ack:客户端接收到服务器的SYN+ACK包后,再次回应一个ACK包,确认序列号seq_server+1。此时,连接建立完成,双方可以开始数据传输。
四次挥手:
- 关闭顺序指定:通常是由客户端发起断开连接的步骤,它先发送FIN(结束)包,表明不再发送数据。
- 服务器确认fin:服务器收到FIN后,回复一个ACK,表示收到了这个FIN消息,但是可能还有未发送完的数据,因此不会立即关闭连接。
- 服务器的最后数据发送和fin:服务器将剩余的数据发送完毕后,发送一个FIN包给客户端。
- 客户端确认fin和close_wait:客户端收到服务器的FIN后,再发送一个ACK,至此,所有的数据已经交换完毕。然后客户端进入TIME_WAIT状态,等待一段时间(一般是2MSL,最大段生命周期)确保服务器也已关闭连接,最后关闭连接。
tcp三次握手四次挥手对象
三次握手和四次挥手的对象分别是客户端和服务器。在TCP的三次握手中,客户端向服务器发送连接请求报文段,服务器接收到请求后发送确认报文段给客户端,然后客户端再发送确认报文段给服务器,完成连接的建立。这里客户端和服务器是互相通信的对象。而在TCP的四次挥手中,一个已经建立的连接要关闭时,主动关闭连接的一方发送连接释放报文段给对方,对方接收到后发送确认报文段,然后对方再发送连接释放报文段给主动关闭连接的一方,最后主动关闭连接的一方再发送确认报文段,完成连接的关闭。也同样是客户端和服务器互相通信的对象。123
引用[.reference_title]
- 1 3 TCP三次握手,四次挥手的全过程,为什么需要三次握手,四次挥手[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2
allinsert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - 2 两张动图-彻底明白TCP的三次握手与四次挥手[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2
allinsert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
为什么tcp三次握手四次挥手
TCP 三次握手原因解释
TCP 的三次握手过程是为了建立可靠的连接,其核心目的是为了双方能够同步初始序列号 (ISN),并确认彼此的接收能力和发送能力。以下是具体原因:
防止历史请求干扰新连接:如果仅通过两次握手来建立连接,则可能存在旧的重复请求到达服务器的情况,从而引发错误连接[^1]。第三次握手的作用在于验证客户端确实收到了服务器发来的 SYN+ACK 报文,并有能力响应。
同步初始序列号:在第一次握手中,客户端随机生成一个初始序列号 ISN 并将其发送给服务端;第二次握手中,服务端返回自己的 ISN 同时确认收到客户端的 ISN;第三次握手中,客户端再次确认接收到的服务端 ISN。这样就完成了双向的序列号同步。
# 客户端发起SYN请求
client.send(SYN)
# 服务端回应SYN+ACK
server.receive(SYN)
server.send(SYN_ACK)
# 客户端确认ACK
client.receive(SYN_ACK)
client.send(ACK)
TCP 四次挥手原因解释
四次挥手的过程用于优雅地关闭已有的 TCP 连接,主要原因是 TCP 是全双工通信模式,因此需要分别结束两个方向上的数据传输。
独立关闭读写通道:当一方希望关闭连接时,它会先发送 FIN 包表示自己不再发送数据,但仍可继续接受对方的数据。另一方收到 FIN 后也会回复 ACK 表示已经知晓该消息[^2]。此时只是单向关闭完成,直到第二方也决定停止发送数据再发出自己的 FIN 包,最终形成完整的四步流程。
确保未送达数据被处理完毕:即使某一方准备断开连接,在此之前可能还有部分缓冲区中的数据尚未完全传递到对端。通过分两阶段(FIN 和 ACK)逐步通知的方式可以保障这些残留数据有机会得到妥善处置[^3]。
Client Server
| |
-----> FIN | Client wants to close connection.
|<----- ACK | Server acknowledges the request.
| |
|------> ACK | Client confirms receipt of server's acknowledgment.
|<----- FIN | Server also wishes to terminate its side.
|------> ACK | Final confirmation from client, now both sides are closed.
|
总结对比
- 三次握手的核心目标是实现可靠连接的确立以及初始化必要的参数交换;
- 而 四次挥手中的额外一次交互 则是因为要考虑到网络延迟下可能出现的部分数据未能及时传达的情形,保证整个通讯链路彻底安全解除前没有任何遗漏的信息丢失风险存在。
关键点回顾
- 只有经过三个回合才能真正建立起稳定有效的逻辑信道关系。
- 断连操作则需四个步骤来充分照顾到各自状态转换期间的各种可能性变化情况。
相关推荐













