IP協議
- 概述
- IPv4
- 編址方式
- 分類編址
- 劃分子網
- 無分類編址
- 路由聚合
- IP地址和MAC地址
- 地址決議協議ARP
- 步驟
- IP資料報的發送和轉發程序
- IPV4資料報格式
- IP資料報首部的固定部分中的各欄位
- IPV6
- 資料報格式
- 地址
- 分類
- 路由選擇協議
- 參考
概述

網路層在五層協議中位于資料鏈路層和運輸層的中間,主要功能為實作兩個端系統之間透明的資料傳輸,即將分組從一個主機移動到另外一個主機,
由于TCP/IP協議堆疊的網路層使用網際協議IP,它是整個協議堆疊的核心協議,因此在TCP/IP協議堆疊中網路層常稱為網際層,
IPv4
互聯網上的每臺主機(或路由器)的每個介面分配一個在全世界唯一的 IP 地址,
現如今有兩個版本的IP地址——IPv4和IPvV6,先討論如今還在廣泛你使用的IPv4地址,

編址方式
IPv4地址的編址方式經歷了如下三個歷史階段:

分類編址

所謂分類編址就是將IP地址劃分為若干個固定類,每一類地址都由兩個固定長度欄位組成
- 網路號(net-id):它標志主機(或路由器)所連接到的網路,一個網路號在整個互聯網范圍內必須是唯一的,
- 主機號(host-id):它標志該主機(或路由器),一個主機號在它前面的網路號所指明的網路范圍內必須是唯一的,

- A類地址:網路號欄位占1個位元組,只有7位可以使用,但可指派的網路號是126個(即27-2),主機號欄位占3個位元組,每一個A類網路中的最大主機數是224-2,4個特殊情況如下:
- IP地址中的全0表示"這個(this)",網路號欄位為全0的IP地址是個保留地址,意思是“本網路”;
- 網路號為127(01111111)保留作為本地軟體環回測驗(loopback test)本主機的行程之間的通信之用,若主機發送一個目的地址作為環回地址(例如127.0.0.1)的IP資料報,則本主機中的協議軟體就處理資料報中的資料,而不會把資料報發送給任何網路,
- 全0的主機號欄位表示該IP地址是“本主機”所連接到的單個網路地址,例如,一主機的IP地址為5.6.7.8,則該主機所在的網路地址為5.0.0.0;
- 全1的主機號表示該網路上的所有主機,
- B類地址:網路號欄位有2個位元組,但前面兩位(10)已經固定,只剩下14位可以進行分配,因為網路號欄位后面的14位無論怎樣取值都不可能出現整個兩位元組的網路號欄位全0或全1,因此不存在網路總數減2的問題,同時根據2002年9月發表的RFC 3330檔案,128.0網路號已經可以分配了,因此B類地址可指派的網路數為214每一個網路的最大主機數為216-2,
- C類地址:網路號有3個位元組,最前面的3位是(110),還有21位可以進行分配,因此C類地址可指派的網路總數是221,每一個網路的最大主機數是28-2,


劃分子網
今天看來,分類的IP地址不太合理
- IP地址空間的利用率有時很低,每一個A類地址網路可連接的主機數超過1000萬,而每一個B類地址網路也超過了6萬,有的單位申請一個B類網路地址但連接的主機并不多,這樣那些沒用到的IP地址就浪費了,
- 給每一個物理網路分配一個網路號會使路由表變得太大因而使網路性能變壞,
- 兩級IP地址不夠靈活,有時情況緊急,一個單位需要在新的地方馬上開通一個新的網路,但是在在申請到一個新的IP地址之前,新增加的網路是不可能連接到互聯網上作業的,我們希望可以是一個單位能隨時靈活地增加單位的網路,而不必事先到互聯網機構去申請新的網路號,
為了解決上面的問題,從1985年起在IP地址中又增加了一個"子網號欄位",使兩級IP地址變成為三級IP地址,這種做法叫做劃分子網(subnetting),或子網尋址或子網路由選擇,

32位元的子網掩碼可以表明分類IP地址的主機號部分被借用了幾個位元作為子網號,其中子網掩碼使用連續的位元1來對應網路號和子網號,使用連續的位元0來對應主機號,將劃分子網的IPv4地址與其相應的子網掩碼進行邏輯與運算就可得到IPv4地址所在子網的網路地址,


