我所認爲的網絡協議的核心
做爲一個開發,一個繞不開的問題就是網絡,說到網絡咱們又會想到網絡協議,那麼咱們常說的網絡協議又是什麼呢?一般咱們說的網絡協議指的是TCP/IP協議族,是互聯網全部相關協議的一個總稱,而HTTP協議只是他下邊的一個子集。固然也有說法任務TCP/IP是指TCP和IP兩種協議,還有的是認爲TCP/IP是在IP協議的通訊過程當中使用到的協議族的統稱。服務器
那麼其核心又是什麼呢?我認爲TCP/IP協議族最重要的是它分層管理的思想。TCP/IP協議族按層次分爲了應用層、傳輸層、網絡層和數據鏈路層四層結構。全部的設計都是在這四層結構上進行的,這樣就會有一個好處,若是有地方須要變更,只須要把對應層的東西進行修改就能夠了,最重要的是分工明確,應用層只考慮分配給本身的任務就能夠了,而不須要關心怎麼傳輸,能不能送達一類的問題,職能劃分明確,簡單明瞭。網絡
那麼每層都作了什麼事情呢?大數據
-
應用層操作系統
決定了向用戶提供應用服務時的通訊活動。TCP/IP協議族內預存了各種通用的應用服務,如FTP(File Transfer Protocol,文件傳輸協議)和DNS(Domain Name System,域名系統)服務等,咱們常說的HTTP協議也是處於該層。設計
-
傳輸層3d
傳輸層是應用層的上層,提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。傳輸層主要包含兩個協議TCP(Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol,用戶數據報協議)。blog
-
網絡層(網絡互連層)接口
網絡層是用來處理網絡上流動的數據包。數據包是網絡傳輸的最小數據單位。該層規定了經過怎樣的路徑(即傳輸路線)到達對方的計算機,並把數據包傳送給對方。當與對方計算機之間經過對臺計算機或網絡設備進行傳輸時,網絡層所起的做用就是在衆多的選項內選擇一條傳輸路線。咱們所熟知的如IP協議就是屬於這一層。three
-
鏈路層(數據鏈路層,網絡接口層)圖片
用來處理網絡鏈接的硬件部分。包括控制操做系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等物理可見部分。硬件上的範疇均屬於鏈路層
一個網絡請求的歷程
下面咱們那HTTP請求爲例來分析一下一個網絡請求從發出到完成的主要經歷。
首先咱們須要瞭解幾個與HTTP密切相關的協議:IP、TCP和DNS。
-
負責傳輸的IP協議
IP(Internet Protocol)協議位於網絡層,幾乎全部使用網絡的系統都會用到IP協議。注意IP跟IP地址是不一樣的概念,IP是指的協議名稱。
IP協議的做用是把各類數據包傳送給對方,而要保證確實傳送到對方那裏,須要知足各種條件,其中兩個重要條件是IP地址和MAC地址(Media Access Control Address)。
IP地址指明瞭節點被分配的地址,MAC地址是指網卡所屬的固定地址。IP地址和MAC地址進行配對,IP地址能夠變換,但MAC地址基本不會更改。
-
確保可靠性的TCP協議
上面講了TCP時候位於傳輸層的,其主要是提供可靠的字節流服務。
所謂字節流服務(Byte Stream Service)是指爲了方便傳輸,將大塊數據分割成以報文段(segment)爲單位的數據包進行管理。而可靠的傳輸服務是指可以把數據準確可靠的傳給對方,一句話說就是TCP協議爲了更容易傳送大數據把數據進行分割,而且可以保證數據最終準確送給對方。
那TCP協議是怎麼實現可靠性呢?這裏就採用了咱們所熟知的三次握手策略(three-way handshaking)。握手過程當中使用了TCP的標誌SYN(synchronize)和ACK(acknowledgement)。
首先發送端發送一個帶有SYN標誌的數據包給對方,接收端收到後回回傳一個帶有SYN/ACK標誌的數據包給發送端表示確認收到信息。而後發送端收到信息後會再回傳一個帶ACK標誌的數據包給接收端,表明握手結束。若是傳輸中斷,發送端會繼續以相同的順序發送相同的數據包。固然除了三次握手之外TCP協議還有其餘各類手段保證通訊的可靠。
-
負責域名解析的DNS服務
DNS服務和HTTP協議是同樣位於應用層的,它提供域名到IP地址之間的解析服務。計算機既能夠被賦予IP地址,也能夠被賦予主機名和域名。好比www.baidu.com。一般咱們都是經過主機名或域名來訪問對方的計算機,而不是直接輸入IP地址訪問。可是域名或主機名對人類來說比較容易記憶,可是讓計算機去理解就會比較困難,因此就有了DNS服務的誕生,DNS協議提供經過域名查找IP地址或逆向從IP地址反查域名的服務。
總結:瞭解了這幾個協議那麼咱們一個網絡請求的歷程就會比較清晰了,首先用戶輸入一個地址www.baidu.com給客戶端,而後客戶端就會去找DNS服務問www.baidu.com的IP地址是什麼,而後DNS把IP地址返回給客戶端,而後HTTP協議會根據IP地址生成針對對應Web服務器的HTTP請求報文,這時候請求從應用層來到了傳輸層,到傳輸層之後TCP協議就會把HTTP請求的報文分割成報文段,並把每一個報文段可靠的傳給服務器,傳輸過程會通過網絡層,IP協議根據IP地址搜索對應的服務器,通過咱們的網線之類的硬件傳到服務器服務端又會經過這一端的TCP協議將客戶端發送過來的報文段按原先的順序組合成完整的數據告訴服務器,而後服務器獲得數據後就會把相應的信息按原路返回到客戶端。
簡化過程就是 客戶端應用層--->傳輸層--->網絡層--->鏈路層--->網絡層--->傳輸層--->服務端應用層。
具體的引用一張圖片來講明: