基于quic协议开源代码(QUIC传输协议)

文章翻译自:https://devopedia.org/quic

基于quic协议开源代码(QUIC传输协议)(1)

QUIC 是一种传输层协议,旨在提供一种可选替代TCP的传输方案。QUIC基于UDP之上实现,使用TLS1.3保障传输负载安全传输,最初为HTTP场景设计的,后来扩展到其他的各种用例场景,基于QUIC传输之上的HTTP通常被称为HTTP3。

QUIC针对TCP作了多方面的改进:更快的连接建立、减少线路阻塞、更好的拥塞控制、改进隐私保护及流完整性。虽然大部分测试结果QUIC性能更优,但是某些场景下TCP的性能依然可能更优。

QUIC正在被IRTF标准化,截至2021年1月QUIC所有的草案还没有形成一个标准,目前QUIC有多种语言多种实现,大约5%的网络服务器在互联网上使用QUIC。

讨论
  1. QUIC的目标是解决TCP/IP网络协议栈的哪些问题?

基于quic协议开源代码(QUIC传输协议)(2)

传统每个HTTP连接单独使用TCP连接,但是TCP连接建立需要三次往返时间(RTT):第一次连接需要1次RTT,TLS安全需要2次RTT。对于短数据包传输握手延迟(多次RTT)收到影响较大。

HTTP2允许多个HTTP流共享一个TCP连接来缓解TCP连接问题,多个HTTP流可以并行交换数据,但是由于一个TCP连接,数据包丢失将会阻碍所有HTTP流(Head-of-Line blocking,队头阻塞),除非改变传输层否则这个问题无法解决,随着移动互联网发展,越来越多的网络流量来自有损的移动网络设备,这个问题越发严重。

  1. QUIC的核心特性有哪些?

基于quic协议开源代码(QUIC传输协议)(3)

QUIC的特性来源于克服TCP/IP的限制:

  • 连接建立:使用0-RTT设置与已知服务器连接,连接建立的时间仅在新加密秘钥交换或版本协商时增加,通过结合加密和传输握手连接建立时间更短;
  • Stream流多路复用:通过在UDP上多路复用QUIC流来克服队头阻塞问题,QUIC的数据包丢失仅会影响该数据包的流;
  • Flow流控制:接收方可以指定总字节数让发送方在每个流和跨流发送;
  • 拥塞控制:QUIC位于用户态而非内核态,可以快速更新拥塞算法,不同的应用程序可能会使用不同的拥塞算法,QUIC已经集成CUBIC和BBR算法,RTT估计也更优秀;
  • 连接迁移:即使底层客户端IP地址变化,连接也会保持,这种变化在移动客户端很常见,如WIFI和蜂窝网络的切换。

