新消息:Helius 收购 Light Protocol
如何快速(QUICkly)缓解垃圾流量:你需要了解的 Solana 与 QUIC 知识
博客/基础知识

如何快速(QUICkly)缓解垃圾流量:你需要了解的 Solana 与 QUIC 知识

Developer Experience EngineerX 上的 0xIchigoLinkedIn 上的 0xIchigoGitHub 上的 0xIchigo
阅读需 12 分钟

本文讲什么?

Solana 是目前市场上速度最快、可扩展性最高的区块链。它以交易速度著称,因此非常适合各种用例。尽管取得了这些成就,Solana 网络仍因停机问题受到恐惧、不确定性和怀疑的影响,俗称 FUD。过去,这些担忧确实有其合理性,但如今已没有依据。为什么?过去一年,Solana Labs 的工程师一直在推进多项网络升级,其中最重要的一项,是用 QUIC 取代 Solana 基于原始 UDP 的自定义交易接收协议。

本文将分析网络协议、TCP 和 UDP 的运作机制,并探讨 QUIC 如何改进这两种协议。随后,我们会将重点转向 Solana,讨论 QUIC 为其带来的独特优势。本文旨在帮助你全面理解,为什么这项网络升级是 Solana 的重要技术里程碑。

Solana 网络升级

2022 年 12 月 13 日,Solana Foundation 发布了一篇题为“Solana 网络升级”的新闻文章。文中列出了多项网络升级及其进展。具体如下:

QUIC

  • 目前已在 Mainnet-beta 上线

权益加权 QoS

  • 目前已在 Mainnet-beta 上线

费用市场

  • 目前已在 Mainnet-beta 上线,即将支持 RPC 和钱包
  • 你可以在这里关注其进展

扩大交易大小

  • 目前正在开发中

紧凑投票状态

  • 目前已在 Testnet 上线

Solana 过去发生停机的一大原因是垃圾流量。部分示例包括:

  • 2021 年 9 月 14 日的 Grape IDO 垃圾流量事件
  • 2022 年 1 月 6 日至 12 日发生的 DDoS 攻击
  • 2022 年 4 月 30 日至 5 月 1 日发生的 NFT 铸造垃圾流量事件

自实施 QUIC 以来,Solana 尚未报告任何与垃圾流量相关的停机事件。这使 QUIC 成为改善 Solana 网络流量和数据接收的一项里程碑式成果。在了解 QUIC 之前,我们必须先探究网络协议的运作机制。深入理解网络基础知识,才能看清 QUIC 对 Solana 网络的真正影响。

什么是网络协议?

网络协议是一套既定规则,用于规定如何在同一网络中的设备之间发送数据。无论连接设备的内部机制、结构或设计如何,网络协议都能让它们轻松相互通信。

想象一下,你和朋友面对面坐在巴黎的一家餐厅里。你们决定都说法语,因此对话进行得十分顺畅。共同决定使用法语,意味着双方同意遵循一套彼此都理解的语法规则、词汇和发音。

网络协议在联网设备之间的作用与此类似,就像法语是你们在巴黎餐厅中对话的“协议”。选择使用 TCP、UDP 或 QUIC,就意味着同意遵循一套既定规则和约定来交换信息。遵循特定的网络协议,可确保联网设备能够准确理解彼此,不会产生混淆。

什么是 TCP?

传输控制协议(TCP)是一种标准化通信接口,用于在网络中的两个端点之间发送数据流。Vint Cerf 和 Bob Kahn 创建了传输控制程序,这是一种单体协议,后来被拆分为由 TCP 和互联网协议(IP)组成的模块化架构。整套协议统称为 TCP/IP。本文使用缩写 TCP 时,指的是传输控制协议,而不是整套协议。

TCP 是面向连接的协议;发送数据前,客户端与服务器之间必须先建立连接。TCP 通过三次握手建立连接:同步(SYN)、同步确认(SYN-ACK)和确认(ACK)。你可以把 SYN 想象成伸出手准备握手,并询问对方是否准备好交谈;SYN-ACK 就像对方与你握手,表示已经准备好,并询问你是否愿意继续;ACK 则像你回握对方的手,表示愿意继续交谈。至此,会话正式建立。双方都知道彼此已经连接,并确认已准备好共享信息。

