讀書筆記 ---- 《計算機網路—謝希仁第7版》---- 第4章 網路層(上篇)
上一篇:資料鏈路層:https://blog.csdn.net/pcwl1206/article/details/83863677
下一篇:網路層下篇:https://blog.csdn.net/pcwl1206/article/details/84098381
本章節目錄:
4.2.7 IP資料報的格式 --- 重要
第4章:網路層
4.1 網路層提供的兩種服務 -- 瞭解即可
網路層向運輸層提供兩種服務:虛電路服務和資料報服務。鑑於TCP/IP體系的網路層提供的是資料報服務,因此下面我們討論都是圍繞網路層如何傳送IP資料報
下面給出一幅圖用來說明主機H1向主機H2傳送資料的過程:
虛電路服務與資料報服務的主要區別:
4.2 網際協議IP【重點】
網際協議IP是TCP/IP體系中兩個最主要的協議之一。
與IP協議配套使用的還有三個協議:
(1)網址解析協議ARP(Address Resolution Protocol);
(2)網際控制報文協議ICMP(Internet Control Message Protocol);
(3)網際組管理協議IGMP(Internet Group Management Protocol)
如下圖所示,這三個協議在網路層的位置。ARP在最下面,因為IP協議經常要使用這個協議。ICMP和IGMP在最上面,是因為它們要使用IP協議。
4.2.1 虛擬網際網路
4.2.1.1 網路互連的裝置
中間裝置又稱為中間系統或中繼系統:
物理層使用的中間裝置是:轉發器(repeater);
資料鏈路層的中間裝置是:網橋或者橋接器(bridge);
網路層使用的中間裝置是:路由器(router);
網路層以上使用的中間裝置:閘道器(gateway),【ps:這是以前的方式,現在的閘道器一般都指路由器的介面了】
ps:如果計算機沒有配置閘道器【即:沒有接路由器】,則訪問不了其他網段的計算機,只能訪問本網段的。
4.2.1.2 虛擬網際網路定義
所謂虛擬網際網路也就是邏輯網際網路絡,它的意思就是互連起來的各種物理網路的異構性本來是客觀存在的,但我們利用IP協議使這些效能各異的網路在網路層看起來好像是一個統一的網路。如下圖所示:
4.2.2 分類的IP地址
IP地址的編址方法共經過了三個歷史階段:分類的IP地址、子網的劃分以及構成超網。
4.2.2.1 分類IP地址的概念
分類的IP地址:是將IP地址劃分為若干個固定類,每一類地址都由兩個固定長度的欄位組成,其中一個欄位是網路號(net-id),它標誌主機(或路由器)所連線到的網路。一個網路號在整個網際網路範圍內必須是唯一的。第二個欄位是主機號(host-id),它標誌該主機(或路由器)。一個主機號在它前面的網路號所指明的網路範圍內必須是唯一的。因此,一個IP地址在整個網際網路範圍內是唯一的。
這種兩級的IP地址可以記為: IP地址 ::= {<網路號>,<主機號>}
下圖用來說明IP地址中的網路號欄位和主機號欄位,A~E類地址:
下面給出一張二進位制和十進位制之間的轉換的圖片,便於直觀感受分類的IP地址是怎麼計算出來的。
4.2.2.2 常用的三種類別的IP地址
常用的是A類(佔總IP地址50%)、B類(佔總IP地址25%)和C類(佔總IP地址12.5%),下面給出它們的IP地址指派範圍:
主機部分不能全為1或者全為0。全為1代表廣播,全為0代表這個網段。
說明:特殊的幾個IP地址:
127.0.0.1:本地環回測試,網路號為127的都是;
169.254.0.0:動態獲取IP失敗,零時用的;
下面幾個是保留的私網地址:【網際網路上的路由器找不到的】
10.0.0.0:保留給一些政府單位或者學校用;
172.16.0.0 --- 172.31.0.0
192.168.0.0 --- 192.168.255.0
4.2.2.3 IP地址的一些重要特點
(1)每一個IP地址都是由網路號和主機號兩部分組成。路由器僅根據目的主機所連線的網路號來轉發分組(而不考慮目的主機號),這樣就可以使路由表中的專案數大幅度減少,從而減小了路由表所佔的儲存空間以及查詢路由表的時間;
(2)實際上IP地址是標誌一臺主機(或路由器)和一條鏈路的介面。當一臺主機同時連線到兩個網路上時,該主機就必須具有兩個相同的IP地址,必須是網路號不同的。所以,路由器是用來連線不同網路的,所以一個路由器應當至少有2個IP地址。這就好比一個建築正好處在北京路和上海路的交叉口上,那麼這個建築就可以擁有兩個門牌號,例如:北京路4號和上海路37號;
(3)用轉發器或網橋連線起來的若干個區域網仍為一個網路,因為它們的網路號相同。具有不同網路號的區域網必須使用路由器進行互聯;
(4)在IP地址中,所有分配到的網路號的網路都是平等的。所謂平等,就是指網際網路同等對待每一個IP地址。
4.2.3 子網的劃分
從兩級IP地址到三級IP地址:網路號、子網號、主機號,可以用下面的記法來表示子網的IP形式:
三級IP地址可以表示為:IP地址 ::= {<網路號>, <子網號>, <主機號>}
4.2.3.1 為什麼要劃分子網呢?
(1)IP地址的利用率有時很低。比如,有的公司申請一個B類地址的網路,但是所連線的主機並不多,但是又不願意換成C類,因為留著備用,但是一個B類地址可連線的主機數超過了6萬,這就造成了很大的浪費;
(2)給每一個物理網路分配一個網路號會使路由表變得太大,因而使網路效能變壞(主機太大,路由表存的就多,每次查詢的時候就會變慢);
(3)兩級IP地址不夠靈活。
4.2.3.2 劃分子網的基本思路
(1)劃分完子網後,本單位以外的網路是看不見這個子網的,對於它們來說這個單位仍然表現為一個網路;
(2)三級IP地址可以表示為:IP地址 ::= {<網路號>, <子網號>, <主機號>};
(3)凡是從其他網路傳送給本單位某臺主機的IP資料報,仍然根據資料報的目的網路號找到連線到本單位網路上的路由器。但此路由器在收到IP資料報後,再按目的網路號和子網號找到目的子網,將資料報交給目的主機。
4.2.3.3 子網劃分的幾個案例
劃分子網的時候比較關注兩個工作:確定子網掩碼和能用的IP開始地址和結束地址。
【案例1:C類網路等分成兩個子網】下面舉個例子,某公司要將現在的192.168.0.0這個網段劃分為兩個子網段:
【案例2:C類網路等分成四個子網】
【案例3:C類網路等分成八個子網】
說明:點到點的子網掩碼是252,因為它劃分到[0 4,8, .... 255]一共劃分了6次,子網掩碼往後移了6位,則子網掩碼為:255.255.255.252。
【案例4:判斷IP地址所屬網段】
【擴充套件案例5:對B類網路進行劃分】
對172.16.0.0網段、子網掩碼:255.255.0.0進行子網劃分:
第一個子網段為:172.16.0.1 ~ 172.16.127.254
第二個子網段為:172.16.128.1 ~ 172.16.255.254
4.2.3.4 子網掩碼
一個網路中的路由器怎麼找到子網,將資料報傳送給它呢?從IP資料報的首部是無法看出源主機或者目標主機是否進行了子網劃分,這個時候就需要使用子網掩碼了。
子網掩碼的特點:網路號部分都為1,主機部分都為0。所以都是255.255.***,***形式(以B類地址為例)。
使用子網掩碼的好處:不管網路有沒有劃分過子網,只要把子網掩碼和IP地址進行逐位的“與”(AND)運算,就可以立即得出網路地址。如下面的例子所示:
上面這個例子比較簡單,子網掩碼比較簡單。在對一個網路進行多次子網劃分的時候,子網掩碼非常重要,只有先計算出了子網掩碼,才能直到對應的子網IP段。
子網掩碼是一個網路或一個子網的重要屬性。RFC950中規定:路由器在和相鄰路由器交換路由資訊時,就必須把自己所在網路或者子網的子網掩碼告訴相鄰的路由器。在路由器的路由表中的每一個專案,除了要給出目的網路地址外,還必須同時給出該網路的子網掩碼。
劃分子網增加了靈活性,但卻減少了能夠連線在網路上的主機總數。(每個子網的第一個和最後一個IP都沒法用)
4.2.4 無分類編址CIDR(構造超網)
4.2.4.1 網路字首
無分類編址的正式名字為:無分類域間路由選擇CIDR(Classless Inter-Domain Routing,CIDR讀作”sider“)。
CIDR主要的兩個特點:
(1)CIDR消除了傳統的A類、B類和C類地址以及子網的概念。CIDR將32位的IP地址劃分為前後兩個部分。前部分是”網路字首“,用來指明網路,後面的部分用來指明主機。因此無分類的兩級編址為:
IP地址 :== {<網路字首>, <主機部分>}
(2)CIDR將網路字首都相同的連續的IP地址組成一個”CIDR地址塊“。知道CIDR地址快中的任何一個地址,就可以知道這個地址塊的最小地址和最大地址,以及地址塊中的地址數。如下圖所示案例:
路由聚合:
由於一個CIDR塊地址塊中有很多地址,所以在路由表中就利用CIDR地址塊來查詢目的網路。這種地址的聚合稱為路由聚合。
構造超網:
將網路字首往左移動就可以將一個擴大當前的網路數,向左移動的越多,新構建出的網路數越多,這個過程稱為構造超網。
【案例:合併兩個網段】
合併網路的規律總結:
4.2.4.2 最長字首匹配
CIDR中的IP地址用網路字首和主機兩部分表示。因而,路由表中的每個專案由”路由字首“和”下一跳地址“組成,但是在查詢路由表時可能會得到不止一個匹配結果,應當從匹配結果中選擇具有最長網路字首的路由。這叫做最長字首匹配,因為網路的字首越長,地址塊就越小,因而路由就越具體。故又稱為最佳匹配。
4.2.4.3 使用二叉線索查詢路由表
為了更加有效的查詢,通常是把無分類地址的路由表存放在一種層次的資料結構中,然後自上而下地按層次進行查詢。這裡最常用的就是二叉索引(binary trie),它是一種特殊結構的樹。IP地址中從左到右的位元值決定了從根節點逐層向下層延申的路徑,而二叉線索中的各個路徑就代表路由表中存放的各個地址。
說明:圖中小圓圈代表中間節點、小方框代表葉子節點(每個葉節點代表唯一字首)
從二叉線索的根節點自頂向下的深度最多32層,每一層對應IP地址中的一位。一個IP地址存入二叉索引的規則也很簡單。先檢查IP地址左邊的第一位,如果為0,則第一層的節點就在根節點的左下方,如果為1,則在右下方。然後再檢查地址的第二位,構造出第二層的結點,以此類推,直至唯一字首的最後一位。圖中加粗的就是字首0101在這個二叉線索中的路徑。
這裡需要說明:二叉線索只是提供了一種可以快速在路由表中找到匹配的葉節點的機制。但這是否和網路字首匹配,還要和子網掩碼進行一次邏輯與的運算。
4.2.5 IP地址與硬體地址 ---- 重要
如下圖所示,實體地址(MAC地址)是資料鏈路層和物理層使用的地址,而IP地址是網路層和以上各層使用的地址,是一種邏輯地址。
在傳送資料時,資料從高層下到低層,然後才到通訊鏈路上傳輸。使用IP地址的IP資料報一旦交給了資料鏈路層,就被封裝成了MAC幀了。MAC在傳送時使用的源地址和目的地址都是硬體地址,這兩個硬體地址都寫在了MAC幀的首部了。
總之:IP地址放在IP資料報的首部,而硬體地址放在MAC幀的首部。在網路層和網路層以上使用IP地址,而在資料鏈路層及以下使用硬體地址。當IP資料報放入資料鏈路層的MAC幀後,整個的IP資料報都成為了MAC幀的資料,因而在資料鏈路層是看不見資料報的IP地址的。
下面介紹下:計算機A和計算機B通訊的過程:
由上圖中計算機A和計算機B的通訊過程,我們可以得出以下結論:
1、交換機基於資料幀的MAC地址轉發資料幀,路由器基於資料包的IP地址轉發資料包;
2、資料包在傳輸過程中不變,過網路裝置時,資料幀要用新的物理層地址重新封裝;---- 即MAC地址變化
3、MAC地址決定了資料幀下一跳哪個裝置接收,而IP地址決定了資料包的起點和終點。
4.2.6 地址解析協議ARP ---- 重要
ARP協議作用:將網路層使用的IP地址解析出資料鏈路層使用的硬體地址(即:MAC地址)。
RARP協議作用:也叫逆向ARP,它的作用是使只知道自己硬體地址的主機能夠通過RARP協議找出其IP地址。但是現在的DHCP協議已經包含了RARP協議的功能了。
如下圖所示的ARP和逆向ARP過程:
每一臺主機都設有一個ARP快取記憶體,裡面有本區域網上的各主機和路由器的IP地址到硬體地址的對映表。那麼主機是怎樣知道這些地址的呢?看下面主機A向主機B傳送一個數據包的過程:
當主機A向本區域網中的主機B傳送IP資料報時,就先在其ARP快取記憶體中檢視有無主機B的IP地址。如果有,就在ARP快取記憶體中查出其對應的硬體地址,再把這個硬體地址寫入MAC幀,然後再通過區域網把該MAC幀發往此硬體地址。
如果在ARP快取記憶體中沒有查到主機B的IP地址,那麼主機A就自動執行ARP,再按照下面的步驟找出主機B的硬體地址:
(1)主機A的ARP程序在本區域網上廣播發送一個ARP請求分組,內容包括自己的IP地址和MAC地址以及要找的主機IP地址;
(2)在本區域網上的所有主機上執行的ARP程序都收到ARP請求分組;
(3)主機B的IP地址與ARP請求分組中要查詢的IP地址一致,就收下這個ARP請求分組,並向主機A傳送ARP響應分組,同時將這個ARP相應分組中寫入自己的硬體地址,同時也會將主機A的IP到硬體地址的對映寫入自己的ARP快取記憶體。
(4)主機A收到主機B的ARP響應分組後,就在其ARP快取記憶體中寫入主機B的IP地址到硬體地址的對映。
說明:為了防止硬體地址的變更而導致通訊故障,ARP對儲存在快取記憶體中的每一個對映地址專案都設定生存時間,凡超過生存時間的專案就從快取記憶體中刪掉。
4.2.7 IP資料報的格式
IP資料報的完整格式如下所示:
一個IP資料報由首部和資料兩部分組成。首部的前一部分是固定長度,共20個位元組,是所有IP資料報必須具有的。在首部的固定部分的後面是一些可選欄位,其長度是可變的。首部各欄位的意義如下所示:
1、版本:佔4位,指IP協議的版本,是4還是6;
2、首部長度:佔4位,5~15;
3、區分服務:實時性要求高不高決定要不要用;
4、總長度:指首部和資料之和的長度,單位為位元組。總長度欄位為16位,因此資料報的最大長度為:2^16 - 1 = 65535位元組。但是IP層下面的資料鏈路層中的一個數據幀中的資料欄位最大傳輸單元MTU為1500,所以,如果資料報的長度超過了MTU,需要進行分片處理;
5、標識:佔16位,用於標識分片後的資料報,最後能組裝成原來的資料報;
6、標誌:MF=1,後面還有分片;MF=0,後面沒有分片了;DF:不能分片。(MF:More Fragment DF:Donot Fragment)
7、片偏移:佔13位,相對於使用者資料起點,該片從何處開始。片偏移以8位元組位偏移單位,看後面的圖片示例;
8、生存時間:佔8位,TTL(Time To Live),單位為跳數。路由器沒轉發資料報之前就把TTL值減1,最大數值為255;
9、協議:佔8位,標記上層需要使用哪個協議進行處理,常用的協議欄位如下圖所示;
10、首部檢驗和:佔16位,只檢驗資料報的首部,不包括資料部分;
11、源地址:佔32位,4位元組;
12、目的地址:佔32位,4位元組。
13、可變部分:用來支援排錯、測量以及安全等措施,很少被使用。
4.2.8 IP層轉發分組的流程
在網際網路上轉發分組的時候,是從一個路由器轉發到下一個路由器。
4.2.8.1 路由表
路由表中,每一條路由最主要的兩個資訊是:目的網路地址和下一跳地址。
說明:
(1)從上圖可以看出來,與路由器R2直連的網路不需要路由表,可以之間交付。但是沒有直連的網路則需要路由表來指明目的主機所在的網路以及下一跳的地址;
(2)圖中每一個路由器都連線兩個網路,則每一個路由器都有兩個不同的IP地址。
4.2.8.2 分組轉發演算法
1、從資料報的首部提取目的主機的IP地址D,得出目的網路地址為N;
2、若N就是與此路由器直接相連的某個網路地址,則進行直接交付,不需要再經過其他路由器,直接把資料報交付目的主機(這裡包括把目的主機地址D轉換為具體的硬體地址,把資料報封裝為MAC幀,再發送幀);否則就是間接交付,執行3;
3、若路由表中有目的地址為D的特定主機路由,則把資料報傳送給路由表中所指明的下一跳路由器;否則,執行4;
4、若路由表中沒有達到網路N的路由,則把資料報傳送給路由表中所指明的下一跳由器;否則,執行5;
5、若路由表中有一個預設路由,則把資料報傳送給路由表中所指明的預設路由器;否則執行6;
6、報告轉發分組出錯。
說明:上訴過程不適用於子網,子網中還需要用各網路的子網掩碼和D逐位”與“操作。
說明:路由表並沒有給分組指明到某個網路的完整路徑(即先經過哪一個路由器,然後再經過哪一個路由器,等等)。路由表指出,到某個網路應該先到某個路由器(即下一跳路由器),在到達下一跳路由器後,再繼續查詢路由表,知道下一步應當到哪一個路由器。這樣一步一步地查詢下去,直到最後到達目的網路。
【案例1】如下圖所示:計算機PC0如果ping計算機PC1,網路要想通,要求沿途的路由器Router1~Router3都必須有到192.168.0.2/24的路由,這樣資料包才能到達PC1。同樣,PC1要回應資料給PC0,沿途的路由器必須到192.168.0.0/24網路的路由,這樣資料報才能回來。
4.3 網際控制報文協議ICMP
為了更有效地轉發IP資料報和提高交付成功的機會,在網際層使用了網際控制報文協議ICMP(Internet Control Message Protocol)。ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP報文作為IP層資料報的資料,加上資料報的首部,組成IP資料報傳送出去。
4.3.1 ICMP報文的種類
ICMP報文有兩種:ICMP差錯報告報文和ICMP詢問報文。
幾種常用的ICMP報文型別如下表所示:
下面對差錯報告報文中的改變路由做個簡單的解釋:
在網際網路的主機中也要有一個路由表。當主機要傳送資料報時,首先是查詢主機自己的路由表,看應當從哪一個口把資料報傳送出去。但是在網際網路中的主機的數量遠大於路由器的數量,出於效率的考慮,這些主機不和連線在網路上的路由器定期交換路由資訊。在主機剛開始工作的時候,一般都在路由表中設定一個預設的路由器的IP地址。不管資料報要傳送到哪個目的地址,都一律先把資料報傳送給這個預設的路由器,而這個預設的路由器知道到每一個目的網路的最佳路由(通過和其他路由器交換路由資訊)。如果預設的路由器發現主機發往某個目的網路的資料報的最佳路由應當經過網路上的另一個路由器R時,就用改變路由報文把這種情況告訴主機。於是,該主機就在其路由表中增加一個專案:到某某目的地址應該經過路由器R(而不是預設路由器)。
4.3.2 ICMP的應用舉例
ICMP的一個重要的應用就是分組網間探測PING(Packet InterNet Groper),用來測試兩臺主機之間的連通性。PING使用了ICMP回送請求和回送回答報文。PING是應用層直接使用網路層ICMP協議的一個例子。它沒有通過運輸層的TCP或者UDP。
具體應用:
ping 目標主機名/IP : 檢視網路通不通、往返時間等等資訊
tracert 目標主機IP:跟蹤路由,檢視從源主機到達目標主機所經過的路由器的IP地址,以及到達其中每一個路由器的往返時間;(說明:Linux下該命令為traceroute)
pathping 目標主機IP:功能同tracert。