計算機網絡知識框架總結(複習)

前言

在大學學習了計算機網絡,已經複習好幾遍了,依然會忘記一些內容,雖然每次複習的時候都能重新認識到新的知識,但腦海中沒有形成一個大致的框架,在複習的時候會沒有查漏補缺的效果。

筆者打算寫一篇學習筆記,初步總結計算機網絡的知識框架,從總體把握,讀者們大致能清楚計算機網絡協議之間的關係。

主要參考了阮一峯老師的文章:互聯網協議入門(一),寫得很棒。本文在這基礎上加入了筆者自己的理解,後續也會對文章中提到的協議進行適當補充。

概述

計算機網絡是由好幾層結構的組成,每一層相對獨立又相互聯繫,像建築物一樣,每一層都爲下一層提供了支持。每一層都是爲了完成一種功能,爲了能夠讓各層之間相互適配,需要各層都遵守共同的規則,這規則就叫做“協議”。

計算機網絡的每一層都定義了很多協議,它們是計算機網絡的核心。

對於計算機網絡分層模型,許多書如《計算機網絡:自頂向下方法(原書第6版)》是按照五層模型來解釋,本文也是將計算機網絡按五層來進行介紹。
在這裏插入圖片描述
用戶接觸到的只是最高層的應用層,對其下的層根本沒有感覺。而且,越下面的層,越靠近硬件;越上面的層,越靠近用戶

爲什麼要將計算機網絡分層次呢?

封裝對相鄰層的變化。

開發的小夥伴們都知道:實現一個複雜、多功能的程序,爲了便於維護和擴展,各模塊功能之間應該是解耦的。分層次,不僅可以讓各層專注於自己的“任務”,只需要正常提供服務即可;還可以實現技術的變化不會對其他層乃至整個系統的工作產生影響。

接下來介紹每一個層的功能及其主要的協議。

1、物理層

電腦之間能通信,首先得是先把電腦連接起來。可以通過使用光纜、電纜、雙絞線、無線電波等方式將若干部電腦連接起來。
在這裏插入圖片描述
這就是“物理層”,是將電腦連接起來的物理手段,作用是負責傳送0和1的電信號

物理層解決的是如何在連接好的各種計算機之間傳輸數據比特流,所以這一階段的任務是確定傳輸媒體的接口的特性:機械特性(接口類型)、電氣特性(電壓範圍)、功能特性(如-5V代表0,+5V代表1)、過程特性(各部件的工作步驟)。

2、數據鏈路層

然而,單純的0和1是沒有意義的,這串電信號需要有特定的解讀方式:多少個電信號算一組?每個信號位有何意義?

數據鏈路層在物理層的上方,確定了0和1的分組方式。比特流在傳輸的過程中肯定會存在誤差,數據鏈路層會採用差錯檢測、差錯控制、流量控制等方法,向上一層提供高質的數據傳輸服務。

2.1. 以太網協議

早期每家公司都有自己的電信號分組方式,後來有一種叫做“以太網(Ethernet)”的協議佔據了主導地位。以太網規定,一組電信號構成一個“(Frame)”,每一個幀分成兩個部分:標頭(Head)和數據(Data)
在這裏插入圖片描述
標頭:包含數據包的一些說明項,比如發送者、接收者、數據類型等等;

數據:數據包中的具體內容。

標頭的長度固定爲18字節;數據的長度最短爲46字節,最長爲1500字節。所以整個幀最短爲64字節,最長爲1518字節。如果數據很長,就必須分割成多個幀進行發送。

2.2. MAC地址

按照以太網協議的幀發送數據,幀中的標頭包含了發送者和接收者的信息,那麼發送者和接收者的信息是如何標識的呢?

以太網規定,連入網絡的所有設備,都必須具有“網卡“接口。幀必須是從一個網卡,傳送到另一塊網卡。而網卡的地址,就是幀的發送地址和接收地址,這個就叫做MAC地址

每塊網卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,通常用12個六進制數表示。在Windows系統中可以通過命令來查看:

ipconfig/all

在這裏插入圖片描述
前6個十六進制數是廠商編號,後6個是該廠商的網卡流水號。有了MAC地址,就可以定位網卡和數據包的路徑了。

雖然說MAC地址是獨一無二的,但是其實是可以修改本地的MAC地址的,有興趣的朋友可以去試下。

