網絡協議淺析

本文部份內容摘自 極客時間:趣談網絡協議和網絡協議入門,只是我的的一個學習總結html

參考:瀏覽器

極客時間:趣談網絡協議緩存

網絡協議入門服務器

網絡協議指的是計算機網絡中互相通訊的對等實體之間交換信息時所必須遵照的規則的集合。網絡

​ 因爲網絡節點之間聯繫的複雜性,在制定協議時,一般把複雜成分分解成一些簡單成分,而後再將它們複合起來,最經常使用的複合技術就是層次方式,不管是OSI七層模型,仍是TCP/IP模型,從上而下,每一層都依賴下一層,每一層都在他的下層提供的服務基礎上提供更高級的服務,因此在傳輸數據時能夠沒有層可是必定會有下層,好比使用傳輸層傳輸數據,必定會有網絡層和鏈路層,不必定會有應用層,若是使用應用層傳輸數據,必定有傳輸層,網絡層,鏈路層。架構

TCP/IP五層模型

TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇;ide

開篇的圖片中,在TCP/IP概念層模型中將數據鏈路層與物理層統稱爲鏈路層,其實這個分不分對於咱們學習網絡協議的影響不大;學習

下圖中右側是每一層經常使用的協議,經過上面咱們知道應用層依賴傳輸層,傳輸層依賴網絡層,網絡層依賴數據鏈路層,數據鏈路層依賴物理層,咱們從最下層開始逐層遞進,分析每一層的做用及數據包格式。ui

物理層

物理層提供的服務:在物理主機之間傳輸比特流。網絡傳輸協議

​ 兩臺電腦之間須要通訊,首先咱們須要將電腦鏈接起來。物理層**就是把電腦鏈接起來的物理手段。它主要規定了網絡的一些電氣特性,做用是負責傳送0和1的電信號。**數據的單位稱爲比特(bit)。

數據鏈路層

數據鏈路層提供的服務:在同一子網絡主機之間的數據傳輸。

​ 在物理層提供比特流服務的基礎上,創建相鄰結點之間的數據鏈路,經過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動做系列。數據鏈路層在不可靠的物理介質上提供可靠的傳輸(肯定了0和1的分組方式,數據的單位稱爲幀)。

以太網

​ 以太網規定,連入網絡的全部設備,都必須具備「網卡」接口。數據包必須是從一塊網卡,傳送到另外一塊網卡。網卡的地址,數據包的發送地址和接收地址,每塊網卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,一般用12個十六進制數表示,前6個十六進制數是廠商編號,後6個是該廠商的網卡流水號。有了MAC地址,就能夠定位網卡和數據包的路徑了。

MAC地址示例:0A-11-22-33-44-01

​ 如今咱們已經知道了,接入網絡的設備須要經過MAC地址進行通訊,那麼電腦A(本機)要與電腦B(目標)進行通訊,電腦A是如何知道電腦B的MAC地址那?

答案是ARP協議。

ARP協議

​ 地址解析協議(英語:Address Resolution Protocol,縮寫:ARP)是一個經過解析網絡層地址來找尋數據鏈路層地址的網絡傳輸協議。

百度百科:baike.baidu.com/item/ARP/60…

簡單理解就是,能夠經過已知的目標機器的IP來獲取目標機器的MAC地址。

ARP協議使用廣播的方式來獲取目標的MAC地址

​ 若是兩臺主機在同一個子網絡,那麼咱們能夠用ARP協議,獲得對方的MAC地址。ARP協議也是發出一個數據包(包含在以太網數據包中),其中包含它所要查詢主機的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個「廣播」地址。它所在子網絡的每一臺主機,都會收到這個數據包,從中取出IP地址,與自身的IP地址進行比較。若是二者相同,都作出回覆,向對方報告本身的MAC地址(會緩存),不然就丟棄這個包。

向本網絡內全部計算機發送,讓每臺計算機本身判斷,是否爲接收方:

廣播過程:

