学习文章:《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解-网络编程/专项技术区 - 即时通讯开发者社区! 》
如有错误,恳请诸位不吝赐教!
目录
3.基于 stream 和 connecton 级别的流量控制
一.Quic协议概述
Quic 全称 quick UDP internet connection,是由 Google 提出的使用 UDP 进行多路并发传输的传输层协议。
二.目前协议存在问题
近年来的各种协议发展缓慢,目前协议存在以下一些问题:
1.中间设备的僵化
目前协议很多端口的动作成为行业默认,导致端口锁死。
想要对端口特性,数量上进行修改,以及协议优化变得很困难。
2.依赖于操作系统
TCP 是在操作系统内核和中间件固件中实现的,但是操作系统的更新迭代是一个麻烦的过程,系统更新不仅要实现新的协议,同时向下兼容旧版协议。一旦对新的操作系统对TCP协议进行更改,旧版的操作系统很有可能无法于新的操作系统通讯。
因此对 TCP 进行重大更改几乎是不可能的。
3.TCP+SSL/TSL链接延迟大
两个设备连接时,选择TCP+SSL/TLS的连接时,一方面由于TCP连接的三次握手,另一方面TLS的建立也需要2RTT的连接时间,都会导致连接时延,且无法避免。
在目前一些需要时效性的场景下,比如网络直播等,这是不能接受的。
4.队头阻塞问题
TCP协议和TSL协议的可靠性就会导致队头阻塞的问题,结构性问题使得他们无法改变。
比如一旦传递的stream或者stream的部分segment丢失或错误,就需要发送端重新发送。接收端等待接受完毕后才会接收之后的stream。
三.Quic协议目标
Quic协议目标其实就是旨在解决上述问题:
1.实现TCP的可靠传输和UDP的低延时。
2.避开中间设备和操作系统,在应用程序层面实现可靠安全通讯。
四.Quic原理
QUIC 非常类似于在 UDP 上实现的 TCP + TLS + HTTP/2。
针对上述问题,Quic协议主要解决方法:
1.采用UDP协议
一方面上述问题中提到TCP协议是由操作系统的内核实现,无法对TCP进行重大的修改。所以采用UDP协议,对协议优化调整和使用可以脱离操作系统实现。
另一方面UDP协议使用上不需要通讯双方进行连接,默认连接。从而实现0RTT 的连接传输:在连接时刻同时传输数据。
图中QUIC握手实现TCP和TLS握手。
2.改进的拥堵控制
(这一部分我也还没理解好,后续补上)
3.基于 stream 和 connecton 级别的流量控制
流量控制:流量控制(traffic control)是利用软件或硬件方式来实现对电脑网络流量的控制的一种措施。它的最主要方法,是引入QoS的概念,通过为不同类型的网络数据包标记,从而决定数据包通行的优先次序。
在计算机网络中,当数据源向目的端口发送数据流时,如果目的端口队列已满,则数据包可能会丢失或被丢弃。为了防止这种情况发生,可以采用流量控制技术来控制数据包的发送速率,以确保目的端口能够及时处理收到的数据包。
QUIC 的流量控制类似 HTTP2,即在 Connection 和 Stream 级别提供了两种流量控制。
(看代码学习ing。。。后续更新)