FEC前向纠错和ACK熵在QUIC的早期版本中存在,后来由于维护成本大于收益被删除。

  1. TCP/IP的问题是不是已经被TFO和SCTP解决了?实际上TLC Snapstart和TCP Fast Open(TFO),可以缩短连接建立时间,QUIC也是受这些技术的启发。流控制传输协议(SCTP)可以在传输层进行多路复用,然而网络中间设备干扰端到端原则,为了优化网络,网络运营商需要干扰TCP报头,丢弃数据包或跟踪连接,防火墙阻止不熟悉包,NAT重写传输头,这些都使得互联网上引入TFO或SCTP等变更变的困难,这种情况通常称为网络骨化,QUIC也会出现网络骨化,针对这点,QUIC对大部分协议信息进行加密,包括QUIC数据包头的一些字段,中间商无法了解更多的内容,也无法尝试以非标准方式优化交付,长期来讲QUIC的发展不用担心网络中间设备是否支持这些变化,QUIC语义仍然是端到端的。
  2. QUIC,gQUIC,iQUIC都是什么?QUIC于2012年由谷歌创立,IETF在2016年开始标准化,但截止至2021年1月依然是一个草案,与此同时很多QUIC的实现已经出现,一些支持谷歌的QUIC,一些专注于IETF的QUIC。对于谷歌的QUIC被称为gQUIC,iQUIC被称为IETF的QUIC、gQUIC被指定为一个整体,IETF QUIC更加模块化,核心的QUIC传输、带TLS的QUIC、拥塞控制、报头压缩、HTTP映射到QUIC、版本协商都是独立的IETF草案。gQUIC的加密握手被称为QUIC加密,这启发了QUIC中使用TLS 1.3的创建。客户端和服务端可以支持多个版本,并在连接建立过程中进行版本协商,版本号0x00000001~0x0000ffff为标准保留。
  3. QUIC中的一些基本术语?Stream:一种轻量级的有序字节流抽象,流可以是单向的,也可以是双向的,可以由任一端点创建,流是有优先级的,优先级由程序设定;Frame:一种结构化的信息单元(帧),有很多的帧类型,其中只有一些传输流,每帧一个流,其他的帧用于控制;Packet:一个完整的QUIC可处理单元,多个数据包可以在同一UDP数据报的一部分,数据包具有机密性和完整性保护,一个数据包可以包括多个Stream流,但数据包丢失会阻止其所有流进行重传,一个数据包承载较少的流比较好,数据包的载荷是一个或多个帧的序列,数据包的编号永远不会在连接中重复使用,即使是在重传过程中;Header:头是QUIC数据包的一部分,Header可以是long(4 Types)或short(1 Type),一些Header是加密的;Connection:客户端和服务端直接的共享状态,连接两端,连接参数在握手过程中协商,连接ID有助于正确的数据包传输,即使底层的地址发生变化。
  4. 对QUIC有哪些批评?我们注意到对QUIC的这些批评和担忧(随着QUIC的成熟,可能会被克服):安全性:对UDP的网络攻击很常见,一些企业和运营商会阻止UDP流量,但目的端口53的DNS流量除外,0-RTT可能错误地用于重放攻击,这对非幂等性请求可能是个问题。QUIC流量不会被防火墙识别或分析;网络控制:用于传输层报头是加密的,网络运营商无法优化网络以管理拥塞。例如他们不知道数据包是ACK还是重传,估计RTT更困难,唯一的措施似乎是自旋位和IP级的显式拥塞通知(ESN);性能:与TCP相比UDP实现性能低,QUIC占用了太多的CPU时间,低端智能手机和物联网设备将受到影响;延迟:只有负载均衡保持状态并路由到同一服务器时,0-RTT才起作用,由于多个版本可以并存,每个版本协商需要额外的RTT;公平性:由于QUIC位于用户态,应用程序和服务器可以实施更积极的拥塞控制算法,这对非QUIC连接不公平。
  5. 你能对比QUIC和TCP/IP的性能?

基于quic协议开源代码(QUIC传输协议)(4)

在一项研究中,由于0-RTT的快速的丢失恢复,gQUIC在桌面环境中的性能优于TCP HTTPS,在波动的带宽中,由于更好的ACK处理及更准确的RTT估计,QUIC表现更好。然而QUIC对传输乱序很敏感,认为这是丢包。QUIC在智能手机上更差,因为它在用户态运行,处理大量的小数据包的能力较差,这对TCP也不公平,因为QUIC消耗的带宽超过了它所占的份额。

Researchers at RWTH Aachen University比较TCP TLS1.3 HTTP2与gQUIC在不同网络条件下的性能对比,TCP参数进行微调,在有损网络上,QUIC表现更好,在另一测试中,浏览网页的性能没有太大的区别,他们评论到微调TCP可能就足够了。

