從輸入URL到頁面展現(xiàn)的過程
輸入URL后,會先進行域名解析。優(yōu)先查找本地host文件有無對應的IP地址,沒有的話去本地DNS服務器查找,還不行的話,本地DNS服務器會去找根DNS服務器要一個域服務器的地址進行查詢,域服務器將要查詢的域名的解析服務器地址返回給本地DNS,本地DNS去這里查詢就OK了。
瀏覽器拿到服務器的IP地址后,會向它發(fā)送HTTP請求。HTTP請求經(jīng)由一層層的處理、封裝、發(fā)出之后,最終經(jīng)由網(wǎng)絡到達服務器,建立TCP/IP連接,服務器接收到請求并開始處理。
服務器構建響應,再經(jīng)由一層層的處理、封裝、發(fā)出后,到達客戶端,瀏覽器處理請求。
瀏覽器開始渲染頁面,解析HTML,構建render樹,根據(jù)render樹的節(jié)點和CSS的對應關系,進行布局,繪制頁面。
這4個步驟包含了一個HTTP請求的完整生命周期,文章著重介紹第2步和第3步,也就是請求是如何在兩個物理端點之間進行通信的。數(shù)據(jù)的發(fā)出和接收必然會經(jīng)歷一些處理、解析的過程,這些過程在系統(tǒng)的不同層次進行。
個HTTP請求從源端發(fā)出到在終端接收的處理過程都是要經(jīng)過以下四層。其中每一層都有各自的協(xié)議。

上圖中只舉例出了最常見的協(xié)議,實際上每一層都有細分的協(xié)議:
應用層:應用程序負責將數(shù)據(jù)以相應規(guī)則(協(xié)議)進行包裝,發(fā)給傳輸層
HTTP:超文本傳輸協(xié)議
FTP:文件傳輸協(xié)議
SMTP:簡單郵件傳送協(xié)議
SNMP:簡單網(wǎng)絡管理協(xié)議
傳輸層:負責將應用層傳過來的數(shù)據(jù)進行分組,為確保終端接收數(shù)據(jù)的順序和完整性,會對每個分組進行標記,交給網(wǎng)絡層
TCP:傳輸控制協(xié)議
UDP:用戶數(shù)據(jù)協(xié)議
網(wǎng)絡層:負責將傳輸層發(fā)來的數(shù)據(jù)分組發(fā)送到目標終端
ICMP:Internet互聯(lián)網(wǎng)控制報文協(xié)議
IGMP:Internet組管理協(xié)議
IP:網(wǎng)際協(xié)議
鏈路層:為網(wǎng)絡層發(fā)送和接收數(shù)據(jù)單元
ARP:地址解析協(xié)議
RARP:逆地址解析協(xié)議
封裝
源端發(fā)送HTTP報文時,報文會以數(shù)據(jù)流的形式通過一條已經(jīng)打開的TCP連接按序傳輸,TCP收到數(shù)據(jù)流后會將其分割成小的數(shù)據(jù)塊,每個小塊被添加的TCP首部與數(shù)據(jù)塊共同組成了TCP分組,分組經(jīng)由網(wǎng)絡層發(fā)送,網(wǎng)絡層遵循IP協(xié)議,當收到分組發(fā)送請求后,會將分組其放入IP數(shù)據(jù)報,填充報頭,將數(shù)據(jù)報發(fā)經(jīng)由鏈路層發(fā)送出去。

分用
終端接收到一個以太網(wǎng)數(shù)據(jù)幀時,數(shù)據(jù)自底層向上流動,去掉發(fā)送時各層協(xié)議加上的報文首部,每層協(xié)議都要檢查報文首部的協(xié)議標識,從而確定上層協(xié)議,保證數(shù)據(jù)被正確處理,這個過程叫分用。
HTTP
HTTP屬于應用層,用戶觸發(fā)交互所產(chǎn)生的行為數(shù)據(jù)和服務端對此的響應都由它封裝成HTTP報文,再交由下層協(xié)議進行處理。報文的作用是客戶端與服務端溝通的載體,雙方都要遵循統(tǒng)一規(guī)則對信息進行處理,這一規(guī)則稱為HTTP。
客戶端與服務端的交互往往非常復雜,為了使雙方都能高效、明確、安全地通信(例如傳遞意圖與狀態(tài)、承載數(shù)據(jù)、攜帶認證信息、控制連接行為與緩存),需要依賴報文中的結構來實現(xiàn),下面先從結構開始看。
地址解析協(xié)議:ARP
IP只能讓數(shù)據(jù)在邏輯端點之間流動,但是IP之下還有網(wǎng)絡接口層,這一層也有自己的地址(MAC地址:用于在網(wǎng)絡中唯一標識一個網(wǎng)卡),從IP地址到MAC地址需要一個轉換的過程,ARP就是提供這一服務的。
ARP協(xié)議實現(xiàn)了從IP地址到MAC地址的映射。一開始,起點并不知道目標的MAC地址,只有目標IP,要獲取這個地址就涉及到了ARP的請求和應答。同樣,ARP也有自己的分組,先看一下分組格式。
以太網(wǎng)數(shù)據(jù)幀
上面所有東西都準備好了,封裝發(fā)送的其實是以太網(wǎng)數(shù)據(jù)幀。以太網(wǎng)目的地址、以太網(wǎng)源地址、幀類型這三者組成了幀首部。在首部之前還會插入前同步碼和幀開始定界符,告知接收端做一些準備工作。幀檢驗序列 FCS被添加進尾部,用來檢測幀是否出錯。.
傳輸和接收
接收到上層傳過來的數(shù)據(jù)報之后,根據(jù)MTU以及數(shù)據(jù)報大小來決定是否分割成小塊,也就是IP數(shù)據(jù)報被分片的過程。
把數(shù)據(jù)報(塊)封裝成一幀,傳給底層組件,底層組件將幀轉換為比特流,并發(fā)送出去。
以太網(wǎng)上的設備接收到幀,檢查幀里邊的目標地址,如果與本機地址匹配,幀就會被處理,一層一層向上傳遞(分用過程)。
一個網(wǎng)絡請求從源端一層層封裝,再到終端一層層拆分,最后的所有過程基本梳理清楚,文章只是簡單梳理了一下大概流程,并且只以HTTP報文通過TCP協(xié)議經(jīng)過IP傳送這一過程為例,實際還有很多概念沒有覆蓋,比如鏈路層的尾部封裝、IP的動態(tài)選路、逆地址解析協(xié)議RARP、UDP協(xié)議相關的概念,建議大家可以閱讀下面列出的參考資料,相信會有更多收獲。lw
電子發(fā)燒友App





















































評論