應該多數人在面試的過程當中,都會被面試官問過,「從瀏覽器輸入一個URL到顯示頁面內容,這個過程都經歷了什麼?」面試
那麼你們回答得也應該是各類各樣,各有所長吧。瀏覽器
這個過程會經歷TCP/IP的各個層以及各個層中的針對性的處理。服務器
應用層網絡
傳輸層spa
網絡層blog
鏈路層事務
由於TCP/IP協議是經過分層管理的,每一個層有每一個層的事務。資源
應用層決定了向用戶提供應該服務時通訊的活動。rem
傳輸層對上層應用層,提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。域名
網絡層用來處理在網絡上流動的數據包。
用來處理鏈接網絡的硬件部分。(如光纖)
DNS位於應用層,DNS協議提供經過域名查找IP地址,或逆向從IP地址反查域名的服務。
HTTP協議也位於應用層,HTTP協議負責各類報文(是報文不是豹紋)的處理。
TCP協議位於傳輸層,TCP協議爲了傳輸方便,會將報文切成報文片,並打上標記;並且爲了傳輸的可靠性,TCP協議還會進行「三次握手」的驗證行爲。
IP協議位於網絡層,IP協議會經過ARP協議經過IP地址去查詢目標服務器的MAC地址,也可經過MAC地址反查IP地址。
什麼?他喵的,你不知道報文是什麼?還不知三次握手是什麼?
這部分這裏就不說太具體了,要想了解HTTP更多的內容,掘金有不少大佬寫的好文章,能夠自行查閱,這裏本渣渣就不班門弄斧了。
首先客戶端會先向服務端發一個SYN的數據包,告訴服務端,「老子要鏈接你」;服務端接收到後,會給客戶端發送一個SYN/ACK的數據包,告訴客戶端,「爸爸知道了,連吧」;最後,客戶端收到後會再給服務端發一個ACK的數據包,告訴服務端,「好的,兒子,那我連了」。
--劇終--
逼逼了那麼多,如今把以上的知識點串聯起來就能夠回答一開始的那個問題了。
當在瀏覽器輸入一個URL的時候,會先進入,TCP/IP協議的應用層,在應用層會先經歷DNS服務對域名的解析查找對應的IP地址,找到的話就繼續,找不到就完事了。找到後,應用層先將IP地址和HTTP報文轉給運輸層;在運輸層,TCP協議會將報文切成報文段,並打上標記,且爲了保證可靠的將數據送達給目標服務器,TCP還會進行一次「三次握手」的驗證行爲;接着運輸層,將處理權轉給網絡層,在網絡層(IP協議)會經過ARP協議結合IP地址去查找目標服務器的MAC地址,並增長該地址後轉發給鏈路層;這樣一來,發往網絡的通訊請求就準備齊全了。接收端的服務器在鏈路層接收到數據,按序往上發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的HTTP請求。最後,當服務端查找到客戶端須要的內容以後,按以上客戶端到服務端的流程,再走一遍,不過此次開始的服務端的應用層而已,當再次回到客戶端的應用層,瀏覽器就能看到頁面內容了。(再細一點的話,還會經歷瀏覽器的重繪,迴流等行爲)