Fastly的实验表明,由于用户态和内核态之间的昂贵内存拷贝,QUIC的性能很差,然而他们通过延迟ACK(一个QUIC的扩展),使用名为通用分段卸载(GSO)的Linux功能以及增加最大传输单元MTU长度来匹配TCP的性能

  1. 有哪些资源开始使用QUIC?IETF的QUIC WG网页是追踪最新标准化或下载最新版本的文件的地方(https://quicwg.org/)。Chromium的QUIC项目页面值得一读,FAQ展示如何用Chrome测试QUIC服务器或构建独立的QUIC服务器和客户端。Chrome浏览器默认启用QUIC,在其他流行的浏览器中可以通过设置特定的配置标志来启用HTTP3和QUIC。实施者可以通过加入quicdev Slack通道来协调互操作测试,QUIC已经有很多的实现,它们的列表保持在QUIC工作组的wiki和维基百科上,互操作矩阵也可在线获取。我们注意到其中一些实现:Chromium (C/C )、ngtcp2(C)、nginx(C)、quic go(go)和quicker(NodeJS/TypeScript)。2018年,有人评论说只有一些实现支持所有的高级功能,很少有人将HTTP/3映射到QUIC。
  2. 你能分享一些调试QUIC流量的工具吗?

基于quic协议开源代码(QUIC传输协议)(5)

可以在Chrome中捕获QUIC流量并进行离线分析,另一个工具是Wiresharke,由于数据包是加密的所以可以加载SSL秘钥,然后解密数据包,CellStream发布了Wiresharke的gQUIC和IETF QUIC配置文件。

跨QUIC版本的多种实现可能会导致次优化性能,甚至出现错误的行为,由于传统网络分析工具被调整为TCP,因此需要新的工具,哈塞尔大学已经创造了有用的工具来分析QUIC流量。

爱立信的Spindump是一种利用QUIC的Spin位计算单个连接和聚合的RTT的工具,它是由C编写,支持TCP、QUIC、COAP、DNS、ICMP和SCTP流量,它也是可以与其他程序链接的库。

QUIC里程碑

2012

基于quic协议开源代码(QUIC传输协议)(6)

谷歌在SPDY协议上的工作成为IETF标准化HTTP/2的起点,此前谷歌通过构建自己的运营商级网络和CDN对物理层进行了改进。虽然HTTP/2允许多个HTTP会话共享一个TCP连接,但是单个数据包丢失会影响该连接上的所有会话,这成为了推动传输层进行创新的动力,从而启动了QUIC的工作。

2013 6月

谷歌工程师Roskind将QUIC的设计文档公开。他指出RTT受光速的限制,它在移动网络上很关键,充其量我们可以尝试减少RTT的数量,QUIC就是这样提议的,他指出原型实现已经为现实世界的实现做好了准备。

2014 7月

Wireshark 1.12.0 版本发布,该版本引入了对谷歌QUIC的支持,2020年8月,有报道称Wireshark对谷歌gQUIC和IETF QUIC的支持依然在发展中。

2016 6月

IETF 接收QUIC 作为互联网草案,QUIC于2015年6月向IETF提出申请,IETF还将该协议从最初的扩展基于UDP的快速互联网连接形式命名为simply QUIC,因此,QUIC不应该被视为首字母的缩写,QUIC工作组于10月成立,11月发布名为QUIC:基于UDP的多路复用的安全传输的互联网草案00版本。

2018 1月

在一次采访中,我们了解到3GPP核心网络和终端(CT)工作组正在与IETF就如何在5G网络中采用QUIC进行对接。QUIC可能被考虑用于5G R16版本,3GPP对协议头被加密表示担忧,因此,他们向IETF提出来自网络供应商的需求,这些供应商通常希望更多地了解他们承载的流量,与此同时,据Openwave Mobility报道,在30家移动运营商的网络上,超过20%的视频流量使用QUIC,YouTube是这种增长的一个重要原因。

2018 10月

在IETF中,HTTP/3是HTTP over QUIC的新名称,也被称为HTTP/2 over QUIC,本质上,它是HTTP语义在QUIC上的映射,它的wire格式与HTTP/2不兼容。IETF互联网草案第17版本名为HTTP/3,于12月发布。

2019 5月

Uber的工程团队报告称,QUIC的表现优于TCP,他们使用Android的Cronet网络库,他们发现,在生产应用中,即使在低连通网络上,QUIC也将终端延迟降低10~30%,尾端延迟对Uber来说是个大问题,几乎是中值的6倍。

2020 10月

除谷歌的QUIC(Q050),谷歌Chrome浏览器还包括IETF的QUIC(v29),然而IETF QUIC 0-RTT还不受支持,谷歌声称IETF QUIC优于HTTP,优于TLS1.3,更优于TCP。谷歌搜索延迟减少2%,Youtube拒绝时间减少9%,客户端吞吐量增加了3%(桌面)和7%(移动)。谷歌还指出QUIC拥有谷歌三分之一的流量。

2020 12月

W3Techs 收集的数据显示,大约5%的web服务器使用QUIC,这一比例已从1月份的2.8%左右上升,在所有的QUIC网站中,大约80%左右使用LiteSpeed服务器。

2021 1月

基于quic协议开源代码(QUIC传输协议)(7)

IETF draft version 29 of QUIC is widely supported. Source: Netray 2021.

netray.io每周扫描一次,显示IETF的第29版本QUIC草案得到了广泛的支持,第29版于2020年6月发布,最新版本是2021年1月初步的第34版本。

References
  1. Arkko, Jari. 2019. "Gearing-up for modern Internet transport." Blog, Ericsson, January 28. Accessed 2021-01-20.
  2. AskF5. 2020. "K05822509: Decrypting HTTP/3 over QUIC with Wireshark." AskF5, February 11. Accessed 2021-01-21.
  3. Bishop, M, (ed). 2018. "Hypertext Transfer Protocol Version 3 (HTTP/3)." draft-ietf-quic-http-17, IETF, December 18. Accessed 2021-01-23.
  4. Bouzas, Santiago. 2018. "Why the Meteoric Rise of Google QUIC is Worrying Mobile Operators." Enea Openwave, January 25. Accessed 2021-01-20.
  5. CellStream. 2021. "Wireshark Profiles Repository." Resources, CellStream. Accessed 2021-01-21.
  6. Chromium. 2021a. "QUIC, a multiplexed stream transport over UDP." Chromium. Accessed 2021-01-20.
  7. Chromium. 2021b. "QUIC FAQ." Chromium. Accessed 2021-01-22.
  8. Chromium Dev. 2021. "How to capture a NetLog dump." Chromium. Accessed 2021-01-22.
  9. Eggert, Lars and Tim Lustig. 2020. "QUIC-Will it Replace TCP/IP?" Live Webcast, SNIA, April 2. Accessed 2021-01-20.
  10. EricssonResearch. 2020. "spindump." EricssonResearch, on GitHub, Novemeber 11. Accessed 2021-01-23.
  11. HTTP/3 Explained. 2020. "Common criticism." HTTP/3 Explained, June. Accessed 2021-01-20.
  12. IETF. 2021a. "QUIC (quic)." QUIC Working Group, IETF. Accessed 2021-01-20.
  13. IETF. 2021b. "QUIC (quic): Documents." QUIC Working Group, IETF. Accessed 2021-01-20.
  14. IETF. 2021c. "QUIC (quic): History." QUIC Working Group, IETF. Accessed 2021-01-20.
  15. IETF Datatracker. 2021. "QUIC: A UDP-Based Multiplexed and Secure Transport." Datatracker, IETF, January 14. Accessed 2021-01-24.
  16. IETF QUIC WG. 2020. "QUIC Versions." Wiki, quicwg/base-drafts, on GitHub, December 27. Accessed 2021-01-21.
  17. IETF QUIC WG. 2021. "Implementations. Wiki, quicwg/base-drafts, on GitHub, January 15. "Accessed 2021-01-21.
  18. Iyengar, J. 2017. "QUIC Tutorial: A New Internet Transport." IETF 98 Proceedings, Chicago, US, March 26.Accessed 2021-01-20.
  19. Iyengar, Jana. 2019. "The Maturing of QUIC." Blog, Fastly, November 11. Accessed 2021-01-20.
  20. Iyengar, J. and M. Thomson, (eds). 2016. "QUIC: A UDP-Based Multiplexed and Secure Transport." Internet-Draft, v34, IETF, November 28.Accessed 2021-01-23.
  21. Iyengar, J. and M. Thomson, (eds). 2021. "QUIC: A UDP-Based Multiplexed and Secure Transport." Internet-Draft, v34, IETF, January 15.Accessed 2021-01-21.
  22. Kakhki, Arash Molavi, Samuel Jero, David Choffnes, Cristina Nita-Rotaru, and Alan Mislove. 2019. "Taking a Long Look at QUIC: An Approach for Rigorous Evaluation of Rapidly Evolving Transport Protocols." Communications of the ACM, vol. 62, no. 7, pp. 86-94, July. Accessed 2021-01-20.
  23. Kuehlewind, M. and B. Trammell. 2020. "Applicability of the QUIC Transport Protocol." Internet-Draft, v8, IETF, November 2. Accessed 2021-01-21.
  24. Langley, Adam, Alistair Riddoch, Alyssa Wilk, Antonio Vicente, Charles Krasic, Dan Zhang, Fan Yang, Fedor Kouranov, Ian Swett, Janardhan Iyengar, Jeff Bailey, Jeremy Dorfman, Jim Roskind, Joanna Kulik, Patrik Westin, Raman Tenneti, Robbie Shade, Ryan Hamilton, Victor Vasiliev, Wan-Teh Chang, and Zhongyi Shi. 2017. "The QUIC Transport Protocol: Design and Internet-Scale Deployment." In Proceedings of the Conference of the ACM Special Interest Group on Data Communication (SIGCOMM '17), ACM, New York, NY, USA, pp. 183-196, August. Accessed 2021-01-20.
  25. Liebetrau, Etienne. 2018. "How Google’s QUIC Protocol Impacts Network Security and Reporting." Blog, fastvue, June 22. Accessed 2021-01-22.
  26. Mahindra, Rajesh, Vinoth Chandar, and Ethan Guo. 2019. "Employing QUIC Protocol to Optimize Uber’s App Performance." Uber Engineering, May 14. Accessed 2021-01-20.
  27. Marx, Robin. 2018. "QUIC and HTTP/3 : Too big to fail?!" Perfplanet, December 4. Accessed 2021-01-20.
  28. Mayer, George. 2018. "3GPP CT work on 5G." 3GPPlive, on Vimeo, January 26. Accessed 2021-01-21.
  29. Maynard, Christopher. 2020. "Wireshark doesn't show QUIC protocol." StackOverflow, August 7. Accessed 2021-01-21.
  30. Netray. 2021. "IETF-QUIC in IPv4." QUIC, Netray. Accessed 2021-01-24.
  31. Nottingham, Mark. 2015. "HTTP/2 Approved." Blog, IETF, February 17. Accessed 2021-01-23.
  32. Nottingham, Mark. 2018. "What's Happening with QUIC." Blog, IETF, October 29. Accessed 2021-01-21.
  33. Oku, Kazuho, and Jana Iyengar. 2020. "Can QUIC match TCP’s computational efficiency?" Blog, Fastly, April 30. Accessed 2021-01-20.
  34. Orozco, Frank. 2018. "How QUIC speeds up all web applications." Blog, Verizon Media, May 23. Accessed 2021-01-20.
  35. Pardue, Lucas. 2019. "HTTP/3: From root to tip." Blog, Cloudflare, January 24. Accessed 2021-01-20.
  36. Roskind, Jim. 2013a. "Experimenting with QUIC." Chromium Blog, June 27. Accessed 2021-01-20.
  37. Schinazi, David, Fan Yang, and Ian Swett. 2020. "Chrome is deploying HTTP/3 and IETF QUIC." Chromium Blog, October 7. Accessed 2021-01-21.
  38. van Damme, Bramus. 2020. "How to enable HTTP3 in Chrome / Firefox / Safari." Blog, Bram.us, April 8. Accessed 2021-01-20.
  39. W3Techs. 2021a. "Usage statistics of QUIC for websites." W3Techs. sAccessed 2021-01-20.
  40. W3Techs. 2021b. "Distribution of web servers among websites that use QUIC." W3Techs. Accessed 2021-01-20.
  41. Wikipedia. 2021. "QUIC." Wikipedia, January 14. Accessed 2021-01-20.
  42. Wireshark. 2014. "Wireshark 1.12.0 Release Notes." Accessed 2021-01-21.
  43. Wireshark. 2021. "News." Wireshark. Accessed 2021-01-21.
  44. Wolsing, Konrad. 2019. "Does TCP keep pace with QUIC?" Blog, APNIC, September 25. Accessed 2021-01-20.
进一步阅读
  1. Iyengar, Jana. 2019. "The Maturing of QUIC." Blog, Fastly, November 11. Accessed 2021-01-20.
  2. Pardue, Lucas. 2019. "HTTP/3: From root to tip." Blog, Cloudflare, January 24. Accessed 2021-01-20.
  3. Iyengar, J. and M. Thomson, (eds). 2021. "QUIC: A UDP-Based Multiplexed and Secure Transport." Internet-Draft, v34, IETF, January 15.Accessed 2021-01-21.
  4. Langley, Adam, Alistair Riddoch, Alyssa Wilk, Antonio Vicente, Charles Krasic, Dan Zhang, Fan Yang, Fedor Kouranov, Ian Swett, Janardhan Iyengar, Jeff Bailey, Jeremy Dorfman, Jim Roskind, Joanna Kulik, Patrik Westin, Raman Tenneti, Robbie Shade, Ryan Hamilton, Victor Vasiliev, Wan-Teh Chang, and Zhongyi Shi. 2017. "The QUIC Transport Protocol: Design and Internet-Scale Deployment." In Proceedings of the Conference of the ACM Special Interest Group on Data Communication (SIGCOMM '17), ACM, New York, NY, USA, pp. 183-196, August. Accessed 2021-01-20.
  5. Rüth, Jan, Ingmar Poese, Christoph Dietzel, and Oliver Hohlfeld. 2019. "A First Look at QUIC in the Wild." arXiv, v2, February 24. Accessed 2021-01-20.
  6. Roskind, Jim. 2013b. "QUIC: Quick UDP Internet Connections: multiplexed stream transport over UDP." June 24. Updated 2015-06-05. Accessed 2021-01-20.

Devopedia. 2021. "QUIC." Version 5, March 8. Accessed 2022-01-18. https://devopedia.org/quic

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页