1、究其根本原因,在以前,服務器的負載能力差,稍微流量大一點服務器就容易就崩潰。 所以為了保護服務器不被強暴到崩潰,浏覽器要對 max connections(最大並發數)進行限制。如果每個用戶的最大並發數不限制的話,服務器的負載能力會大幅下降。
2、另外還有一個方面就是, 防止 DDOS 攻擊。最基本的 DoS 攻擊就是利用合理的服務請求來占用過多的服務資源,從而使合法用戶無法得到服務的響應。如果不限制並發請求數量,後果,啊哦,你懂的。
上面兩張 dig 命令貼圖中間出現了很多次 NS ,NS 即是 NameServer,大部分情況下又叫權威名稱服務器簡稱權威。
什麼是權威呢,通俗點講其實是某些域的權威,也就是權威上面有這些域的最新,最全的數據,所有這些域的數據都應該以此為准(只有權威可以增刪改這些域的數據),就像上面 dig com +trace 的結果可以看到,com 的權威是上面的 13 個根域。同理,所有的頂級域(cn、org、net 等等)的權威都是根域。
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 的事了,下面是一張萌萌的簡化圖:
到這裡,我們大致就可以梳理一下,迭代查詢的過程如下:
流程: . => com. => .exampl.com. => www.example.com. => IP adress TTL 為何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 協議,但是感覺本文的內容已經很充實了,內容也很多,就不再繼續往下,內容很多,希望有人能夠耐心讀完,對一些網絡基礎知識很好的鞏固效果。
參考文獻: SPDY協議介紹 無線性能優化:域名收斂 談談HTTP/2對前端的影響 域名發散--前端優化(三) 15年雙11手淘前端技術巡演 - H5性能最佳實踐 Web前端優化最佳實踐及工具集錦如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。
本文在我的 github 也可以閱讀,歡迎訂閱:【前端性能】淺談域名發散與域名收斂
如果本文對你有幫助,請點下推薦,寫文章不容易。