2.3. 廣播

上面我們介紹了,一塊網卡有獨一無二的MAC地址,而且以太網幀必須知道接收方的MAC,才能發送。

系統是怎麼將幀準確送到接收方?

以太網採用一種“廣播”的方式,它並不將數據包準確地送到接收方,而是向本網絡內所有計算機發送,讓每臺計算機自己判斷,是否爲接收方。
在這裏插入圖片描述
如圖,1號計算機向2號計算機發送一個數據包,在同一個網絡端的3號、4號、5號計算機都會收到這個包。它們讀取這個包的“標頭”,找到接收方的MAC地址,然後與自身的MAC地址相比較,如果兩者相同,就接受這個包,做進一步處理,否則就丟棄這個包。這種發送方式就是"廣播(Broadcasting)"。

3、網絡層

理論上,僅僅依靠MAC地址,兩部電腦相互之間就可以發送數據了。但是這麼做有一個重大缺陷。以太網採用廣播方式發送數據包,所有成員人手一個數據包,不僅效率低下,而且僅侷限於發送者所在的子網絡。

也就是說,如果兩臺計算機不在同一個子網絡,採用廣播的方式是無法傳輸的。而這種設計是合理的,否則互聯網上的所有計算機都會收到所有的包,不說信息安不安全,光是包數量都互聯網來說就是災難了。
在這裏插入圖片描述
計算機網絡是無數個字網絡共同組成的一個巨型網絡,所以,需要區分哪些MAC地址屬於同一個子網絡,哪些不是。

如果是同一個子網絡,就採用廣播方式發送,否則就採用“路由”方式發送(路由,就是指如何向不同的字網絡分成數據包,這個知識點比較龐大,留坑)。然而,MAC地址本身無法做到這點,因爲MAC地址只跟廠商有關,與所處網絡無關。

所以“網絡層”就誕生了,它的作用是引進一套新的地址制度,使得我們能夠區分不同的計算機是否屬於同一個子網絡,這套地址就叫做“網絡地址”。

於是,每臺計算機都有兩種地址,一種是MAC地址,另一種是網絡地址,二者之間沒有任何聯繫,MAC地址是由廠商綁定在網卡上的,網絡地址是由管理員分配的,它們只是隨機組合在一起。

網絡地址確定計算機所在的子網絡,MAC地址則將數據包送到該子網絡中的目標網卡。從邏輯上推斷,應該是先處理網絡地址,再處理MAC地址

3.1. IP協議

規定網絡地址的協議,叫做IP協議。它所定義的地址,就被稱爲IP地址。IP協議有兩個版本,IPv4和IPv6,在IPv4中規定,網絡地址由32個二進制位組成。但是,目前IPv4已經全部分配完畢,所以IPv6的時代即將來臨了。

本文爲了方便,還是使用了IPv4的版本來進行介紹。習慣上,我們用分成四段的十進制數表示IP地址,從0.0.0.0~255.255.255。互聯網上的每一臺計算機,都會分配到一個IP地址。這個地址分爲兩部分,前部分是網絡段,後部分代表主機。處在同一子網絡的電腦,它們IP地址的網絡部分必定是相同的。
在這裏插入圖片描述
請聽題:請判斷172.16.252.1和172.16.254.3這兩個IP地址之間的關係。

答案是,無法判斷。因爲不知道網絡部分是前24位,還是前16位,這從IP地址上是看不出來的。

這時候需要一個參數來表示子網絡特徵,這就是“子網掩碼”。子網掩碼的形式等同於IP地址,也是一個32位二進制數字,它的網絡部分全部爲1,主機部分全部爲0。知道了子網掩碼,我們就能判斷,任意兩個IP地址是否處於同一個子網絡。

方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都爲1,運算結果爲1,否則爲0),然後比較結果是否相同,如果是的話,就表明它們在同一個子網絡中,否則就不是。

請聽題:假如172.16.252.1和172.16.254.3這兩個IP地址的子網掩碼都是255.255.255.0,那它們在同一個子網絡嗎?
在這裏插入圖片描述
如果子網掩碼是255.255.240呢?
在這裏插入圖片描述
所以,IP協議的作用主要有兩個,一個是爲每臺計算機分配IP地址,爲數據包的傳送提供地址,另一個作用是確定哪些地址在同一個子網絡

3.2. IP數據包