這樣就能夠獲取到機器D的MAC地址了,以後能夠進行通訊了;

爲了不每次都用 ARP 請求,機器本地也會進行 ARP 緩存。固然機器會不斷地上線下線,IP 也可能會變,因此 ARP 的 MAC 地址緩存過一段時間就會過時 ;

跨子網獲取MAC地址

咱們看一下ARP協議在跨子網的時候ip和MAC是如何變化的?

​ 若是目標IP和源IP不在同一個子網絡,就須要發送ARP協議,首先獲取到網關的MAC地址,而後將源MAC和網關MAC放入鏈路層數據包的標頭,網關收到數據包後,發現MAC地址匹配而後取出IP地址,查看是不是本身局域網的,若是不是就繼續跳轉,直到找到這個目標IP所在的局域網,在這個局域網上發送ARP,獲取到目標地址的MAC地址。

數據包格式

鏈路層的數據的單位稱爲幀,每一幀分紅兩個部分:標頭Head和數據Data。

鏈路層數據包格式:

網絡層

網絡層提供的服務:跨子網絡的主機之間的數據傳輸

​ 以太網協議,依靠MAC地址發送數據,可是互聯網是由無數個子網絡組成的一個巨大網絡,並且以太網採用廣播方式發送數據包,這時若是要使用廣播的方式進行數據傳遞確定是不行的,因此跨子網中通訊須要採用路由的方式進行通訊(數據的單位稱爲數據包)

這個路由就是網絡地址,使得咱們可以區分不一樣的計算機是否屬於同一個子網絡;

網絡地址幫助咱們肯定計算機所在的子網絡,MAC地址則將數據包送到該子網絡中的目標網卡。

IP協議

規定網絡地址的協議,叫作IP協議,IP協議是不可靠、無鏈接的協議。

​ IP協議所定義的地址,就被稱爲IP地址,它的任務僅僅是根據源主機和目的主機的地址來傳送數據。爲此目的,IP定義了尋址方法和數據報的封裝結構。第一個架構的主要版本爲IPv4,目前仍然是普遍使用的互聯網協議,儘管世界各地正在積極部署IPv6。

IP協議第四版,簡稱IPv4:

用分紅四段的十進制數表示IP地址,從0.0.0.0一直到255.255.255.255,這個地址分紅兩個部分,前一部分表明網絡,後一部分表明主機,好比前24位,後24位

子網掩碼

用來判斷兩個ip是否處於同一個子網絡。

​ 形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分所有爲1,主機部分所有爲0,好比:11111111.11111111.11111111.00000000

判斷是兩個IP否是子網的方法:

​ 將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都爲1,運算結果爲1,不然爲0),而後比較結果是否相同。

DHCP協議

​ 動態主機配置協議,DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)一般被應用在大型的局域網絡環境中,主要做用是集中的管理、分配IP地址,使網絡環境中的主機動態的得到IP地址、Gateway地址、DNS服務器地址等信息,並可以提高地址的使用率。

數據包格式

根據IP協議發送的數據,就叫作IP數據包,咱們將IP數據包放到鏈路層數據包的數據部分:

IP數據包的標頭格式:

在網絡層進行數據傳輸時:

​ 首先查看目標IP和本身是否在同一個子網絡,若是是就發送ARP協議獲取這個地址對應的MAC地址,而後將源MAC和目標MAC地址放入鏈路層數據包,發送出去便可,若是不在同一個子網絡,就須要發送ARP協議,首先獲取到網關的MAC地址,而後將源MAC和網關MAC放入鏈路層數據包的標頭,網關收到數據包後,發現MAC地址匹配而後取出IP地址,查看是不是本身局域網的,若是不是就繼續跳轉,直到找到這個目標IP所在的局域網,在這個局域網上發送ARP,獲取到目標地址的MAC地址。

傳輸層

傳輸層提供的服務:在進程之間提供數據傳輸