無分類編址
劃分子網在一定程度上緩解了因特網在發展中的遇到的困難,但是數量巨大的C類網路因為其地址空間太小并沒有得到充分使用,而因特網的IP地址仍在加速消耗,整個IPv4地址空間面臨全部耗盡的威脅,為此,因特網工程任務組IETF又提出了采用無分類編址的方法來解決IP地址緊張的問題,同時還專門成立IPv6作業組負責研究新版本IP以徹底解決IP地址耗盡問題,
1993年,IETF發布了無分類域間路由選擇CIDR(Class Inter-Domain Routing)的RFC檔案,其中CIDR消除了傳統的A類,B類和C類網路以及劃分子網的概念,
CIDR使用"斜線記法",即在IPv4地址后面加上斜線"/",在斜線后面寫上網路前綴所占的位元數量,
CIDR實際上是將網路前綴都相同的連續的IP地址組成一個"CIDR地址塊",我們只要知道CIDR地址快中的任何一個地址,就可以知道該地址塊的全部細節,如下例

路由聚合
路由聚合又稱為構造超網,舉例說明:
如圖所示,路由器R1和五個網路以及路由器R2直接相連,路由器R1和R2互為相鄰路由器,它們周期性地通告自己所知道的路由資訊給對方,

如果R1將自己直連的這五個網路的路有記錄都通告給,則R2的路由表會增加五條路由記錄,而我們可有通過查找共同前綴的方式將五條路由記錄聚合成1條,也就是找出5個目的網路地址的共同前綴,這五個目的網路地址的左起前兩個位元組都是相同的,從第三個位元組開始不同,因此只需將第三個位元組轉換為二進制形式,這樣就可以很容易找出5個目的網路地址的共同前綴,共22個位元,
網路前綴越長,地址塊越小,路由越充分;若路由器查表轉發分組時發現有多個路由可選,則選擇網路前綴最長的那條,這稱為最長前綴匹配,因為這樣的路由更具體,
IP地址和MAC地址
從層次的角度來看,物理地址是資料鏈路層和物理層使用的地址,而IP地址是網路層和以上各層使用的地址,是一種邏輯地址(稱IP地址為邏輯地址是因為IP地址是用軟體實作的),

在發送資料時,資料從高層下到底層,然后才到通信鏈路上傳輸,使用IP地址的IP資料報一旦交給資料鏈路層,就被封裝成MAC幀了,MAC幀在傳送時使用的源地址和目的地址都是硬體地址,這兩個硬體地址都寫在MAC幀的首部中,
連接在通信鏈路上的設備(主機或路由器)在收到MAC幀時,根據MAC幀首部中的硬體地址決定收下或丟棄,只有在剝去MAC幀中的首部和尾部后把MAC層的資料上交給網路層后,網路層才能在IP資料報的首部中找到源IP地址和目的IP地址,


盡管互連在一起的網路的 MAC 地址體系各不相同,但 IP 層抽象的互聯網卻屏蔽了下層這些很復雜的細節,只要我們在網路層上討論問題,就能夠使用統一的、抽象的 IP 地址研究主機和主機或路由器之間的通信,
地址決議協議ARP
在實際應用中,我們經常會遇到這樣的問題:已經知道了一個機器(主機或路由器)的IP地址,需要找出相對應的硬體地址,而地址決議協議ARP就是來解決整個問題的,
我們知道網路層使用的是IP地址,但在實際網路的鏈路上傳送資料幀時,最侄訓是必須使用該網路的硬體地址,但IP地址和下面的網路的硬體地址之間由于格式不同而不存在簡單的映射關系,此外,在一個網路上可能會有新的主機加入進來,更新網路配接器也會使主機的硬體地址改變,ARP解決的方法使在主機ARP高速快取中存放一個從IP地址到硬體地址的映射表,并且這個映射表還經常動態更新,同時ARP是解決同一個局域網上的主機或路由器的IP地址和硬體地址的映射問題,

步驟
當主機A要向本局域網上的某臺主機B發送IP資料報時,就現在其ARP高速快取中查看有無主機B的IP地址,如果有,就在ARP高速快取中查出其對應的硬體地址,再把這個硬體地址寫入MAC幀,然后通過局域網把該MAC幀發往此硬體地址,
也有可能高速快取中并沒有主機B的資訊,在這種情況下,主機A就自動運行ARP,然后按照下面的步驟找出主機B的硬體地址,

