571
社区成员
发帖
与我相关
我的任务
分享Quic 全称 quick udp internet connection [1],“快速 UDP 互联网连接”,(和英文 quick 谐音,简称“快”)是由 google 提出的使用 udp 进行多路并发传输的协议。


建立https连接

QUIC是基于UDP的协议,而UDP是不可靠传输,QUIC如何实现可靠传输呢?
可靠传输必须满足两个条件:
可靠传输:数据完整性
实现方案:基于包号PKN和确认应答SACK的丢包重传机制

就是说发送端发出的包,接收端要有足够的缓冲空间来接收。
和TCP一样,QUIC也是利用滑动窗口机制实现流量控制,也就是连续ARQ协议

目的:通过拥塞窗口限制发送方的数据量,避免整个网络拥塞。
流量控制是为了接防止发送太快,接收方接受不过来,拥塞控制控制是为了防止发送太快,整个网络拥塞。
发送窗口的大小等于min(接受窗口,拥塞窗口),即 swnd=min(rwnd,cwnd)swnd=min(rwnd,cwnd)
前面讲了接收窗口的大小是接收端告诉发送端的,那拥塞窗口的大小怎么得到的呢?
很显然,拥塞窗口是为了避免网络拥塞,应该根据网络拥塞情况动态调整。那怎么判断网络的拥塞程度呢?例如发生超时,或连续收到三次相同的ACK等,分为基于丢包的和基于网络带宽的。
拥塞控制:慢启动
初始化:cwnd=1,也就是一个MDS(Max Datagram Size)数据包大小
对于UDP而言:MDS = 1500(MTU)- 20(IP头部) - 8(UDP头部) = 1472字节,MTU是指网卡允许的最大包长度。
前面有提到QUIC的一大优势就是解决了队头阻塞的问题,什么叫队头阻塞,先回顾一个HTTP2协议。
HTTP2
HTTP2首次提出了多路复用,多路复用是指单个HTTP连接上可以同时发送多个HTTP请求,解决了HTTP1.1中单个连接只能发送一个请求的性能瓶颈。
之所以能多路复用,是因为HTTP2和HTTP1.1的帧格式是不同的,其中StreamID就是流的ID,每个请求都是自己的流ID。

QUIC还有一个独特的优势:连接迁移,其他协议都没有这个特性。
定义:当客户端切换网络时,和服务端的连接并不会断开(逻辑上),仍然可以正常通信。
实现原理:QUIC的连接是基于64位的Connection ID,网络切换时并不会改变Connection ID,连接在逻辑上仍然是通的。
TCP是不行的,TCP是基于四元组(客户端IP,客户端Port,服务端IP,服务端端口Port),只要有一个变化连接就会断开,必须要重新建立连接。

NP339 陆鹤冉

