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

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

相关推荐
汤愈韬14 小时前
网络安全之网络基础知识_2
网络协议·安全·web安全
风逸尘_lz17 小时前
05-LPB3568针对不同网段实现UDP通信
网络·网络协议·udp
灰子学技术19 小时前
Envoy 中 TCP 网络连接实现分析
运维·服务器·网络·网络协议·tcp/ip
IpdataCloud19 小时前
米哈游黑产案解析:游戏账号批量注册如何用IP查询识别外挂与多开用户?操作指南
网络协议·tcp/ip·游戏
星宇笔记19 小时前
我做了一个本地网页版嵌入式调试工具:支持 Serial / TCP / UDP、实时曲线、HEX 发送
单片机·嵌入式硬件·网络协议·tcp/ip·udp·开源软件
请数据别和我作队20 小时前
Python实现直播弹幕数据采集(WebSocket实时弹幕采集)
开发语言·网络·python·websocket·网络协议·学习分享
大數據精準工單獲取20 小时前
【数据抓取】 编写爬虫基本请求:使用爬虫框架发送 HTTP 请求,获取网页内容
爬虫·网络协议·http
测试人社区—835220 小时前
‌TCP/IP协议栈参数调优验证:软件测试从业者指南
网络·人工智能·网络协议·tcp/ip·测试工具·语音识别·压力测试
时空自由民.20 小时前
HTTP协议和MQTT协议区别
网络·网络协议·http
运维儿20 小时前
5.VLAN的高级技术MUX VLANSuper VLANVLAN Mapping
网络·网络协议·tcp/ip·linux 网络·云计算网络