計算機網絡網絡層IP協議

本文是在學習謝希仁編著的《計算機網絡》一書的網絡層相關知識後,對某些個人認爲是重點內容的部分做出的總結。

本文的將涉及:IP地址劃分,CIDR,ARP,IPv4數據報格式,IP層轉發分組的過程,ICMP,路由選擇協議,IPv6,MPLS.

1. IP地址劃分

首先要清楚,IP地址是給互聯網上每一臺主機或路由器的每一個接口分配一個在全世界範圍內是唯一的32位的標識符,而且是一個軟件地址(有別於MAC地址)。 IP地址由互聯網名字和數字分配機構ICANN(Internet Corporation for Assigned Names and Numbers)進行分配。
IP地址呈現兩級結構,第一級爲網絡號,由IP地址管理機構分配,第二級爲主機號,由運行商自行分配。IP地址的結構可以記爲:
IP地址 ::= { <網絡號>, <主機號> }
傳統的IP地址被劃分爲5類: A, B ,C ,D ,E類。前三類爲單播地址,D類爲多播地址,E類保留爲以後用。每類IP地址的格式詳見《計算機網絡》(謝希仁著,第七版) P119,這裏不多闡述,事實上,由於近年來已經廣泛地使用了無分類的IP地址進行路由選擇,A, B, C類地址的區分已經成爲了歷史。這裏僅介紹一下IPv4中某些特殊的地址:

網絡號 : 主機號 源地址使用 : 目的地址使用 : 意義
0 : 0 可 : 不可 : 用於DHCP協議中向DHCP服務器申請動態IP地址
0 : host-id 可 : 不可 : 本網絡上某臺主機host-id
全1 : 全1 不可 : 可 : 在本網絡上進行廣播(各路由器均不轉發)
net-id : 全1 不可 : 可 : 對網絡net-id中的所有主機進行廣播
127 : 非全0或非全1 可: 可 : 用於本地軟件loopback測試

對於這部分的內容需要注意的是:
[1] 按照互聯網的觀點,一個網絡是隻具有相同網絡號net-id的主機的集合,因此,用轉發器或網橋連接起來的若干個LAN仍然視爲一個網絡,因爲這些LAN都具有同樣的網絡號。只有具有不同的網絡號的局域網才必須使用路由器進行互連。
[2] 主機或路由器可以有多個IP地址。路由器總是具有2個或2個以上 的IP地址。路由器的每一個接口都有一個不同網絡號的IP地址。
[3] 當兩個路由器直接相連時,在連線兩端的接口處,可以分配也可以不分配IP地址,爲了節省IP地址資源,這種情況下現在也常常不分配IP地址。

2. CIDR

由於兩級IP地址的空間利用率有時很低,而且不夠靈活,因此後來出現了劃分子網 (RFC[950]) 的概念,將兩級IP地址變爲三級IP地址。於是這一時期的IP地址就記爲:
IP地址 ::= { <網絡號>, <子網號>, <主機號> }
關於劃分子網的內容,詳見《計算機網絡》P135。

儘管劃分子網在一定程度上緩解了互聯網在發展中遇到的困難,但在1992年互聯網仍然面臨着三個必須儘早解決的問題:
[1] B類地址在1992年已經分配了近一半,很快就將全部分配完畢。
[2] 互聯網主幹網上的路由表中的項目數急劇增長(從幾千個增長到幾萬個)。
[3] 整個IPv4的地址空間最終將全部耗盡。在2011年2月3日,IANA宣佈IPv4地址已經耗盡了。
當時預計前兩個問題將在1994年變得非常嚴重,因此IETF很快就研究出無分類編址的方法來解決前兩個問題。IETF認爲上面第三個問題屬於更加長遠的問題,因此專門成立IPv6工作組負責研究解決新版本IP協議的問題。

無分類編址方法的正式名字就是無分類域間路由選擇CIDR (Classless Inter-Domain Routing)。CIDR最主要的特點有兩個:
[1] CIDR消除了傳統的A類,B類,C類和劃分子網的概念,將IP地址🈶三級編址又變爲了二級編址,但這已經是無分類的兩級編址了,其記法爲:
IP地址 ::= { <網絡前綴>, <主機號> }
[2] CIDR把網絡前綴都相同的連續的IP地址組成一個"CIDR地址塊"。一個CIDR地址塊中有很多地址,所以在路由表中就利用CIDR地址塊來查找目的網絡。這種地址的聚合常稱爲路由聚合,它使得路由表中的一個項目可以表示原來傳統分類地址的很多個路由,有效減少了路由表項,提高查找效率。

