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,这样服务器就知道客户端确实准备好了进行数据通信,避免了服务器为一个客户端不打算使用的连接分配资源。

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

相关推荐
凯瑟琳.奥古斯特17 小时前
DNS解析全流程详解
网络·网络协议
Deitymoon18 小时前
ESP8266——TCP客户端
网络·网络协议·tcp/ip
Deitymoon21 小时前
ESP8266——透传
单片机·网络协议·tcp/ip
Deitymoon1 天前
ESP8266——UDP传输
单片机·网络协议·udp
S1998_1997111609•X1 天前
论恶意注入污染蜜罐进程函数值取仺⺋以集团犯罪获取数据爬虫的轮系依据
网络·数据库·爬虫·网络协议·百度
S1998_1997111609•X1 天前
恶意注入污染蜜罐HDMI进程函数值进行封禁垃圾蠕虫仓蟲的轮系依据行为戆直㞢仓shell token
数据库·爬虫·网络协议·百度·开闭原则
小墨同学boy1 天前
别再折腾 FRP 了!无公网 IP、不碰路由器,Tailscale 三步搞定异地组网
网络·网络协议·tcp/ip
想成为优秀工程师的爸爸1 天前
车载以太网之要火系列 - 第33篇:郭大侠学UDS(10服务)- 桃花岛内规矩多,模式切换要会说
网络·笔记·网络协议·信息与通信·车载以太网
m0_738120721 天前
网路安全编程——熟悉并使用Scapy简单实现捕捉主流邮箱协议(SMTP、POP3和IMAP) 的身份凭证
网络·python·网络协议·tcp/ip·安全·网络安全