TCP 会将数据拆分为数据包,再通过网络发送。每个数据包都会添加少量信息。这些附加信息包括用于检测数据包丢失或错序的序列号,以及用于检测数据包内部错误的校验和。

当对话被打断时,我们会请对方再说一遍,以确保自己听得准确。TCP 通过自动重传请求(ARQ)以类似方式处理传输中断。出现问题时,ARQ 会通知发送方重新发送受损或丢失的数据包。随后,TCP 会要求发送方降低数据传输速率,并限制传输途中尚未确认的数据包数量。错误解决后,TCP 会通过相应机制避免拥塞,并逐步提升速度。

TCP 会对所有流量排序,因此并不适合所有用例。如果部分数据丢失或损坏,其后的所有数据包都必须等待。但如果我们不必等待呢?

什么是 UDP?

用户数据报协议(UDP)是一种用于通过网络传输数据的标准化通信接口。与 TCP 不同,UDP 是无连接协议,不保证数据包的交付、顺序或去重。UDP 不执行任何握手过程,因此底层网络的任何不可靠因素都可能影响数据传输。UDP 无需花时间与目标建立连接,所以速度比其他协议更快。不过,这也让人们将其戏称为“不可靠数据报协议”。

UDP 通过网络发送数据报来工作。数据报是一组更加独立的数据,其中包含从源地址路由到目标地址所需的信息。由于包含这些信息,数据报在路由时不依赖其他数据报。每个数据报由标头和数据组成。标头包含四个字段,每个字段均为 16 位:可选的源端口、目标端口、长度和可选的校验和。发送过程如下:

  • 发送应用创建一个 UDP 套接字
  • 发送应用将待发送数据放入 UDP 数据报中,标头包含目标端口及其他相关信息
  • 数据报被发送至 IP 层进行路由和交付
  • IP 层接收数据报并将其传输至 UDP 层,同时移除其标头
  • 数据报被发送至监听指定端口的应用

你可以把 UDP 想象成隔着一个喧闹的房间与某人交谈。你朝对方大喊,不关心他们是否听到,也不等待他们回应。你只想迅速传达信息,不进行长时间对话。这种方式有风险,因为对方可能没有听清你的全部内容,但也可能非常有效。

既然有 TCP 这种更可靠的协议,为什么还要使用 UDP 这样的无连接通信协议?UDP 对时间敏感型应用非常有用,也适合能够容忍部分数据丢失的场景。和朋友玩电子游戏时,丢失几帧画面远比持续暂停和缓冲好得多。UDP 也用于 VoIP 通话、域名系统(DNS)查询、监控和日志记录。

QUIC:兼顾效率与可靠性

QUIC 是一种现代传输层协议,由 Google 的 Jim Roskind 于 2013 年设计。它将 TCP 的可靠性与 UDP 的低延迟优势结合起来,为快速、安全的异步通信创建了优化环境。QUIC 将 TCP 的安全会话和高级流量控制策略整合到 UDP 提供的灵活快速框架中,从而脱颖而出。

QUIC 将加密密钥和协议详情的交换整合到初始握手中,从而简化连接设置。初始握手始终通过传输层安全协议(TLS)进行安全加密。该协议通过 UDP 实现多路复用连接,让多个独立数据流能够在互不影响的情况下到达各自端点。QUIC 独立控制每个数据流,即使一个数据流遇到错误,也不会阻碍其他数据流。这有助于防止队头阻塞(即队列中的第一个数据包导致后续一列数据包受阻),而 TCP 连接经常受到这一问题困扰。

如果数据包丢失或损坏,QUIC 会智能地重新传输数据,维持通信的完整性与连续性。此外,QUIC 能有效应对网络环境变化。每个数据包都携带一个连接标识符,无论来源如何,它都能唯一标识与服务器的连接。因此,只需再发送一个数据包即可重新建立连接,因为每个数据包都包含此 ID,这意味着原始连接仍然有效。打个比方,即使你走到另一个房间,对话也不会中断,而是能够无缝继续。

想象你再次置身于那个喧闹的房间,正尝试与朋友交谈。这一次,你们配备了加密对讲机,可以安全清晰地交流。当对话涉及不同话题时,你的朋友会竖起大拇指确认收到每条消息。如果对方露出困惑的表情,你就会重复未被理解的内容,确保信息不会在传递中丢失。即使你或朋友走到另一个房间,对话也不会中断。这正是 QUIC 的本质——稳健、灵活且高效的通信。