根據IP協議發送的數據,就叫IP數據包,其中必定包括IP地址信息。而我們之前說過,以太網數據寶只包含MAC地址,並沒有IP地址的欄位,那麼IP數據包放在那裏呢?

IP數據包可以直接放進以太網數據包的“數據”部分,這樣就完全不用修改以太網的規格。這就是計算機網絡分層的好處:上層的變動完全不涉及下層的結構
在這裏插入圖片描述
標頭:包括版本、長度、IP地址等信息;

數據:IP數據包的具體內容。

將IP數據包放入以太網數據包後,以太網數據包就變成下面這樣:
在這裏插入圖片描述
IP數據包的標頭部分的長度爲20到60字節,整個數據包的總長度最大爲65535字節。因此,理論上,一個IP數據包的數據部分,最長爲65515字節。在上文說過,以太網數據包的數據部分最長也就1500字節。因此,如果IP數據包超過了1500字節,那麼就需要分割成幾個以太網數據包,分開發送了。

3.3. ARP協議

上文提到了,IP數據包的傳送中我們必須知道兩種地址:IP地址和MAC地址。通常我們會知道對方的IP地址(後文會解釋),但是我們並不知道它的MAC地址。

所以需要一種機制,可以從IP地址得到MAC地址。

在這裏需要分兩種情況。第一種,如果兩臺主機不在同一個子網絡,這就沒有辦法得到對方的MAC地址,只能把數據包傳送到兩個子網絡連接處的“網關(Gateway)”,讓網關去處理。
在這裏插入圖片描述
如圖,1號電腦向4號電腦發送一個數據包。它先判斷4號電腦是否在同一個子網絡,結果發現不是(後文會介紹),於是就把這個數據發送都網關A。網關A通過路由協議,發現4號電腦位於子網絡B,又把數據包發給網關B,網關B再轉發到4號電腦。

第二種情況,如果兩臺主機在同一個子網絡,那麼我們可以使用ARP協議,得到對方的MAC地址。ARP協議也是發出一個數據包(包含在以太網數據包中),其中包含它所要查詢主機的IP地址,在目的MAC地址填入FF:FF:FF:FF:FF:FF,表示這是一個“廣播”地址。這樣,它所在子網絡的每一臺主機都會收到這個數據包,從中取出IP地址,與自身的IP地址進行比較。如果兩者相同,都做出回覆,向對方報告自己的MAC地址,否則就丟棄這個包。

總結上述,可以得到下面這種表:

場景 數據報地址
同一個子網絡 對方的MAC地址,對方的IP地址
非同一個字網絡 網關的MAC地址,對方的IP地址

對於ARP的應用,有興趣的朋友可以去了解一下:ARP欺騙,很有意思的。

4、傳輸層

有了MAC地址和IP地址,我們已經可以在互聯網上任意兩臺主機上建立通信。

但是,如果你一邊瀏覽網頁,一邊與朋友在線聊天。當一個數據包從互聯網上發來的時候,怎麼判斷這數據包裏是表示網頁的內容,還是表示在線聊天的內容?

所以我們還需要一個參數,表示這個數據包到底供哪個程序(進程)使用。這個參數叫做“端口(Port)”,它是每個使用網卡的程序的編號。每個數據包都發到主機的特定端口,所以不同的程序就能取到自己所需要的數據。

“端口”是0到65535之間的一個整數,正好16個二進制位。0到1023的端口被系統佔用,用戶只能選用大於1023的端口。所以應用程序會隨機選用一個端口,然後與服務器的相應端口聯繫。可以在windows中的命令提示符來查看:

netstat -ano

在這裏插入圖片描述
可以看到,PID所代表的服務的端口是“本地地址”裏:後的數字。

“傳輸層”的功能,就是建立“端口到端口”的通信。相比之下,“網絡層”的功能是建立“主機到主機”的通信。只要確定主機和端口,我們就能實現程序之間的交流。因此,Unix系統就把主機+端口,叫做“套接字(socket)”。有了它,就可以進行網絡應用程序開發了。

4.1. UDP協議

上文中我們提到了如果要識別數據包是發送給哪個程序,就需要加入端口信息,這就需要新的協議。最簡單的實現是叫做UDP協議,它的格式幾乎就是在數據前面,加個端口號。UDP數據包,也是由“標頭”和“數據”兩部分組成
在這裏插入圖片描述
標頭:定義了發出端口和接收端口;

