如果HTTP不基于TCP

TCP和UDP之争

Posted by mengxun on December 1, 2018

前言

前两天在公司的书柜里翻了一本关于HTTP 2的书,里面有一章很有意思,讨论了一下HTTP究竟是基于TCP好呢还是基于UDP好呢

讨论

TCP有些众所周知的概念:连接,可靠性、拥塞控制,这些因素保证了TCP是一种可靠的协议,建立TCP上面的层次也能享受到这种可靠性。而UDP则没有这些因素,所以无法保证可靠,也无法适应不同的网络条件。

这样的话,如果UDP要成为新一代Web构建的基础的话,那么UDP上面的层次就需要自己实现这些可靠性的保证,提供拥塞控制等。换句话说,我们需要重复实现TCP等很多已有的特性。那么问题来了,既然这样的话,为什么不干脆接着用TCP算了?

这个问题的答案是在大多数操作系统里,TCP协议栈是在内核层面就实现好了,修改内核会很麻烦,需要操作系统的厂商配合,所以如果你想调整TCP的某些东西虽然是可能的,但是基本不太现实。

那么基于UDP的话就不会有这些问题,可以去自己实现自己定义,也就是说控制权就从“内核空间”转移到了“用户空间”,开发者对协议的控制权就可以到达前所未有的高度了。

因此,问题的本质在于“内核空间还是用户空间”,而不是“TCP还是UDP”。

实现

HTTP 2.0是在SPDY的基础上实现的,依然是建立在TCP之上的,那么未来的HTTP 3.0能不能是基于UDP的呢?

其实这个已经有实践了,Google开发了一种协议,叫QUIC(Quick UDP Internet Connection),翻译过来就是快速UDP网络连接,QUIC就是吸收了HTTP 2.0的优点然后基于UDP去实现的,提供了和HTTP 2.0等效的多路复用、流控,TLS等效的安全机制,TCP等效的可靠性、拥塞控制等。