Solana 如何实施 QUIC

QUIC 为 Solana 带来了多项优势,主要包括:

  • 缩短连接建立时间:QUIC 通过优化握手过程,将延迟降至最低
  • 多路复用与高效的数据包管理:QUIC 能够同时处理多个数据流,且不会出现队头阻塞,从而提高交易吞吐量和效率
  • 适应性与韧性:该协议旨在适应不断变化的网络状况,这对 Solana 这样的分布式去中心化系统至关重要
  • 针对网络优化进行定制:QUIC 的灵活性支持 Solana 这类定制实现,以满足特定的网络性能和安全目标

QUIC 已添加到接收用户交易的端口。这样就能限制单个参与者的流量,让网络专注于处理真实交易。QUIC 已在 Solana 上线,并随 1.13.4 版本在 Mainnet-beta 中得到全面采用。集成后,网络的稳定性和吞吐量均得到显著改善。

尽管取得了这些进展,近期的网络拥塞仍引发了关于 QUIC 计算效率与 Solana 先前 UDP 实现相比孰优孰劣的争论。批评者指出,原始 UDP 方案允许验证者专注于交易处理,无需管理握手垃圾流量和加密。此外,在 Solana 的实现中,密钥交换与验证并不属于初始握手的一部分。Solana 使用 QUIC 发送“质询数据包”的选项来验证 IP 地址。这项质询的核心目的,是避免在握手的第一阶段验证证书,转而在完成 IP 验证后的第二阶段进行验证。考虑到 Solana 最近在 2 月发生的网络中断可被视为拒绝服务,Solana 是否曾因垃圾流量或 DDoS 攻击而停机,仍存在争议。

随着网络不断演进,持续审查并改进已经部署的网络实现非常重要。QUIC 旨在解决 TCP 和 UDP 的许多问题,但回过头来看,其实际效果仍有争议。一个重要考量是这些方案在硬件上的运行方式。由于 TCP 更简单,因此它在硬件上的运行效果远胜 QUIC。有人完全可以提出,在使用 AES 指令集时,基于 TCP 的协议会比 QUIC 拥有更高的吞吐量,并在 TPS 方面更高效。

值得注意的是,Jump Crypto 团队正在不断拓展 QUIC 的边界。该团队在开发 Solana 的新验证者客户端 Firedancer 时,创建了自己的稳健且可扩展的实现。Firedancer 的网络系统从零开始设计,以充分利用接收端扩展这一硬件加速负载均衡技术。这种并行架构让每个 CPU 核心都能高效处理一部分传入流量。该团队在推文中表示:

你可以在这里查看 Firedancer QUIC 技术里程碑的演示和主题帖。

总结

恭喜!本文介绍了网络协议的基础知识,重点分析了 TCP 和 UDP 的作用,以及它们如何演进为 QUIC。我们还研究了 Solana 对 QUIC 的实现,强调了它在增强网络方面的关键作用。虽然 QUIC 提升了 Solana 网络抵御垃圾流量和 DDoS 攻击的能力,但随着网络不断增长,其计算效率和实现细节也带来了新的挑战与争议。

QUIC 体现了 Solana 的核心目标:打造高吞吐量、低延迟的网络。它的多路复用和数据包丢失恢复能力,让 Solana 在性能与可扩展性讨论中处于前沿。Firedancer 团队的实现展示了 QUIC 的适应性,也凸显了通过定制优化来满足网络不断变化需求的潜力。

作为 Solana 开发者,理解 QUIC 有助于你在应用架构、交易错误等方面做出更明智的决策。Solana 在不断演进,QUIC 也是如此。及时掌握最新网络变化,是在 Solana 上构建高性能应用的最佳方式。即使你不是开发者,更深入地理解 QUIC 的技术原理,也能帮助你明白 为什么 Solana 是一条以速度和可扩展性著称的高性能区块链。

如果你读到了这里,anon,感谢你!记得在下方输入电子邮箱地址,这样就不会错过 Solana 的任何最新动态。准备好深入探索了吗?立即阅读 Helius 博客上的最新文章,继续你的 Solana 之旅。

其他资源 / 延伸阅读

订阅 Helius

及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新

放大图片