- ARP行程在本局域網上廣播發送一個ARP請求分組,ARP請求分組的主要內容時:“我的IP地址是xxx,硬體地址是xxx,我想知道IP地址為xxx的主機的硬體地址,”
- 在本局域網上的所有主機運行的ARP行程都受到ARP請求分組,
- 主機B的IP地址與ARP請求分組中要查詢的IP地址一致,就收下這個ARP請求分組,并向主機A發送ARP回應分組,同時在這個ARP回應分組中寫入自己的硬體地址,由于其余的所有主機的IP地址斗魚ARP請求分組中要查詢的IP地址不一致,因此都不理睬這個ARP請求分組,其中ARP回應分組是普通的單播,即從一個源地址發送到一個目的地址,
- 主機A收到主機B的ARP回應分組后,就在其ARP高速快取中寫入主機B的IP地址到硬體地址的映射,
當主機A向B發送資料報時,很可能以后不久主機B還要向A發送資料報,因而主機B也可能向A發送ARP請求分組,為了減少網路上的通信量,主機A在發送其ARP請求分組時,就把自己的IP地址到硬體地址的映射寫入ARP請求分組,當主機B收到A的ARP請求分組時,就把主機A的這一地址映射寫入主機B自己的ARP高速快取中,以后主機B向A發送資料報就很方便,
IP資料報的發送和轉發程序
為了將重點放在TCP/IP協議堆疊的網際層發送和轉發IP資料報的程序中,在下面的舉例中,我們忽略使用ARP協議來獲取目的主機或路由器介面的MAC地址的程序以及以太網交換機自學習和轉發幀的程序,

再上圖所示的小型互聯網中,路由器的介面0直連了一個交換式以太網,介面1也直連了一個交換式以太網,分別給網路和路由器分配網路地址和子網掩碼,
對于同一個網路中的主機可以直接通信,這叫做直接交付;不同網路中的主機之間的通信,需要通過路由器來中轉,這叫做間接交付,

假如主機C要給主機F發送IP資料報,主機C將自己的IP地址和子網掩碼相與,就可以得到主機C所在網路的網路地址,既然主機C要給主機C發送IP資料報,那主機C肯定知道主機F的IP地址,主機C將主機F的IP地址與自己的子網掩碼相與,就可以得到目的網路地址,該網路地址與主機C的網路地址不相同,因此主機C就知道了主機F與自己不在同一個網路,它們之間的通信屬于間接交付,主機C需要將IP資料報傳輸給路由器,由路由器將IP資料報轉發給主機F,

實際上,用戶為了讓本網路中的主機能和其他網路中的主機進行通信,就必須給指定本網路中的一個路由器,由該路由器進行轉發,所指定的路由器也被稱為默認網關,在上面這個例子中,我們可以將該路由器介面0的IP地址指定給該介面所直連網路中的各個主機作為默認網關,這樣當本網路中的主機要和其他網路中的主機進行通信時,會將IP資料報傳輸給默認網關,由默認網關幫主機將IP資料報轉發出去,

路由器收到IP資料報后
- 會首先檢查IP資料報的首部是否出錯,若出錯,則直接丟棄該IP資料報并告訴源主機,若沒有出錯,則進行轉發;
- 然后根據IP資料報的目的地址在路由表中查找匹配的條目:若找到匹配的條目,則轉發給條目中指示的下一條,若找不到,則丟棄該IP資料報并通告源主機,
路由器取出IP資料報首部各地址欄位的值,源地址欄位的值為主機A的IP地址,目的欄位為主機B的IP地址,接下來,路由器就要對該IP資料報進行查表轉發,
當我們給路由器的介面配置IP地址和子網掩碼時,路由器就知道了自己的該介面與哪個網路是直連的,如上圖路由表,同時路由器中還可以有其他的路由條目,這可以是用戶或網路管理員手動配置的靜態路由,也可以是路由器使用路由協議自動獲取到的動態路由,接下來,路由器根據IP資料報的目的地址在自己的路由表中查找匹配的路由條目,逐條檢查路由條目,將目的地址與路由條目中的地址掩碼相與得到目的網路地址,找到匹配的后按照它的下一跳指示,也就是從介面1轉發該IP資料報,這樣主機D就可以收到主機A轉發過來的IP資料報,
下圖是一個廣播IP資料報