對於這部分內容需要注意的是:
[1] 爲了更方便地進行路由選擇,CIDR使用32位的地址掩瑪,這與劃分子網中的子網掩碼很相似,路由表項匹配的時候也是將地址掩碼與目的IP地址進行二進制與運算 (詳細見P137)。
[2] 由於在查找路由表的時候可能會得到不止一個匹配結果,因此應當從匹配結果中選擇具有最長網絡前綴的路由,即最長前綴匹配,詳細可見P145。此外,爲了提高查找路由表的效率,《計算機網絡》一書中還介紹了使用二叉搜索查找路由表,詳見P147。

3. ARP協議

地址解析協議ARP是用來將一個已知的IP地址映射成相應的MAC地址。
ARP協議解決這個問題的方法是在主機的ARP高速緩存, ARP cache中存放一個從IP地址到硬件地址的映射表,並且這個映射表還經常動態更新(新增或刪除)。
ARP協議的工作流程如下:
[1] 當主機A需要知道與其相連的某個局域網上的某臺主機B的硬件地址時,先在ARP cache中查找是否有主機B的硬件地址,若有則直接取出使用,若找不到,則進行下面的操作。
[2] 主機A生成一個ARP請求分組在該局域網上進行廣播,ARP請求分組的內容大致爲:本主機的IP地址+MAC地址,和目的主機的IP地址。
[3] 當該局域網上的主機B收到該ARP請求分組後,檢測到目的IP地址與它的IP地址相匹配,於是將源主機的IP地址和MAC地址寫進ARP cache當中,再生成ARP響應分組,向主機A單播。
[4] 主機A收到主機B的ARP響應分組後,將主機B的IP地址和MAC地址寫進ARP cache中。

這部分內容需要注意的是:
[1] ARP對保存在ARP cache中的每一個映射項目都設置了生存時間(例如,10~20分鐘)。
[2] ARP協議是用來解決同一個局域網上的主機或路由器的IP地址到MAC地址的映射問題。對於不同局域網的主機或路由器,將無法解析出對應的MAC地址(事實上也完全沒必要)。

4. IPv4數據報格式

一個IPv4數據報由首部和數據兩部分組成。首部的前一部分是固定長度,共20字節。具體首部格式和各字段的意義詳細見《計算機網絡》P128。注意一下標識(identification)字段和片位移字段的作用,前者是爲了識別分片後的數據報是否屬於原來同一份數據報,後者是爲了識別分片後的數據報的數據字段在原報文的數據字段中的相對位置

5. IP層轉發分組的過程

首先需要清楚,路由器轉發分組在大多數情況下是根據IP地址的網絡號進行查找轉發的,但也存在一些路由表項是面向特定主機的。這裏假設採用CIDR編址,因此路由表每個路由項中至少有3項內容:目的網絡號/特定主機IP,目的網絡的網絡前綴,下一跳位置。
路由器轉發分組的過程如下:
[1] 取出IP數據報中的目的IP地址D。
[2] 首先將D與直連網絡的網絡前綴逐項進行匹配,具體是執行二進制與運算,成功則執行[7],失敗則進入下一步。
[3] 將D與特定主機的IP地址逐項進行匹配,成功則執行[7],失敗則進入下一步。
[4] 將D與非直連網絡的網絡前綴逐項進行匹配,成功則執行[7],失敗則進入下一步。
[5] 若路由表中具有默認路由,則執行[7],否則執行[6],
[6] 發送ICMP不可達報文。
[7] 取出下一跳的IP地址,送交給數據鏈路層的網絡接口軟件,利用ARP協議解析出對應MAC地址,並將該MAC地址寫進MAC幀的首部,根據這個MAC地址就能找到下一跳路由器/主機的位置。

6. ICMP協議

爲了更有效地轉發IP數據報和提高交付成功的機會,在網絡層使用了網際控制報文協議ICMP (Internet Control Message Protocol) 。ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP報文作爲IP數據報中的數據部分,加上首部後組成IP數據報發出去。
ICMP報文的格式,類型詳見《計算機網絡》P147,這裏只簡單羅列四種常見的ICMP報文類型。

類型值 類型
3 終點不可達
11 時間超過
8 回送(Echo)請求
0 回送(Echo)回答
13 時間戳(Timestamp)請求
14 時間戳(Timestamp)回答

其中,回送請求和回答報文可以用來測試目的地是否可達以及瞭解其有關狀態,時間戳請求和回答報文可用於時鐘同步和時間測量。
ICMP的一個重要應用就是分組網間探測PING(Packet InterNet Groper),用來測試兩臺主機之間的連通性。PING使用了ICMP回送請求會回答報文,由於往返的ICMP報文上都有時間戳,因此也很容易就能算出往返時間。
另一個非常有用的應用就是traceroute(這是UNIX中的名稱),它用來跟蹤一個分組從源點到終點的路徑。traceroute從源主機向目的主機發送一連串的IP數據報,數據報中封裝的是無法交付的UDP用戶數據報(因爲使用了非法端口號),第一個數據報的TTL設置爲1,路徑上第一個路由器是收下它後,將TTL-1變爲0,便發送了ICMP時間超過的報文。這樣一直下去,直到到達目的主機,由於IP數據報中的UDP用戶數據報無法交付,因此目的主機要向源主機發送終點不可達的ICMP報文。

