quic协议go语言 quit协议

详解基于UDP的低延时网络传输层协议——QUICQuic 全称 quick udp internet connection [1]quic协议go语言,“快速 UDP 互联网连接”,(和英文 quick 谐音,简称“快”)是由 Google 提出quic协议go语言的使用 udp 进行多路并发传输的协议 。
Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势 [2]:
减少quic协议go语言了 TCP 三次握手及 TLS 握手时间;
改进的拥塞控制;
避免队头阻塞的多路复用;
连接迁移;
前向冗余纠错 。
从上个世纪 90 年代互联网开始兴起一直到现在 , 大部分的互联网流量传输只使用了几个网络协议 。使用 IPv4 进行路由 , 使用 TCP 进行连接层面的流量控制,使用 SSL/TLS 协议实现传输安全,使用 DNS 进行域名解析,使用 HTTP 进行应用数据的传输 。
而且近三十年来,这几个协议的发展都非常缓慢 。TCP 主要是拥塞控制算法的改进,SSL/TLS 基本上停留在原地 , 几个小版本的改动主要是密码套件的升级,TLS1.3[3] 是一个飞跃式的变化,但截止到今天,还没有正式发布 。IPv4 虽然有一个大的进步,实现了 IPv6 , DNS 也增加了一个安全的 DNSSEC,但和 IPv6 一样 , 部署进度较慢 。
随着移动互联网快速发展以及物联网的逐步兴起,网络交互的场景越来越丰富,网络传输的内容也越来越庞大,用户对网络传输效率和 WEB 响应速度的要求也越来越高 。
一方面是历史悠久使用广泛的古老协议 , 另外一方面用户的使用场景对传输性能的要求又越来越高 。
如下几个由来已久的问题和矛盾就变得越来越突出:
协议历史悠久导致中间设备僵化;
依赖于操作系统的实现导致协议本身僵化;
建立连接的握手延迟大;
队头阻塞 。
可能是 TCP 协议使用得太久,也非常可靠 。所以quic协议go语言我们很多中间设备,包括防火墙、NAT 网关,整流器等出现了一些约定俗成的动作 。
比如有些防火墙只允许通过 80 和 443 , 不放通其他端口 。NAT 网关在转换网络地址时重写传输层的头部,有可能导致双方无法使用新的传输格式 。整流器和中间代理有时候出于安全的需要,会删除一些它们不认识的选项字段 。
TCP 协议本来是支持端口、选项及特性的增加和修改 。但是由于 TCP 协议和知名端口及选项使用的历史太悠久,中间设备已经依赖于这些潜规则 , 所以对这些内容的修改很容易遭到中间环节的干扰而失败 。
而这些干扰 , 也导致很多在 TCP 协议上的优化变得小心谨慎,步履维艰 。
TCP 是由操作系统在内核西方栈层面实现的,应用程序只能使用 , 不能直接修改 。虽然应用程序的更新迭代非常快速和简单 。但是 TCP 的迭代却非常缓慢 , 原因就是操作系统升级很麻烦 。
现在移动终端更加流行,但是移动端部分用户的操作系统升级依然可能滞后数年时间 。PC 端的系统升级滞后得更加严重,windows xp 现在还有大量用户在使用,尽管它已经存在快 20 年 。
服务端系统不依赖用户升级 , 但是由于操作系统升级涉及到底层软件和运行库的更新 , 所以也比较保守和缓慢 。
这也就意味着即使 TCP 有比较好的特性更新,也很难快速推广 。比如 TCP Fast Open 。它虽然 2013 年就被提出了,但是 Windows 很多系统版本依然不支持它 。即时通讯聊天软件开发可以咨询蔚可云 。
不管是 HTTP1.0/1.1 还是 HTTPS,HTTP2,都使用了 TCP 进行传输 。HTTPS 和 HTTP2 还需要使用 TLS 协议来进行安全传输 。

推荐阅读