为什么tcp 三次握手 四次挥手

TCP连接与断开流程
本文通过简单的对话形式介绍了TCP连接建立与断开的过程。握手阶段代表连接建立,分手则代表连接断开。

我想握手
好的可以握手
好,那我们握手,tcp连接成功

我想分手
好,我准备一下分手
我准备好分手了
行,那我们分手,tcp断开连接

### TCP 三次握手原因解释 TCP三次握手过程是为了建立可靠的连接,其核心目的是为了双方能够同步初始序列号 (ISN),并确认彼此的接收能力和发送能力。以下是具体原因: - **防止历史请求干扰新连接**:如果仅通过两次握手来建立连接,则可能存在旧的重复请求到达服务器的情况,从而引发错误连接[^1]。第三次握手的作用在于验证客户端确实收到了服务器发来的 SYN+ACK 报文,并有能力响应。 - **同步初始序列号**:在第一次握手中,客户端随机生成一个初始序列号 ISN 并将其发送给服务端;第二次握手中,服务端返回自己的 ISN 同时确认收到客户端的 ISN;第三次握手中,客户端再次确认接收到的服务端 ISN。这样就完成了双向的序列号同步。 ```python # 客户端发起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]。 ```plaintext 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. | ``` --- ### 总结对比 - **三次握手的核心目标**是实现可靠连接的确立以及初始化必要的参数交换; - 而 **四次挥手中的额外一次交互** 则是因为要考虑到网络延迟下可能出现的部分数据未能及时传达的情形,保证整个通讯链路彻底安全解除前没有任何遗漏的信息丢失风险存在。 #### 关键点回顾 - 只有经过三个回合才能真正建立起稳定有效的逻辑信道关系。 - 断连操作则需四个步骤来充分照顾到各自状态转换期间的各种可能性变化情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值