IPV4資料報格式

如上圖所示,一個IP資料報由首部和資料兩部分構成,首部的前一部分是固定長度,共20位元組,是所有IP資料報必須具有的,在首部的固定部分的后面是一些可選欄位,其長度是可變的,下面介紹首部各欄位的意義,
IP資料報首部的固定部分中的各欄位
- 版本:占4位,指IP協議的版本,通信雙方使用的IP協議的版本必須一致,目前廣泛使用的IP協議版本號是4(即IPv4),
- 首部長度:占4位,可表示的最大十進制數值是15,首部長度欄位所表示的單位是32位字(1個32位字長位4位元組),因為IP首部的固定長度是20位元組,因此首部長度欄位的最小值是5(即二進制表示的首部長度是0101).而當首部長度為最大值1111時(即二進制的15),就表明首部長度達到最大值15個32位字長,即60位元組,當IP分組的首部長度不是4位元組的整數倍時,必須使用最后的填充欄位加以填充,
- 區分服務:占8位,這個欄位在舊標準中叫做服務型別,但實際上一直沒有被使用過,1998年,因特網工程任務組IETF把這個欄位改名為區分服務,利用該欄位的不同數值可提供不同等級的服務質量,只有在使用區分服務時,該欄位才起作用,一般情況下不使用該欄位,
- 總長度:總長度指首部和資料之和的長度,單位為位元組,總長度欄位為16位,因此資料包的最大長度為216-1=65535,然而實際上傳送這樣長的資料包在現實中是極少遇見的,
- 標識:占16位,屬于同一個資料報的各分片資料報應該具有相同的標識,IP軟體維持一個計數器,每產生一個資料報,計數器值加1,并將該值賦給標識欄位,
- 標志:占3位,目前為止只有兩位有意義:
- 標志欄位中的最低位記為MF(More Fragment),MF=1即表示后面"還有分片"的資料報,MF=0表示這已經是若干資料報片中的最后一個,
- 標志欄位中的中間一位記為DF(Dont’t Fragment),意思是不能分片,只有當DF = 0才允許分片,
- 片偏移:占13位,片偏移指出;較長的分組在分片后,某片在原分組中的相對位置,也就是說,相對于用戶資料欄位的起點,該片從何處開始,片偏移以8個位元組為偏移單位,也就是說,每個分片的長度一定是8位元組的整數倍,

分片程序如下:假設有這樣一個IP資料報,它有20位元組的固定首部和3800位元組的資料載荷兩部分構成,假設使用以太網傳送該IP資料報,以太網的最大傳送單元MTU為1500位元組,也就是以太網的資料載荷部分最大為1500位元組,無法封裝3820位元組的IP資料報,因此需要將該IP資料報分片成幾個更小的IP資料報,每個長度不能大于1500位元組,然后再將每個分片IP資料報封裝成一個以太網幀繼續傳輸,如上圖,我們可以將原IP資料報的資料載荷分成三個更小的分片,第一個分片從0號位元組到1399位元組,共1400個位元組,第二個分片從1400號位元組到2799號位元組,共1400個位元組,第三個分片從2800位元組到3799號位元組,共1000個位元組,分片結束后,給每個分片重新添加一個首部(首部相關欄位中的資料如表),使之稱為IP資料報, - 生存時間TTL:占8位元,最初以秒為單位,最大生存周期為255秒;現在以"跳數"為單位,路由器轉發IP資料報時,將IP資料報首部中的該欄位的值減1,若不為0則轉發,否則就丟棄,
- 協議:占8位,協議欄位主持此此資料報攜帶的資料是使用何種協議,以便使目的主機的IP層知道應將資料部分上交給哪個協議進行處理,

- 首部校驗和:占16位,只檢驗資料報的首部,不檢驗資料部分,這里不采用 CRC 檢驗碼而采用簡單的計算方法,稱為因特網校驗和,IP資料報每經過一個路由器,路由器都要重新計算首部校驗和,因為某些欄位(生存時間,標志,片偏移等)的取值可能發生變化,由于IP層本身不提供可靠傳輸的服務,并且計算首部校驗和是一項耗時的操作,因此在IPv6中,路由器不再計算首部校驗和,從而更快轉發IP資料報,

