一、究其根本缘由,在之前,服务器的负载能力差,稍微流量大一点服务器就容易就崩溃。 因此为了保护服务器不被强暴到崩溃,浏览器要对 max connections(最大并发数)进行限制。若是每一个用户的最大并发数不限制的话,服务器的负载能力会大幅降低。
二、另外还有一个方面就是, 防止 DDOS 攻击。最基本的 DoS 攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户没法获得服务的响应。若是不限制并发请求数量,后果,啊哦,你懂的。(有读者指出说这一点并不合理,没人发DDOS是经过浏览器去发的。查找文献后,我我的得出的结论是在一个 http 请求过程当中的任何一步均可以被利用来进行 DDOS 攻击,那么放开并发限制,会不会间接致使被人利用进行 DDOS 攻击呢,我的观点,但愿有人能继续提出指正!)前端
上面两张 dig 命令贴图中间出现了不少次 NS ,NS 便是 NameServer,大部分状况下又叫权威名称服务器简称权威。
什么是权威呢,通俗点讲实际上是某些域的权威,也就是权威上面有这些域的最新,最全的数据,全部这些域的数据都应该以此为准(只有权威能够增删改这些域的数据),就像上面 dig com +trace 的结果能够看到,com 的权威是上面的 13 个根域。同理,全部的顶级域(cn、org、net 等等)的权威都是根域。segmentfault
Step1: 首先拿到 URL 后,浏览器会寻找本地的 DNS 缓存,看看是否有对应的 IP 地址,若是缓存中存在那就行了,若是没有,那就得向 DNS Server 发送一个请求,找到你想要的 IP 地址。浏览器
Step2: 首先他会向你的 ISP(互联网服务提供商) 相关的 DNS servers 发送 DNS query。而后这些 DNS 进行递归查询(recursive)。所谓的递归查询,就是可以直接返回对应的IP地址,而不是其余的 DNS server 地址。缓存
Step3: 若是上述的 DNS Servers 没有你要的域名地址,则就会发送迭代查询,即会先从 root nameservers 找起。 便是假如你要查询 www.example.com ,会先从包含根结点的 13 台最高级域名服务器开始。安全
Step4: 接着,以从右向左的方式递进,找到 com. 而后向包含 com 的 TLD(顶级域名) nameservers 发送 DNS 请求。接着找到包含 example 的 DNS server。性能优化
Step5: 如今进入到了example.com 部分,便是如今正在询问的是权威服务器,该服务器里面包含了你想要的域名信息,也就是拿到了最后的结果 record 。服务器
Step6: 递归查询的 DNS Server 接受到这 record 以后, 会将该record 保存一份到本地。 若是下一次你再请求这个 domain 时,我就能够直接返回给你了。因为每条记录都会存在 TLL ,因此 server 每隔一段时间都会发送一次请求,获取新的 record,网络
Step7: 最后,再经由最近的 DNS Server 将该条 record 返回。 一样,你的设备也会存一份该 record 的副本。 以后,就是 TCP 的事了,下面是一张萌萌的简化图:多线程
到这里,咱们大体就能够梳理一下,迭代查询的过程以下:并发
TTL 是 Time To Live 的缩写,该字段指定 IP 包被路由器丢弃以前容许经过的最大网段数量。TTL 是 IPv4 包头的一个 8 bit 字段。
简单的说它表示 DNS 记录在 DNS 服务器上缓存时间。
扯了这么多 http 请求, DNS 解析,回到正题域名收敛上,从上面能够看到,DNS 解析实际上是一个很复杂的过程,在 PC 上,咱们采用域名发散策略,是由于在 PC 端上,DNS 解析一般而言只须要几十 ms ,能够接受。而移动端,2G 网络,3G网络,4G网络/wifi 强网,并且移动 4G 容易在信号不理想的地段降级成 2G ,经过大量的数据采集和真实网络抓包分析(存在DNS解析的请求),DNS的消耗至关可观,2G网络大量5-10s,3G网络平均也要3-5s(数据来源于淘宝)。 下面附上在 2G,3G,4G, WIFI 状况下 DNS 递归解析的时间 (ms):
那么相比 http, SPDY 具体的优点在哪里呢:
1. 多路复用 请求优化SPDY 规定在一个 SPDY 链接内能够有无限个并行请求,即容许多个并发 HTTP 请求共用一个 TCP会话。这样 SPDY 经过复用在单个 TCP 链接上的屡次请求,而非为每一个请求单独开放链接,这样只需创建一个 TCP 链接就能够传送网页上全部资源,不只能够减小消息交互往返的时间还能够避免建立新链接形成的延迟,使得 TCP 的效率更高。
此外,SPDY 的多路复用能够设置优先级,而不像传统 HTTP 那样严格按照先入先出一个一个处理请求,它会选择性的先传输 CSS 这样更重要的资源,而后再传输网站图标之类不过重要的资源,能够避免让非关键资源占用网络通道的问题,提高 TCP 的性能。
2. 支持服务器推送技术
服务器能够主动向客户端发起通讯向客户端推送数据,这种预加载可使用户一直保持一个快速的网络。
3. SPDY 压缩了 HTTP 头
舍弃掉了没必要要的头信息,通过压缩以后能够节省多余数据传输所带来的等待时间和带宽。
4. 强制使用 SSL 传输协议
Google 认为 Web 将来的发展方向一定是安全的网络链接,所有请求 SSL 加密后,信息传输更加安全。
看看 SPDY 的做用图:
SPDY 协议在性能上对 HTTP 作了很大的优化,其核心思想是尽可能减小链接个数,而对于 HTTP 的语义并无作太大的修改。
具体来讲是,SPDY 使用了 HTTP 的方法和页眉,可是删除了一些头并重写了 HTTP 中管理链接和数据转移格式的部分,因此基本上是兼容 HTTP 的。
写到这里,好想继续往下写 HTTP/2 ,由于 HTTP/2 的前身便是 SPDY 协议,可是感受本文的内容已经很充实了,内容也不少,就再也不继续往下,内容不少,但愿有人可以耐心读完,对一些网络基础知识很好的巩固效果。