QUIC是一项由Google设计的协议,致力于将网络通信变得更快、更高效。它代表了对网络性能的追求,旨在提供更好的用户体验,但与此同时,QUIC也带来了一系列网络安全和监控方面的挑战。
在当今数字化世界中,网络速度是一切的关键。谷歌一直在努力提高网络效率和性能,而QUIC协议正是这个使命的一部分。然而,随着QUIC的广泛采用,一些安全问题浮出水面,这引发了对网络安全和监控的重大关切。尤其令人担忧的是,大多数传统防火墙和网络设备难以有效处理QUIC流量,导致了网络安全中的一道薄弱环节。
本文将深入探讨QUIC的工作原理,以及它如何改善网络性能。同时,我们将审视QUIC对网络安全和监控的影响,以及如何解决与QUIC相关的挑战,以确保网络仍然安全可靠。在数字时代,我们必须在速度和安全之间取得平衡,QUIC协议的崛起将迫使我们重新思考这个平衡。
让我们直接开始今天的科普!
QUIC 协议的背景可以追溯到 Google 的 gQUIC 实验,这个实验最初旨在进一步改进 HTTP/2 的性能,并将这种性能扩展到网络的安全层和传输层。这一实验代表了一项大胆而值得赞赏的尝试,因为其目标是替换传统的 HTTP 协议。2013 年,gQUIC 的首个部分开始在 Google 的服务器和 Chrome 浏览器之间传输实时数据。Google 通过 gQUIC 协议将各种 Google 服务的实时流量传送到 Chrome 客户端,随着 Google 服务从中受益,gQUIC 的应用逐渐增加。
这一早期实验的数据后来被证明对 QUIC 协议的设计和发展具有重要意义。然而,值得注意的是,早期的 gQUIC 实验中包含了两个关键的技术组件,后来通过迭代被移除:
前向纠错 (FEC): 这个功能最初采用了一种奇偶校验的方案,但它在灵活性和可实施性方面存在问题,因此无法满足不同需求。奇偶校验的方案被认为效果不佳,而且该功能的维护成本远高于其潜在好处。
ACK 熵: 这一功能旨在保护发送方免受 ACK 欺骗攻击的影响。由于所有的流量都已加密,任何 ACK 信息必须由连接的一方发送。然而,后来删除了 ACK 熵功能,因为它所防范的攻击影响相对有限,并且引入了复杂的代码和协议层面的问题。
这两个功能的去除反映出协议设计中过早的优化,随着协议的发展,这些功能变成了维护的负担,当维护成本超过潜在收益时,就被移除了。
QUIC(Quick UDP Internet Connections)是一种由Google开发的协议,旨在改善网络连接的速度和可靠性。它的目标是替代当前互联网基础设施中使用的传输控制协议(TCP),并构建在用户数据报协议(UDP)之上。
QUIC采用了加密和多路复用的技术,以提供更高的安全性和更快的数据传输速度。它允许通过单个连接传输多个数据流,从而减少延迟并提高数据吞吐量。此外,QUIC还包括拥塞控制和流量控制等功能,用于管理网络拥塞情况,确保数据传输的顺畅性。
互联网工程任务组(IETF)目前正在对QUIC进行标准化,主要的Web浏览器和服务器也在逐渐采用这一协议。与传统的TCP协议相比,QUIC已经被证明可以显著减少网页加载时间和连接断开的问题,尤其在高延迟和不稳定的网络环境中表现出色,如移动网络。QUIC的发展旨在进一步提高互联网连接的性能和安全性。
从上图可以看出:
QUIC = HTTP/2 + TLS + UDP
而
UDP + QUIC = 传输层
QUIC,你就记住两个核心:采用UDP传输层、使用TLS 1.3协议 采用UDP传输层: QUIC 使用UDP(用户数据报协议)作为传输层协议,与传统的TCP相比,UDP减少了连接建立的延迟。TCP需要经历三次握手来建立连接,这会引入1个往返时间(1-RTT)的延迟。相比之下,QUIC的UDP传输层减少了这个握手过程,从而减少了建立连接的时间。这有助于提高网络通信的效率,尤其是对于那些对延迟要求较高的应用程序。 使用TLS 1.3协议: QUIC集成了TLS(传输层安全性)协议的最新版本,即TLS 1.3。TLS 1.3具有改进的安全性和性能特性,其中一个显著的特点是支持1-RTT和0-RTT握手。传统的TLS握手需要多个往返时间(RTT),而QUIC协议通过TLS 1.3允许客户端在TLS握手完成之前发送应用程序数据。这意味着在第一次握手时需要1-RTT,但之后,已建立连接的客户端可以使用缓存的信息来快速恢复TLS连接,只需0-1 RTT。这显著减少了建立连接的时间,使数据能够更快地传输,特别是对于重复连接的情况。
HTTPS TLS 流量与 QUIC 抓包分析
2012年:QUIC的提出
QUIC协议最早由Google公司于2012年提出。它的初衷是改进互联网通信的性能,特别是Web页面加载速度,通过减少传统TCP协议中的握手延迟等问题来实现这一目标。
2016年:IETF开始标准化QUIC
在2016年,互联网工程任务组(IETF)开始正式着手标准化QUIC协议。这标志着QUIC进入了一个更广泛的开放标准化过程,旨在确保该协议能够被广泛采用并具有互操作性。
2017年:gQUIC的部署
在2017年,Google公司开发并部署了QUIC协议的初始设计,称为gQUIC。这是QUIC的一个重要里程碑,标志着其在实际网络环境中的初步应用和测试。
2021年:RFC900发布,QUIC正式标准化
QUIC协议的正式标准化版本,即RFC900,于2021年发布。这一标准化版本的发布证实了QUIC作为一种新的传输层协议的地位,使其能够在更广泛的网络环境中得以应用和推广。
说到底:QUIC 本质上是基于 HTTP/2 构建的,但具有更快的连接建立和多路复用。它旨在减少延迟,提高性能,并更好地适应现代网络。
相关视频推荐
C++网络面试题:TCP/UDP应用场景分析,UDP如何实现可靠性设计
需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
QUIC协议的基本功能包括:
独立的逻辑流: QUIC允许在单个连接上并行传输多个逻辑数据流。每个数据流都是独立管理的,这意味着一个数据流的延迟或中断不会影响其他数据流的传输。这有助于提高网络效率,特别是在处理多个请求和响应时。
一致的安全性: QUIC提供端到端的安全性,所有数据在传输过程中都经过加密。默认情况下,QUIC使用TLS 1.3来建立安全连接,确保数据的机密性和完整性。这有助于保护通信免受窃听和篡改。
低延迟: QUIC旨在减少网络通信的延迟。它采用快速的连接建立过程,减少了握手时间,并通过多路复用和快速重传等机制降低了数据传输的延迟。这对于实时应用程序和减少页面加载时间非常重要。
可靠性: QUIC提供可靠的数据传输,确保数据的完整性和准确性。它具有丢包恢复和重传机制,以应对网络中可能发生的数据包丢失或损坏情况。这有助于防止数据损坏和丢失。
避免HOL(Head-of-Line)阻塞: QUIC通过允许多个数据流在单个连接上独立传输,解决了HOL阻塞问题。这意味着即使一个数据流遇到问题,其他数据流仍然可以继续传输,而不会受到影响。这有助于提高整体效率和性能。
多路传输
QUIC 协议大概包含三大特性:
0-RTT:0 Round-Trip Time
0-RTT 是 QUIC 协议中的一项关键功能,它旨在降低连接建立时的延迟。传统的 TCP 连接需要经过三次握手(SYN,SYN-ACK,ACK)才能建立连接,而每个往返时间(Round-Trip Time,RTT)都会增加延迟。在某些情况下,这可能导致不必要的等待时间。
QUIC 的 0-RTT 特性允许客户端在连接初始化过程中同时发送数据,而无需等待握手完成。这是通过在第一次连接中包含加密后的应用程序数据实现的。这种方式使得在建立连接后立即发送数据成为可能,从而显著减少了初始请求的延迟。这对于移动应用、网页加载速度和实时通信非常重要,因为它可以加速用户体验。
多路复用是 QUIC 的另一个核心特性,旨在解决传统 HTTP/1.1 和 HTTP/2 中存在的队头阻塞问题。在传统的 HTTP 中,如果某个请求的响应出现延迟或丢失,它将阻塞后续请求的处理,从而导致页面加载速度变慢。
QUIC 允许多个逻辑数据流通过单个连接并行传输。每个数据流都有其独立的流量控制和优先级,这意味着一个数据流的延迟不会影响其他数据流。这提高了网络效率,允许快速响应多个请求,从而改善了用户体验。这对于现代网站、应用程序和多媒体流式传输非常重要。
无歧义重传是 QUIC 的重要特性,用于确保数据的可靠传输。在不稳定的网络环境中,数据包可能会丢失或损坏,因此需要一种机制来恢复丢失的数据而不引入重复数据。
QUIC 使用序列号来唯一标识数据包,并在接收方接收到数据包后发送确认。如果发送方没有收到确认,它会重新发送数据包,但只会重传丢失的数据包。这种机制确保了可靠的数据传输,而不会引入不必要的重传,从而提高了效率。
此外,QUIC 还支持拥塞控制,它可以根据网络条件调整数据包的发送速率,以避免网络拥塞。这有助于保持网络的稳定性和性能。
QUIC数据包由两个主要部分组成:头部(Header)和数据(Data)。
以下是这两个部分的详细说明:
标志位(Flags): 标志位用于指示数据包的类型、状态以及其他相关信息。不同的标志位组合可以表示不同类型的数据包,例如,是否是初始连接请求、数据包是否需要被确认等。
连接ID(Connection ID): 连接ID用于唯一标识一个连接。它是在QUIC连接建立时生成的,并在整个连接期间保持不变。
版本号(Version): 版本号表示使用的QUIC协议版本。这是为了确保通信双方使用相同版本的协议,以保持兼容性。
包编号(Packet Number): 包编号表示数据包在连接中的顺序。每个数据包都有一个唯一的包编号,用于在接收端进行数据包的排序和重组。
数据部分通常被拆分成多个小的数据帧(Frame)。每个数据帧都具有以下属性:
类型(Type): 数据帧的类型标识了它的用途,例如PING帧、ACK帧、RESET_STREAM帧等。
长度(Length): 长度字段表示数据帧的大小,以便接收端知道要接收多少数据。
负载(Payload): 负载包含实际的数据内容。
PING帧: 用于测试连接的可用性。PING帧不包含负载,只是用于确认连接是否存活。
ACK帧: 用于确认收到的数据包。它包含有关已收到的数据包的信息,以确保数据的可靠传输。
RESET_STREAM帧: 用于重置特定数据流的状态。当一个数据流需要被中断或重新开始时,可以使用RESET_STREAM帧。
STOP_SENDING帧: 用于停止向特定的数据流发送数据。这可以用于暂停数据传输或处理异常情况。
CRYPTO帧: 用于传输加密数据。在QUIC中,加密通常是在连接建立过程中进行的,CRYPTO帧用于在已建立的连接上传输加密的应用层数据。
STREAM帧: 用于传输普通数据流。STREAM帧可以包含应用层数据,用于在连接上进行双向通信,支持多路复用。
QUIC协议通过一次握手来替代传统的TCP和TLS握手,从而显著减少了建立连接所需的时间。这对需要快速在线服务的应用程序和服务非常重要。
在TCP上使用HTTP/2时,可能会受到队头阻塞的影响,这意味着一个数据包的丢失会导致后续数据包被阻塞。QUIC通过允许数据流独立到达目的地来解决了这个问题,提高了连接的性能和可靠性。
QUIC支持连接迁移,允许在网络发生变化时保持连接的稳定性。即使IP地址发生变化,也可以重新建立连接,而不需要完全重新建立连接。
QUIC协议在应用程序级别实现,而不是在操作系统内核中,这使得它更加灵活和容易进行改进和开发。开发人员可以更容易地控制和定制协议的行为。
QUIC协议更容易受到分布式拒绝服务(DDoS)攻击的威胁。因为它是无连接的,不需要像TCP那样进行三次握手,攻击者更容易发起反射和放大攻击,通过伪造源IP地址来淹没目标服务器,使其不可用。QUIC的无连接性使其更难以进行流量控制和访问控制,从而增加了DDoS攻击的可能性。
QUIC协议相对较新,可能与某些旧设备、网络设备或防火墙不兼容。一些应用程序需要精确控制网络行为,而QUIC的新特性可能不适用于所有用例。因此,在部署QUIC时,需要考虑与现有基础设施和设备的兼容性问题。
尽管QUIC被设计为提供更快速和高效的数据传输,但它的传输速率可能受到加密和身份验证机制的影响。QUIC在数据包传输方面增加了额外的开销,这可能导致较小数据包的传输速率较低,尤其是在高延迟网络中。
与TCP相比,使用QUIC进行网络故障排除可能更加复杂。由于QUIC的加密和身份验证功能,诊断与数据包丢失、网络拥塞或性能问题相关的问题可能需要更高级的网络监控工具和专业知识。解决问题的难度可能增加,因为数据包内容和流量可能不可见。
QUIC仍然处于不断发展和演进的阶段,因此可能会发生协议规范的更改和更新。使用QUIC的组织需要及时了解最新的开发和更新,以确保协议的实现始终保持最新状态,以获得最佳性能和安全性。
实时通信应用程序,如视频通话、语音聊天和即时消息,需要低延迟和可靠的数据传输。QUIC通过独立的流和拥塞控制机制,提供了快速且高效的数据传输,适用于这些应用。
物联网设备通常在受限的网络环境中运行,使用TCP或MQTT等传输协议可能导致高延迟和数据包丢失。QUIC在高延迟和丢包的网络条件下表现出色,因此适用于与物联网设备的通信,提供可靠和高效的替代方案。
车联网生态系统需要实时的数据交换,以提供车辆跟踪、交通管理和安全功能。QUIC的低延迟、多路复用和数据包恢复能力有助于确保车辆和基础设施之间的可靠通信,并提高车联网系统的性能。
云计算涉及通过互联网交付计算资源。QUIC可以提供低延迟和端到端加密,从而改善云应用程序的用户体验和安全性。
支付和电子商务应用程序需要安全可靠的数据传输,以保护用户的敏感信息。QUIC通过使用TLS加密和可靠的HTTP3流,为这些应用程序提供了更高的安全性和性能,同时提高了用户体验。
QUIC(快速 UDP 互联网连接)协议作为一种通用传输协议,正在逐渐改变互联网通信的方式。虽然它可以用于多种互联网工作流程,但目前最显著的采用领域之一是基于HTTPS的Web浏览。让我们看看谁正在使用QUIC以及它的采用情况。
QUIC最显著的应用之一是通过将Web浏览转移到QUIC来实现基于HTTPS的连接。然而,要使用QUIC,客户端和服务器都需要支持该协议。这一点在广泛采用中可能构成一定的障碍,因为目前只有少数网站已经迁移到使用HTTP/3,而HTTP/3是QUIC的后继者。
尽管QUIC的采用还在增长,但已经有一些主要的互联网巨头开始采用该协议。以下是一些主要的QUIC采用者:
Google: 作为QUIC的创建者,Google是第一个采用该协议的大公司之一。在Google生态系统中,包括服务器、应用程序、服务和客户端,QUIC的部署相对容易。例如,Google将其视频平台YouTube的30%流量迁移到了QUIC上。
Facebook: Facebook已将超过75%的流量迁移到QUIC。Facebook和Instagram的移动应用程序也充分利用了QUIC的性能优势。
微软: 尽管微软的采用程度相对较低,但它正在考虑将其VPN产品从TCP转向QUIC,这表明微软也在积极探索QUIC的潜力。
QUIC的支持生态系统在不断增长,包括浏览器、应用程序、服务器、CDN、Web服务器、负载均衡器、社区项目和编程语言。以下是一些支持QUIC的关键组成部分:
浏览器: 目前,Chrome是唯一默认启用QUIC的浏览器,而Edge、Firefox、Safari和其他浏览器通常默认使用TCP,但提供QUIC作为选项。
应用程序: Google的移动应用程序,如Gmail和YouTube,以及Facebook的应用程序已经开始采用QUIC。此外,优步也在其应用程序中使用了QUIC。
服务器/CDN: 一些主要的服务器和内容分发网络(CDN),包括Akamai、Microsoft、Apple、Google、Cloudflare、Fastly、Caddy和NetApp,已经支持QUIC。尽管其中一些CDN仍处于概念证明阶段,但QUIC的采用逐渐增加。
Web 服务器: 一些Web服务器,如LiteSpeed、H2O、Nginx和Apache,也已经开始支持QUIC。
负载均衡器: 负载均衡器提供商LiteSpeed和F5 BIG-IP也已经集成了QUIC支持。
社区项目: 存在一些社区项目,如基于Chromium的libquic和充当反向代理服务器的Docker镜像,它们有助于推动QUIC的采用。
编程语言: 编程语言Go(quic-go)和Quic.NET(C#)提供了对QUIC的支持,使开发者可以轻松使用QUIC协议。
总结一下本文,QUIC协议优势很明显,但是目前来说不太成熟,希望QUIC协议能够越来越完善、越来越安全,使用率越来越高!