- 可變部分:是一個選項欄位,用來支持排錯、測量以及安全等措施,內容很豐富,長度可變,從 1 個位元組到 40 個位元組不等,取決于所選擇的專案,增加了 IP 資料報的功能,但這同時也使得 IP 資料報的首部長度成為可變的,增加了每一個路由器處理資料報的開銷,實際上這些選項很少被使用,
IPV6
現在使用的IP(即IPv4)是在20世紀70年代末期設計的,互聯網經過幾十年的飛速發展,到2011年2月,IPv4的地址已經耗盡,各地區互聯網地址分配機構也相繼宣布地址耗盡,我國在 2014 – 2015 年也逐步停止了向新用戶和應用分配 IPv4 地址,解決IP地址耗盡的根本措施就是采用具有更大地址空間的新版本的 IP,即 IPv6,
IPv6所引進的主要變化如下:
- 更大的地址空間, 將地址從 IPv4 的 32 位 增大到了 128 位,
- 擴展的地址層次結構,可以劃分為更多的層次,
- 靈活的首部格式,定義了許多可選的擴展首部,
- 改進的選項,允許資料報包含有選項的控制資訊,其選項放在有效載荷中,
- 允許協議繼續擴充,更好地適應新的應用,
- 支持即插即用(即自動配置),不需要使用 DHCP,
- 支持資源的預分配,支持實時視像等要求保證一定的帶寬和時延的應用,
- IPv6 首部改為 8 位元組對齊,首部長度必須是 8 位元組的整數倍,
資料報格式

IPv6資料報由兩大部分組成:基本首部 (base header)和有效載荷 (payload),有效載荷也稱為凈負荷,有效載荷允許有零個或多個擴展首部 (extension header),再后面是資料部分,


- 版本(version)—— 4 位,它指明了協議的版本,對 IPv6 該欄位總是 6,
- 通信量類(traffic class)—— 8 位,這是為了區分不同的 IPv6 資料報的類別或優先級,目前正在進行不同的通信量類性能的實驗,
- 流標號(flow label)—— 20 位, “流”是互聯網路上從特定源點到特定終點的一系列資料報, “流”所經過的路徑上的路由器都保證指明的服務質量,所有屬于同一個流的資料報都具有同樣的流標號,
- 有效載荷長度(payload length)—— 16 位,它指明 IPv6 資料報除基本首部以外的位元組數(所有擴展首部都算在有效載荷之內),其最大值是 64 KB,
- 下一個首部(next header)—— 8 位,相當于 IPv4 的協議欄位或可選欄位,
- 跳數限制(hop limit)—— 8 位,源站在資料報發出時即設定跳數限制,路由器在轉發資料報時將跳數限制欄位中的值減 1,當跳數限制的值為零時,就要將此資料報丟棄,
地址
一般來講,一個IPv6資料報的目的地址可以是以下三種基本型別:
- 單播 (unicast):傳統的點對點通信,
- 多播 (multicast):一點對多點的通信,
- 任播 (anycast):IPv6 增加的一種型別,任播的終點是一組計算機,但資料報在交付時只交付其中的一個,通常是按照路由演算法得出的距離最近的一個,

在 IPv6 中,每個地址占 128 位,地址空間大于 3.4 x1038 ,使用冒號十六進制記法(colon hexadecimal notation, 簡寫為 colon hex):16 位的值用十六進制值表示,各值之間用冒號分隔,

零壓縮 (zero compression):一串連續的零可以用一對冒號取代,如上圖,注意:在任一地址中,只能使用一次零壓縮,

CIDR 的斜線表示法仍然可用,但取消了子網掩碼,
分類

路由選擇協議

路由選擇協議屬于網路層控制層面的內容,不僅控制沿著從源主機到目的主機的端到端路徑間的路由器如何轉發資料報,而且控制網路層組件和服務如何配置和管理,細節比較多,感興趣的可以在本篇文章的參考部分查閱資料,
參考
[1]James F. Kurose / Keith W. Ross.計算機網路(原書第7版) 自頂向下方法.機械工業出版社,2018.
[2] 謝希仁. 計算機網路(第7版).電子工業出版社,2017.
[2] https://space.bilibili.com/360996402
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292035.html
標籤:其他