數據:具體的內容。

然後,將整個UPD數據包放入IP數據包的數據部分,而前文提到,IP數據包放在以太網數據包之中,所以整個以太網數據包現在變成了下面這樣:
在這裏插入圖片描述
UDP數據包非常簡單,標頭部分只有8個字節,總長度不超過65535字節,正好放進一個IP數據包。

4.2. TCP協議

UDP協議的優點是結構簡單,容易實現,但缺點是可靠性比較差,一旦數據包發出,無法知道對方是否收到。所以爲了提高網絡可靠性,TCP協議就誕生了。

這個協議很複雜,後續會專門寫一篇關於TCP協議的文章。此處可以簡單認爲,它就是有確認機制的UDP協議,每發出一個數據包都要求確認。如果有一個數據包遺失,就收不到確認,發出方就知道有必要重發這個數據包了。

因此,TCP協議能確保數據不會遺失,但它的缺點是過程複雜、實現困難、消耗較多資源.

TCP數據包和UDP數據包一樣,都是內嵌在IP數據包的數據部分。TCP數據包沒有長度限制,理論上可以無限長。但爲了保證網絡效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不再分割。

5、應用層

當應用程序收到“傳輸層”的數據之後,下一步是要對其中內容進行解讀,但是傳過來的數據五花八門,除非事先規定好格式,否則根本無法解讀。而應用層的作用,就是規定應用程序的數據格式

舉個栗子,TCP協議可以爲各種各樣的程序傳遞數據,比如Email、WWW、FTP等等。那麼,必須有不同協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了“應用層”。這是最高的一層,直接面對用戶,所以它的數據就放在TCP數據包的數據部分,因此,現在的以太網的數據包就變成這樣了:
在這裏插入圖片描述
接下來用打開Baidu主頁作爲栗子

我們知道,如果要上網,就得先設置好這幾個參數:

  • 本機的IP地址
  • 子網掩碼
  • 網關的IP地址
  • DNS的IP地址

這四個參數缺一不可,由於它們是給定的,每次計算機開機的時候,都會分到同樣的IP地址,所以這種情況被稱作“靜態IP地址上網”
在這裏插入圖片描述
但是這種方式對於普通用戶來說,有點“看起來好難的樣子”,而且如果一臺電腦的IP地址保持不變,其他電腦就不能使用這個地址。所以大多數用戶使用“動態IP地址上網”。動態IP地址,是指計算機開機後,會自動分配到一個IP地址,不用人爲設定。它使用的協議叫做DHCP協議

5.1. DHCP協議

DHCP協議規定,每一個子網絡中,有一臺計算機**“DHCP服務器”負責管理本網絡的所有IP地址**。新的計算機加入網絡,必須向DHCP服務器發送到一個“DHCP請求”數據包,申請IP地址和相關的網絡參數。

前面說過,兩臺計算機在同一個子網絡,必須要知道對方的MAC地址和IP地址,才能發送數據包。

但是,新加入的計算機不知道別的計算機的MAC地址和IP地址,怎麼發送數據包?

DHCP協議是建立在UDP協議上的應用層協議,其數據包如下:
在這裏插入圖片描述

  1. 以太網標頭,設置發出方(本機)的MAC地址和接收方(DHCP服務器)的MAC地址。前者就是本機網卡的MAC地址,後者這時不知道,就填入一個廣播地址:FF-FF-FF-FF-FF-FF。
  2. IP標頭,設置發出方的IP地址和接收方的IP地址。這時對於兩者,都是一個位置信息。於是,發出方的IP地址就設爲0.0.0.0,接收方的IP地址設爲255.255.255.255。
  3. UDP標頭,設置發出方的端口和接收方的端口。這部分是DHCP協議規定好的,發出方是68端口,接收方是67端口。

這個數據包構造完成後,就可以發出了。

以太網是廣播發送,同一個子網絡的每臺計算機都收到了這個包。因爲接收方的MAC地址是FF-FF-FF-FF-FF-FF,所以也看不出是發給誰的。每臺收到這個包的計算機,還必須分析這個包的IP地址,才能確定是不是發給自己的。當看到發出方IP地址是0.0.0.0,接受方是255.255.255.255,於是DHCP服務器才知道“這個包是發給我的”,而其他計算機就可以丟棄這個包。

