Skip to content

什么时候TCP连接不需要三次握手?

传统的 TCP 建立连接时需要三次握手,而且这三次握手只是发送简单的 SYN 和 ACK 报文。从网络带宽的资源利用的角度来看,传输层的 TCP 头部 + 网络层的 IP 头部,最少有 40 个字节,为了发送几个字节的报文数据包,而额外组装了 40 个字节的头部,这有点类似所谓的 “糊涂窗口综合症”。从应用优化的角度来看,因为要等到 TCP 经过三次握手建立连接之后才能发送应用层数据,所以会造成应用程序首次发送数据时存在一定的延迟,尤其是短连接、移动设备等场景中,这种副作用会加剧。那么这种问题如何解决呢?答案是 TFO 解决方案。

TFO(TCP Fast Open)

TFO(TCP Fast Open)是为加速TCP连接建立过程而设计的优化机制,旨在减少网络延迟,特别是在需要频繁建立TCP连接的场景下,如短时大量请求或频繁交互的应用程序中(例如网页加载、即时通讯等)。传统的TCP连接采用三次握手机制,在客户端和服务器进行数据交换前需要经过三个阶段的握手确认,TFO则通过允许在握手过程中携带数据,从而减少延迟。

  • 客户端首次向服务器发送SYN报文时,服务器通过TFO扩展机制会返回一个TFO Cookie,这个Cookie用来标识客户端。客户端将这个Cookie保存下来。

  • 下一次客户端与同一服务器通信时,可以在SYN报文中携带数据以及上次保存的TFO Cookie。服务器通过验证这个Cookie,确认客户端的身份后可以立即接受并处理数据,不再等待三次握手的完成。

  • 服务器在收到这个SYN+数据的报文后,可以立即处理并回传响应数据,减少了连接建立的延迟。

通过这个机制,TFO允许客户端在发送SYN请求时同时发送数据,从而将一次往返的延迟(RTT)省略。

顾名思义,TFO Cookie 中的 Cookie 和 Web 应用层 中的 Cookie 机制一样,第一次访问时,需要登录验证,然后由服务端验证后,后续访问中可以直接携带,无需再次登录。

TFO的优势

  • 降低延迟:在传统TCP连接中,三次握手需要一个RTT(Round-Trip Time,往返时间)才能开始数据传输,而TFO允许在SYN阶段就发送数据,因此减少了一个RTT的延迟。

  • 加速重复连接:TFO机制特别适合于那些频繁与同一服务器建立连接的应用场景,例如网页浏览、API请求等。通过缓存TFO Cookie,后续的连接可以跳过完整的握手过程,进一步减少了延迟。

  • 减少网络开销:TFO通过提前发送数据减少了TCP建立连接时的空闲时间,从而在高延迟、长距离的网络中显著提高数据传输效率。

TFO的局限性

  • 兼容性问题:TFO是TCP协议的一项扩展,客户端和服务器双方都需要支持这一机制。目前的操作系统和部分应用程序支持TFO,但并不是所有的网络设备和中间代理(如防火墙、NAT)都支持它。这意味着在某些网络环境下,TFO可能被阻止或无法使用。

  • 安全性考虑:由于TFO机制允许在握手时就传输数据,因此会有一定的安全性隐患。例如,攻击者可能伪造SYN+Cookie报文进行攻击。为此,TFO引入了TFO Cookie用于验证客户端身份,但仍需谨慎考虑在安全敏感的场景下使用TFO。

  • 中间网络设备的影响:有些网络中的中间设备(如防火墙、负载均衡器)可能会阻断TFO的SYN+数据包,导致连接失败。因此在使用TFO时需要确保中间网络设备的兼容性。

常见的优化协议

除了TCP Fast Open (TFO) 以外,还有许多用于优化网络性能的协议或算法。这些优化协议的目标大致集中在以下几方面:减少延迟、提高带宽利用率、提升连接的可靠性以及优化拥塞控制。以下是一些常见的优化协议:

1. QUIC (Quick UDP Internet Connections)

  • 背景: QUIC 是 Google 推出的协议,旨在通过基于UDP的传输提供类似于TCP的可靠性和流控机制,但优化了连接建立和数据传输的延迟问题。

  • 特点:

    • 减少连接建立延迟: QUIC 支持零往返时间(0-RTT)连接建立,避免了 TCP 三次握手和 TLS 握手的开销,特别适合于高延迟网络。

    • 内建加密: QUIC 将 TLS 加密整合进协议中,确保数据的安全传输。

    • 多路复用: QUIC 支持多条数据流的并行传输,避免了TCP中某个数据包丢失导致的“头阻塞”问题。

  • 应用场景: 浏览器(如 Chrome)以及部分移动应用已广泛使用QUIC,尤其适合网页加速和移动网络优化。

2.BBR (Bottleneck Bandwidth and Round-trip propagation time)

  • 背景: BBR 是 Google 开发的一种新型拥塞控制算法,用于代替传统的 TCP 拥塞控制算法,如 Cubic、Reno 等。

  • 特点:

    • 自适应带宽估算: BBR 通过动态估算瓶颈带宽和往返延迟(RTT),而不是依赖于丢包信号进行带宽调整,从而可以更充分利用网络资源。

    • 避免缓冲区膨胀: 与传统算法不同,BBR 不会把大量数据包挤入网络,避免了路由器和交换机中的缓冲区溢出问题。

  • 应用场景: 广泛应用于 Google 的内部服务,尤其在高带宽长延迟(LBDP)的场景下表现优异。