7. 路由選擇協議

從路由算法能否隨網絡的通信量或拓撲自適應地進行調整變化來劃分,則只有兩大類:靜態路由選擇策略和動態路由選擇策略。 靜態路由選擇也叫做非自適應路由選擇,其特點就是簡單和開銷小,但不能及時適應網絡狀態變化,適用於簡單的小網絡。動態路由選擇又叫做自適應路由選擇,特點就是能夠較好地適應網絡狀態變化,但實現起來較複雜,開銷也比較大。動態路由選擇適用於複雜的大網絡。
互聯網採用的路由選擇協議主要是自適應的,分佈式的路由選擇協議,並採用了分層次的路由選擇協議,即把整個互聯網劃分爲許多較小的自治系統(autonomous system, AS)。 AS是在單一技術管理下的一組路由器,而這些路由器使用一種自治系統內部的路由選擇協議和共同的度量。一個AS對其他AS表現出的是一個單一的和一致的路由選擇策略。
在目前的互聯網中,一個大的ISP就是一個自治系統。互聯網把路由選擇協議劃分爲兩大類:
[1] 內部網關協議IGP(Interior Gateway Protocol): 常見的有RIP, OSPF, IS-IS等。
[2] 外部網關協議EGP(External Gateway Protocol): 目前使用的協議是BGP,但目前尚未成爲互聯網標準。
自治系統內的路由選擇稱爲域內路由選擇(intradomain routing),自治系統間的路由選擇成爲域間路由選擇(interdomain routing)。
關於RIP的描述,P153頁開始就已經進行了詳細的描述。若想大致瞭解關於OSPF,BGP,分別可見P159,P163。想要深入地瞭解OSPF,BGP最好還是看相關介紹文檔或書籍(如RFC文件)。

8. IPv6

解決IP地址耗盡的根本措施就是採用具有更大地址空間的新版本IP,即IPv6。不過IPv6目前還只是草案標準 (RFC 2460, 4443, 4862)。
IPv6所引進的主要變化如下:
(1) 更大的地址空間。IPv6把地址從IPv4的32位增大到128位,使空間增大了296倍。
(2) 擴展的地址層次結構。IPv6由於地址空間很大,因此可以劃分爲更多的層次。
(3) 靈活的首部格式。IPv6數據報的首部與IPv4的首部並不兼容。IPv6定義了許多可選的擴展首部,不僅可提供比IPv4更多的功能,而且可以提高路由器的處理效率 (這是因爲路由器對擴展首部,除逐跳擴展首部外,並不進行處理)。
(4) 改進的選項。IPv6的首部長度是固定的,數據包中含有的選項信息被放在有效載荷中,這與IPv4是放在首部中是不同的。
(5) 允許協議繼續擴充。這一點很重要,因爲技術總是在不斷地發展,而新的應用也還會出現。
(6) 支持即插即用,即自動配置。因此IPv6不需要使用DHCP。
(7) 支持資源的預分配。IPv6支持實時視像等要求保證一定的帶寬和時延的應用。
(8) IPv6首部改爲8字節對齊。原來的IPv4是4字節對齊的。
IPv6數據報由兩大部分組成,即基本首部(base header)和後面的有效載荷(payload)。有效載荷也稱爲淨載荷,其允許有零個或多個擴展首部(extension header),再後面就是數據部分。需要注意的是,所有擴展首部並不屬於IPv6數據報的首部。
IPv6首部的長度固定爲40字節,分爲8個字段。IPv6數據包雖然可以支持許多功能,但是首部並不複雜,因爲它只有8個字段。關於IPv6的首部格式及各字段的意義,詳見P172。若想要更加深入地瞭解IPv6,建議閱讀相關專業文檔或書籍。

IPv6的地址分類

IPv6地址有三種基本類型:
(1) 單播(unicast):單播就是傳統的點對點通信。
(2) 多播(multicast):多播是一對多的通信。IPv6沒有廣播的術語,而是將廣播看作多播的一個特例。
(3) 任播(anycast):IPv6新增的一種類型。任播的終點是一組計算機,但數據報是交付給其中一個,通常是距離最近的一個。
IPv6的地址分類如下表(RFC 4291):

地址類型 二進制前綴
未指明地址 0:0:0:0:0:0:0:0,或記爲::/128
環回(loopback)地址 0:0:0:0:0:0:0:1,或::1/128
多播地址 FF00::/8
本地鏈路單播地址 FE80::/10
全球單播地址 除上述四種外,所有其他二進制前綴