接下來,DHCP服務器讀出這個包的數據內容,分配好IP地址,發送回去一個“DHCP響應”數據包。這個響應包的結構,以太網標頭的MAC地址是雙方的網卡地址,IP標頭的IP地址是DHCP服務器的IP地址(發出方)和255.255.255.255(接收方),UDP標頭的端口是67(發出方)和68(接收方),分配給請求端的IP地址和本網絡的具體參數則包含在Data部分。

所以,新加入的計算機收到這個響應包,於是就可以知道自己的IP地址、子網掩碼、網關地址、DNS服務器等參數

5.2. DNS協議

一般我們打開瀏覽器,輸入網址打開網頁。從上文我們可以知道,如果我們想發送數據包請求資源,必須要先知道對方的IP地址。但是我們只知道網址如www.baidu.com,不知道它的IP地址。

DNS協議可以幫助我們,將這個網址轉爲IP地址。已知DNS服務器爲8.8.8.8,於是我們想這個地址發送一個DNS數據包(53端口)。
在這裏插入圖片描述
然後,DNS服務器做出響應,告訴我們Baidu的IP地址是14.215.177.39。於是,我們知道了對方的IP地址。

接下來,我們要判斷這個IP地址是不是與本機在不在同一個子網絡,這就需要用到子網掩碼。用子網掩碼分別與Baidu的IP地址和本機的IP地址進行AND運算。如果這兩個結果相等,說明在同一個子網絡;如果結果不相同,則Baidu與本機不在同一個子網絡,需要由網關來處理。

因此,我們如果要向Baidu發送數據包,必須通過網關轉發,也就是說,以太網標頭的接收方MAC地址將是網關的MAC地址。

5.3. HTTP協議

我們要瀏覽網頁,使用的協議是HTTP協議,其數據包結構如下:
在這裏插入圖片描述
HTTP部分的內容,類似於:

GET … HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Accept: application/json, text/javascript, /; q=0.01
Sec-Fetch-Dest: empty
User-Agent: Mozilla/5.0 …
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: https://www.baidu.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: …

我們假定這部分的長度爲4960字節,他會被嵌入TCP數據包中。

  • TCP協議

TCP數據包需要設置端口,接收方(Baidu)的HTTP端口假設爲80,發送方(本機)的端口是一個隨機生成的1024~65535之間的整數,假定爲42341。

TCP數據包的標頭長度爲20字節,加上嵌入HTTP的數據包,總長度爲4980字節

  • IP協議

然後,TCP數據包再嵌入IP數據包。IP數據包需要設置雙方的IP地址,這是已知的,發送方是本機IP地址,接收方是Baidu的IP地址。

IP數據包的標頭長度爲20字節,加上嵌入的TCP數據包,總長度爲5000字節

  • 以太網協議

最後,IP數據包嵌入以太網數據包。以太網數據包需要設置雙方的MAC地址,發送方位本機的網卡MAC地址,通過ARP協議+網關的IP地址,可以得到網關的MAC地址,所以接收方爲網關的MAC地址。

因爲,以太網數據包的數據部分,最大長度爲1500字節,而現在的IP數據包長度爲5000字節。因此,IP數據包必須分成4個包。且每個包都有自己的IP標頭(20字節),所以4個包的IP數據包的長度分別爲1500、1500、1500、560
在這裏插入圖片描述

  • 服務器端響應

經過多個網關的轉發,Baidu的服務器14.215.177.39,收到了這四個以太網數據包。

根據IP標頭的序號,Baidu將四個包拼接起來,取出完整的TCP數據包,然後讀出裏面的“HTTP請求”,接着做出“HTTP響應”,再用TCP協議發回來。

本機收到HTTP響應後,就可以將網頁顯示出來,完成一次網絡通信。
在這裏插入圖片描述
到這裏,計算機網絡的五層模塊就介紹完啦~

結語

阮一峯老師這篇文章互聯網協議入門(一)寫的真的很棒,博主小菜雞一隻,只能借這篇文章複習下框架,後續會根據複習的內容,將文章裏的內容慢慢充實起來。

如果本文對你的學習有幫助,請給一個贊吧,這會是我最大的動力~

參考資料:

互聯網協議入門(一)
互聯網協議入門(二)
計算機網絡——物理層
【計算機網絡】你真的理解數據鏈路層嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章