当前位置 博文首页 > Netfilter,iptables/OpenVPN/TCP guard:-(:QUIC成为了HTTP/3的
浙江温州皮鞋湿,下雨进水不会胖。
记得大概是三四天前,朋友圈被《Google QUIC正式更名 HTTP/3 协议》这篇文章刷了屏,当时第一感觉就是“我靠,HTTP/2还没普及呢,怎么3就来了,TCP真的这么快就要下课了吗?”。我真的是虚惊一场,我虽然不喜欢TCP,但还要靠着它吃饭呢…TCP要是下课了,我岂不是有丢饭碗的危险?谢特了。又爱又恨的TCP啊!
读了全文,发现不是,我也就放了心,至少还能保住饭碗,但同时心里大骂,TMD垃圾TCP怎么还不赶紧滚蛋??!!矛盾,虚伪,贪婪,欺骗,幻想,疑惑,简单,善变…
我的微信朋友圈里大几百号人绝大多数都是干互联网这一行的,所以当业界出现一个比较轰动的大新闻时,刷屏就是必然的了。
这里先给出这篇文章的英文原文链接:
HTTP/3 :https://daniel.haxx.se/blog/2018/11/11/http-3/
大家可以连同评论一起来看。请先阅读原文或者译文,本文不再包含原文的内容和评论。
我并没有第一时间发出感概,依然如故地,我要让事情冷却几天,在忘却的救主将要降临之前,沉淀出一些剥离了主观刺激的东西,然后再写下来。
当一个新的东西出现时,首先是绝大多数人的欢呼,紧接着是少数人的批判,然后是较多的人的批评,最后这个新的东西是否逐渐趋于平庸,泯然众人,取决于是否有人有破有立。做一个批评者容易,做一个建设者很难,做一个批判者更难,后者决定了新东西是否可以持续蓬勃发展。
QUIC出来已经好几个年头了,但是一直都局限在给TCP补刀的位置,比如哪里哪里说TCP性能不好了,然后有人会说,用QUIC试试吧。这是头一次,让QUIC成为HTTP/3的标准传输协议,用于取代TCP。当然,这并不是一蹴而就的,但如果这是真的,那么TCP就是传统的,而QUIC则是新生代。
这段故事和墨洛温王朝的丕平向加洛林王朝的过渡何其相似。日光之下,并无新事。
TCP作为传统的传输控制协议,诞生在上世纪70年代那个特殊的环境里。最初的需求就是一对一的Telnet远程登录,计算机网络诞生伊始的第一个传输实验就是字符的传输,这为远程控制计算机提供了依据。在那次实验中,由于误码传丢了几个字符,在这样的背景下,TCP协议似乎是唯一正确的协议。
基于单字符的停等协议,字符流水线化传输的GBN协议,基于块传输的SR协议,三者中,似乎只有GBN是唯一正确的选择,停等协议在长RTT时效率太低,SR协议会乱序,对接收端内存要求很高且会影响终端响应度。于是,TCP协议的模版就是GBN。事情开始进化。
众所周知,后来的TCP引入了SR,即SACK机制,但这个SR却是阉割版的,我们知道,TCP的option里面的SACK段的数量是有限制的,所以TCP并没有实现严格的SR。随后为了应对互联网的拥塞,为了提高带宽的利用率,各种拥塞控制算法层出不穷,然而TCP的本质问题依然存在,即 TCP的GBN基因决定了TCP是适合串行字符传输的,而不适合块传输 。
这导致了TCP的大文件传输性能非常不佳。
我考虑过很久这个问题,TCP的问题到底出在哪里。曾经我以为TCP的性能消耗应该归咎于握手,按序,确认,现在很多人依然是这样认为的,但是那只是小Tips,虽然在短连接中,0-RTT势在必行,但在长连接中,握手开销可以忽略,此外,保序性是由传输的内容决定的,这也无关协议,就算TCP不保序,应用层自己也要保序。
问题出在传输本身,即 :
TCP协议把传输内容的属性和传输协议进行了强绑定,导致了TCP很多问题是解决不了或者很难解决的,比如:
嗯?是不是忘记了评价一下安全特性?
是的,我是故意的。
安全问题是比较特殊的。非常特殊。
任何人都希望在任何机制上加入安全模块,但任何人都不希望安全模块发生作用。这就像警察机构,没有警察,人们会觉得不安全,但是警察一旦出动,必然意味着某些不好的事情发生了。换句话说,人们只是希望安全模块静静地待在那里就好了。
这意味着如果最初没有直接且迫切的需求,侥幸心理总是让人忽略安全模块的设计。安全模块本身就是一种懒惰机制,出了事才会想到。最初的村落和城市是不设防的,受到侵略后才开始筑墙,TCP/IP网络最初也是裸奔的,后来出现了安全问题才开始出现IPSec,VPN等。如今网络安全问题相关的需求已经是直接迫切的需求了,如果要设计一个新的协议,那么安全机制必然内置其中。
IPv6也好,QUIC也好,都是新的协议,内置安全机制是必须且正确的选择,如果没有内置安全机制,那才是不应该的。所以,我并不认为QUIC协议内置安全机制是多么多么轰动的一件事。
TCP在发展了30多年以后,似乎TCP本身就成了TCP/IP网络的代名词。在我的职业生涯里,自从我毕业开始,就一直被笼罩在其阴影或者光环之下。
我找的第一份正式的工作是长春一家做教学软件的公司,面试的时候问了我一大堆关于TCP的东西,虽然最后一直在离职也没用到,但确实问了,我记得我把书上能背下来的都背下来了,结果还不错。后来我换了很多工作,几乎每一次面试都有TCP的内容,从默写协议头,描述三次握手,到拥塞控制算法,BBR原理,从socket参数的含义到TCP在Linux内核的实现,我的天啊,TCP的内容越来越多,以至于我最近的一份工作面试期间,几乎所有的问题都是TCP相关,当我这么多年逐渐对TCP有了从表面到本质的认知之后,我想我有资格喷它几句了。
不光我自己,几年来我也面试过别人,自己问的很多问题也是TCP相关,只要是做网络的,那就必然要懂TCP,虽然我并不是这么认为的,但我并不是拍板的人,我只是一个执行者。
就在前几个月,我推荐了几个网络技术功底了不得的朋友去华为,大概推荐了三个部门,最后都是以“不了解TCP”为理由而bypass,包括BAT在内的几家国内“大牌”互联网公司,我也推荐过很多人,失败的点均和“对TCP不了解”相关。就好像网络技术和TCP之间是可以划等号的。
确实,现在人们普遍的认知就是,如果不懂TCP,你很难被认为非常精通网络。
但在主观层面上客观地讲,TCP真的就是一个解决问题的协议吗?它在解决问题的同时是否带来了更多的问题呢?
我认为TCP还助长了一些很不好的风气,除了大型互联网公司的招聘偏见之外,我认为还有下面的点:
评价一个技术本不应该带入主观情绪,但这本来就是一篇散文,而不是什么技术文档,所以也就随性了。
纵使TCP问题再多,它至少给我和我的家庭带来了收入,依靠TCP我们全家生活地还不错,哈哈。
曾经,我是不Care HTTP协议的,我一直把自己定位成搞底层的,比如内核,比如网卡,比如IP路由这些才是底层,而HTTP则只是一个Web服务使用的应用层协议而已,无非也就是一个Apache/Nginx这种,没意思。后来我发现很多Apache/Nginx玩的很溜的,对TCP也玩的很溜,然后我就对HTTP协议有了新的认知。
所有TCP/IP内核的问题都是由上层顺势被发现的。当解决了select/poll的问题以及主机进程调度的问题后,最终问题一定会压向TCP。随着互联网应用场景的越发丰富,HTTP是最先感受到变化并传递变化的,事实上,在Google等公司的主导下,HTTP最终还拥抱了变化,HTTP/2似乎解决了HTTP/1的任何问题。然而一成不变的是TCP。
嗯,高铁跑在了普通轨道上降速150km/h运行,车没有问题,是路不好。
所有问题都是TCP的问题。
于是HTTP/3彻底抛弃了TCP。那么HTTP/3何时到来?
先看一个链接:
【重要】通信品質向上にむけた取り組みについてのお知らせ:https://www.ocn.ne.jp/info/announce/2018/06/22_1.html
这是2018年6月份的一个公告,可以一键翻译。
你猜,把互联网应用从TCP切到QUIC需要多久?面临什么问题?
站在当代,我们很容易评价历史,却无法预知未来。我们很容易说出我们有什么问题,却无法用一种平滑的方案去解决这个问题。
QUIC取代TCP很难,因为TCP的历史包袱太重。
几乎所有的有状态防火墙,状态NAT设计,负载均衡设备,均完全依赖TCP的状态机,如果换成QUIC,这些设备将一夜之间全部失效!我们知道,我们之所以可以上网,可以使用互联网做我们想做的事情,几乎严重依赖这些设备,甚至大型运营商也都会在所谓的 出入口 设备上做一些基于状态的动作,如果说一条 UDP连接 的源IP由一个运营商切到另一个运营商了,基于固定IP进行数据包分类的策略是不是就失效了呢?
就想象一下IPv6的部署难度就知道QUIC也将面临同样体量的问题,但它们之间的不同点在于,IPv6的部署是自底而上的,终端用户完全感觉不到变化,然而QUIC却直接是由业务驱动的,QUIC可能就是快,用户能感知体验变好了。
当然了,很多人会怼我,认为我好像已经被QUIC洗了脑,或者说对TCP过于憎恶,现在终于有第二个选择了。其实,我是用看待新事物的普遍观点来分析 QUIC事件 的,还是那句话, 新的东西纵然它有很多不足,你要谅解它的不足,给它发展的空间和时间,而不是一味地怼。
QUIC目前依然尚未得到大规模的部署,依然有很多坑,比如它的扩展性确实很不好,这意味着大规模商用部署的路程还非常遥远,但这至少确实是第二个选择,有选择,就有机会。
总之吧,要乐观,事情总是往好的一面去发展,所有的问题都是能解决的问题。
附上几篇比较好的文章链接:
The Road to QUIC :https://blog.cloudflare.com/the-road-to-quic/
UDP/QUICを使用した高速化 - AKAMAI MEDIA ACCELERATION :https://blogs.akamai.com/jp/2017/05/udpquic---akamai-media-acceleration.html
这篇文章源自于我对TCP的批判,然而在我没找到更好的替代者之前,我只能在朋友圈或者博客上骂骂咧咧。现在有人提出QUIC作为HTTP/3的标准传输协议了,我便可以放心喷了。
其实我自觉自己的辩证性批判做的很好,一直都很好。我不会盲目地去怼一个东西,也不会去盲目吹捧一个东西。
比较令我痛苦的是,我不喜欢中国传统文化,但我却很赞同中国传统文化,这是很难做到的,很难做到的事,过程一定是痛苦的。不信你试试。
到了杭州入职,我感到非常幸运,我突然发现有很多人能和我一起讨论那些 乱七八糟毫无意义 的东西了。
临时租住在公司附近,室友是个练太极的,我们经常聊一些“没有意义”的东西,最近的培训中,又接触到一位超级辩证但却不那么唯物主义的高人。我想有机会真的就可以“举酒属客,诵明月之诗,歌窈窕之章。”了吧。
浙江温州皮鞋湿,下雨进水不会胖。
zhejiang wenzhou skinshoe wet,rain flooding water will not fat.