其中未指明地址只能爲某臺主機當作源地址使用,條件是這臺主機還沒有配置到一個標準的IP地址;本地鏈路單播地址(Link-Local Unicast Address)用於專用網。

IPv4向IPv6過渡

IPv4向IPv6過渡的策略 (介紹兩種):
(1) 雙協議棧(dual stack): 指在完全過渡到IPv6之前,使一部分主機或路由器裝有IPv4和IPv6的協議棧。因此雙協議棧主機 (路由器)即能夠和IPv6的系統通信,又能夠和IPv4的系統通信。
(2) 隧道技術(tunneling): 在IPv6數據報要進入IPv4網絡之前,把IPv6的數據報封裝成爲IPv4,IPv6整個數據報作爲IPv4的數據部分。
關於這兩種技術的詳介,見P176。

ICMPv6

IPv6同IPv4一樣也需要使用ICMP來反饋一些差錯信息。新的版本稱爲ICMPv6,它比ICMPv4複雜得多,地址解析協議ARP和網際管理協議IGMP的功能都已被合併到了ICMPv6
ICMPv6是面向報文的協議,它利用報文來報告差錯,獲取信息,探測鄰站或管理多播通信。ICMPv6增加了幾個定義報文功能及含義的其他協議。

MPLS

MPLS全稱爲多協議標記交換(MultiProtocol Label Switching),“多協議"表示MPLS的上層可以採用多種協議。MPLS作爲一種IP增強技術,被廣泛地應用在互聯網中。
MPLS的一個重要特點就是在MPLS域入口結點處,給每一個IP數據報打上固定長度的"標記”,然後對打上標記的IP數據報用硬件進行轉發,這使得IP數據報轉發的過程大大加快了。採用硬件技術對打上標記的IP數據報進行轉發就稱爲標記交換。"交換"表示在轉發時不必上升到第三層查找轉發表,而是根據標記在第二層用硬件進行轉發
MPLS域(MPLS domain)是指該域中有許多彼此相鄰的路由器,並且所有路由器都是支持MPLS技術的標記交換路由器LSR(Label Switching Router)。LSR同時具有標記交換和路由選擇兩種功能,標記交換功能是爲了快速轉發,但在這之前LSR需要使用路由選擇功能進行構造轉發表

MPLS的基本工作流程

(1) MPLS域中各LSR用專門的標記分配協議LDP(Label Distribution Protocol) 交換報文,並找出和特定標記相對應的路徑,即標記交換路徑LSP(Label Switching Path)。構造轉發表的詳細步驟可閱讀RFC 3031。
需要注意,MPLS是面向連接的,因爲在LSP上的第一個LSR就根據IP數據報的初始標記確定了整個LSP,就向虛連接一樣。這種"由入口結點確定轉發路徑"稱爲顯式路由選擇(explicit routing)
(2) 當一個IP數據報進入到MPLS時,MPLS入口結點(ingress node) 就給它打上標記 (實則是插入MPLS首部),並按照轉發錶轉發給下一個LSR,以後所有的LSR都按照標記來進行轉發。打上標記的過程叫做分類(classification)
(3) LSP上各LSR對數據報進行轉發和標記對換(label swapping)
(4) 當IP數據報離開MPLS域時,MPLS出口結點(egress node) 就把MPLS標記去掉,把IP數據報交付給非MPLS的主機或路由器,以後就按照普通方法轉發數據報。

轉發等價類FEC

MPLS有一個很重要的概念就是轉發等價類FEC(Forwarding Equivalence Class)。所謂FEC,就是路由器按照同樣方式對待的IP數據報的集合。這裏"按照同樣方式對待"表示從同樣接口轉發到同樣的下一跳地址,並且具有同樣服務類別和同樣丟棄優先級。
FEC的例子時:
(1) 目的IP地址與某一個特定IP地址的前綴匹配的IP數據報(相當於普通的IP路由器)。
(2) 所有源地址域目的地址都相同的IP數據報。
(3) 具有某種服務質量需求的IP數據報。
劃分FEC的方法不受限制,由網絡管理員來控制,因此非常靈活。入口結點ingress node並不是給每一個IP數據報都指派不同的標記,而是將屬於同樣FEC的IP數據報都指派同樣的標記。FEC和標記時一一對應的關係。

MPLS首部的位置和格式

MPLS首部就在第二層和第三層之間。在把加上MPLS首部的IP數據報封裝成以太網幀時,以太網的類型字段在單播的情況下設置爲8846(16),在多播情況下爲8848(16)。這樣,接收方可以用幀的類型來判決這個幀時攜帶了MPLS標記還是一個常規的IP數據報。
"給IP數據報打上標記"其實就是在以太網幀的首部和IP數據報的首部之間插入一個4字節的MPLS首部。具體的標記就在"標記值"這個字段中。
MPLS首部的格式詳見P193。

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