​ 傳輸層(Transport Layer)在計算機網絡中是互聯網協議包與開放系統互連(OSI)網絡堆棧中協議的分層結構中的方法的一個概念劃分。該層的協議爲應用進程提供端到端的通訊服務。它提供面向鏈接的數據流支持、可靠性、流量控制、多路複用等服務。

做用就是創建端口到端口的通訊。相比之下,網絡層的功能是創建主機到主機的通訊。只要肯定主機和端口,咱們就能實現程序之間的交流。

數據包格式

傳輸層的數據包格式也是分爲標頭和數據兩部分,嵌在IP數據包的數據部分:

UDP協議

​ 用戶數據報協議,無鏈接協議,無服務狀態,會丟包,不能保證數據包順序到達,基於數據報,不須要創建鏈接,誰監聽誰就能收到消息,數據報是一個一個的發,一個一個的收,處理速度快,延時低。

UDP數據包的標頭格式:

看這個包含的內容就只UDP比較簡單,負責的比較少,只有源端口號和目標端口號,根據端口號,將數據交給相應的應用程序 。

UDP協議適用場景:

  • 須要資源少,在網絡狀況比較好的內網,或對於丟包不敏感的應用
  • 不須要一對一創建鏈接,而是能夠廣播的應用
  • 須要處理速度快,時延低,能夠容忍少數丟表

TCP協議

​ 傳輸控制協議,爲了提升網絡的可靠性,每發出一個數據包都要求確認。若是有一個數據包遺失,就收不到確認,發出方就知道有必要重發這個數據包了,因此TCP協議是可靠的,面向鏈接的協議,基於字節流,沒有順序,丟包的問題,提供了鏈接維護,流量控制,擁塞控制,缺點就是過程複雜,相比UDP消耗更多的資源。

TCP數據包的標頭格式:

對比UDP的標頭明顯複雜了不少:

  • 源端口號和目的端口號跟UDP同樣
  • 序號用來解決亂序問題
  • 確認序號用來解決丟包問題
  • 還有一些狀態位,例如 SYN 是發起一個鏈接,ACK 是回覆,RST 是從新鏈接,FIN 是結束鏈接等。TCP 是面向鏈接的,於是雙方要維護鏈接的狀態,這些帶狀態位的包的發送,會引發雙方的狀態變動
  • 窗口大小用來作流量控制,通訊雙方各聲明一個窗口,標識本身當前可以的處理能力

應用層

應用層提供的服務:規定好應用的數據格式

​ 應用程序收到傳輸層的數據,接下來就要進行解讀。因爲互聯網是開放架構,數據來源五花八門,必須事先規定好格式,不然根本沒法解讀。因此應用層的做用,就是規定應用程序的數據格式

HTTP協議

​ HTTP協議,即超文本傳輸協議(Hypertext transfer protocol)。是一種詳細規定了瀏覽器和萬維網(WWW = World Wide Web)服務器之間互相通訊的規則,經過因特網傳送萬維網文檔的數據傳送協議。

​ HTTP協議是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。

​ HTTP 是基於 TCP 協議的 ,因此它使用面向鏈接的方式發送請求,經過 stream 二進制流的方式傳給對方。固然,到了 TCP 層,它會把二進制流變成一個的報文段發送給服務器 。

http請求的格式:

  • 請求行中的方法是指請求的方式,經常使用的就GET,PUT,POST,DELETE等;

  • 首部每一行以鍵/值的形式寫入,鍵值間用:分割,多個值之間以;分割,每行以回車符換行符爲結束;

    常見的鍵有:

    ​ User-Agent:產生請求的瀏覽器類型

    ​ Host:請求的主機名,容許多個域名同處一個IP地址

    ​ Accept:客戶端可識別的內容類型列表

  • 實體就是咱們請求的正文實體;

http響應的格式:

響應的格式與請求的相似,少了方法,多了響應的狀態碼,就是請求的結果,好比:200,404,500

數據包格式

HTTP的數據包是嵌在TCP數據包的數據部分,因此這是咱們最終的數據包格式:

完整的HTTP請求過程:

相關文章
相關標籤/搜索