HTTP的曲折:網絡請求到層層封裝和終端拆分

做爲程序員的咱們天天都在和網絡請求打交道,而前端程序員接觸的最多的就是HTTP請求。平時工做中,處理網絡請求之類的操做是最多的了。可是一個請求從客戶端發出到被服務端處理、再回送響應,再被客戶端接收這一個閉環的底層細節可能並無深究過。前端

本文由源中瑞IT徐瑞ruiecjo編輯,如文中某些點若是表述有誤,歡迎指出,不勝感激。程序員

從輸入URL到頁面展示的過程瀏覽器

輸入URL後,會先進行域名解析。優先查找本地host文件有無對應的IP地址,沒有的話去本地DNS服務器查找,還不行的話,本地DNS服務器會去找根DNS服務器要一個域服務器的地址進行查詢,域服務器將要查詢的域名的解析服務器地址返回給本地DNS,本地DNS去這裏查詢就OK了。緩存

瀏覽器拿到服務器的IP地址後,會向它發送HTTP請求。HTTP請求經由一層層的處理、封裝、發出以後,最終經由網絡到達服務器,創建TCP/IP鏈接,服務器接收到請求並開始處理。安全

服務器構建響應,再經由一層層的處理、封裝、發出後,到達客戶端,瀏覽器處理請求。服務器

瀏覽器開始渲染頁面,解析HTML,構建render樹,根據render樹的節點和的對應關係,進行佈局,繪製頁面。網絡

這4個步驟包含了一個HTTP請求的完整生命週期,文章着重介紹第2步和第3步,也就是請求是如何在兩個物理端點之間進行通訊的。數據的發出和接收必然會經歷一些處理、解析的過程,這些過程在系統的不一樣層次進行。併發

個HTTP請求從源端發出到在終端接收的處理過程都是要通過如下四層。其中每一層都有各自的協議。ide

HTTP的曲折:網絡請求到層層封裝和終端拆分

上圖中只舉例出了最多見的協議,實際上每一層都有細分的協議:佈局

應用層:應用程序負責將數據以相應規則(協議)進行包裝,發給傳輸層

HTTP:超文本傳輸協議

FTP:文件傳輸協議

SMTP:簡單郵件傳送協議

SNMP:簡單網絡管理協議

傳輸層:負責將應用層傳過來的數據進行分組,爲確保終端接收數據的順序和完整性,會對每一個分組進行標記,交給網絡層

TCP:傳輸控制協議

UDP:用戶數據協議

網絡層:負責將傳輸層發來的數據分組發送到目標終端

ICMP:Internet互聯網控制報文協議

IGMP:Internet組管理協議

IP:網際協議

鏈路層:爲網絡層發送和接收數據單元

ARP:地址解析協議

RARP:逆地址解析協議

封裝

源端發送HTTP報文時,報文會以數據流的形式經過一條已經打開的TCP鏈接按序傳輸,TCP收到數據流後會將其分割成小的數據塊,每一個小塊被添加的TCP首部與數據塊共同組成了TCP分組,分組經由網絡層發送,網絡層遵循IP協議,當收到分組發送請求後,會將分組其放入IP數據報,填充報頭,將數據報發經由鏈路層發送出去。

HTTP的曲折:網絡請求到層層封裝和終端拆分

分用

終端接收到一個以太網數據幀時,數據自底層向上流動,去掉髮送時各層協議加上的報文首部,每層協議都要檢查報文首部的協議標識,從而肯定上層協議,保證數據被正確處理,這個過程叫分用。

HTTP

HTTP屬於應用層,用戶觸發交互所產生的行爲數據和服務端對此的響應都由它封裝成HTTP報文,再交由下層協議進行處理。報文的做用是客戶端與服務端溝通的載體,雙方都要遵循統一規則對信息進行處理,這一規則稱爲HTTP。

客戶端與服務端的交互每每很是複雜,爲了使雙方都能高效、明確、安全地通訊(例如傳遞意圖與狀態、承載數據、攜帶認證信息、控制鏈接行爲與緩存),須要依賴報文中的結構來實現,下面先從結構開始看。

地址解析協議:ARP

IP只能讓數據在邏輯端點之間流動,可是IP之下還有網絡接口層,這一層也有本身的地址(MAC地址:用於在網絡中惟一標識一個網卡),從IP地址到MAC地址須要一個轉換的過程,ARP就是提供這一服務的。

ARP協議實現了從IP地址到MAC地址的映射。一開始,起點並不知道目標的MAC地址,只有目標IP,要獲取這個地址就涉及到了ARP的請求和應答。一樣,ARP也有本身的分組,先看一下分組格式。

以太網數據幀

上面全部東西都準備好了,封裝發送的實際上是以太網數據幀。以太網目的地址、以太網源地址、幀類型這三者組成了幀首部。在首部以前還會插入前同步碼和幀開始定界符,告知接收端作一些準備工做。幀檢驗序列 FCS被添加進尾部,用來檢測幀是否出錯。.

傳輸和接收
接收到上層傳過來的數據報以後,根據MTU以及數據報大小來決定是否分割成小塊,也就是IP數據報被分片的過程。

把數據報(塊)封裝成一幀,傳給底層組件,底層組件將幀轉換爲比特流,併發送出去。

以太網上的設備接收到幀,檢查幀裏邊的目標地址,若是與本機地址匹配,幀就會被處理,一層一層向上傳遞(分用過程)。

一個網絡請求從源端一層層封裝,再到終端一層層拆分,最後的全部過程基本梳理清楚,文章只是簡單梳理了一下大概流程,而且只以HTTP報文經過TCP協議通過IP傳送這一過程爲例,實際還有不少概念沒有覆蓋,好比鏈路層的尾部封裝、IP的動態選路、逆地址解析協議RARP、UDP協議相關的概念,建議你們能夠閱讀下面列出的參考資料,相信會有更多收穫。

相關文章
相關標籤/搜索