1、答案
TCP/1.1 时代 浏览器为每一个域名维护了6个TCP连接
TCP/2.0 时代 浏览器为每个域名维护1个TCP持久连接
不卖关子,答案放在这里。如果想知道为什么不同版本的 TCP 连接数不同,那么请往下看…
2、为什么是六个,而不是其他数字呢?
在 HTTP/1.1 时代,为了提升并行下载效率,浏览器为每个域名维护了 6 个 TCP 连接。这很好理解,我们有100个资源,多线程(6个)去找服务端去要,肯定比单线程(1个)快的多。
那么问题来了,既然多线程这么好,为什么域名不多维护几个呢?7个,八个…
解决这个疑问的前,先可以给大家讲一个其他的问题,讲完了,大家就明白了。
我们平时常常说的百兆网,千兆网。但是在实际生活使用时,往往达不到这个速度。
带宽是指每秒最大能发送或者接收的字节数。我们把每秒能发送的最大字节数称为上行带宽,每秒能够接收的最大字节数称为下行带宽。
也就是说,百兆网(100M),实际下载速度是(12.5M)。100/8 = 12.5。计网课,计算机三级(网络),都有相关知识。
可是在实际使用中,商家宣传的百兆网,往往仅仅能达到下行速度的零头,2.5M。
TCP慢启动
我们都知道只有 TCP三次握手之后,才可以进行数据的接收状态(下载)。而这个接收的过程是一个加速度的过程。
你可以把他理解为一辆汽车在公路行驶的起步状态。这也能解释另一个现象,下载的东西越大,网速越快。
下载一张图片,几百kb的网速
下载王者等游戏,就可以达到几兆的速度
这就好比,一条路全长100m,汽车还没来得及启动,就停下来了。
另一条路,好几千米,汽车就可以可劲的开了。
又因为我们的带宽是有一个范围的(百兆网),所以可以容纳的车道也是有限的。当然了,有的地方带宽小,有的地方带宽大,所以折中选择了 6。
所以说,我们平时下载东西的时候,手机尽量不干其他事。家里wifi连接的手机多了,卡了,就都可以解释清楚了。男孩子们快拿去给心仪的女孩科普去吧。
当然了,这就像高速路和省道的连接处一样,带宽(车道数)不一样,有时候也会发生拥挤,这个现在我在下一篇文章详细写。
现在的你理解清,一个域名最大连接数是6个了吧。还不是实力不允许。
3、TCP/2 浏览器为什么为每个域名维护1个TCP持久连接
按照之前的分析,我们只要将网速提起来,就可以增加TCP的连接数了。理论上这没有什么问题,但对于下载大文件,无所谓,但是对于小文件来讲,还是无法将带宽利用起来,联想前面的 慢启动。
所以,我们有了TCP/2
TCP/2 的核心就是使用了多路复用技术,可以通过一个TCP连接发送多个请求。
怎么理解这个技术呢,就是有六堆货物,每堆货物有100个包裹。
http/1.1 在每一个车道上,每一次运送货物,都只能一个类型的。而且,还必须等这类型的货物运用完,才可以运送下一个类型。又因为1.1开启了长连接,就造成了有的车道占着茅坑不拉屎的现象。
http/2 只有一个车道,火力全开,混合运送。
这么一对比,好像http2.0不错,但是他也有缺陷,具体内容。我在下篇分析 http0.9 -http3.0 的文章给大家介绍。没错,就在等着你关注,瞅啥瞅。很快啊,微信搜索公众号 【聪明可爱小轩轩】,反手就是一个关注+点赞。
4、答疑过程
这是我的学弟对这道题目的回答,原谅我最近太忙,太累了。放了他的鸽子。
大家可以一起思考一下…
1、看待问题要分情况看待,就像这个问题,我们就需要考虑协议版本。
2、我们是浏览器向服务器请求,浏览器维护的TCP数量。而不是服务器可以维护多少个TCP,部分同学感觉会维护65535个(端口号),nginx只有一个80端口,难道并发只能维护一个?显然不是。
再说了,我们请求的时候,端口也没有动态的变,对吧!!!显然,这已经是另一个问题了,一台服务器,理论上,最大可以维护多少个TCP链接。如果,大家有兴趣,可以关注【聪明可爱小轩轩】,私信我。我会在后续给大家安排上。
3、一个标签页面,就是每个域名吗?域名是什么?是看请求头里面的origin字段,和打开多少个tab没有关系。
上面的文字,掺加了大量的个人思考,如果您有不同想法。希望您能私聊并赐教。
码字不易,如果您能关注,我将感激不尽。如果能点个赞,那就更好了。