1、TCP协议到底怎么了?
现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议。
但TCP 协议在创建连接之前需要进行三次握手(如下图 1,更详细原理请见《理论经典:TCP协议的3次握手与4次挥手过程详解》),如果需要提高数据交互的安全性,既增加传输层安全协议(TLS),还会增加更多的更多握手次数(如下图 2)。
▲ 图 1 - TCP的三次握手原理图
▲ 图 2 - TLS的初始化握手原理图
正如上面两张图里演示的原理,TCP 协议连接建立的成本相对较高。
所以,一般的稳定网络传输都是通过TCP,但是在网络基建本身就已经越来越完善的情况下,TCP设计本身的问题便暴露了出来,特别是在弱网环境下,让我们不得不考虑一些新的可能性。
(本文同步发布于:http://www.52im.net/thread-2816-1-1.html)
2、QUIC协议登场
和 TCP 相反,UDP 协议是无连接协议。客户端发出 UDP 数据包后,只能“假设”这个数据包已经被服务端接收。这样的好处是在网络传输层无需对数据包进行确认,但存在的问题就是为了确保数据传输的可靠性,应用层协议需要自己完成包传输情况的确认。
此时,QUIC 协议就登场了。
QUIC 是 Quick UDP Internet Connections 的缩写,谷歌发明的新传输协议。
与 TCP 相比,QUIC 可以减少延迟。
QUIC 协议可以在 1 到 2 个数据包(取决于连接的服务器是新的还是已知的)内,完成连接的创建(包括 TLS)(如下图3所示)。
▲ 图 3 - QUIC 协议握手原理图
从表面上看:QUIC 非常类似于在 UDP 上实现的 TCP + TL