3. MPTCP (Multipath TCP)

  • 背景: MPTCP 是传统 TCP 的扩展版本,允许单个 TCP 连接使用多个路径同时传输数据,提升带宽利用率和连接的可靠性。

  • 特点:

    • 多路径传输: MPTCP 能够在不同的网络接口(如Wi-Fi和LTE)上同时进行数据传输,从而提高带宽和连接稳定性。

    • 无缝切换: 当某个路径发生问题时,MPTCP 可以无缝切换到其他路径,提升连接的容错性。

  • 应用场景: 移动设备上的无缝网络切换(Wi-Fi与移动网络之间的切换)、数据中心中冗余路径的高效利用等。

4. SCTP (Stream Control Transmission Protocol)

  • 背景: SCTP 是一种为电信网络设计的协议,后来扩展用于一般互联网传输。它在可靠性、多路复用和安全性方面比TCP有更强的特性。

  • 特点:

    • 消息化传输: SCTP支持消息传输,而不是像TCP那样基于字节流进行传输,因此特别适合对顺序和结构有要求的数据。

    • 多宿主和多路传输: 支持多个网络接口和多条传输路径,提供更高的容错性和网络冗余。

  • 应用场景: 适用于需要高可靠性和低延迟的场景,如电信信令传输和视频流传输。

5. LEDBAT (Low Extra Delay Background Transport)

  • 背景: LEDBAT 是一种用于后台数据传输的拥塞控制算法,旨在尽可能避免对前台传输的干扰。

  • 特点:

    • 延迟感知传输: LEDBAT 基于网络的延迟进行带宽调整,确保当网络负载较重时,减少对其他应用的影响,类似于“低优先级”传输。
  • 应用场景: 适用于需要大规模后台文件同步的场景,例如 BitTorrent 和其他P2P下载工具。

6. CUBIC

  • 背景: CUBIC 是目前 Linux 和许多现代操作系统中默认的 TCP 拥塞控制算法,设计用于优化高带宽长延迟的网络传输。

  • 特点:

    • 指数增长窗口调整: CUBIC 使用非线性的窗口增长策略,使得带宽利用率在高带宽长延迟环境下更加高效。

应用场景: 大多数互联网应用和大型数据中心传输中默认使用,适合于高带宽网络。

7. DCTCP (Data Center TCP)

  • 背景: DCTCP 是一种专为数据中心设计的拥塞控制算法,旨在提高低延迟高吞吐量环境中的传输效率。

  • 特点:

    • 基于 ECN(Explicit Congestion Notification): DCTCP 通过网络设备标记的拥塞通知来动态调整发送速率,而不是依赖于丢包检测。
  • 应用场景: 主要用于大型数据中心,适合对延迟敏感且要求高吞吐量的应用。

8. FEC (Forward Error Correction)

  • 背景: FEC 是一种错误校正技术,通过发送冗余数据来允许接收端在数据包丢失时能够重建原始数据,从而减少重传需求。

  • 特点:

    • 预防性纠错: 发送端在传输时会添加额外的冗余信息,接收端可以通过这些信息来纠正错误,而无需重新请求丢失的数据包。

应用场景: 视频流、实时通讯(如VoIP)、卫星通信等需要低延迟且允许一定数据丢失的场景。

9. HTTP/2 与 HTTP/3

  • HTTP/2: 引入了多路复用、Header压缩和服务器推送等机制,大幅提升了网络传输效率。
  • HTTP/3: 基于QUIC协议,进一步减少了延迟和连接开销,尤其在不可靠网络条件下表现优异。

小结

有人的地方就有恩怨,有恩怨的地方就有江湖,IT圈也是如此。虽然TCP协议作为互联网传输的基石已经稳定运行了几十年,但在这片“江湖”中,各种争论和优化从未停歇。TCP就像一位经验丰富的老侠客,久经沙场,虽历经风雨,依然屹立不倒。然而,随着江湖的变化,越来越多的年轻侠士,诸如QUIC、BBR等,纷纷崭露头角,试图在这片纷繁复杂的网络世界中争夺一席之地。

虽然TCP凭借其三次握手、流控机制、重传策略等“内功”功法,已经让互联网的传输有了基本保障,但它并非完美无瑕。随着时代的进步,网络的拥塞、延迟、丢包等“江湖隐患”时常困扰着侠士们的传输之路。于是,IT江湖中不断涌现出新的“武功秘籍”:TCP Fast Open(TFO)希望加快连接速度;CUBIC则试图更好地利用带宽;BBR通过拥塞控制,试图让网络变得更加畅通无阻。每一个算法和协议的诞生,都是为了让数据“侠客”们能够更快、更稳、更安全地抵达目的地。

就像江湖中有正派和邪派,协议之间也有不同的流派。QUIC这位基于UDP的新晋大侠,主张舍弃传统的三次握手,轻装上阵,通过0-RTT和多路复用一招制胜,以速度和灵活性见长,逐渐成为各大“门派”争相采用的“轻功秘籍”。与此同时,传统的TCP流派也没有停下脚步,不断优化自己的拥塞控制算法,如Vegas、西木(Westwood),每一个流派都有其独特的理念和适用的江湖局势。

互联网江湖风云变幻,分久必合,合久必分。未来,或许还会有新的协议侠士登场,带来更加高效、可靠的传输方式。而IT人,作为这片江湖的行者,所要做的,就是不断习得这些“武功秘籍”,以便在这片数据的世界中,行走自如,笑傲江湖。

Released under the MIT License.