TCP为什么要三次握手,为什么?

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了实现可靠数据传输,TCP 协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。

三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。

具体来说,在三次握手的过程中,客户端和服务器之间会发送三个数据包:

  1. 第一次握手:客户端向服务器发送一个带有 SYN(Synchronization,同步)标志的数据包,请求建立连接。这个数据包中包含了客户端的初始序列号。
  2. 第二次握手:服务器收到客户端的请求后,会回复一个带有 SYN 和 ACK(Acknowledgement,确认)标志的数据包。这个数据包中包含了服务器的初始序列号,以及对客户端初始序列号的确认。
  3. 第三次握手:客户端收到服务器的回复后,会再次向服务器发送一个带有 ACK 标志的数据包,确认已经收到了服务器的初始序列号。

通过这三次握手,客户端和服务器都知道了对方的初始序列号,并且确认了对方已经收到了自己的序列号。这样就可以保证后续的数据传输是可靠的,不会出现数据包丢失或重复的情况。

TCP 使用三次握手(Three-Way Handshake)来建立连接,而不是两次握手,主要是出于以下几个关键原因:

  1. 防止历史连接的初始化造成混乱:如果只使用两次握手,当客户端发送的连接请求(SYN)在网络中滞留并延迟到达服务器时,客户端可能已经重启或者放弃该连接尝试,并重新发送了新的SYN。在这种情况下,如果服务器仍然对第一个滞留的SYN做出响应并建立了连接,就会导致一个无效(或称为"幽灵")的连接占用服务器资源。

  2. 同步双方的初始序列号:三次握手过程允许双方确认对方的初始序列号。序列号对于TCP的可靠数据传输至关重要,它帮助检测数据包的丢失、重复和乱序。两次握手无法确保双方都已知晓并确认了对方的序列号初始化。

  3. 确保连接的双向性:三次握手确认了客户端到服务器以及服务器回到客户端的路径都是畅通的。这一步是必要的,因为它验证了双方都有发送和接收数据的能力,而两次握手无法完全保证这一点。

  4. 避免资源浪费:通过第三次握手,客户端确认收到了服务器的SYN+ACK,这样服务器就知道客户端确实准备好了进行数据通信,避免了服务器为一个客户端不打算使用的连接分配资源。

简而言之,三次握手提供了额外的安全性和可靠性保障,确保连接是双方都同意的、新鲜的,并且双方的通信参数已经被正确初始化,这些都是两次握手所不能提供的。

相关推荐
IT学习资源每日免费分享1 小时前
网络安全系列课程合集,含病毒分析、红队安全、攻防安全等教程汇总
网络·网络协议·计算机网络·系统安全
czy87874751 小时前
在 LwIP 中,select() 函数返回值小于等于 0 通常表示发生了错误或超时
网络协议
czy87874753 小时前
深入理解 TCP 协议中三次握手建立连接和四次挥手关闭连接的核心逻辑
网络·网络协议·tcp/ip
这儿有一堆花3 小时前
实战:FastAPI与WebSocket的高并发足球数据API开发指南
websocket·网络协议·fastapi
数通工程师4 小时前
实操教程:华为防火墙HRP主备模式完整配置步骤
运维·服务器·网络·网络协议·tcp/ip·华为
青果全球http4 小时前
2026年动态代理IP实测分享:跨境与数据采集的高性价比方案
网络·网络协议·tcp/ip
Selenium-Wang4 小时前
静态IP是什么意思?一文解析原理、用途与优势
网络·网络协议·tcp/ip
YYYing.4 小时前
【计算机网络 | 第十一篇】计网之应用层(二)—— 万字解析 + 图解DNS、DHCP、HTTP2.0/3.0
网络·网络协议·计算机网络·http
czy87874755 小时前
TCP 和 IP 协议的异同
网络·网络协议·tcp/ip
Mcband5 小时前
OpenFeign - 底层原理揭秘:动态代理 + HTTP 客户端如何工作
网络·网络协议·http