備註:html
由於文章太長,因此將它分爲三部分,本文是第二部分。web
第一部分:深刻淺出經典面試題:從瀏覽器中輸入URL到頁面加載發生了什麼 - Part 1面試
第二部分:深刻淺出經典面試題:從瀏覽器中輸入URL到頁面加載發生了什麼 - Part 2chrome
第三部分:深刻淺出經典面試題:從瀏覽器中輸入URL到頁面加載發生了什麼 - Part 3ubuntu
「從瀏覽器中輸入URL到頁面加載的發生了什麼「,這是一道經典的面試題,涉及到的知識面很是多,但做爲一個自認爲對網絡知識掌握的比較好的老碼農來講,回答這個問題天然不在話下。若是這道題目若是在面試出現,對我來講就是送分題啊。儘管如此,我仍是願意花一些時間根據我本身的理解回答一下這個題目,看我本身到底掌握的有多深,同時也把本身的知識梳理一下。瀏覽器
這讓我想起另一件往事,這道題有點相似於「在手機上瀏覽器上輸入一個URL,手機作了一些什麼」,我當時學習通訊裏的核心網時就給本身提出過這個問題。緩存
我很是願意將這個面試題的答案共享出來,一是但願獲得你們的意見,二是也但願對那些不是特別熟的人起到一些幫助。安全
由於文章較長,我將它們分爲三大部份,後面會提供該文章的完整PDF版本,供你們下載。服務器
正如前面所說,這篇文章涉及到的知識面很是豐富,我相信您絕對能夠從本文裏學到不少基礎知識,還有一些高級話題。網絡
自認爲是目前寫的最詳細的一篇文章了,由於裏面有理論,有實戰,應該會起到一個比較好的效果。
總的來講,當你輸入在瀏覽器裏輸入一個URL到頁面加載,發生的順序以下:
假設輸入的URL是包含域名的,那確定會涉及到DNS解析。固然,若是URL僅僅是IP,那就不會涉及到DNS的。域名的出現是爲了方便記憶,由於域名比IP好記。咱們這裏假設URL包含域名。
解析的步驟大體以下圖:
記錄類型
|
含義簡介
|
A(Address)
|
指定域名對應的IPv4地址
|
AAAA
|
指定域名對應的IPv6地址
|
NS(Name Server)
|
指定該域名由哪一個DNS服務器來進行解析
|
MX(Mail Exchanger)
|
郵件交換記錄,用於電子郵件系統發郵件時根據收信人的地址後綴來定位郵件服務器
|
CNAME
|
別名記錄,多個域名映射到同一臺計算機(如同一主機提供mail和www服務)
|
TXT
|
主機名或域名的說明
|
TTL(Time-To-Live)
|
DNS服務器中保存的時間
|
PTR
|
將一個主機地址映射到對應的域名
|
HINFO
|
說明映射到特定 DNS 主機名的 CPU 類型和操做系統類型
|
[warren]$ dig
; <<>> DiG 9.9.5-3ubuntu0.16-Ubuntu <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57775
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 16265 IN NS a.root-servers.net.
. 16265 IN NS c.root-servers.net.
. 16265 IN NS j.root-servers.net.
. 16265 IN NS b.root-servers.net.
. 16265 IN NS i.root-servers.net.
. 16265 IN NS d.root-servers.net.
. 16265 IN NS k.root-servers.net.
. 16265 IN NS f.root-servers.net.
. 16265 IN NS l.root-servers.net.
. 16265 IN NS h.root-servers.net.
. 16265 IN NS m.root-servers.net.
. 16265 IN NS g.root-servers.net.
. 16265 IN NS e.root-servers.net.
;; Query time: 0 msec
;; SERVER: 208.113.157.202#53(208.113.157.202)
;; WHEN: Thu Nov 29 18:04:06 PST 2018
;; MSG SIZE rcvd: 239
|
dig
www.jd.com
; <<>> DiG 9.10.6 <<>> www.jd.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2675
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.jd.com. IN A
;; ANSWER SECTION:
www.jd.com. 300 IN CNAME www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 300 IN CNAME www.jdcdn.com.
www.jdcdn.com. 300 IN A 61.174.55.1
;; Query time: 3 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Nov 30 10:07:37 CST 2018
;; MSG SIZE rcvd: 106
|
nslookup www.jd.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
www.jd.com canonical name = www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com canonical name = www.jdcdn.com.
Name: www.jdcdn.com
Address: 61.174.55.1
|