討論網(wǎng)絡(luò)互連問題,也就是討論多個(gè)網(wǎng)絡(luò)的各種問題。互聯(lián)網(wǎng)的核心內(nèi)容是網(wǎng)際協(xié)議IP,這是整個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的一個(gè)重要內(nèi)容。只有較深入地掌握了IP的主要內(nèi)容,才能理解因特網(wǎng)是怎樣工作的。我們還要重點(diǎn)討論因特網(wǎng)的路由選擇協(xié)議,以及介紹因特網(wǎng)控制報(bào)文協(xié)議ICMP和因特網(wǎng)組管理協(xié)議IGMP。最后簡(jiǎn)要地討論下一代的網(wǎng)際協(xié)議IPv6的主要內(nèi)容。
最重要的概念是:
(1)IP地址與物理地址的關(guān)系。
(2)傳統(tǒng)的分類IP地址(包括子網(wǎng)掩碼)和無分類域間路由選擇CIDR。
(3)路由選擇協(xié)議的工作原理。
請(qǐng)讀者對(duì)上述概念務(wù)必弄清楚。
在現(xiàn)實(shí)世界中,單一的網(wǎng)絡(luò)無法滿足各種用戶的多種需求。因此,我們經(jīng)常使用的計(jì)算機(jī)網(wǎng)絡(luò)往往由許多種不同類型的網(wǎng)絡(luò)互連而成。通常在談到“互連”時(shí),就已暗示這些通過各種網(wǎng)絡(luò)互相連接的計(jì)算機(jī)不僅僅在物理上是連通的,更重要的是它們能進(jìn)行通信。那么,這些網(wǎng)絡(luò)是怎樣連接起來的呢?是通過許許多多的路由器。路由器在網(wǎng)絡(luò)互連中起著關(guān)鍵的作用。因此,我們要對(duì)路由器有更加深入一些的了解。下面先弄清兩種不同的交付:直接交付和間接交付。
圖7-1直接交付和間接交付
現(xiàn)在,主機(jī)A要把數(shù)據(jù)報(bào)發(fā)送給連接在另一個(gè)網(wǎng)絡(luò)上的主機(jī)C。這時(shí)主機(jī)A應(yīng)把數(shù)據(jù)報(bào)發(fā)送給本網(wǎng)絡(luò)上的某個(gè)路由器(R1),由路由器R1按照轉(zhuǎn)發(fā)表指出的路由把數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給下一個(gè)路由順(R2)。這就叫做間接交付。按照同樣的方法,路由器R2又用間接交付的方法把數(shù)據(jù)報(bào)傳送給另一個(gè)路由器R3。R3與目的主機(jī)C在同一個(gè)網(wǎng)絡(luò)上,因此,最后一步就由路由器R3把數(shù)據(jù)報(bào)直接交付給目的主機(jī)C。
總之,A傳送到B是直接交付,而A傳送到C則要分幾步走:A傳送到R1,再傳送到R2,然后傳送到R3,這些都是間接交付,最后由R3傳送到C才是直接交付。
下面討論路由器的組成。
路由器是一種有多個(gè)輸入端口和多個(gè)輸出端口的專用計(jì)算機(jī),其任務(wù)是轉(zhuǎn)發(fā)組。也就是說,路由器某個(gè)輸入端口收到分組后,按照分組要去的目的地(即目的網(wǎng)絡(luò)),把該分組從某個(gè)合適的輸出端口轉(zhuǎn)發(fā)給下一跳路由器。下一跳路由器也按照這種方法處理分組,直到該分組到達(dá)目的地為止。路由器的轉(zhuǎn)發(fā)分組正是網(wǎng)絡(luò)層的主要工作。路由器框架如圖7-2所示。
圖7-2 典型的路由器結(jié)構(gòu)
整個(gè)路由器結(jié)構(gòu)可劃分為兩大部分,即路由選擇部分和分組轉(zhuǎn)發(fā)部分。
路由選擇部分也叫做控制部分,其核心構(gòu)件是路由選擇處理機(jī)。路由選擇處理機(jī)的任務(wù)是根據(jù)所選定的路由選擇協(xié)議構(gòu)建出路由表,同時(shí)經(jīng)常地或定期地和相鄰路由器交換路由信息,從而不斷地更新和維護(hù)路由表。關(guān)于怎樣根據(jù)路由選擇協(xié)議構(gòu)建和更新路由表,我們將在后面幾節(jié)詳細(xì)討論。
分組轉(zhuǎn)發(fā)部分是本節(jié)所要討論的問題,它由3部分組成,即交換結(jié)構(gòu)、一組輸入端口和一組輸出端口。下面分別討論每一部分的組成。
交換結(jié)構(gòu)又稱為交換組織,它的作用就是根據(jù)轉(zhuǎn)發(fā)表對(duì)分組進(jìn)行處理,將某個(gè)輸入端口進(jìn)入的分組從一個(gè)合適的輸出端口轉(zhuǎn)發(fā)出去。交換結(jié)構(gòu)本身就是一種網(wǎng)絡(luò),但這種網(wǎng)絡(luò)完全包含在路由器之中,因此,交換結(jié)構(gòu)可看成是“在路由器中的網(wǎng)絡(luò)”。
在上一章已經(jīng)提到過“轉(zhuǎn)發(fā)”和“路由選擇”的區(qū)別。在互聯(lián)網(wǎng)中,“轉(zhuǎn)發(fā)”就是路由器根據(jù)轉(zhuǎn)發(fā)表將用戶的IP數(shù)據(jù)報(bào)從合適的端口轉(zhuǎn)發(fā)出去。但“路由選擇”則是按照復(fù)雜的分布式算法,根據(jù)從各相鄰路由器所得到的關(guān)于整個(gè)網(wǎng)絡(luò)的拓?fù)渥兓闆r,動(dòng)態(tài)地改變所選擇的路由。路由表是根據(jù)路由器選擇算法得出的。因此,路由表一般僅飽含從目的網(wǎng)絡(luò)到下一跳(以IP地址表示,下一節(jié)就討論什么是IP)的映射。而轉(zhuǎn)發(fā)表是從路由表得出的。轉(zhuǎn)發(fā)表必須包含完成轉(zhuǎn)發(fā)功能所必須的信息。這就是說,在轉(zhuǎn)發(fā)表的每一行必須包含從要到達(dá)的目的的網(wǎng)絡(luò)到輸出端口和某些MAC地址信息(如下一跳的以太網(wǎng)地址)的映射。MAC地址需要通過ARP協(xié)議才能得出(這些內(nèi)容將在7、2、3節(jié)介紹)。將轉(zhuǎn)發(fā)表和路由表用不同的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)會(huì)帶來一些好處,這是因?yàn)樵谵D(zhuǎn)發(fā)分組時(shí),轉(zhuǎn)發(fā)表的結(jié)構(gòu)應(yīng)當(dāng)使查找過程最優(yōu)化,但路由表則需要對(duì)網(wǎng)絡(luò)拓?fù)渥兓挠?jì)算最優(yōu)化。路由表總是用軟件實(shí)現(xiàn)的,但轉(zhuǎn)發(fā)表甚至可用特殊的硬件來實(shí)現(xiàn)。請(qǐng)讀者注意,在討論路由選擇的原理時(shí),往往不去區(qū)分轉(zhuǎn)發(fā)表和路由表的區(qū)別,而是籠統(tǒng)地使用路由表這一名詞。
在路由器的輸入和輸出端口里面有3個(gè)方框,方框1、2、3分別代表物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層的處理模塊。物理層進(jìn)行比特的接收。數(shù)據(jù)鏈路層則按照鏈路層協(xié)議接收傳送分組的幀。在將幀的首部和尾部剝?nèi)ズ?,分組就被送入網(wǎng)絡(luò)層的處理模塊。若接收到的分組是路由器之間交換路由信息的分組(如RIP或OSPF分組等),則將這種分組送交路由器的路由選擇部分中的路由選擇處理機(jī)。若接收到的是數(shù)據(jù)分組,則按照分組首部中的目的地址查找轉(zhuǎn)發(fā)表,根據(jù)得出的結(jié)果,分組就經(jīng)過交換結(jié)構(gòu)到達(dá)合適的輸出端口。一個(gè)路由器的輸入端口和輸出端口就做在路由器的線路接口卡上。
輸入端口中的查找和轉(zhuǎn)發(fā)功能在路由器的交換功能中最重要。為了使交換功能分散化,往往將復(fù)制的轉(zhuǎn)發(fā)表放在每一個(gè)輸入端口中。路由選擇處理機(jī)負(fù)責(zé)對(duì)各轉(zhuǎn)發(fā)表的副本進(jìn)行更新。
以上介紹的查找轉(zhuǎn)發(fā)表和轉(zhuǎn)發(fā)分組的概念雖然并不復(fù)雜,但在具體的實(shí)現(xiàn)中還是會(huì)遇到不少困難。問題就在于路由器必須以很高的速率轉(zhuǎn)發(fā)分組。最理想的情況是輸入端口的處理速率能夠跟上線路將分組傳送到路由器的速率。這種速率稱為線速??梢源致缘毓浪阋幌隆8呔€路是OC-48鏈路,即2.5Gbit/s。若分組長(zhǎng)度為256字節(jié),那么線速就應(yīng)當(dāng)達(dá)到每秒能夠處理100萬以上的分組?,F(xiàn)在常用Mpps(百萬分組每秒)為單位來說明一個(gè)路由器對(duì)收到的分組的處理速率有多高。在路由器的設(shè)計(jì)中,怎樣提高查找轉(zhuǎn)發(fā)表的速率已經(jīng)成為一個(gè)十分重要的研究課題。
當(dāng)一個(gè)分組正在查找轉(zhuǎn)發(fā)表時(shí),后面以緊跟著從這個(gè)輸入端口收到另一個(gè)分組。這個(gè)后到的分組就必須在隊(duì)列中排隊(duì)等待,因而產(chǎn)生了一定的時(shí)延。如圖7-3,給出了輸入端口的隊(duì)列中排隊(duì)分組的示意圖
圖7-3 輸入端口的對(duì)線路上收到的分組的處理
我們?cè)賮碛^察在輸出端口上出現(xiàn)什么情況,如圖7-3所示,輸出端口從交換結(jié)構(gòu)接收分組,然后把它們發(fā)送到路由器外面的線路上。在網(wǎng)絡(luò)層的處理模塊中設(shè)有一個(gè)緩存,實(shí)際上它就是一個(gè)隊(duì)列。當(dāng)交換結(jié)構(gòu)傳送過來的分組的速率超過輸出鏈路的發(fā)送速率時(shí),來不及發(fā)送的分組就必須暫時(shí)存放在這個(gè)隊(duì)列中,數(shù)據(jù)鏈路層處理模塊把分組加上鏈路層的首部和尾部,交給物理層發(fā)送到外部線路。
圖7-3 輸出端口的八交換結(jié)構(gòu)傳送過來的分組發(fā)送到線路上
從以上的討論可以看出,分組在路由器的輸入端口和輸出端口都可能會(huì)在隊(duì)列中排隊(duì)等候處理。若分組處理的速率趕不上分組進(jìn)入隊(duì)列的速率,則隊(duì)列的存儲(chǔ)空間最終必定減少到零,這就使后面再進(jìn)入隊(duì)列的分組出于沒有存儲(chǔ)空間而只能被丟棄。以前我們提到分組丟失就是發(fā)生在路由器中的輸入或輸出隊(duì)列產(chǎn)生溢出的時(shí)候。當(dāng)然,設(shè)備或線路出故障也可能使分組丟失。
互連在一起的網(wǎng)絡(luò)要進(jìn)行通信,會(huì)遇到許多問題需要解決,如不同的尋址方案;不同的最大分組長(zhǎng)度;不同的網(wǎng)絡(luò)接入機(jī)制;不同的超時(shí)控制;不同的差錯(cuò)恢復(fù)方法;不同的狀態(tài)報(bào)告方法;不同的路由選擇技術(shù);不同的用戶接入控制;不同的服務(wù)(面向連接服務(wù)和無連接服務(wù));不同的管理與控制方式等。
圖7-5 互聯(lián)網(wǎng)絡(luò)的概念
為了解決上述的許多問題,因特網(wǎng)在IP層采用了標(biāo)準(zhǔn)化協(xié)議。圖7-5(a)表示有許多計(jì)算機(jī)網(wǎng)絡(luò)通過一些路由器進(jìn)行互連。由于參加互連的計(jì)算機(jī)網(wǎng)絡(luò)都使用相同的網(wǎng)際協(xié)議IP,因此,可以將互連以后的計(jì)算機(jī)網(wǎng)絡(luò)看成一個(gè)虛擬互聯(lián)網(wǎng)絡(luò)(如圖7-5(b))。所謂虛擬互聯(lián)網(wǎng)絡(luò)也就是邏輯互聯(lián)網(wǎng)絡(luò),它的意思就是互連起來的各種物理網(wǎng)絡(luò)的異構(gòu)性本來就是客觀存在的,但是我們利用IP就可以使這些性能各異的網(wǎng)絡(luò)從用戶看起來好像是一個(gè)統(tǒng)一的網(wǎng)絡(luò)。這種使用IP的虛擬互聯(lián)網(wǎng)絡(luò)可簡(jiǎn)稱為IP網(wǎng)。使用虛擬互聯(lián)網(wǎng)絡(luò)的好處是當(dāng)互聯(lián)網(wǎng)上的主機(jī)進(jìn)行通信時(shí),就好像在一個(gè)網(wǎng)絡(luò)上通信一樣,它們看不見互連的各個(gè)具體的網(wǎng)絡(luò)的異構(gòu)細(xì)節(jié)。本章討論的所有問題都是在這樣的虛擬網(wǎng)絡(luò)上進(jìn)行的。這種虛擬網(wǎng)絡(luò)現(xiàn)在也稱為互聯(lián)網(wǎng)。
從下一節(jié)起開始討論因特網(wǎng)的核心協(xié)議,即網(wǎng)際協(xié)議IP。
網(wǎng)際協(xié)議IP是TCP/IP體系中兩個(gè)最主要的協(xié)議之一,也是最重要的因特網(wǎng)標(biāo)準(zhǔn)協(xié)議。與IP配套使用的還有以下4個(gè)協(xié)議。
地址解析協(xié)議ARP
逆地址解析協(xié)議RARP
因特網(wǎng)控制報(bào)文協(xié)議ICMP
因特網(wǎng)組管理協(xié)議IGMP
如圖7-6所示,畫出了這4個(gè)協(xié)議和網(wǎng)際協(xié)議IP的關(guān)系。在這一層中,ARP和RARP畫在最下面,因?yàn)?/span>IP經(jīng)常要使用這兩個(gè)協(xié)議。ICMP和IGMP畫在這一層的上部,因?yàn)樗鼈円褂?/span>IP。這4個(gè)協(xié)議將在后面陸續(xù)介紹。由于網(wǎng)際協(xié)議IP是用來使互連起來的許多計(jì)算機(jī)網(wǎng)絡(luò)能夠進(jìn)行通信,因此,TCP/IP體系中的網(wǎng)絡(luò)層常稱為網(wǎng)際層(Internet layer),或IP層。
圖7-6 網(wǎng)際網(wǎng)協(xié)議IP及其配套協(xié)議
在TCP/IP體系中,IP地址是一個(gè)最基本的概念,一定要把它弄清楚。有關(guān)IP最重要的文檔就是RFC 791,它很早就成為了因特網(wǎng)的正式標(biāo)準(zhǔn)。
我們把整個(gè)因特網(wǎng)看成一個(gè)單一的、抽象的網(wǎng)絡(luò)。IP地址就是給每個(gè)連接在因特網(wǎng)上的主機(jī)分配一個(gè)在全世界范圍是唯一的32位的標(biāo)識(shí)符。IP地址的結(jié)構(gòu)使我們可以在因特網(wǎng)上很方便地進(jìn)行尋址。IP地址現(xiàn)在由因特網(wǎng)名字與號(hào)碼指派公司進(jìn)行分配。
IP地址的編址方法共經(jīng)過了以下3個(gè)歷史階段。
(1)分類的IP地址.這是最基本的編址方法,在1981年就通過了相應(yīng)的標(biāo)準(zhǔn)協(xié)議。
(2)子網(wǎng)的劃分。這是對(duì)基本的編址方法的改進(jìn),其標(biāo)準(zhǔn)RFC950在1985年通過。
(3)構(gòu)成超網(wǎng)。這是比較新的無分類編址方法。1993年提出后很快就得到推廣和應(yīng)用。
本節(jié)只討論最基本的分類IP地址。后兩種方法將在7、3節(jié)討論。
所謂“分類的IP地址”就是將地址劃分為若干個(gè)固定類,每一類地址都由兩個(gè)固定長(zhǎng)度的字段組成,其中第一個(gè)字段是網(wǎng)絡(luò)號(hào),它標(biāo)志主機(jī)所連接到的網(wǎng)絡(luò),而第二個(gè)字段是主機(jī)號(hào),它標(biāo)志該主機(jī)。或者說,這種兩級(jí)的IP地址可以記為:
IP地址 ::={<網(wǎng)絡(luò)號(hào)>,<主機(jī)號(hào)>}
“::=”表示“定義為”。如圖7-7所示,給出IP地址的網(wǎng)絡(luò)字段和主機(jī)號(hào)字段,其中A類、B類和C類是單播地址。
圖7-7 IP地址中的網(wǎng)絡(luò)號(hào)字段和主機(jī)號(hào)字段
從圖7-7可以看出:
這里要指出,由于近年來已經(jīng)廣泛使用無分類IP地址進(jìn)行路由選擇,A類、B類和C類地址的區(qū)分已成為歷史,但由于很多文獻(xiàn)和資料都還使用傳統(tǒng)的分類IP地址,因此我們?cè)谶@里還要從分類的IP地址講起。
路由器為轉(zhuǎn)發(fā)分組而查找轉(zhuǎn)發(fā)表時(shí),很重要的一點(diǎn)就是查找路由表花費(fèi)的時(shí)間要盡量短。在討論廣域網(wǎng)時(shí)已經(jīng)講過簡(jiǎn)化轉(zhuǎn)發(fā)表的辦法就是根據(jù)目的主機(jī)所連接的目的結(jié)點(diǎn)交換機(jī)的位置來尋找路由。當(dāng)找到目的結(jié)點(diǎn)交換機(jī)后,就可直接交付給目的主機(jī)。在互聯(lián)網(wǎng)中也是類似的。如果將到時(shí)達(dá)所有的目的主機(jī)的路由全都寫入到轉(zhuǎn)發(fā)表中,就會(huì)有很多路由是重復(fù)的,因此沒有必要這樣做。我們應(yīng)將重復(fù)的路由合并。轉(zhuǎn)發(fā)表只使用IP地址中的網(wǎng)絡(luò)號(hào)來查找路由。只要IP數(shù)據(jù)報(bào)能夠正確到達(dá)目的網(wǎng)絡(luò),就可在這個(gè)網(wǎng)絡(luò)上直接交付給目的主機(jī)而不再需要經(jīng)過其它路由器進(jìn)行轉(zhuǎn)發(fā)了。
因此,路由器轉(zhuǎn)發(fā)分組有以下兩個(gè)步驟。
(1)先按所要找的IP地址中的網(wǎng)絡(luò)號(hào)把目的網(wǎng)絡(luò)找到。雖然IP地址的網(wǎng)絡(luò)號(hào)字段有3種不同的長(zhǎng)度,但根據(jù)IP地址中最前面的類別位,就可以很容易地確定網(wǎng)絡(luò)字段的準(zhǔn)確字節(jié)數(shù)。然而以后我們會(huì)知道還有更加簡(jiǎn)便的方法。
(2)當(dāng)分組到達(dá)目的網(wǎng)絡(luò)后,再利用主機(jī)號(hào)將數(shù)據(jù)報(bào)直接交付給目的主機(jī)。
因此,按照整數(shù)字節(jié)劃分網(wǎng)絡(luò)號(hào)字段和主機(jī)號(hào)字段,就可以使用路由器在收到一個(gè)分組時(shí)能夠更快地將地址中的網(wǎng)絡(luò)號(hào)提取出來。
從IP地址的結(jié)構(gòu)來看,IP地址并不僅僅是一個(gè)主機(jī)的號(hào),而是指出了連接到某個(gè)網(wǎng)絡(luò)上的某個(gè)主機(jī)。如果一個(gè)主機(jī)的地理位置保持不變,但現(xiàn)在只改變連接的線路,既連接到另一個(gè)網(wǎng)絡(luò),那么這個(gè)主機(jī)的IP地址就必須改變。
把IP地址劃分為3個(gè)類別,當(dāng)初是這樣考慮的。各種網(wǎng)絡(luò)的差異很大,有的網(wǎng)絡(luò)擁有很多主機(jī),而有的網(wǎng)絡(luò)上的主機(jī)則很少。把IP地址劃分為A類、B類和C類可更好地滿足不同用戶的要求。A類IP地址的網(wǎng)絡(luò)號(hào)數(shù)不多。現(xiàn)在能夠申請(qǐng)到的IP地址只有B類和C類兩種。當(dāng)某個(gè)單位申請(qǐng)到一個(gè)IP地址時(shí),實(shí)際上是獲得了具有同樣網(wǎng)絡(luò)號(hào)的一塊地址。其中具體的各個(gè)主機(jī)號(hào)則由該單位自行分配,只要做到在該單位管轄的范圍內(nèi)無重復(fù)的主機(jī)號(hào)即可。
在主機(jī)或路由器中存放的IP地址都是32位的二進(jìn)制代碼。為了提高可讀性,在寫出給人看的IP地址時(shí),往往每隔8位插入一個(gè)空格,但這樣還是不方便。于是,我們常常將32位的IP地址中的每8位用其等效的十進(jìn)制數(shù)字表示,并且在這些數(shù)字之間加上一個(gè)點(diǎn)。這就叫做點(diǎn)分十進(jìn)制記法。例如圖7-8所示。
圖7-8 采用點(diǎn)分十進(jìn)制記法能夠提高可讀性
A類地址的網(wǎng)絡(luò)號(hào)字段占一個(gè)字節(jié),只有7位可供使用,但可提供使用的網(wǎng)絡(luò)號(hào)是126個(gè)。減2的原因有兩個(gè)。第一,IP地址中的全0表示“這個(gè)”。網(wǎng)絡(luò)號(hào)字段為全0的IP地址是個(gè)保留地址,意思是“本網(wǎng)絡(luò)”。第二,網(wǎng)絡(luò)號(hào)字段為127保留作為本地軟件環(huán)回測(cè)試本主機(jī)之用。A類地址的主機(jī)號(hào)字段為3個(gè)字節(jié),因此,每一個(gè)A類網(wǎng)絡(luò)中的最大主機(jī)數(shù)是2*24-2,即1677214。這里減2的原因是全0的主機(jī)號(hào)字段表示該IP地址是“本主機(jī)”所連接到的單個(gè)網(wǎng)絡(luò)地址,而全1表示“所有的”,因此,全1的主機(jī)號(hào)字段表示該網(wǎng)絡(luò)上的所有主機(jī)。
IP地址空間共有2*32(4294967296)個(gè)地址。整個(gè)A類地址空間共有2*31個(gè)地址,占有整個(gè)IP地址空間的50%。
B類地址的網(wǎng)絡(luò)號(hào)字段有2字節(jié),但前面兩位已經(jīng)固定了,只剩下14位可以進(jìn)行分配。雖然這里不存在網(wǎng)絡(luò)總數(shù)減2的問題,因?yàn)榫W(wǎng)絡(luò)號(hào)字段最前面的兩位子使得后面的14位無論怎樣排列也不可能出現(xiàn)使整個(gè)2字節(jié)的網(wǎng)絡(luò)號(hào)字段成為全0或全1。但實(shí)際上B類網(wǎng)絡(luò)地址128.0.0.0是不指派的,而可以指派的B類最小網(wǎng)絡(luò)地址是128.1.0.0。因此,B類地址的可用網(wǎng)絡(luò)數(shù)為2*14-1,即16383。B類地址的每一個(gè)網(wǎng)絡(luò)上最大主機(jī)數(shù)是2*16-2,即65534。這里減2是因?yàn)橐鄢?/span>0和全1的主機(jī)號(hào)。整個(gè)B類地址空間共約有2*30個(gè)地址,占整個(gè)IP空間的25%。
C類地址有3個(gè)字節(jié)的網(wǎng)絡(luò)號(hào)字段,最前面的3位是110,還有21位可以進(jìn)行分配。雖然這里也不存在網(wǎng)絡(luò)總額減2的問題,但C類網(wǎng)絡(luò)地址192.0.0.0也是不指派的,可以指派的C類最小網(wǎng)絡(luò)地址是192.0.1.0,因此,C類地址的可用網(wǎng)絡(luò)總數(shù)是2*21-1,即2097151。每一個(gè)C類地址的最大主機(jī)數(shù)是2*8-2,即254。整個(gè)C類地址空間共約有2*29個(gè)地址,占整個(gè)IP地址的12.5%。
這樣一我們就可以得出表7-1所示的IP地址三十一范圍。
IP地址具有以下一些重要特點(diǎn)。
(1)每一個(gè)IP地址都由網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)兩部分組成。從這個(gè)意義上說,IP地址是一種分等級(jí)的地址結(jié)構(gòu)。分兩個(gè)等級(jí)的好處主要有以下兩個(gè)方面。第一,IP地址管理機(jī)構(gòu)在分配IP地址時(shí)只分配網(wǎng)絡(luò)號(hào),而剩下的主機(jī)號(hào)則由得到該網(wǎng)絡(luò)號(hào)的單位自行分配。這樣就方便了IP地址的管理。第二,路由器根據(jù)目的主機(jī)所連接的網(wǎng)絡(luò)號(hào)來轉(zhuǎn)發(fā)分組(而不考慮主機(jī)號(hào)),這樣就可以使路由表中的項(xiàng)目大幅度減少,從而減小了路由表所占的存儲(chǔ)空間。
(2)實(shí)際上IP地址是標(biāo)志一個(gè)主機(jī)(或路由器)和一條鏈路的接口。當(dāng)一個(gè)主機(jī)同時(shí)連接到兩個(gè)網(wǎng)絡(luò)上時(shí),該主機(jī)就必須有兩個(gè)相應(yīng)的IP地址,其網(wǎng)絡(luò)號(hào)必須是不同的。這種主機(jī)稱為多歸屬主機(jī)。由于一個(gè)路由器至少應(yīng)當(dāng)連接到兩個(gè)網(wǎng)絡(luò)(這樣它才能把IP數(shù)據(jù)報(bào)從一個(gè)網(wǎng)絡(luò)轉(zhuǎn)發(fā)到另一個(gè)網(wǎng)絡(luò)),因此,一個(gè)路由器至少應(yīng)當(dāng)有兩個(gè)不同的IP地址。
(3)按照因特網(wǎng)的觀點(diǎn),用轉(zhuǎn)發(fā)器或網(wǎng)橋連接起來的若干個(gè)局域網(wǎng)仍為一個(gè)網(wǎng)絡(luò),因此,這些局域網(wǎng)都有同樣的網(wǎng)絡(luò)號(hào)。
(4)在IP地址中,所有分配到網(wǎng)絡(luò)號(hào)的網(wǎng)絡(luò)都是平等的。
在學(xué)習(xí)IP地址時(shí),很重要的一點(diǎn)就是要弄懂主機(jī)的IP地址和硬件地址的區(qū)別。
圖7-10說明了這兩種地址的區(qū)別。從層次的角度看,物理地址是數(shù)據(jù)鏈路層使用的地址,而IP地址是虛擬互聯(lián)網(wǎng)絡(luò)所使用的地址,即網(wǎng)絡(luò)層和以上各層使用的地址。
圖7-10 IP地址與硬件地址的區(qū)別
在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)從高層下到低層,然后才到通信鏈路上傳輸。使用IP地址的IP數(shù)據(jù)報(bào)一旦交給了數(shù)據(jù)鏈路層,就被封裝成MAC幀了。MAC幀在傳送時(shí)使用的源地址和目的地址都是硬件地址,這兩個(gè)硬件地址都寫在MAC幀的首部中。
連接在通信鏈路上的設(shè)備在接收MAC幀時(shí),其根據(jù)是MAC幀首部中的硬件地址。在數(shù)據(jù)鏈路層看不見隱藏在MAC幀的數(shù)據(jù)中的IP地址。只有在剝?nèi)?/span>MAC幀的首部和尾部,再將MAC層的數(shù)據(jù)上交給網(wǎng)絡(luò)層后,網(wǎng)絡(luò)層才能在IP數(shù)據(jù)報(bào)的首部中找到源IP地址和目的IP地址。
總之,IP地址放在IP數(shù)據(jù)報(bào)的首部,而硬件地址則放在MAC幀的首部。在網(wǎng)絡(luò)層和網(wǎng)絡(luò)層以上使用的是IP地址,而數(shù)據(jù)鏈路層使用的是硬件地址。在圖7-10中,當(dāng)IP數(shù)據(jù)報(bào)放入數(shù)據(jù)鏈路層的MAC幀中以后,整個(gè)的IP數(shù)據(jù)報(bào)就成為MAC幀的數(shù)據(jù),因而在數(shù)據(jù)鏈路層看不見數(shù)據(jù)報(bào)的IP地址。
如圖7-11(a)所示,畫的是3個(gè)局域網(wǎng)用兩個(gè)路由器R1和R2互連起來?,F(xiàn)在主機(jī)H1要和主機(jī)H2通信。這兩個(gè)主機(jī)的IP地址分別是IP1和IP2,而它們硬件地址分別為HA1.和HA2(HA表示Hardware Address)。通信的路徑是H1→經(jīng)過R1轉(zhuǎn)發(fā)→再經(jīng)過R2轉(zhuǎn)發(fā)→H2。路由器R1因同時(shí)連接到兩個(gè)局域網(wǎng)上,所以,它有兩個(gè)硬件地址,即HA3和HA4。同理,路由器R2也有兩個(gè)矹件地址HA5和HA6。
圖7-10 從不同層次上看IP地址和硬件地址
上面講的IP地址是不能直接用來通信的。這是因?yàn)?/span>IP地址只是主機(jī)在抽象網(wǎng)絡(luò)層中的地址。若要把網(wǎng)絡(luò)層傳送的數(shù)據(jù)報(bào)交給目的主機(jī),還在傳到鏈路層轉(zhuǎn)變成MAC幀后才能發(fā)送到實(shí)際的網(wǎng)絡(luò)上。因此,不管網(wǎng)絡(luò)層使用的是什么協(xié)議,在實(shí)際網(wǎng)絡(luò)的鏈路上傳送數(shù)據(jù)幀時(shí),最終還是必須使用硬件地址。
因?yàn)?/span>IP地址有32位,而局域網(wǎng)的硬件地址是48位,所以,它們之間不存在簡(jiǎn)單的映射關(guān)系。此外,在一個(gè)網(wǎng)絡(luò)上可能經(jīng)常會(huì)有新的主機(jī)加入進(jìn)來,或撤走一些主機(jī)。更換網(wǎng)卡也會(huì)使主機(jī)的硬件地址改變??梢?,在主機(jī)中應(yīng)存放一個(gè)從IP地址到硬件地址的映射表,并且這個(gè)映射表還必須能夠經(jīng)常動(dòng)態(tài)更新。地址解析協(xié)議ARP很好地解決了這些問題。
每一個(gè)主機(jī)都有一個(gè)ARP高速緩存,里面有所在的局域網(wǎng)上的各主機(jī)和路由器的IP地址到硬件地址的映射表,這些都是該主機(jī)目前知道的一些地址。那么主機(jī)怎樣知道這些地址呢?我們可以通過下面的例子來說明。當(dāng)主機(jī)A欲向本局域網(wǎng)上的某個(gè)主機(jī)B發(fā)送IP數(shù)據(jù)報(bào)時(shí),就先在其ARP高速緩存中查看有無主機(jī)B的IP地址。如有,就可查出其對(duì)應(yīng)的硬件地址,再將此硬件地址寫入MAC幀,然后通過局域網(wǎng)把該MAC幀發(fā)往此硬件地址。
也有可能查不到主機(jī)B的IP地址的項(xiàng)目。這可能是主機(jī)B才入網(wǎng),也可能是主機(jī)A剛加電,其高速緩存還是空的。在這種情況下,主機(jī)A就自動(dòng)運(yùn)行ARP,然后按以下步驟找到主機(jī)B的硬件地址。
(1)ARP進(jìn)程在本局域網(wǎng)上廣播發(fā)送一個(gè)ARP請(qǐng)求分組。圖7-11(a) 是ARP請(qǐng)求分組的主要內(nèi)容是表明:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址為209.0.0.6的主機(jī)的硬件地址。”
圖7-11 地址解析協(xié)議ARP的工作原理
(2)在本局域網(wǎng)上的所有主機(jī)上運(yùn)行的ARP進(jìn)程都收到此ARP請(qǐng)求分組。
(3)主機(jī)B在ARP請(qǐng)求分組中見到自己的IP地址,就向主機(jī)A發(fā)送ARP響應(yīng)分組,并寫入自己的硬件地址。其余的所有主機(jī)都不理睬這個(gè)ARP請(qǐng)求分組,ARP響應(yīng)分組主要內(nèi)容是表明:“我的IP地址是209.0.0.6,硬件地址是08-00-2B-00-EE-0A。”請(qǐng)讀者注意,雖然ARP請(qǐng)求分組是廣播發(fā)送的,但ARP響應(yīng)分組是普通的單播,即從一個(gè)源地址發(fā)送到一個(gè)目的地址。
(4)主機(jī)A收到主機(jī)B的ARP響應(yīng)分組后,就在其ARP高速緩存中寫入主機(jī)B的IP地址到硬件地址的映射。
當(dāng)主機(jī)A向主機(jī)B發(fā)送數(shù)據(jù)報(bào)時(shí),很可能以后不久主機(jī)B還要向A發(fā)送數(shù)據(jù)報(bào),因而主機(jī)B也可能要向A發(fā)送ARP請(qǐng)求分組。為了減少網(wǎng)絡(luò)上的通信量,主機(jī)A發(fā)送其ARP請(qǐng)求分組時(shí),就將自己的IP地址到硬件地址的映射寫入ARP請(qǐng)求分組。當(dāng)主機(jī)B收到A的ARP請(qǐng)求分組時(shí),就將主機(jī)A的這一地址映射寫入主機(jī)B自己的ARP高速緩存中。這對(duì)主機(jī)B以后向A發(fā)送數(shù)據(jù)報(bào)時(shí)就更方便了。
可見,ARP高速緩存非常有用。如果不使用ARP高速緩存,那么任何一個(gè)主機(jī)只要進(jìn)行一次通信,就必須在網(wǎng)絡(luò)上用廣播方式發(fā)送ARP請(qǐng)求分組,這就使得網(wǎng)絡(luò)上的通信量大大增加。ARP把已經(jīng)得到的地址映射保存在高速緩存中,這樣就使得該主機(jī)下次再和具有同樣目的地址的主機(jī)通信時(shí),可以直接從高速緩存中找到所需的硬件地址,而不必再用廣播方式發(fā)送ARP請(qǐng)求分組。
ARP把保存在高速緩存中的每個(gè)映射地址項(xiàng)目都設(shè)置生存時(shí)間。凡超過生存時(shí)間的項(xiàng)目就從高速緩存中刪除掉。設(shè)置這種地址映射項(xiàng)目的生存時(shí)間是很重要的。設(shè)想有一種情況,主機(jī)A和主機(jī)B通信。A的ARP高速緩存是保存有B的物理地址。但B的網(wǎng)卡突然壞了,B立即更換了一塊,因此B的硬件地址就改變了。A還要和B繼續(xù)通信。A在其ARP高速緩存中查找到B原先的硬件地址,并使用該硬件地址向B發(fā)送數(shù)據(jù)幀。但B原先的硬件地址已經(jīng)失效了,因此A無法找到主機(jī)B。但是過了一段時(shí)間,A的ARP高速緩存中已經(jīng)刪除了B原先的硬件地址,于是A重新廣播發(fā)送ARP請(qǐng)求分組,又找到了B。
這里需要指出,ARP是解決同一個(gè)局域網(wǎng)上的主機(jī)或路由器的IP地址的映射問題。如果所要找的主機(jī)和源主機(jī)不在同一個(gè)局域網(wǎng)上,就不能直接找到主機(jī)的硬件地址。
這里我們還要指出,這種從IP地址到硬件地址的解析是自動(dòng)進(jìn)行的,主機(jī)的用戶對(duì)這種地址解析過程是不知道的。只要主機(jī)或路由器要和本網(wǎng)絡(luò)上的另一個(gè)已知IP地址的主機(jī)或路由器進(jìn)行通信,ARP協(xié)議就會(huì)自動(dòng)把這個(gè)IP地址解析為鏈路層所需要的硬件地址。
有的讀者可能會(huì)產(chǎn)生這樣的疑問,既然在網(wǎng)絡(luò)鏈路上傳送的幀最終是按照硬件地址找到目的主機(jī)的,那么為什么我們不直接使用硬件地址進(jìn)行通信,而是要使用抽象的IP地址并調(diào)用ARP來尋找出相應(yīng)的硬件地址呢?
這個(gè)問題必須弄清楚。
因?yàn)?,全世界存在著各式各樣的網(wǎng)絡(luò),它們使用不同的硬件地址。要使這些異構(gòu)網(wǎng)絡(luò)能夠互相通信就必須進(jìn)行非常復(fù)雜的硬件地址轉(zhuǎn)換工作,所以,要做到這些幾乎是不可能的事。但統(tǒng)一的IP地址把這個(gè)復(fù)雜問題解決了。連接到因特網(wǎng)的主機(jī)都擁有統(tǒng)一的IP地址,它們之間的通信就像連接在同一個(gè)網(wǎng)絡(luò)上那樣簡(jiǎn)單方便,因?yàn)檎{(diào)用ARP來尋找某個(gè)路由器或主機(jī)的硬件地址都是由計(jì)算機(jī)軟件自動(dòng)進(jìn)行的,對(duì)用戶來說是看不見這種調(diào)用過程的。
設(shè)想有兩個(gè)主機(jī)可以直接使用硬件地址進(jìn)行通信。再假定其兩個(gè)主機(jī)的網(wǎng)卡都同時(shí)壞了,然后又都更換了一塊,因此它們的硬件地址也都改變了。這時(shí),這兩個(gè)主機(jī)怎么能夠知道對(duì)方的硬件地址呢?顯然很難。但IP地址獨(dú)立于主機(jī)或路由器的硬件地址的。硬件地址的改變不會(huì)影響使用IP的主機(jī)的通信。
因此,在虛擬的IP網(wǎng)絡(luò)上用IP地址進(jìn)行通信給廣大的計(jì)算機(jī)用戶帶來方便。
在進(jìn)行地址轉(zhuǎn)換時(shí),有時(shí)還要用到逆地址解析協(xié)議RARP使中知道自己硬件地址的主機(jī)能夠知道其IP地址。這種主機(jī)往往是無盤工作站。這種無盤工作站一般只要運(yùn)行其ROM中的文件傳送代碼,就可用下行裝載方法從局域網(wǎng)上其他主機(jī)得到所需要的操作系統(tǒng)和TCP/IP通信軟件,但這些軟件中并沒有IP地址。無盤工作站要運(yùn)行ROM中的RARP來獲得其IP地址。RARP的工作過程大致如下。
為了使RARP能工作,在局域網(wǎng)上至少有一個(gè)主機(jī)要充當(dāng)RARP服務(wù)器,無盤工作站先向局域網(wǎng)發(fā)出RARP請(qǐng)求分組,并在此分組中給出自己的硬件地址。
RARP服務(wù)器有一個(gè)事先做好的從無盤工作站的硬件地址到IP地址的映射表,當(dāng)收到RARP請(qǐng)求分組后,RARP服務(wù)器就從這映射表查出該無盤工作站的IP地址。然后寫入RARP響應(yīng)分組,發(fā)回給無盤工作站。無盤工作站用此方法獲得自己的IP地址。
ARP和RARP都已經(jīng)成為因特網(wǎng)標(biāo)準(zhǔn)協(xié)議,其RFC文檔分別為RFC826和RFC903。
IP數(shù)據(jù)報(bào)的格式能夠說明IP都有什么功能。在TCP/IP的標(biāo)準(zhǔn)中,各種數(shù)據(jù)格式常以32位為單位來描述。圖7-12是IP數(shù)據(jù)報(bào)的完整格式。
圖7-12 IP數(shù)據(jù)報(bào)的格式
如圖7-12所示,一個(gè)IP數(shù)據(jù)報(bào)由首部和數(shù)據(jù)兩部分組成。首部的前一部分是固定長(zhǎng)度,共20字節(jié),是所有IP數(shù)據(jù)報(bào)必須具有的。在首部的固定部分后面是一些可選字段,其長(zhǎng)度是可變的。下面介紹首部各字段的意義。
1、IP數(shù)據(jù)報(bào)首部的固定部分中的各字段
(1)版本 占4位,指IP的版本。通信雙方使用的IP的版本必須一致。目前,廣泛使用的IP版本號(hào)為4(即IPv4)。
(2)首部長(zhǎng)度 占4位,可表示的最大數(shù)值是15個(gè)單位(一個(gè)單位為4字節(jié)),因此,IP的首部長(zhǎng)度的最大值是60字節(jié)。當(dāng)IP分組的首部長(zhǎng)度不是4字節(jié)的整數(shù)時(shí),必須利用最后的填充字段加以填充。因此,數(shù)據(jù)部分永遠(yuǎn)在4字節(jié)的整數(shù)倍時(shí)開始,這樣在實(shí)現(xiàn)IP時(shí)較為方便。首部長(zhǎng)度限制為60字節(jié)的缺點(diǎn)是有時(shí)(如源站路由選擇)不夠用。但這樣做是希望用戶盡量減少開銷。最常用的首部長(zhǎng)度就是20字節(jié),即不使用任何選項(xiàng)。
(3)區(qū)分服務(wù) 占8位,用來獲得更好的服務(wù)。這個(gè)字段在舊標(biāo)準(zhǔn)中叫做服務(wù)類型,但實(shí)際上一直沒有被使用過。1998年IETF把這個(gè)字段改名為區(qū)分服務(wù)。只要當(dāng)使用區(qū)分服務(wù)時(shí),這個(gè)字段才起作用。在一般的情況下不使用這個(gè)字段[RFC2474]。
(4)總長(zhǎng)度 占16位,指首部和數(shù)據(jù)之和的長(zhǎng)度,單位為字節(jié)??傞L(zhǎng)度字段為位,因此數(shù)據(jù)報(bào)的最大長(zhǎng)度為65535字節(jié)(64KB)。
在IP層下面的每一種數(shù)據(jù)鏈路層都有其自己的幀格式,其中包括幀格式中的數(shù)據(jù)字段的最大長(zhǎng)度,這稱為最大傳送單元MTU。當(dāng)一個(gè)IP數(shù)據(jù)報(bào)封裝成鏈路層的幀時(shí),此數(shù)據(jù)報(bào)的總長(zhǎng)度(即首部加上數(shù)據(jù)部分)一定不能超過下面的數(shù)據(jù)鏈路層的MTU值。
雖然使用盡可能的數(shù)據(jù)報(bào)會(huì)使傳輸效率提高,但由于以太網(wǎng)的普遍應(yīng)用,所以實(shí)際上使用的數(shù)據(jù)報(bào)長(zhǎng)度很少有超過1500字節(jié)的,而有時(shí)數(shù)據(jù)報(bào)長(zhǎng)度還被限制在576字節(jié)。當(dāng)數(shù)據(jù)報(bào)長(zhǎng)度超過網(wǎng)絡(luò)所容許的最大傳送單元MTU時(shí),就必須將過長(zhǎng)的數(shù)據(jù)報(bào)進(jìn)行分片后才能在網(wǎng)絡(luò)上傳送。這時(shí),數(shù)據(jù)報(bào)首部中的“總長(zhǎng)度”字段不是指未分片前的數(shù)據(jù)報(bào)長(zhǎng)度,而是批分片后每片的首部長(zhǎng)度與數(shù)據(jù)長(zhǎng)度的總和。
(5)標(biāo)識(shí) 占16位,它是一個(gè)計(jì)數(shù)器,用來產(chǎn)生數(shù)據(jù)報(bào)的標(biāo)識(shí)。但這里的“標(biāo)識(shí)”并沒有序號(hào)的意思,因?yàn)?/span>IP是無連接服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問題。當(dāng)IP發(fā)送數(shù)據(jù)報(bào)時(shí),它就把這個(gè)計(jì)數(shù)器的當(dāng)前值復(fù)制到標(biāo)識(shí)字段中。當(dāng)數(shù)據(jù)報(bào)由于長(zhǎng)度超過網(wǎng)絡(luò)的MTU而必須分片時(shí),這個(gè)標(biāo)識(shí)字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)片的標(biāo)識(shí)字段中。相同的標(biāo)識(shí)字段的值使分片后的各數(shù)據(jù)報(bào)片最后能正確地重裝成為原來的數(shù)據(jù)報(bào)。
(6)標(biāo)志 占3位。目前只有前兩位有意義。
標(biāo)志字段中的最低位記為MF。MF=1即表示后面“還有分片”的數(shù)據(jù)報(bào)。MF=0表示這已是若干數(shù)據(jù)報(bào)片中的最后一個(gè)。
標(biāo)志字段中間的一位記為DF,意思是“不能分片”。只有當(dāng)DF=0時(shí)才允許分片。
(7)片偏移 占13位。片偏移指出,較長(zhǎng)的分組在分片后,某片在原分組中的相對(duì)位置。也就是說,相對(duì)于用戶數(shù)據(jù)字段的起點(diǎn),該片從何處開始。片偏移以8個(gè)字節(jié)為偏移單位。這就是說,每個(gè)分片的長(zhǎng)度一定是8字節(jié)(64位)的整數(shù)倍。
(8)生存時(shí)間 占8位,生存時(shí)間字段記為TTL,即數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命。設(shè)置這個(gè)字段是防止數(shù)據(jù)報(bào)無限期地在因特網(wǎng)中兜圈子,因而消耗大量網(wǎng)絡(luò)資源。最初是設(shè)想在數(shù)據(jù)報(bào)每經(jīng)過一個(gè)路由器時(shí),就把生存時(shí)間TTL減少一個(gè)單位的時(shí)間。當(dāng)TTL值減為零時(shí),就丟棄這個(gè)數(shù)據(jù)報(bào)。
因?yàn)橐蛱鼐W(wǎng)中的各路由器并沒有進(jìn)行時(shí)鐘同步,而數(shù)據(jù)報(bào)在路由器中排隊(duì)的時(shí)間也越來越短,所以具體實(shí)現(xiàn)TTL還是比較困難?,F(xiàn)在已經(jīng)把TTL字段的功能改為“路數(shù)限制”,但名稱仍然不變。路由器在每次轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)時(shí),就把其TTL減1。若TTL值為零,就丟棄這個(gè)數(shù)據(jù)報(bào)。因此,現(xiàn)在TTL的意思就是規(guī)定了一個(gè)數(shù)據(jù)報(bào)在因特網(wǎng)中至多可以經(jīng)過多少跳,這實(shí)際上就是規(guī)定了一個(gè)數(shù)據(jù)報(bào)在因特網(wǎng)中至多可以經(jīng)過多少個(gè)路由器。如果把TTL值設(shè)置為1,就表示這個(gè)數(shù)據(jù)報(bào)只能在本局域網(wǎng)中傳送,一傳送到某個(gè)路由器就會(huì)被丟棄。
(9)協(xié)議 占8位,協(xié)議字段指出此數(shù)據(jù)報(bào)攜帶的數(shù)據(jù)是使用何種協(xié)議,以便使目的主機(jī)的IP層知道應(yīng)將數(shù)據(jù)部分上交給哪個(gè)處理過程。
(10)首部檢驗(yàn)和 占16位。這個(gè)字段只檢驗(yàn)數(shù)據(jù)報(bào)的首部,但不包括數(shù)據(jù)部分。這是因?yàn)閿?shù)據(jù)報(bào)每經(jīng)過一個(gè)路由器,路由器都要重新計(jì)算一下首部檢驗(yàn)和(一些字段,如生存時(shí)間、標(biāo)志、片偏移等都可能發(fā)生變化)。如把數(shù)據(jù)部分一起檢驗(yàn),計(jì)算的工作量就太大了。為了減小計(jì)算檢驗(yàn)和的工作量,IP首部的檢驗(yàn)和不采用復(fù)雜的CRC檢驗(yàn)碼,而采用下面的簡(jiǎn)單計(jì)算方法:在發(fā)送方,先把IP數(shù)據(jù)報(bào)首部劃分為許多16位字的序列,并把檢驗(yàn)和字段置零。用反碼算術(shù)運(yùn)算將所有16位字相加后,將得到的和的反碼寫入檢驗(yàn)和字段。接收方收到數(shù)據(jù)報(bào)后,將首部的所有16位字再使用反碼算術(shù)運(yùn)算相加一次。將得到的和取反碼,即得出接收方檢驗(yàn)和的計(jì)算結(jié)果。若首部未發(fā)生任何變化,則此結(jié)果必為0,于是就保留這個(gè)數(shù)據(jù)報(bào)。否則即認(rèn)為出錯(cuò),并將此數(shù)據(jù)報(bào)丟棄。
(11)源地址 占4字節(jié)。
(12)目的地址 占4字節(jié)。
2、IP數(shù)據(jù)報(bào)首部的可變部分
IP首部的可變部分就是一個(gè)選項(xiàng)字段。選項(xiàng)字段用來支持排錯(cuò)、測(cè)量以及安全等措施,內(nèi)容很豐富。此字段長(zhǎng)度可變,從1個(gè)字節(jié)到40個(gè)字節(jié)不等,取決于所選擇的項(xiàng)目。某些選項(xiàng)項(xiàng)目只需要1個(gè)字節(jié),它只包括1個(gè)字節(jié)的選項(xiàng)代碼。但還有些選項(xiàng)需要多個(gè)字節(jié),這些選項(xiàng)一個(gè)個(gè)拼接起來,中間不需要有分隔符,最后用全0的填充字段補(bǔ)齊成為4字節(jié)的整數(shù)倍。
增加首部的可變部分是為了增加IP數(shù)據(jù)報(bào)的功能,但這同時(shí)也使得IP數(shù)據(jù)報(bào)的首部長(zhǎng)度成為可變的。這就增加了每一個(gè)路由器處理數(shù)據(jù)報(bào)的開銷。實(shí)際上這些選項(xiàng)很少被使用。就的IP版本IPv6就把IP數(shù)據(jù)報(bào)首部長(zhǎng)度做成固定的。因此,這里不再繼續(xù)討論這些選項(xiàng)的細(xì)節(jié)。有興趣的讀者可參閱RFC791。
在因特網(wǎng)中路由器的作用和第6章廣域網(wǎng)中的結(jié)點(diǎn)交換機(jī)相似。但路由器和結(jié)點(diǎn)交換機(jī)還存在以下區(qū)別。
(1)路由器是用來連接不同的網(wǎng)絡(luò),而結(jié)點(diǎn)交換機(jī)只是在一個(gè)特定的網(wǎng)絡(luò)中工作。
(2)路由器是專門用來轉(zhuǎn)發(fā)分組的,而結(jié)點(diǎn)交換機(jī)還可接上許多個(gè)主機(jī)。
(3)路由器使用統(tǒng)一的IP,而結(jié)點(diǎn)交換機(jī)使用所在廣域網(wǎng)的特定協(xié)議。
(4)路由器根據(jù)目的網(wǎng)絡(luò)地址找出下一跳路由器,而結(jié)點(diǎn)交換機(jī)則根據(jù)目的站所接入的交換機(jī)號(hào)找出下一跳結(jié)點(diǎn)交換機(jī)。
圖7-14(a)是一個(gè)路由表的簡(jiǎn)單例子。有4個(gè)A類網(wǎng)絡(luò)通過3個(gè)路由器連接在一起。每一個(gè)網(wǎng)絡(luò)上都可能有成千上萬個(gè)主機(jī)??梢韵胂?,若按查找目的主機(jī)號(hào)來制作路由表,則所得出的路由表就會(huì)過于龐大。但若按主機(jī)所在的網(wǎng)絡(luò)地址來制作路由表,那么每一個(gè)路由器中的路由表就只飲食4個(gè)項(xiàng)目。以路由器R2的路由表為例。因?yàn)?/span>R2同時(shí)連接在網(wǎng)絡(luò)2和網(wǎng)絡(luò)3上,所以,只要目的站在這兩個(gè)網(wǎng)絡(luò)上,都可通過接口0或接口1由路由器R2直接交付(當(dāng)然還要利用地址解析協(xié)議ARP才能找到這些主機(jī)相應(yīng)的硬件地址)。若目的站在網(wǎng)絡(luò)1中,則下一跳路由器應(yīng)為的,其IP地址為20.0.0.7。因?yàn)槁酚善?/span>R2和R1同時(shí)連接在網(wǎng)絡(luò)2上,所以從路由器R2把分組轉(zhuǎn)發(fā)到路由器R1是很容易的。同理,若目的站在網(wǎng)絡(luò)4中,則路由器R2應(yīng)把分組轉(zhuǎn)發(fā)給IP地址為30.0.0.1的路由器R3。
可以將整個(gè)的網(wǎng)絡(luò)拓?fù)浜?jiǎn)化為如圖7-14(b)所示的那樣。在簡(jiǎn)化圖中,網(wǎng)絡(luò)變成了一條鏈路,但每一個(gè)路由器旁邊都注明其IP地址。使用這樣的簡(jiǎn)化圖,可以使我們不用關(guān)心某個(gè)網(wǎng)絡(luò)內(nèi)部的拓?fù)湟约斑B接在該網(wǎng)絡(luò)上有多少臺(tái)計(jì)算機(jī),因?yàn)檫@些對(duì)于研究分組轉(zhuǎn)發(fā)問題并沒有什么關(guān)系。這樣的簡(jiǎn)化圖強(qiáng)調(diào)了在互聯(lián)網(wǎng)上轉(zhuǎn)發(fā)分組時(shí),是從一個(gè)路由器轉(zhuǎn)發(fā)到下一個(gè)路由器。
圖 7-14 路由表舉例
在路由表中,對(duì)每一條路由最主要的是以下兩項(xiàng):
(目的網(wǎng)絡(luò)地址,下一跳地址)
于是,我們就根據(jù)目的網(wǎng)絡(luò)地址來確定下一跳路由器,這樣做得出了以下結(jié)果。
(1)IP數(shù)據(jù)報(bào)首先要設(shè)法找到目的主機(jī)所在目的網(wǎng)絡(luò)上的路由器(間接交付)。
(2)只有到達(dá)最后一個(gè)路由器時(shí),才試圖向目的主機(jī)進(jìn)行直接交付。
雖然因特網(wǎng)所有的分組轉(zhuǎn)發(fā)都是基于目的主機(jī)所在的網(wǎng)絡(luò),但在大多數(shù)情況下都允許有這樣的特例,即對(duì)特定的目的主機(jī)指明一個(gè)路由。這種路由叫做特定主機(jī)路由。采用特定主機(jī)路由可使網(wǎng)絡(luò)管理人員能更方便地控制網(wǎng)絡(luò)和測(cè)試網(wǎng)絡(luò),同時(shí)也可在需要考慮某種安全問題是采用這種特定主機(jī)路由。在對(duì)網(wǎng)絡(luò)的連接或路由表進(jìn)行排錯(cuò)時(shí),指明到某一個(gè)主機(jī)的特殊路由十分有用。
和結(jié)點(diǎn)交換機(jī)路由表的情況相似,路由器也可采用默認(rèn)路由以減少路由表所占用的空間和搜索路由表所用的時(shí)間。
這里我們?cè)購(gòu)?qiáng)調(diào)指出,在IP數(shù)據(jù)報(bào)的首部中沒有地方可以用來指明“下一跳路由器的IP地址”。在IP數(shù)據(jù)報(bào)的首部寫上的IP地址是源IP地址,而沒有中間經(jīng)過的路由器的IP地址。既然IP數(shù)據(jù)報(bào)中沒有下一跳路由器的IP地址,那么待轉(zhuǎn)發(fā)的數(shù)據(jù)報(bào)又怎樣能夠找到下一跳路由器呢?
當(dāng)路由器收到一個(gè)待轉(zhuǎn)發(fā)的數(shù)據(jù)報(bào),在從路由表得出下一跳路由器的IP地址后,不是將下一跳路由器的IP地址填入IP數(shù)據(jù)報(bào),而是送交下層的網(wǎng)絡(luò)接口軟件。網(wǎng)絡(luò)接口軟件負(fù)責(zé)將下一跳路由器的IP地址轉(zhuǎn)換成硬件地址(使用ARP),并將此硬件地址放在鏈路層MAC幀的首部,然后根據(jù)這個(gè)硬件地址找到下一跳路由器。由此可見,當(dāng)發(fā)送一連串的數(shù)據(jù)報(bào)時(shí),上述的這種查找路由表、計(jì)算硬件地址、寫入MAC幀的首部等過程,將不斷地重復(fù)進(jìn)行,造成了一定的開銷。
那么,能不能在路由表中不不使用IP地址而直接使用硬件地址呢 不行。我們一定要弄清楚,使用抽象的IP地址,本來就是為了隱蔽各種底層網(wǎng)絡(luò)的復(fù)雜性而便于分析和研究問題,這樣就不可避免地要付出代價(jià),例如選擇路由時(shí)多了一些上述的開銷。但反過來,如果在路由表中直接使用硬件地址,那就會(huì)帶來更多的麻煩。
上面所討論的是IP層怎樣根據(jù)路由表的內(nèi)容進(jìn)行分組轉(zhuǎn)發(fā),而沒有涉及路由表一開始是如何建立的,以及路由表的內(nèi)容應(yīng)如何進(jìn)行更新。但是,在進(jìn)一步討論路由選擇之前,我們還要先介紹劃分子網(wǎng)和構(gòu)造超網(wǎng)這兩個(gè)非常重要的概念。1、從兩級(jí)IP地址到三級(jí)IP地址
在今天看來,在ARPANET的早期,IP地址的設(shè)計(jì)確實(shí)不夠合理。
第一,IP地址空間的利用率有時(shí)很低。
每一個(gè)A類地址網(wǎng)絡(luò)可連接的主機(jī)數(shù)超過1千萬,而每一個(gè)B類地址網(wǎng)絡(luò)可連接的主機(jī)數(shù)也超過6萬。然而有些網(wǎng)絡(luò)對(duì)連接在網(wǎng)絡(luò)上的計(jì)算機(jī)數(shù)目有限制,根本達(dá)不到這樣大的數(shù)值。例如10BASE-T以太網(wǎng)規(guī)定其最大結(jié)點(diǎn)數(shù)只有1024。這樣的以太網(wǎng)若使用一個(gè)B類地址就浪費(fèi)6萬多個(gè)IP地址,地址空間的利用率還不到2%,而其他單位的主機(jī)無法使用這些被浪費(fèi)的地址。所統(tǒng)計(jì),超過半數(shù)的B類地址網(wǎng)絡(luò)所連接的主機(jī)還不到50臺(tái),而這些單位并不愿意申請(qǐng)一個(gè)足夠使用的C類地址(理由是考慮至今后可能的發(fā)展)。IP地址的浪費(fèi),還會(huì)使IP地址空間的資源過早地被用完。
第二,給每一個(gè)物理網(wǎng)絡(luò)分配一個(gè)網(wǎng)絡(luò)號(hào)會(huì)使路由表變得太大因而使網(wǎng)絡(luò)性能變壞。
每一個(gè)路由器都應(yīng)當(dāng)能夠從路由表查出應(yīng)怎樣到達(dá)其他網(wǎng)絡(luò)的下一跳路由器.。因此互聯(lián)網(wǎng)中的網(wǎng)絡(luò)數(shù)越多,路由器的路由表的項(xiàng)目數(shù)也就越多。這樣,即使我們擁有足夠多的IP地址資源可以給每一個(gè)物理網(wǎng)絡(luò)分配一個(gè)網(wǎng)絡(luò)號(hào),也會(huì)導(dǎo)致路由器中的路由表中的項(xiàng)目數(shù)過多。這不僅增加了路由器的成本(需要更多的存儲(chǔ)空間),而且使查找路由時(shí)耗費(fèi)更多的時(shí)間,同時(shí)也使路由器之間定期交換的路由信息急劇增加,因而使路由器和整個(gè)因特網(wǎng)的性能都下降了。
第三,兩級(jí)IP地址不夠靈活。
有時(shí)情況緊急,一個(gè)單位需要在新的地點(diǎn)馬上開通一個(gè)新的網(wǎng)絡(luò)。但是在申請(qǐng)到一個(gè)新的IP地址之前,新增加的網(wǎng)絡(luò)是不可能連接到因特網(wǎng)上工作的。我們希望有一種方法,使一個(gè)單位能隨時(shí)靈活地增加本單位的網(wǎng)絡(luò),而不必事先到因特網(wǎng)管理機(jī)構(gòu)去申請(qǐng)新的網(wǎng)絡(luò)號(hào)。原來的兩級(jí)IP地址無法做到這一點(diǎn)。
為解決上述問題,從1985年起在IP地址中又增加了一個(gè)“子網(wǎng)號(hào)字段”,使兩級(jí)IP地址變成為三級(jí)IP地址,它能夠較好地解決上述問題,并且使用起來也很靈活。這種做法叫做劃分子網(wǎng),或子網(wǎng)尋址或子網(wǎng)路由選擇。劃分子網(wǎng)已成為因特網(wǎng)的正式標(biāo)準(zhǔn)協(xié)議。
劃分子網(wǎng)的基本思路如下。
(1)一個(gè)擁有許多物理網(wǎng)絡(luò)的單位,可將所屬的物理網(wǎng)絡(luò)劃分為若干個(gè)子網(wǎng)。劃分子網(wǎng)純屬一個(gè)單位內(nèi)部的事情。本單位以外的網(wǎng)絡(luò)看不見這個(gè)網(wǎng)絡(luò)是由多少個(gè)子網(wǎng)組成,因?yàn)檫@個(gè)單位對(duì)外仍然表現(xiàn)為一個(gè)沒有劃分子網(wǎng)的網(wǎng)絡(luò)。
(2)劃分子網(wǎng)的方法是從網(wǎng)絡(luò)的主機(jī)號(hào)借用若干位作為子網(wǎng)號(hào),而主機(jī)號(hào)也就相應(yīng)減少了若干位。于是,兩級(jí)IP地址在本單位內(nèi)部就變?yōu)槿?jí)IP地址,即網(wǎng)絡(luò)號(hào)、子網(wǎng)號(hào)和主機(jī)號(hào),或者可以用以下記法來表示:
IP地址::={<網(wǎng)絡(luò)號(hào)>,<子網(wǎng)號(hào)>,<主機(jī)號(hào)>}
(3)凡是從其他網(wǎng)絡(luò)發(fā)送給本單位某個(gè)主機(jī)的IP數(shù)據(jù)報(bào),仍然是根據(jù)IP數(shù)據(jù)報(bào)的目的網(wǎng)絡(luò)號(hào)找到連接在本單位網(wǎng)絡(luò)上的路由器。但此路由器在收到IP數(shù)據(jù)報(bào)后,再按目的網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào)找到目的子網(wǎng),將IP數(shù)據(jù)報(bào)交付給目的主機(jī)。
下面用例子說明劃分子網(wǎng)的概念。圖7-15表示某單位擁有一個(gè)B類IP地址,網(wǎng)絡(luò)地址是145.13.0.0(網(wǎng)絡(luò)號(hào)是145.13)。凡目的地址為145.13.x .x的數(shù)據(jù)報(bào)都被送到這個(gè)網(wǎng)絡(luò)上的路由器R1。
圖7-15 一個(gè)B類網(wǎng)絡(luò)145.13.0.0
現(xiàn)把圖7-15的網(wǎng)絡(luò)劃分為3個(gè)子網(wǎng),如圖7-16所示。這里假定子網(wǎng)號(hào)占用8位,因此在增加了子網(wǎng)號(hào)后,主機(jī)號(hào)就只有8位。所劃分的3個(gè)子網(wǎng)分別是:145.13.3,0 ,145.13.7.0和145.13.21.0。在劃分子網(wǎng)后,整個(gè)網(wǎng)絡(luò)對(duì)外部仍表現(xiàn)為一個(gè)網(wǎng)絡(luò),其網(wǎng)絡(luò)地址仍為145.13.0.0。但網(wǎng)絡(luò)145.13.0.0 上的路由器R1在收到數(shù)據(jù)報(bào)后,再根據(jù)數(shù)據(jù)報(bào)的目的地址將其轉(zhuǎn)發(fā)到相應(yīng)的子網(wǎng)。
圖7-16 劃分為三個(gè)子網(wǎng)
總之,當(dāng)沒有劃分子網(wǎng)時(shí),IP地址是兩級(jí)結(jié)構(gòu),地址的網(wǎng)絡(luò)號(hào)字段也就是IP地址的“因特網(wǎng)部分”,而主機(jī)號(hào)字段是IP地址的“本地部分”。
劃分子網(wǎng)后IP地址就變成了三級(jí)結(jié)構(gòu)。請(qǐng)注意,劃分子網(wǎng)只是將IP地址的本地部分進(jìn)行再劃分,而不改變IP地址的因特網(wǎng)部分。
2、子網(wǎng)掩碼
我們知道,從IP數(shù)據(jù)報(bào)的首部并不知道源主機(jī)或目的主機(jī)所連接的網(wǎng)絡(luò)是否進(jìn)行了子網(wǎng)劃分。這是因?yàn)?/span>32位的IP地址本身以及數(shù)據(jù)報(bào)的首部都沒有包含任何有關(guān)子網(wǎng)劃分的信息。因此必須另外想辦法,這就是使用子網(wǎng)掩碼。
圖7-17(a)是IP地址為145.13.3.10的主機(jī)本來的兩級(jí)IP地址結(jié)構(gòu)。圖7-17(b)j是同一主機(jī)的三級(jí)IP地址的結(jié)構(gòu),也就是說,現(xiàn)在從原來16位的主機(jī)號(hào)中拿出8位作為子網(wǎng)號(hào)subnet-id,而主機(jī)號(hào)減少到8位。請(qǐng)讀者注意,雖然IP地址變?yōu)榱巳?jí),但數(shù)據(jù)報(bào)的轉(zhuǎn)發(fā)仍然是分兩步走,即先按網(wǎng)絡(luò)地址找網(wǎng)絡(luò),然后再找主機(jī)?,F(xiàn)在網(wǎng)絡(luò)地址是145.13.3.0(既不是原來的網(wǎng)絡(luò)地址145.13.0.0,也不是子網(wǎng)號(hào)3)。為了方便地從數(shù)據(jù)報(bào)中的目的IP地址中提取出所要找的子網(wǎng)的網(wǎng)絡(luò)地址,路由器R1就要使用子網(wǎng)掩碼。圖7-17(c)是子網(wǎng)掩碼,它也是32位,由一串1和跟隨的一串0組成。子網(wǎng)掩碼中的1對(duì)應(yīng)IP地址中的網(wǎng)絡(luò)號(hào)(請(qǐng)注意,一定要包括subnet-id),而子網(wǎng)掩碼中的0對(duì)應(yīng)現(xiàn)在的主機(jī)號(hào)。雖然RFC文檔中沒有規(guī)定子網(wǎng)掩碼中的一串1必須是連續(xù)的,但卻極力推薦在子網(wǎng)掩碼中選用連續(xù)的1,以免出現(xiàn)可能發(fā)生的差錯(cuò)。
圖7-17(d)表示R1把子網(wǎng)掩碼和IP地址145.13.3.10逐位相“與”(AND)(計(jì)算機(jī)進(jìn)行這種邏輯AND運(yùn)算是很容易的),得出了所要找的子網(wǎng)的網(wǎng)絡(luò)地址145.13.3.0。
圖7-17 IP地址的各字段和子網(wǎng)掩碼
使用子網(wǎng)掩碼的好處就是不管網(wǎng)絡(luò)有沒有劃分子網(wǎng),只要把子網(wǎng)掩碼和IP地址進(jìn)行逐位的“與”運(yùn)算,就立即得出網(wǎng)絡(luò)地址來。這樣在路由器處理到來的分組時(shí)就可采用同樣的算法。
這里還要弄清一個(gè)問題,這就是在不劃分子網(wǎng)時(shí),既然沒有子網(wǎng),為什么還要使用子網(wǎng)掩碼?這就是為了更方便地查找路由表?,F(xiàn)在因特網(wǎng)的標(biāo)準(zhǔn)規(guī)定:所有的網(wǎng)絡(luò)都必須有一個(gè)子網(wǎng)掩碼,同時(shí)在路由器的路由表中也必須有子網(wǎng)掩碼這一欄。如果一個(gè)網(wǎng)絡(luò)不劃分子網(wǎng),那么該網(wǎng)絡(luò)的子網(wǎng)掩碼就使用默認(rèn)子網(wǎng)掩碼。默認(rèn)子網(wǎng)掩碼中的1的位置和IP地址中的網(wǎng)絡(luò)號(hào)字段正好相對(duì)應(yīng)。因此,若使用默認(rèn)子網(wǎng)掩碼和某個(gè)不劃分子網(wǎng)的IP地址逐位相“與”(AND),就得出該IP地址的網(wǎng)絡(luò)地址來。這樣做可以不用查找該地址的類別位就能知道這是哪一類的IP地址。顯然,
A類地址的默認(rèn)子網(wǎng)掩碼是255.0.0.0,或0XFF000000。
B類地址的默認(rèn)子網(wǎng)掩碼是255.255.0.0,或0XFFFF0000。
C類地址的默認(rèn)子網(wǎng)掩碼是255.255.255.0,或0XFFFFFF00。
子網(wǎng)掩碼是一個(gè)網(wǎng)絡(luò)或一個(gè)子網(wǎng)的重要屬性。在RFC950成為因特網(wǎng)的正式標(biāo)準(zhǔn)后,路由器在和相鄰路由器表中的信息時(shí),必須把自己所在網(wǎng)絡(luò)(或子網(wǎng))的子網(wǎng)掩碼告訴相鄰路由器。在路由器的路由表中的每一個(gè)項(xiàng)目,除了要給出目的網(wǎng)絡(luò)地址外,還必須同時(shí)給出該網(wǎng)絡(luò)的子網(wǎng)掩碼。若一個(gè)路由器連接在兩個(gè)子網(wǎng)上就擁有兩個(gè)網(wǎng)絡(luò)地址和兩個(gè)子網(wǎng)掩碼。
請(qǐng)讀者注意,雖然根據(jù)已成為因特網(wǎng)標(biāo)準(zhǔn)協(xié)議的RFC 950文檔,子網(wǎng)號(hào)不能全為1或全為0,但隨著無分類域間路由選擇CIDR的廣泛使用(在7.3.3節(jié)討論),現(xiàn)在全1或全0的子網(wǎng)號(hào)也可以使用了,但一定要謹(jǐn)慎使用,要弄清路由器所用的路由選擇軟件是否支持全0或全1的子網(wǎng)號(hào)這種較新的用法。
我們可以看出,若使用較少位數(shù)的子網(wǎng)號(hào),則每一個(gè)子網(wǎng)上可連接的主機(jī)數(shù)就較大。反之,若使用較多位數(shù)的子網(wǎng)號(hào),則子網(wǎng)的數(shù)目較多但每個(gè)子網(wǎng)上可連接的主機(jī)數(shù)就較小。因此我們可根據(jù)網(wǎng)絡(luò)的具體情況(一共需要分多少個(gè)子網(wǎng),每個(gè)子網(wǎng)中最多有多少個(gè)主機(jī))來選擇合適的子網(wǎng)掩碼。
。
在劃分子網(wǎng)的情況下,分組轉(zhuǎn)發(fā)的算法必須做相應(yīng)的改動(dòng)。
我們應(yīng)當(dāng)注意到,使用子網(wǎng)劃分后,路由表必須包含以下3項(xiàng)內(nèi)容,即目的網(wǎng)絡(luò)地址、子網(wǎng)掩碼和下一跳地址。
在劃分子網(wǎng)的情況下路由器轉(zhuǎn)發(fā)分組的算法應(yīng)當(dāng)如下所示。
(1)從收到數(shù)據(jù)報(bào)的首部提取的IP地址D。
(2)先判斷是否為直接交付。對(duì)路由器直接相連的網(wǎng)絡(luò)逐個(gè)進(jìn)行檢查:用各網(wǎng)絡(luò)的子網(wǎng)掩碼和D逐位相“與”(AND操作),看結(jié)果是否和相應(yīng)的網(wǎng)絡(luò)地址匹配。若匹配,則把分組進(jìn)行直接交付(當(dāng)然還需要把D轉(zhuǎn)換成物理地址,把數(shù)據(jù)報(bào)封裝成幀發(fā)送出去),轉(zhuǎn)發(fā)任務(wù)結(jié)束。否則就是間接交付,執(zhí)行步驟(3)。
(3)若路由表中有目的地址為D的特定主機(jī)路口,則把數(shù)據(jù)報(bào)傳送給路由表中所指明的下一路由器;否則,執(zhí)行步驟(4)。
(4)對(duì)路由表中的每一行(目的網(wǎng)絡(luò)地址、子網(wǎng)掩碼、下一跳地址),用其中的子網(wǎng)掩碼和D逐位相“與”(AND操作),其結(jié)果為N。若N與該行的目的網(wǎng)絡(luò)地址匹配,則把數(shù)據(jù)報(bào)傳送給該行指明的下一跳路由器;否則,執(zhí)行步驟(5)。
(5)若路由表中有一個(gè)默認(rèn)路由,則把數(shù)據(jù)報(bào)傳送給路由表中指明的默認(rèn)路由器;否則,執(zhí)行步驟(6)。
(6)報(bào)告轉(zhuǎn)發(fā)分組出錯(cuò)。
1. 網(wǎng)絡(luò)前綴
劃分子網(wǎng)在一定程度上緩解了因特網(wǎng)在發(fā)展中遇到的困難。然而在1992年因特網(wǎng)仍然面臨3個(gè)必須盡早解決的問題,這就是:
(1)B類地址在1992年已分配了近一半,眼看很快就將全部分配完畢!
(2)因特網(wǎng)主干網(wǎng)上的 路由表中的項(xiàng)目數(shù)急劇增長(zhǎng)(從幾千萬增長(zhǎng)到幾萬個(gè))。
(3)整個(gè)IPv4的地址空間最終將全部耗盡。
當(dāng)時(shí)預(yù)計(jì)前兩個(gè)問題就在1994年變的非常嚴(yán)重。因此,IETE很快就研究出采用無分類編址的方法來解決前兩個(gè)問題。IETE認(rèn)為上面的3個(gè)問題屬于更加長(zhǎng)遠(yuǎn)的問題,因此,專門成立IPv6工作組負(fù)責(zé)研究解決新版本IP的問題。
其實(shí)早在1987年,RFC1009就指明了在一個(gè)劃分子網(wǎng)的網(wǎng)絡(luò)中可同時(shí)使用不同的子網(wǎng)掩碼。使用變長(zhǎng)子網(wǎng)掩碼VLSM可進(jìn)一步提高IP地址資源的利用率。在VLSM的基礎(chǔ)上有進(jìn)一步研究出無分類編址的方法,它的正式名字是無分類域間路由選擇CIDR。在1993年形成了CIDR的RFC文檔:RFC1517~1519和RFC1520?,F(xiàn)在CIDR已成為因特網(wǎng)建議標(biāo)準(zhǔn)協(xié)議。
CIDR最主要的特點(diǎn)有兩個(gè)。
(1)CIDR消除了傳統(tǒng)的A類、B類和C類地址以及劃分子網(wǎng)的概念,因而,可以更加有效地分配IPv4的地址空間,并且可以在新的IPv6使用之前容許因特網(wǎng)的規(guī)模繼續(xù)增長(zhǎng)。CIDR使用各種長(zhǎng)度的“網(wǎng)絡(luò)前綴”來代替分類地址中的網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào),而不是像分類地址中只能使用1字節(jié)、2字節(jié)和3字節(jié)長(zhǎng)的網(wǎng)絡(luò)號(hào)。CIDR不再使用“子網(wǎng)”的概念而使用網(wǎng)絡(luò)前綴,使IP地址從三級(jí)編址(使用子網(wǎng)掩碼)又回到了兩級(jí)編址,但這已是無分類的兩級(jí)編址。它的記法是:
IP地址 ::={〈網(wǎng)絡(luò)前綴〉,〈主機(jī)號(hào)〉}
CIDR還使用“斜線記法”,或CIDR記法,即在IP地址后面加上斜線“/”,然后寫上網(wǎng)絡(luò)前綴所占的位數(shù)(對(duì)應(yīng)子網(wǎng)掩碼中的1的個(gè)數(shù))。
(2)CIDR把網(wǎng)絡(luò)前綴都相同的連續(xù)的IP地址組成“CIDR地址塊”。一個(gè)CIDR地址塊是由地址塊的起始地址(即地址中地址數(shù)值最小的一個(gè))和地址塊中的地址數(shù)來定義的。CIDR地址塊也可用斜線記法來表示。
當(dāng)我們見到斜線記法表示的地址時(shí),一定要根據(jù)上下文弄清它是指一個(gè)單個(gè)的IP地址,還是指一個(gè)地址塊。
由于一個(gè)CIDR地址塊可以表示很多地址,所以在路由表中就利用CIDR地址塊來查找目的網(wǎng)絡(luò)。這種地址的聚合常稱為路由聚合,它使得路由表中的一個(gè)項(xiàng)目可以表示原來傳統(tǒng)分類地址的很多個(gè)路由。路由聚合也稱為構(gòu)成超網(wǎng)。如果沒有采用CIDR,在1994年和1995年,因特網(wǎng)的一個(gè)路由表中就會(huì)超過7萬個(gè)項(xiàng)目,而使用了CIDR后,在1996年的一個(gè)路由表的項(xiàng)目數(shù)才只有3萬多個(gè)。路由聚合有利于減少路由器之間的路由選擇信息的交換,從而提高了整個(gè)因特網(wǎng)的性能。
為了更方便的進(jìn)行路由選擇,CIDR使用32位的地址掩碼。地址掩碼是有一串1和一串0組成,而1的個(gè)數(shù)就是網(wǎng)絡(luò)前綴的長(zhǎng)度。雖然CIDR不使用子網(wǎng)了,但是目前仍有一些網(wǎng)絡(luò)使用子網(wǎng)劃分和子網(wǎng)掩碼,因此,CIDR所使用的地址掩碼也可以繼續(xù)叫做子網(wǎng)掩碼。對(duì)于/20地址塊,其地址掩碼是:11111111 11111111 11110000 00000000(20個(gè)連續(xù)的1)。斜線記法中的數(shù)字就是地址掩碼中1的個(gè)數(shù)。
請(qǐng)讀者注意,在配置基于CIDR的網(wǎng)絡(luò)時(shí),可能有一些主機(jī)本來是使用分類的IP地址。它們可能不允許把網(wǎng)絡(luò)前綴設(shè)置為比原來分類地址的子網(wǎng)掩碼的1的長(zhǎng)度更短。例如,把網(wǎng)絡(luò)配置成2000.25.16.0/20時(shí)就可能不行,因?yàn)檫@原來是一個(gè)C類地址,其子網(wǎng)掩碼的長(zhǎng)度至少是24位。只有在主機(jī)的軟件支持CIDR時(shí),網(wǎng)絡(luò)前綴才能比原來的掩碼長(zhǎng)度短。但是,若把200.25.16.0/20配置成16個(gè)/24地址塊就不會(huì)有問題,因?yàn)椴恢С?/span>CIDR的主機(jī)會(huì)把本地的/24解釋成C類網(wǎng)絡(luò)。
2.最長(zhǎng)前綴匹配
在使用CIDR時(shí),由于采用了網(wǎng)絡(luò)前綴這種記法,IP地址由網(wǎng)絡(luò)前綴和主機(jī)號(hào)這兩個(gè)部分組成,因此在路由表中的項(xiàng)目也要有相應(yīng)的改變.這時(shí),每個(gè)項(xiàng)目由“網(wǎng)絡(luò)前綴”和“下一跳地址”組成。但是在查找路由表時(shí)可能會(huì)得到不止一個(gè)匹配結(jié)果。這樣就帶來一個(gè)問題:我們應(yīng)當(dāng)從這些匹配結(jié)果中選擇哪一條路由呢?
正確的答案是:應(yīng)當(dāng)從匹配結(jié)果中選擇最長(zhǎng)網(wǎng)絡(luò)前綴的路由。這叫做最長(zhǎng)前綴匹配,這是因?yàn)榫W(wǎng)絡(luò)前綴越長(zhǎng),其地址塊就越小,因而路由就越具體。最長(zhǎng)前綴匹配又稱為最長(zhǎng)匹配或最佳匹配。
為了提高IP數(shù)據(jù)報(bào)交付成功的機(jī)會(huì),在國(guó)際層使用了因特網(wǎng)控制報(bào)文協(xié)議ICMP。ICMP允許主機(jī)或路由器報(bào)告差錯(cuò)情況和提供有關(guān)異常情況的報(bào)告。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議。但ICMP不是高層協(xié)議,而是IP層的協(xié)議。ICMP報(bào)文作為IP層數(shù)據(jù)報(bào)的數(shù)據(jù),加上數(shù)據(jù)報(bào)的首部,組成IP數(shù)據(jù)報(bào)發(fā)送出去。ICMP報(bào)文如圖7-21所示。
ICMP報(bào)文的種類有兩種,即ICMP差錯(cuò)報(bào)告報(bào)文和ICMP詢問報(bào)文。
ICMP報(bào)文的前4個(gè)字節(jié)是統(tǒng)一的格式,共有3個(gè)字段,即類型、代碼和檢驗(yàn)和。接著的4個(gè)字節(jié)的內(nèi)容與ICMP的類型有關(guān)。最后面是數(shù)據(jù)字段,其長(zhǎng)度取決于ICMP的類型。
ICMP報(bào)文的代碼字段是為了進(jìn)一步區(qū)分某種類型中的幾種不同的情況。檢驗(yàn)和字段用來檢驗(yàn)整個(gè)ICMP報(bào)文。讀者應(yīng)當(dāng)還記得,IP數(shù)據(jù)報(bào)首部的檢驗(yàn)和并不檢驗(yàn)IP數(shù)據(jù)報(bào)的內(nèi)容,因此不能保證經(jīng)過傳輸ICMP報(bào)文不產(chǎn)生差錯(cuò)。
圖7-21 ICMP報(bào)文
ICMP差錯(cuò)報(bào)告報(bào)文共有以下5種。
(1)終點(diǎn)不可達(dá) 當(dāng)路由器或主機(jī)不能交付數(shù)據(jù)報(bào)時(shí)就向源站發(fā)送終點(diǎn)不可達(dá)報(bào)文。
(2) 源站抑制 當(dāng)路由器或主機(jī)由于擁塞而丟棄該數(shù)據(jù)報(bào)時(shí),就向源站發(fā)送源站抑制報(bào)文,使源站知道應(yīng)當(dāng)將數(shù)據(jù)報(bào)的發(fā)送速率放慢。
(3)時(shí)間超過 當(dāng)路由器收到生存時(shí)間為零的數(shù)據(jù)報(bào)時(shí),除丟棄數(shù)據(jù)報(bào)外,還要向源站發(fā)送時(shí)間超過報(bào)文。當(dāng)目的站在預(yù)先規(guī)定的時(shí)間內(nèi)不能收到一個(gè)數(shù)據(jù)報(bào)的全部數(shù)據(jù)報(bào)片時(shí),就把已收到的數(shù)據(jù)片都丟棄,并向源站發(fā)送時(shí)間超過報(bào)文。
(4)參數(shù)問題 當(dāng)路由器或目的主機(jī)收到的數(shù)據(jù)報(bào)的首部中,有的字段的值不正確時(shí),就丟棄該數(shù)據(jù)報(bào),并向源站發(fā)送參數(shù)問題報(bào)文。
(5)改變路由(重定向) 路由器把改變路由報(bào)文發(fā)送給主機(jī),讓主機(jī)知道下次應(yīng)將數(shù)據(jù)報(bào)發(fā)送給另外的路由器(可通過更好的路由)。
下面對(duì)改變路由報(bào)文進(jìn)行簡(jiǎn)短的解釋。我們知道,在因特網(wǎng)的主機(jī)中也要有一個(gè)路由表。當(dāng)主機(jī)要發(fā)送數(shù)據(jù)報(bào)時(shí),首先是查找主機(jī)自己的路由表,看應(yīng)當(dāng)從哪一個(gè)接口把數(shù)據(jù)報(bào)發(fā)送出去。在因特網(wǎng)中主機(jī)的數(shù)量遠(yuǎn)大于路由器的數(shù)量,出于效率的考慮,這些主機(jī)的路由表一般都采用人工配置,并且主機(jī)不和連接在網(wǎng)絡(luò)上的路由器定期交換路由信息。在主機(jī)剛開始工作時(shí),一般都在路由表中設(shè)置一個(gè)默認(rèn)路由器的IP地址。不管數(shù)據(jù)報(bào)要發(fā)送到哪個(gè)目的地址,都一律先將數(shù)據(jù)報(bào)傳送給網(wǎng)絡(luò)上的這個(gè)默認(rèn)路由器,而這個(gè)默認(rèn)路由器知道每一個(gè)目的網(wǎng)絡(luò)上的最佳路由(通過和其他路由器交換路由信息)。如果默認(rèn)路由器發(fā)現(xiàn)主機(jī)發(fā)往某個(gè)目的地址的數(shù)據(jù)報(bào)的最佳路由不應(yīng)當(dāng)經(jīng)過默認(rèn)路由器,而是應(yīng)當(dāng)經(jīng)過網(wǎng)絡(luò)上的另一個(gè)路由器R時(shí),就用改變路由報(bào)文把這情況告訴主機(jī)。于是,該主機(jī)就在其路由表中增加一個(gè)項(xiàng)目:到某某目的地址應(yīng)經(jīng)過路由器R(而不是默認(rèn)路由器)。
所有的ICMP差錯(cuò)報(bào)告報(bào)文中的數(shù)據(jù)字段都有同樣的格式,如圖7-22所示。把收到的需要進(jìn)行差錯(cuò)報(bào)告的IP數(shù)據(jù)報(bào)的首部和數(shù)據(jù)字段的前8個(gè)字節(jié)提取出來,作為ICMP報(bào)文的數(shù)據(jù)字段。再加上相應(yīng)的ICMP差錯(cuò)報(bào)告報(bào)文的前8個(gè)字節(jié),就構(gòu)成了ICMP差錯(cuò)報(bào)告報(bào)文。提取收到的數(shù)據(jù)報(bào)的數(shù)據(jù)字段的前8個(gè)字節(jié)是為了得到運(yùn)輸層的端口號(hào)(對(duì)于TCP和UDP)以及運(yùn)輸層報(bào)文的發(fā)送序號(hào)(對(duì)于TCP)。這些信息對(duì)源站通知高層協(xié)議是有用的(端口的作用將在8、2、2節(jié)介紹)。整個(gè)ICMP報(bào)文作為IP數(shù)據(jù)報(bào)的數(shù)據(jù)字段發(fā)送給源站。
圖 7-22 ICMP差錯(cuò)報(bào)告報(bào)文的數(shù)據(jù)字段的內(nèi)容
下面是不應(yīng)發(fā)送ICMP差錯(cuò)報(bào)告報(bào)文的幾種情況。
對(duì)ICMP差錯(cuò)報(bào)告報(bào)文不再發(fā)送ICMP差錯(cuò)報(bào)告報(bào)文。
對(duì)第一個(gè)分片的數(shù)據(jù)報(bào)片的所有后續(xù)數(shù)據(jù)報(bào)片都不發(fā)送ICMP差錯(cuò)報(bào)告報(bào)文。
對(duì)具有多播地址的數(shù)據(jù)報(bào)都不發(fā)送ICMP差錯(cuò)報(bào)告報(bào)文。
對(duì)具有特殊地址(如127.0.0.1或0.0.0.0)的數(shù)據(jù)報(bào)不發(fā)送ICMP差錯(cuò)報(bào)告報(bào)文。
ICMP詢問報(bào)文有4種,即回送請(qǐng)求和回答、時(shí)間戳請(qǐng)求和回答、掩碼地址請(qǐng)求和回答,以及路由器詢問和通告。
ICMP回送請(qǐng)求報(bào)文是由主機(jī)或路由器向一個(gè)特定的目的主機(jī)發(fā)出的詢問。收到此報(bào)文的機(jī)器必須給源主機(jī)發(fā)送ICMP回送回答報(bào)文。這種詢問報(bào)文用來測(cè)試目的站是否可達(dá)以及了解其有關(guān)狀態(tài)。在應(yīng)用層有一個(gè)很常用的服務(wù)叫做PING,用來測(cè)試兩個(gè)主機(jī)之間的連通性。PING使用了ICMP回送請(qǐng)求與回送回答報(bào)文。PING是應(yīng)用層直接使用網(wǎng)絡(luò)層ICMP的一個(gè)例子。它沒有通過運(yùn)輸層的TCP或UDP。
ICMP時(shí)間戳請(qǐng)求報(bào)文是請(qǐng)某個(gè)主機(jī)或路由器回答當(dāng)前的日期和時(shí)間。在ICMP時(shí)間戳回答報(bào)文中有一個(gè)32位的字段,其中寫入的整數(shù)代表從1990年1月1日起到當(dāng)前時(shí)刻一共有多少秒。時(shí)間戳請(qǐng)求與回答可用來進(jìn)行時(shí)鐘同步和測(cè)量時(shí)間。
主機(jī)使用ICMP地址掩碼請(qǐng)求報(bào)文可向子網(wǎng)掩碼服務(wù)器得到某個(gè)接口的地址掩碼。
主機(jī)使用ICMP路由器詢問和通告報(bào)文可了解連接在本網(wǎng)絡(luò)上的路由器是否正常工作。主機(jī)將路由器詢問報(bào)文廣播(或多播)。收到詢問報(bào)文的一個(gè)或幾個(gè)路由器就使用路由器通告報(bào)文廣播其路由選擇信息。
本節(jié)將討論幾種常用的路由選擇協(xié)議,也就是要討論路由表中的路由是怎樣得出的。
1、理想的路由算法
路由選擇協(xié)議的核心就是路由算法,即需要何種算法獲得路由表中的各項(xiàng)目。一個(gè)理想的路由算法應(yīng)具有如下一些特點(diǎn)。
(1)算法必須是正確的和完整的。這里,“正確”的含義是:沿著各路由表所指引的路由,分組一定能夠最終到達(dá)目的網(wǎng)絡(luò)和目的主機(jī)。
(2)算法在計(jì)算上就簡(jiǎn)單。進(jìn)行路由選擇的計(jì)算必然要增加分組的時(shí)延。因此,路由選擇的計(jì)算不應(yīng)使網(wǎng)絡(luò)通信量增加太多的額外開銷。若為了計(jì)算合適的路由必須使用網(wǎng)絡(luò)其他路由器發(fā)來的大量狀態(tài)信息時(shí),開銷就會(huì)過大。
(3)算法應(yīng)能適應(yīng)通信量和網(wǎng)絡(luò)拓?fù)涞淖兓?,這就是說,要有自適應(yīng)性。當(dāng)網(wǎng)絡(luò)中的通信量發(fā)生變化時(shí),算法能自適應(yīng)地改變路由以均衡各鏈路的負(fù)載。當(dāng)某個(gè)或某個(gè)結(jié)點(diǎn)、鏈路發(fā)生故障不能工作,或者修理好了再投入運(yùn)行時(shí),算法也能及時(shí)地改變路由。有時(shí)稱這種自適應(yīng)性為“穩(wěn)健性”。
(4)算法應(yīng)具有穩(wěn)定性。在網(wǎng)絡(luò)通信量和網(wǎng)絡(luò)拓?fù)湎鄬?duì)穩(wěn)定的情況下,路由算法應(yīng)收斂于一個(gè)可以接受的解,而不應(yīng)使得出的路由不停的變化。
(5)算法應(yīng)是公平的。這就是說,算法應(yīng)對(duì)所有用戶(除對(duì)少數(shù)優(yōu)先級(jí)高的用戶)都是平等的。例如,若使某一對(duì)用戶的端到端時(shí)延為最小,但卻不考慮其他的廣大用戶,這就明顯不符合公平性原則的要求。
(6)算法應(yīng)是最佳的。這里的“最佳”是指以最低的代價(jià)來實(shí)現(xiàn)路由算法。這里特別需要注意的是,在研究路由選擇時(shí),需要給每一條鏈路指明一定的代價(jià),而這里“代價(jià)”并不是指“錢”,而是一個(gè)或幾個(gè)因素綜合決定的一種度量,如鏈路長(zhǎng)度、數(shù)據(jù)傳輸速率、鏈路容量、是否要保密、傳播時(shí)延等,甚至還可以是一天中某一個(gè)小時(shí)內(nèi)的通信量、結(jié)點(diǎn)的緩存被占用的程度、鏈路差錯(cuò)率等。可以根據(jù)用戶的具體情況來設(shè)置每一條鏈路的“代價(jià)”。由此可見,不存在一種絕對(duì)的最佳路由算法。所謂“最佳”只能是相對(duì)于某一種特定要求下得出的較為合理的選擇而已。
一個(gè)實(shí)際的路由選擇算法,應(yīng)盡可能接近理想的算法。在不同的應(yīng)用條件下,對(duì)以上提出的6個(gè)方面也可有不同的側(cè)重。
應(yīng)當(dāng)指出,路由選擇是個(gè)非常復(fù)雜的問題,因?yàn)樗蔷W(wǎng)絡(luò)中的所有結(jié)點(diǎn)共同協(xié)調(diào)工作的結(jié)果。其次,路由選擇的環(huán)境往往是不斷變化的,而這種變化有時(shí)無法事先知道,例如,網(wǎng)絡(luò)中出了某些故障。此外當(dāng)網(wǎng)絡(luò)發(fā)生擁塞時(shí),就特別需要有能緩解這種擁塞的路由選擇策略,但恰好在這種條件下,很難從網(wǎng)絡(luò)中的各結(jié)點(diǎn)獲得所需的路由選擇信息。
倘若從路由算法能否隨網(wǎng)絡(luò)的通信量或拓?fù)渥赃m應(yīng)地進(jìn)行調(diào)整變化來劃分,則只有兩大類,即靜態(tài)路由選擇選擇策略與動(dòng)態(tài)路由選擇策略,。靜態(tài)路由選擇也叫做非自適應(yīng)路由選擇,其特點(diǎn)是簡(jiǎn)單和開銷較小,但不能及時(shí)適應(yīng)網(wǎng)絡(luò)狀態(tài)的變化。動(dòng)態(tài)路由選擇也叫做自適應(yīng)路由選擇,其特點(diǎn)是能較好地適應(yīng)網(wǎng)絡(luò)狀態(tài)的變化,但實(shí)現(xiàn)起來較為復(fù)雜,開銷也比較大。
2、分層次的路由選擇協(xié)議
因特網(wǎng)采用的路由選擇協(xié)議主要是自適應(yīng)的(即動(dòng)態(tài)的)、分布式路由選擇協(xié)議。由于以下兩個(gè)原因,因特網(wǎng)采用分層次的路由選擇協(xié)議。
(1)因特網(wǎng)的規(guī)模非常大,現(xiàn)在就已經(jīng)有幾百萬個(gè)路由器互連在一起。如果讓所有的路由器知道所有的網(wǎng)絡(luò)應(yīng)怎樣到達(dá),則這種路由表將非常大,處理起來也太費(fèi)時(shí)間。而所有這些路由器之間交換路由信息所需的帶寬就會(huì)使因特網(wǎng)的通信鏈路飽和。
(2)許多單位不愿意外界了解自己?jiǎn)挝痪W(wǎng)絡(luò)的布局細(xì)節(jié)和本部門所采用的路由選擇協(xié)議(這屬于本部門內(nèi)部的事情),但同時(shí)希望連接到因特網(wǎng)上。
為此,因特網(wǎng)將互聯(lián)網(wǎng)劃分為許多較小的自治系統(tǒng),一般簡(jiǎn)稱為AS。一個(gè)自治系統(tǒng)是一組互連起來的IP前綴(一個(gè)或多個(gè)前綴),由一個(gè)或多個(gè)網(wǎng)絡(luò)管理員負(fù)責(zé)其運(yùn)行,但更重要的特點(diǎn)就是每一個(gè)自治系統(tǒng)有一個(gè)單一的和明確定義的路由選擇策略。[RFC1930]。這樣,因特網(wǎng)就把路由選擇協(xié)議劃分為以下兩大類。
(1)內(nèi)部網(wǎng)關(guān)協(xié)議IGP,即在一個(gè)自治系統(tǒng)內(nèi)部使用的路由選擇協(xié)議,而這與在互聯(lián)網(wǎng)中的其他自治系統(tǒng)選用什么路由選擇協(xié)議無關(guān)。目前,這類路由選擇協(xié)議使用最多,如RIP和OSP協(xié)議。
(2)外部網(wǎng)關(guān)協(xié)議EGP,若源點(diǎn)和終點(diǎn)處在不同的自治系統(tǒng)中(這兩個(gè)自治系統(tǒng)使用不同的內(nèi)部網(wǎng)關(guān)協(xié)議),當(dāng)數(shù)據(jù)報(bào)傳到另一個(gè)自治系統(tǒng)中。這樣的協(xié)議就是外部網(wǎng)關(guān)協(xié)議EGP。目前,在外部網(wǎng)關(guān)協(xié)議中使用最多的是BGP-4。
自治系統(tǒng)之間的路由選擇也叫做域間路由選擇,而在自治系統(tǒng)內(nèi)部的路由選擇叫做域內(nèi)路由選擇。
如圖7-23所示,為3個(gè)自治系統(tǒng)互連在一起的示意圖,在自治系統(tǒng)內(nèi)各路由器之間的網(wǎng)絡(luò)就省略了,而用一條鏈路表示路由器之間的網(wǎng)絡(luò)。每個(gè)自治系統(tǒng)運(yùn)行本自治系統(tǒng)的內(nèi)部路由選擇協(xié)議IGP,但每個(gè)自治系統(tǒng)都有一個(gè)或多個(gè)路由器,除運(yùn)行本系統(tǒng)的內(nèi)部路由選擇協(xié)議外,還運(yùn)行自治系統(tǒng)間的路由選擇協(xié)議EGP。在圖7-23中,能運(yùn)行自治系統(tǒng)間的路由選擇協(xié)議的有R1,R2和R3 3個(gè)路由器。在圖中將這類路由器畫得稍大些以示區(qū)別。假定圖中自治系統(tǒng)A的主機(jī)H1要向自治系統(tǒng)B的主機(jī)H2發(fā)送數(shù)據(jù)報(bào),那么在各自治系統(tǒng)內(nèi)使用的是各自的內(nèi)部網(wǎng)關(guān)協(xié)議IGP(例如,分別使用RIP和OSPF),而在路由器R1和R2之間則必須使用外部網(wǎng)關(guān)協(xié)議EGP(例如,使用BGP-4)。
圖7-23 自治系統(tǒng)和內(nèi)部網(wǎng)關(guān)協(xié)議、外部網(wǎng)關(guān)協(xié)議
這里我們要指出兩點(diǎn)。
(1)因特網(wǎng)的早期RFC文檔中未使用“路由器”,而是使用“網(wǎng)關(guān)”這一名詞。但是,在新的RFC文檔中又使用了“路由器”這一名詞,因此有的書把IGP和EGP分別改為IRP和ERP。為了方便讀者查閱RFC文檔,本書仍使用RFC原先使用的名字。
(2)RFC采用的這兩個(gè)名詞IGP和EGP是協(xié)議類別的名稱。但RFC在使用EGP這個(gè)名詞時(shí)出現(xiàn)了一點(diǎn)混亂,因?yàn)樽钤绲囊粋€(gè)外部網(wǎng)關(guān)協(xié)議的協(xié)議名字正好也是EGP。后來發(fā)現(xiàn)該RFC提出的EGP有不少缺點(diǎn),就設(shè)計(jì)了一種更好的外部網(wǎng)關(guān)協(xié)議,叫做邊界網(wǎng)關(guān)協(xié)議BGP,用來取代舊的RFC827外部網(wǎng)關(guān)協(xié)議EGP。實(shí)際上,舊的協(xié)議EGP和新的協(xié)議BGP都屬于外部網(wǎng)關(guān)協(xié)議EGP這一類別。因此,在遇到名詞EGP時(shí),應(yīng)弄清它是指舊的RFC827協(xié)議EGP,還是指外部網(wǎng)關(guān)協(xié)議EGP這個(gè)類別。
總之,使用分層次的路由選擇方法,可將因特網(wǎng)的路由選擇協(xié)議劃分為:
內(nèi)部網(wǎng)關(guān)協(xié)議IGP:具體的協(xié)議有多種,如RIP和OSPF等。
外部網(wǎng)關(guān)協(xié)議EGP:目前使用的協(xié)議就是BGP-4。
對(duì)于比較大的自治系統(tǒng),還可將所有的網(wǎng)絡(luò)再進(jìn)行一次劃分。例如,可以構(gòu)筑一個(gè)鏈路速率較高的主干網(wǎng)和許多速率較低的區(qū)域網(wǎng)。每個(gè)區(qū)域網(wǎng)通過路由器連接到主干網(wǎng)。在一個(gè)區(qū)域內(nèi)找不到目的站時(shí),就通過路由器經(jīng)過主干網(wǎng)到達(dá)另一個(gè)區(qū)域網(wǎng),或者通過外部路由器到別的自治系統(tǒng)中去查找。下面對(duì)這兩類協(xié)議分別進(jìn)行介紹。
路由信息協(xié)議RIP是內(nèi)部網(wǎng)關(guān)協(xié)議IGP中最先得到廣泛使用的協(xié)議。RIP是一種分布式的基于距離向量的路由選擇協(xié)議,是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,其最大優(yōu)點(diǎn)就是簡(jiǎn)單。
RIP要求網(wǎng)絡(luò)中的每一個(gè)路由器都要維護(hù)從它自己到其他每一個(gè)目的網(wǎng)絡(luò)的距離記錄。RIP將“距離”定義如下。
從一路由器到直接連連的網(wǎng)絡(luò)的距離定義為1。從一路由器到直接連接的網(wǎng)絡(luò)的距離定義為所經(jīng)過的路由器數(shù)加1。“加1”是因?yàn)榈竭_(dá)目的網(wǎng)絡(luò)后就進(jìn)行直接交付,而到直接連接的網(wǎng)絡(luò)的距離已經(jīng)定義為1。
RIP的距離也稱為“跳數(shù)”,因?yàn)槊拷?jīng)過一個(gè)路由器,跳數(shù)就加1。RIP認(rèn)為一個(gè)好的路由就是它通過的路由器的數(shù)目少,即“距離短”。RIP允許一條路徑最多只能包含15個(gè)路由器。因此,“距離”的最大值為16時(shí)即相當(dāng)于不可達(dá)。可見,RIP只適用于小型互聯(lián)網(wǎng)。
需要注意的是,到直接連接的網(wǎng)絡(luò)的距離也可定義為0(采用這種定義的理由是:路由器在和直接連接在該網(wǎng)絡(luò)上的主機(jī)通信時(shí)不需要經(jīng)過另外的路由器,。既然每經(jīng)過一個(gè)路由器要將距離加1,那么不再經(jīng)過路由器的距離就應(yīng)當(dāng)為零)。本書的其他版本也曾使用過這種定義。但兩種不同的定義對(duì)實(shí)現(xiàn)RIP并無影響,因?yàn)橹匾氖且页鲎疃叹嚯x,把所有的距離都加1或都江堰市減1,對(duì)選擇最佳路由都是一樣的。
RIP不能在兩個(gè)網(wǎng)絡(luò)之間同時(shí)使用多條路由。RIP選擇一條具有最少路由器的路由,哪怕還存在另一條高速但路由器較多的路由。
本節(jié)討論的RIP和下一節(jié)要討論的OSPF協(xié)議都是分布式路由選擇協(xié)議。它們的共同特點(diǎn)就是每一個(gè)路由器都要不斷地和其他一些路由器交換路由信息。讀者一定要弄清以下3個(gè)要點(diǎn),即和哪些路由器交換信息?交換什么信息?在什么時(shí)候交換信息?
(1)僅和相鄰路由器交換信息。兩個(gè)路由器是相鄰的,如果它們之間的通信不需要經(jīng)過另一個(gè)路由器。換言之,兩個(gè)相鄰路由器在同一個(gè)網(wǎng)絡(luò)上都有自己的接口。RIP規(guī)定,不相鄰的路由器不交換信息。
(2)交換的信息是當(dāng)前本路由器所知道的全部信息,即自己的路由表。因此,交換的信息就是:“到本自治系統(tǒng)中所有網(wǎng)絡(luò)的最短距離,以及到每個(gè)網(wǎng)絡(luò)應(yīng)經(jīng)過的下一跳路由器”。至于本路由怎樣獲得這些信息以及路由表是否完整,都是不重要的。
(3)按固定的時(shí)間間隔交換路由信息,例如,每隔30秒。然后路由器根據(jù)收到的路由信息更新路由表。當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),路由器也及時(shí)向相鄰路由器通告拓?fù)渥兓蟮穆酚尚畔ⅰ?/span>
這里要強(qiáng)調(diào)一點(diǎn):路由器在剛剛開始工作時(shí),只知道到直接連接的網(wǎng)絡(luò)的距離。以后,每一個(gè)路由器也中和數(shù)目非常有限的相鄰路由器交換并更新路由信息。但經(jīng)過若干次更新后,所有的路由器最終都會(huì)知道到達(dá)本自治系統(tǒng)中任何一個(gè)網(wǎng)絡(luò)的最短距離和下一跳路由器的地址。看起來RIP有些奇怪,因?yàn)?#8220;我的路由表中的信息要依賴于你的,現(xiàn)時(shí)你的信息又依賴于我的。”然而事實(shí)證明,RIP的收斂過程較快,。所謂收斂就是在自治系統(tǒng)中所有的結(jié)點(diǎn)都得到正確的路由選擇信息的過程。
路由表中最主要的信息就是:到某個(gè)網(wǎng)絡(luò)的距離(即最短距離),以及應(yīng)經(jīng)過的下一跳地址。路由表更新的原則是找出到每個(gè)目的網(wǎng)絡(luò)的最短距離。這種更新算法又稱為距離向量算法 。下面就是RIP使用的距離向量算法。
2、距離向量算法
收到相鄰路由器(其地址為X)的一個(gè)RIP報(bào)文:
(1)先修改RIP報(bào)文中的所有項(xiàng)目:把“下一跳”字段中的地址都改為X,并把所有的“距離”字段的值加1。
(2)對(duì)修改后的RIP報(bào)文中的每一個(gè)項(xiàng)目,重復(fù)以下步驟:
若項(xiàng)目中的目的網(wǎng)絡(luò)不在路由表中,則把該項(xiàng)目添加到路由表中。否則,若下一跳字段給出的路由器地址是同樣的,則把收到的項(xiàng)目替換原路由表中的項(xiàng)目。否則,若收到的項(xiàng)目中的距離小于路由表中的距離,則進(jìn)行更新,否則什么也不做。
(3)若3分鐘還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達(dá)的路由器,即將距離設(shè)置為16。
(4)返回。
上面給出的距離向量算法的基礎(chǔ)就是Bellman-ford算法。這種算法的要點(diǎn)是這樣的:高X結(jié)點(diǎn)A到B的最短路徑上的一個(gè)結(jié)點(diǎn)。若將路徑A到B拆成兩段路徑A到X和X到B,則每一段路徑A到X和X到B也都分別是結(jié)點(diǎn)A到X和結(jié)點(diǎn)X到B的最短路徑。
下面是對(duì)上述距離向量算法的4點(diǎn)解釋。
解釋1:這樣做是為了便于進(jìn)行本路由表的更新。設(shè)從位于地址X的相鄰路由器發(fā)來的RIP報(bào)文的某一個(gè)項(xiàng)目是:“NET2,3,Y”,意思是“我到網(wǎng)絡(luò)NET2的距離是3,要經(jīng)過的下一跳路由器的地址是Y”,那么本路由器就可推斷出:“若我將下一跳路由器先為在地址X的路由器,則我到網(wǎng)絡(luò)NET2的距離應(yīng)為3+1=4”。于是,本路由器就將收到的RIP報(bào)文的這一個(gè)項(xiàng)目修改為“NET2,4,X”,以便下一步進(jìn)行比較時(shí)使用。讀者可能已經(jīng)注意到,收到的項(xiàng)目中的Y對(duì)本路由器是沒有用的,因?yàn)?/span>Y不是本路由器的路由的下一跳路由器地址。
解釋2:表明這是新的目的網(wǎng)絡(luò),應(yīng)當(dāng)加入到路由表中,例如 ,本路由表中沒有到目的網(wǎng)絡(luò)NET2的路由,那么在路由表中就要加入新的項(xiàng)目“NET2,4,X”。
解釋3:為什么要替換呢?因?yàn)檫@是最新的消息,要以最新的消息為準(zhǔn)。到目的網(wǎng)絡(luò)的距離有可能增大或減小,但也可能沒有變。例如 ,不管原來路由表中的項(xiàng)目是“NET2,3,X”還是“NET2,5,X”,都要更新為現(xiàn)在的“NET2,4,X”。
解釋4:例如,若路由表中已有項(xiàng)目“NET2,5,P”,就要更新為“NET2,4,X”。因?yàn)楦潞蟮骄W(wǎng)絡(luò)NET2的距離更短了(從5減到4)。
RIP讓互聯(lián)網(wǎng)中的所有路由器都和自己的相鄰路由器不斷交換信息,并不斷更新其路由表,使得從每一個(gè)路由器到每一個(gè)目的網(wǎng)絡(luò)的路由都是最短的。這里讀者還應(yīng)注意,雖然所有的路由器最終都擁有了整個(gè)自治系統(tǒng)的全局路由信息,但由于每一個(gè)路由器的位置不同,它們的路由表當(dāng)然也應(yīng)當(dāng)是不同的。
RIP使用運(yùn)輸層的用戶數(shù)據(jù)報(bào)UDP進(jìn)行傳送。因此,RIP的位置應(yīng)當(dāng)在應(yīng)用層。但轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)的過程是在網(wǎng)絡(luò)層完成的。這里請(qǐng)讀者注意,當(dāng)路由器轉(zhuǎn)發(fā)在主機(jī)之間傳送的數(shù)據(jù)報(bào)時(shí),它的協(xié)議只有三層,而沒有運(yùn)輸層和應(yīng)用層。但路由器之間在交換路由信息時(shí),兩個(gè)路由器又相當(dāng)于兩個(gè)主機(jī)在通信,因此這時(shí)的路由器可以有運(yùn)輸層的應(yīng)用層。因此,我們不能籠統(tǒng)地認(rèn)為,路由器不定一定沒有運(yùn)輸層和應(yīng)用層。
現(xiàn)在較新的RIP版本是1998年11月公布的RIP2[RFC2453],新版本協(xié)議本身并無多大變化,但性能上有些改進(jìn)。RIP2可以支持變長(zhǎng)子網(wǎng)掩碼和CIDR。此外,RIP2還提供簡(jiǎn)單的鑒別過程支持多播。
RIP存在的一個(gè)問題是當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時(shí),要經(jīng)過比較長(zhǎng)的時(shí)間才能將此信息傳送到所有的路由器。
總之,RIP最大的優(yōu)點(diǎn)就是實(shí)現(xiàn)簡(jiǎn)單,開銷較小。但RIP 缺點(diǎn)也較多。首先,RIP限制了網(wǎng)絡(luò)的規(guī)模,它能使用的最大距離為15。其次,路由器之間交換的路由信息是路由器中的完整路由表,因而隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,開銷也就增加。最后,“壞消息傳播的慢”,使更新過程的收斂時(shí)間過長(zhǎng)。因此,對(duì)于規(guī)模較大的網(wǎng)絡(luò)就應(yīng)當(dāng)使用下一節(jié)所述的OSPF協(xié)議。然而,目前在規(guī)模較小的網(wǎng)絡(luò)中,使用RIP的仍占多數(shù)。
1、OSPF協(xié)議的基本特點(diǎn)
這個(gè)協(xié)議的名字是開放最短路徑優(yōu)先OSPF。它是為克服RIP的缺點(diǎn)在1989年開發(fā)出來的。OSPF的原理很簡(jiǎn)單,但實(shí)現(xiàn)起來卻較復(fù)雜。“開放”表明OSPF協(xié)議不是愛某一家廠商控制,而是公開發(fā)表的。“最短路徑優(yōu)先”是因?yàn)槭褂昧?/span>Dijkstra提出的最短路徑算法SPF。OSPF的第二個(gè)版本OSPF2已成為因特網(wǎng)標(biāo)準(zhǔn)協(xié)議。
請(qǐng)讀者注意,OSPF只是一個(gè)協(xié)議的名字,它并不表示其他的路由選擇協(xié)議不是“最短路徑優(yōu)先”。實(shí)際上,所有的在自治系統(tǒng)內(nèi)部使用的路由選擇協(xié)議都是要尋找一條最短的路徑。
OSPF是主要的特征就是使用分布式的鏈路狀態(tài)協(xié)議,而不是像RIP那樣的距離向量協(xié)議。和RIP相比,OSPF的3個(gè)要點(diǎn)和RIP的都不樣。
(1)向本自治系統(tǒng)中所有路由器發(fā)送消息。這里使用的方法是洪泛法,這就是路由器通過所有輸出端口向所有相鄰的路由器發(fā)送信息。而每一個(gè)相鄰路由器又再把這個(gè)信息發(fā)往其所有的相鄰路由器。這樣,最終整個(gè)區(qū)域中所有的路由器都得到了這個(gè)信息的一個(gè)副本。更具體的做法在后面還要討論。
(2)發(fā)送的信息就是與本路由器相鄰的所有路由器的鏈路狀態(tài),但這只是路由器所知道的部分信息。所謂“鏈路狀態(tài)”就是說明本路由器都和哪些路由器相鄰,以及該鏈路的“度量”。OSPF將這個(gè)“度量”用來表示費(fèi)用、距離、時(shí)延、帶寬等。這些都由網(wǎng)絡(luò)管理人員來決定,因此較為靈活。有時(shí)為了方便就稱這個(gè)度量為“代價(jià)”。
(3)只有當(dāng)鏈路狀態(tài)發(fā)生變化時(shí),路由器才用洪泛法向所有路由器發(fā)送此信息(而RIP不管網(wǎng)絡(luò)拓?fù)溆袩o發(fā)生變化,路由器之間都要定期交換路由表的信息)。
從上述的3個(gè)方面可以看出,OSPF和RIP的工作原理相差較大。
因?yàn)楦髀酚善髦g頻繁地交換鏈路狀態(tài)信息,所以,所有的路由器最終都能建立一個(gè)鏈路狀態(tài)數(shù)據(jù)庫,這個(gè)數(shù)據(jù)庫實(shí)際上就是全網(wǎng)的拓?fù)浣Y(jié)構(gòu)圖。這個(gè)拓?fù)浣Y(jié)構(gòu)圖在全網(wǎng)范圍內(nèi)是一致的(這稱為鏈路狀態(tài)數(shù)據(jù)庫的同步)。因此,每一個(gè)路由器使用鏈路狀態(tài)數(shù)據(jù)庫中的數(shù)據(jù),構(gòu)造出自己的路由表,因而能查出到每一個(gè)目的網(wǎng)絡(luò)應(yīng)當(dāng)走哪條路徑。但RIP的每一個(gè)路由器雖然知道所有的網(wǎng)絡(luò)的距離以及下一跳路由器,但卻不知道全網(wǎng)的拓?fù)浣Y(jié)構(gòu)。而是只有到了下一跳路由器,才能知道再下一跳應(yīng)當(dāng)怎樣走。
OSPF的鏈路狀態(tài)數(shù)據(jù)庫能較快地進(jìn)行更新,使各個(gè)路由器能及時(shí)更新其路由表。OSPF的更新過程收斂得快是其主要優(yōu)點(diǎn)。
為了使OSPF能夠用于規(guī)模很大的網(wǎng)絡(luò),OSPF將一個(gè)自治系統(tǒng)再劃分為若干個(gè)更小的范圍,叫做區(qū)域。
為了使得OSPF能夠用于規(guī)模很大的網(wǎng)絡(luò),OSPF將一個(gè)自治系統(tǒng)再劃分為若干個(gè)更小的范圍,叫做區(qū)域。圖7-24就表示一個(gè)自治系統(tǒng)劃分為4個(gè)區(qū)域。每一個(gè)區(qū)域都有一個(gè)32位的區(qū)域標(biāo)識(shí)符(用點(diǎn)分十進(jìn)制表示)。當(dāng)然,一個(gè)區(qū)域也不能太大,在一個(gè)區(qū)域內(nèi)的路由器最好不超過200個(gè)。
圖7-24 OSPF劃分為兩種不同的區(qū)域
劃分區(qū)域的好處就是將利用洪泛法交換鏈路狀態(tài)信息的范圍局限于每一個(gè)區(qū)域而不是整個(gè)的自治系統(tǒng),這就減少了整個(gè)網(wǎng)絡(luò)上的通信量。在一個(gè)區(qū)域內(nèi)部的路由器只知道本區(qū)域的完整網(wǎng)絡(luò)拓?fù)?,而不知道其他區(qū)域的網(wǎng)絡(luò)拓?fù)涞那闆r。
為了使每一個(gè)區(qū)域能夠和本區(qū)域進(jìn)行通信,OSPF使用層次結(jié)構(gòu)的區(qū)域劃分。在上層的區(qū)域叫做主干區(qū)域。主干區(qū)域的標(biāo)識(shí)符規(guī)定為0.0.0.0。主干區(qū)域的作用是來連通其他在下層的區(qū)域。從其他區(qū)域來的信息都由區(qū)域邊界路由器進(jìn)行概括。
采用分層次劃分區(qū)域不僅使交換信息的種類增多了,而且也使OSPF協(xié)議更加復(fù)雜了。但這樣做卻能使每一個(gè)區(qū)域內(nèi)部交換路由信息的通信量大大減小,因而使OSPF協(xié)議能夠用于規(guī)模很大的自治系統(tǒng)中。這里我們?cè)僖淮慰吹絼澐謱哟卧诰W(wǎng)絡(luò)設(shè)計(jì)中的重要性。
OSPF不用UDP而是直接用IP數(shù)據(jù)報(bào)傳送,可見,OSPF的位置在網(wǎng)絡(luò)層。OSPF構(gòu)成的數(shù)據(jù)報(bào)很短。這樣做可減少路由信息的通信量。數(shù)據(jù)報(bào)很短的另一個(gè)好處是可以不必將長(zhǎng)的數(shù)據(jù)報(bào)分片傳送。分片傳送的數(shù)據(jù)報(bào)只要丟失一個(gè),就無法組裝成原來的數(shù)據(jù)報(bào),而整個(gè)數(shù)據(jù)報(bào)就必須重傳。
除了以上幾個(gè)基本特點(diǎn)外,OSPF還具有下列一些特點(diǎn)。
(1)OSPF對(duì)不同的鏈路可根據(jù)IP分組的不同服務(wù)類型TOS而設(shè)置成不同的代價(jià)。例如,高帶寬的衛(wèi)星鏈路對(duì)于非實(shí)時(shí)的業(yè)務(wù)可設(shè)置為較低的代價(jià),但對(duì)于時(shí)延敏感的業(yè)務(wù)就可設(shè)置為非常高的代價(jià)。因此,OSPF對(duì)于不同類型的業(yè)務(wù)可計(jì)算出不同的路由。鏈路的代價(jià)可以是1~65535中的任何一個(gè)無量綱的數(shù),因此十分靈活。商用的OSPF實(shí)現(xiàn)通常是根據(jù)鏈路帶寬來計(jì)算鏈路的代價(jià)。這種靈活性是RIP所沒有的。
(2)如果到同一個(gè)目的網(wǎng)絡(luò)有多條相同代價(jià)的路徑,那么可以將通信量分配給這幾條路徑。這叫做多路徑間的負(fù)載平衡(load balancing)。在代價(jià)相同的多條路徑上分配通信量是通信量工程中的簡(jiǎn)單形式。RIP只能找出到某個(gè)網(wǎng)絡(luò)的一條路徑。
(3)所有的OSPF路由器之間交換的分組(例如,鏈路狀態(tài)更新分組)都具有鑒別的功能,因而保證了僅在可信賴的路由器之間交換鏈路狀態(tài)信息。
(4)OSPF支持可變長(zhǎng)度的子網(wǎng)劃分和無分類的編址CIDR。
(5)因?yàn)榫W(wǎng)絡(luò)中的鏈路狀態(tài)可能經(jīng)常發(fā)生變化,所以,OSPF讓每一個(gè)鏈路狀態(tài)都帶上一個(gè)32位的序號(hào),序號(hào)越大狀態(tài)就越新。OSPF規(guī)定,鏈路狀態(tài)序號(hào)增長(zhǎng)的速率不得超過每5秒鐘1次。這樣,全部序號(hào)空間在600年內(nèi)不會(huì)產(chǎn)生重復(fù)號(hào)。
2.OSPF的5種分組類型。
(1)類型1,問候(Hello)分組,用來發(fā)現(xiàn)和維持鄰站的達(dá)性。
(2)類型2,數(shù)據(jù)庫描述(Database Description)分組,向鄰站給出自己的鏈路狀態(tài)數(shù)據(jù)庫中的所有狀態(tài)項(xiàng)目的摘要信息。
(3)類型3,鏈路狀態(tài)請(qǐng)求(Link State Request)分組,向?qū)Ψ秸?qǐng)求發(fā)送某些鏈路狀態(tài)項(xiàng)目的詳細(xì)信息。
(4)類型4,鏈路狀態(tài)更新(Link State Update)分組,用洪泛法對(duì)全網(wǎng)更新鏈路狀態(tài)。這種分組是最復(fù)雜的,也是OSPF協(xié)議最核心的部分。路由器使用這種分組將其鏈路狀態(tài)通知給鄰站。鏈路狀態(tài)更新分組共有5種不同的鏈路狀態(tài),這里從略。
(5)類型5,鏈路狀態(tài)確認(rèn)(Link State Acknowledgment)分組,對(duì)鏈路更新分組的確認(rèn)。
OSPF規(guī)定,每?jī)蓚€(gè)相鄰路由器每隔10秒鐘要交換一次問候分組,這樣就能確信知道哪些鄰站可達(dá)的。對(duì)相鄰路由器來說,“可達(dá)”是最基本的要求,因?yàn)橹挥锌蛇_(dá)鄰站的鏈路狀態(tài)信息才存入鏈路狀態(tài)數(shù)據(jù)庫(路由表就是根據(jù)鏈路狀態(tài)數(shù)據(jù)庫計(jì)算出來的)。在正常情況下,網(wǎng)絡(luò)中傳送的絕大多數(shù)OSPF分組都是問候分組。若有40秒鐘沒有收到某個(gè)相鄰路由器發(fā)來的問候分組,則可認(rèn)為該相鄰路由器是不可達(dá)的,應(yīng)立即修改鏈路狀態(tài)數(shù)據(jù)庫,并重新計(jì)算路由表。
其他的4種分組都是用來進(jìn)行鏈路狀態(tài)數(shù)據(jù)庫的同步。所謂同步,就是指不同路由器的鏈路狀態(tài)數(shù)據(jù)庫的內(nèi)容是一樣的。兩個(gè)同步的路由器叫做“完全鄰接的”路由器。不是完全鄰接的路由器表明它們雖然在物理上是相鄰的,但其鏈路狀態(tài)數(shù)據(jù)庫并沒有達(dá)到一致。
當(dāng)一個(gè)路由器剛開始工作時(shí),它只能通過問候分組得知它有哪些相鄰的路由器在工作,以及將數(shù)據(jù)發(fā)往相鄰路由器所需的“代價(jià)”。如果所有的路由器都把自己的本地鏈路狀態(tài)信息(以及其序號(hào))已經(jīng)寫入了數(shù)據(jù)庫。經(jīng)過與相鄰路由器交換數(shù)據(jù)庫描述分組后,路由器就使用鏈路狀態(tài)請(qǐng)求分組,向?qū)Ψ秸?qǐng)求發(fā)送自己所缺少的某些鏈路狀態(tài)項(xiàng)目的詳細(xì)信息。通過一系列的這種分組交換,全網(wǎng)同步的鏈路數(shù)據(jù)庫就建立了。
在網(wǎng)絡(luò)運(yùn)行的過程中,只要一個(gè)路由器的鏈路狀態(tài)發(fā)生變化,該路由器就要使用鏈路狀態(tài)更新分組,用洪泛法向全網(wǎng)更新鏈路新狀態(tài)。OSPF使用的是可靠的洪泛法。其要點(diǎn)如圖7-25所示。設(shè)路由器R用洪泛法發(fā)出鏈路狀態(tài)更新分組。圖中用一些小的箭頭表示更新分組。第一次先發(fā)給相鄰的三個(gè)路由器。這三個(gè)路由器將收到的分組在進(jìn)行轉(zhuǎn)發(fā)時(shí),要將其上游路由器除外??煽康暮榉悍ㄊ窃谑盏礁路纸M后要發(fā)送確認(rèn)。確認(rèn)的發(fā)送故意遲延一些 時(shí)間,為的是希望可以少發(fā)送幾個(gè)確認(rèn)分組。圖中的空心箭頭表示確認(rèn)分組。
圖7-25 用可靠泛洪法發(fā)送更新分組
為了確保鏈路狀態(tài)數(shù)據(jù)庫與全網(wǎng)的狀態(tài)保持一致,還規(guī)定每隔一段時(shí)間,如30分鐘,要刷新一次數(shù)據(jù)庫中的鏈路狀態(tài)。
由于一個(gè)路由器的鏈路狀態(tài)只涉及與相鄰路由器的連通狀態(tài),因而與整個(gè)互聯(lián)網(wǎng)的規(guī)模并無直接關(guān)系。因此當(dāng)互連網(wǎng)規(guī)模很大時(shí),OSPF協(xié)議要比距離向量協(xié)議RIP好得多。由于OSPF沒有“壞消息傳播得慢”的問題,據(jù)統(tǒng)計(jì),其響應(yīng)網(wǎng)絡(luò)變化的時(shí)間小于100ms。
若N個(gè)路由器連接在一個(gè)以太網(wǎng)上,則每個(gè)路由器要向其他(N—1)個(gè)路由器發(fā)送鏈路狀態(tài)信息,因而共有N(N—1)個(gè)鏈路狀態(tài)要在這個(gè)以太網(wǎng)上傳送。OSPF協(xié)議對(duì)這種多點(diǎn)接入的局域網(wǎng)采用了指定的路由器的方法,使廣播的信息量大大減少。指定的路由器代表該局域網(wǎng)上所有的鏈路向連接在該網(wǎng)絡(luò)上的各路由器發(fā)送狀態(tài)信息。
通過各路由器之間的交換鏈路狀態(tài)信息,每一個(gè)路由器都可得出該互聯(lián)網(wǎng)的鏈路狀態(tài)數(shù)據(jù)庫。每個(gè)路由器中的路由表可從這個(gè)鏈路狀態(tài)數(shù)據(jù)庫導(dǎo)出。每個(gè)路由器可算出以自己為根的最短路徑樹。再根據(jù)最短路徑樹就很容易地得出路由表來。
目前,大多數(shù)路由器廠商都支持OSPF,并開始在一些網(wǎng)絡(luò)中取代舊的RIP。1989年,公布了新的外部網(wǎng)關(guān)協(xié)議——邊界網(wǎng)關(guān)協(xié)議BGP。BGP是不同自治系統(tǒng)的路由器之間交換路由信息的協(xié)議。BGP的較新版本是2006年發(fā)表的BGP-4,它已成為因特網(wǎng)草案標(biāo)準(zhǔn)協(xié)議。本書后面都將BGP-4簡(jiǎn)寫BGP。
我們首先應(yīng)當(dāng)弄清,在不同自治系統(tǒng)之間的路由選擇為什么不使用前面討論的內(nèi)部網(wǎng)關(guān)協(xié)議,如RIP或OSPF。
我們知道,內(nèi)部網(wǎng)關(guān)協(xié)議(如RIP或OSPF)主要是設(shè)法使數(shù)據(jù)報(bào)在一個(gè)自治系統(tǒng)中盡可能有效地從源站傳送到目的站。在一個(gè)自治系統(tǒng)內(nèi)部并不需要考慮其他方面的策略。然而BGP使用的環(huán)境卻不同。這主要是因?yàn)橐韵氯齻€(gè)原因。
每一,因特網(wǎng)的規(guī)模太大,使得自治系統(tǒng)之間路由選擇非常困難。連接在因特網(wǎng)主干網(wǎng)上的路由器,必須對(duì)任何有效的IP地址都能在路由表中找到匹配的目的網(wǎng)絡(luò)。目前,主干網(wǎng)路由器中的路由表的項(xiàng)目數(shù)早已超過了5萬個(gè)網(wǎng)絡(luò)前綴。這些網(wǎng)絡(luò)的性能相差很大。如果用最短距離找出來的路徑,可能并不是應(yīng)當(dāng)選用的路徑。例如,有的路徑的使用代價(jià)很高或很不安全。如果使用鏈路狀態(tài)協(xié)議,則每一個(gè)路由器必須維持一個(gè)很大的鏈路狀態(tài)數(shù)據(jù)庫。對(duì)于這樣大的主干網(wǎng)用Dijkstra算法計(jì)算最短路徑時(shí)花費(fèi)的時(shí)間也太長(zhǎng)。
二,對(duì)于自治系統(tǒng)之間的路由選擇,要建筑最佳路由是很不現(xiàn)實(shí)的。因?yàn)楦髯灾蜗到y(tǒng)是運(yùn)行自己選定的內(nèi)部路由選擇協(xié)議,使用本自治系統(tǒng)指明的路徑度量,所以,當(dāng)一條路徑通過幾個(gè)不同的自治系統(tǒng)時(shí),要想對(duì)這樣的路徑計(jì)算出在意義的代價(jià)是不可能的。例如,對(duì)某個(gè)自治系統(tǒng)來說,代價(jià)為1000可能表示一條比較長(zhǎng)的路由。但對(duì)另一個(gè)自治系統(tǒng)代價(jià)為1000,卻可能表示不可接受的壞路由。因此,自治系統(tǒng)之間的路由選擇只可能交換“可達(dá)性”信息(即“可到達(dá)”或“不可到達(dá)”)。例如,告訴相鄰路由器:“到達(dá)目的網(wǎng)絡(luò)N可經(jīng)過自治系統(tǒng)A”。
第三,自治系統(tǒng)之間的路由選擇必須考慮有關(guān)策略。例如,自治系統(tǒng)A要發(fā)送數(shù)據(jù)報(bào)到自治系統(tǒng)B,本來最好是經(jīng)過自治系統(tǒng)C。但自治系統(tǒng)C不愿意讓這些數(shù)據(jù)報(bào)通過本系統(tǒng)的網(wǎng)絡(luò),因?yàn)?#8220;這是他們的事情,和我們沒有關(guān)系。”但另一方面,自治系統(tǒng)C愿意讓某些相鄰的自治系統(tǒng)的數(shù)據(jù)報(bào)通過自己的網(wǎng)絡(luò),特別是對(duì)那些付了服務(wù)費(fèi)的某些自治系統(tǒng)更是如此。因此,自治系統(tǒng)之間的路由選擇協(xié)議應(yīng)當(dāng)允許使用多種路由選擇策略。這些策略包括政治、安全或經(jīng)濟(jì)方面的考慮。例如:我國(guó)國(guó)內(nèi)的站點(diǎn)在互相傳送數(shù)據(jù)報(bào)時(shí)不應(yīng)經(jīng)過國(guó)外兜圈子,特別是不要經(jīng)過某些對(duì)我國(guó)的安全有威脅的國(guó)家。這些策略都是由網(wǎng)絡(luò)管理人員對(duì)每一個(gè)路由器進(jìn)行設(shè)置的,但這些策略并不是自治系統(tǒng)之間的路由選擇協(xié)議本身。還可舉出一些策略的例子,如:“僅在到達(dá)下列這些地址時(shí)才經(jīng)過自治系統(tǒng)A”,“自治系統(tǒng)A和自治系統(tǒng)B相比時(shí),應(yīng)優(yōu)先通過自治系統(tǒng)A”等。顯然,使用這些策略是為了找出較好的路徑而不是最佳路徑。
由于上述情況,邊界網(wǎng)關(guān)協(xié)議BGP只能是力求尋找一條能夠到達(dá)目的網(wǎng)絡(luò)且比較好的路由,而并非要尋找一條最佳路由。BGP采用了路徑向量路由選擇協(xié)議,它與距離向量協(xié)議和鏈路狀態(tài)協(xié)議都有很大的區(qū)別。
在配置BGP時(shí),每一個(gè)自治系統(tǒng)的管理員要選擇至少一個(gè)路由器作為該自治系統(tǒng)的“BGP發(fā)言人”。一般說來,兩個(gè)BGP發(fā)言人都是通過一個(gè)共享網(wǎng)絡(luò)連接在一起的,而BGP發(fā)言人往往就是BGP邊界路由器,但也可以不是BGP邊界路由器。
一個(gè)BGP發(fā)言人與其他自治系統(tǒng)中的BGP發(fā)言人要交換路由信息,就要先建立TCP連接,然后在此連接上交換BGP報(bào)文以建立BGP會(huì)話,利用BGP會(huì)話交換路由信息,如增加了新的路由,或撤銷過時(shí)的路由,以及報(bào)告出差錯(cuò)的情況等。使用TCP連接能提供可靠的服務(wù),也簡(jiǎn)化了路由選擇協(xié)議。使用TCP連接交換路由信息的兩個(gè)BGP發(fā)言人,彼此成為對(duì)方的鄰站或?qū)Φ日尽?/span>
圖7-26表示BGP發(fā)言人和自治系統(tǒng)AS的關(guān)系的示意圖。在圖中畫出了3個(gè)自治系統(tǒng)中的5個(gè)BGP發(fā)言人。每一個(gè)BGP發(fā)言人除了必須運(yùn)行BGP協(xié)議外,還必須運(yùn)行該自治系統(tǒng)所使用的內(nèi)部網(wǎng)關(guān)協(xié)議,如OSPF或RIP。
圖7-26 BGP發(fā)言人和自治系統(tǒng)AS的關(guān)系
BGP所交換的網(wǎng)絡(luò)可達(dá)性信息就是要到達(dá)某個(gè)網(wǎng)絡(luò)(用網(wǎng)絡(luò)前綴表示)所要經(jīng)過的一系列的自治系統(tǒng)。當(dāng)BGP發(fā)言人互相交換了網(wǎng)絡(luò)可達(dá)性的信息后,各BGP發(fā)言人就根據(jù)所采用的策略從收到的路由信息中找出到達(dá)各自治系統(tǒng)的比較好的路由。圖7-27表示一個(gè)BGP發(fā)言人構(gòu)造成的自治系統(tǒng)連通圖,它是樹形結(jié)構(gòu),不存在回路。
圖7-27 自治系統(tǒng)的連通圖
BGP協(xié)議交換路由信息的結(jié)點(diǎn)數(shù)量級(jí)是自治系統(tǒng)數(shù)的量級(jí),這要比這些自治系統(tǒng)中的網(wǎng)絡(luò)數(shù)少很多。要在許多自治系統(tǒng)之間尋找一條較好的路徑,就是要尋找正確的BGP發(fā)言人(或邊界路由器),的數(shù)目是很少的。這樣就使得自治系統(tǒng)之間的路由選擇不會(huì)過分的復(fù)雜。
BGP支持CIDR,因此BGP的路由表也就應(yīng)當(dāng)包括目的網(wǎng)絡(luò)前綴、下一跳路由器,以及到達(dá)該目的網(wǎng)絡(luò)所要經(jīng)過的各個(gè)自治系統(tǒng)序列。由于使用了路徑向量的信息,就可以很容易地避免產(chǎn)生兜圈子的路由。如果一個(gè)BGP發(fā)言人收到了其他BGP發(fā)言人發(fā)來的路徑通知,它就要檢查一下本自治系統(tǒng)是否在此通知的路徑中。如果在這條路徑中,就不能采用這條路徑。
在BGP剛剛運(yùn)行時(shí),BGP的鄰站要交換整個(gè)的BGP路由表。但以后只需要在發(fā)生變化時(shí)更新有變化的部分。這樣做對(duì)節(jié)省網(wǎng)絡(luò)帶寬和減少路由器的處理開銷方面都有好處。
BGP-4共使用以下4種報(bào)文。
(1)打開報(bào)文,用來與相鄰的另一個(gè)BGP發(fā)言人建立關(guān)系。
(2)更新報(bào)文,用來發(fā)送某一路由信息,以及列出要撤銷的多條路由。
(3)?;顖?bào)文,用來確認(rèn)打開報(bào)文和周期性地證實(shí)鄰站關(guān)系。
(4)通知報(bào)文,用來發(fā)送檢測(cè)到的差錯(cuò)。
若兩個(gè)鄰站屬于兩個(gè)不同的自治系統(tǒng),而其中一個(gè)鄰站打算和另一個(gè)鄰站定期地交換路由信息,這就應(yīng)當(dāng)有一個(gè)商談的過程(因?yàn)楹芸赡軐?duì)方路由器的負(fù)荷已經(jīng)很重了,因而不愿意再加重負(fù)擔(dān))。因引,一開始向鄰站進(jìn)行商談時(shí)就必須發(fā)送打開報(bào)文。如果鄰站接受這種鄰站關(guān)系,就用從中漁利報(bào)文響應(yīng)。這樣,兩個(gè)BGP發(fā)言人的鄰站關(guān)系建立了。
一旦鄰站關(guān)系建立了,就要繼續(xù)維持這種關(guān)系。雙方中的每方都需要確信對(duì)方是存在的,且一直在保持這種鄰站關(guān)系。為此,這兩個(gè)BGP發(fā)言人彼此要周期性的交換?;顖?bào)文(一般每隔30秒)。保活報(bào)文只有19字節(jié)長(zhǎng)(只用BGP報(bào)文的通用首部),因此不會(huì)造成網(wǎng)絡(luò)上太大的開銷。
更新報(bào)文是BGP協(xié)議的核心內(nèi)容。BGP發(fā)言人可以用更新報(bào)文撤銷它以前曾經(jīng)通知過的路由,也可以宣布增加新的路由。撤銷路由可以一次撤銷許多條,但增加新路由時(shí),每個(gè)更新報(bào)文只能增加一條。
BGP可以很容易解決距離向量路由選擇算法中的“壞消息傳播得慢”這一問題。當(dāng)某個(gè)路由器或鏈路出故障時(shí),因?yàn)?/span>BGP發(fā)言人可以從不止一個(gè)鄰站獲得路由信息,所以,很容易選擇出新的路由。距離向量算法往往不能給出正確的選擇,是因?yàn)檫@些算法不能指出哪些鄰站到目的站的路由是獨(dú)立的。
1988年Steve Deering首次在其博士學(xué)位論文中提出IP多播的概念。1992年3月IETF在因特網(wǎng)范圍首次試驗(yàn)IETF會(huì)議聲音的多播,當(dāng)時(shí)有20個(gè)網(wǎng)點(diǎn)可同時(shí)聽到會(huì)議的聲音?,F(xiàn)在IP多播(multicast)已成為因特網(wǎng)的一個(gè)熱門課題。這是由于有許多的應(yīng)用需要由一個(gè)源點(diǎn)通過一次發(fā)送操作,把同樣的分組副本發(fā)送到許多個(gè)終點(diǎn),即一對(duì)多的通信。例如,實(shí)時(shí)信息的交付(如新聞、股市行情等),軟件更新,交互式會(huì)議等。隨著因特網(wǎng)的用戶數(shù)目的急劇增加,以及多媒體通信的開展,有更多的業(yè)務(wù)需要多播來支持。關(guān)于IP多播可參考[W-MCASY]。
與單播相比,在一對(duì)多的通信中,多播可大大節(jié)約網(wǎng)絡(luò)資源。
當(dāng)多播組的主機(jī)數(shù)很大時(shí)(如成千上萬個(gè)),采用多播方式就可明顯地減輕網(wǎng)絡(luò)中各種資源的消耗。在因特網(wǎng)范圍的多播要靠路由器來實(shí)現(xiàn),這些路由器必須增加一些能夠識(shí)別多播分組的軟件。能夠運(yùn)行多播協(xié)議的路由器成為多播路由器(multicast router)。多播路由器可以是一個(gè)單獨(dú)的路由器,也可以是運(yùn)行多播軟件的普通路由器。
為了適應(yīng)交互式音頻和視頻信息的多播,從1992年起,在因特網(wǎng)開始試驗(yàn)虛擬的多播主干網(wǎng)MBONE。MBONE可以將分組傳播給不在一起,但屬于一個(gè)組的許多個(gè)主機(jī)?,F(xiàn)在多播主干網(wǎng)的規(guī)模已經(jīng)很大,有幾千個(gè)多播路由器。
然而在因特網(wǎng)上實(shí)現(xiàn)多播要比單播復(fù)雜得多,因?yàn)楸仨毥鉀Q以下的一些問題。
(1)多播組的地址(或簡(jiǎn)稱為組地址)
D類IP地址就是多播組地址。D類IP地址去掉類別位(1110)后,剩下的28bit共有2*28種組合(超過2億5千萬個(gè))。因此,可以使用的多播組地址的范圍是從224.0.0.0到239.255.255.255。顯然,多播地址只能用做目的地址,而不能用做源地址。
有一些D類IP地址是不能任意使用的,因?yàn)橐蛱鼐W(wǎng)號(hào)碼指派管理局IANA已經(jīng)指派了一些永久組地址。下面是永久組地址的幾個(gè)例子。
224.0.0.0 基地址(保留)
224.0.0.1 在本子網(wǎng)上的所有參加多播的主機(jī)和路由器
224.0.0.2 在本子網(wǎng)上的所有參加多播的路由器
224.0.0.3 未指派
224.0.0.4 DVMRP路由器
……
224.0.0.19 至 224.0.0.225 未指派
239.192.0.0 至 239.251.255.255 限制在一個(gè)組織的范圍
239.252.0.0 至 239.255.255.255 限制在一個(gè)地點(diǎn)的范圍
順便指出,多播組成員中的每一個(gè)主機(jī)另外還有一個(gè)單播的IP地址。
(2)多播最短路徑支撐樹
參加多播的源點(diǎn)主機(jī)和所有參加多播的路由器都必須能夠把多播IP地址轉(zhuǎn)化為包含有多播組成員的網(wǎng)絡(luò)的清單,然后根據(jù)這個(gè)網(wǎng)絡(luò)清單構(gòu)造出到所有包含多播組成員的網(wǎng)絡(luò)的多播最短路徑支撐樹。
如果不使用最短路徑支撐樹,那么就會(huì)在某些鏈路上出現(xiàn)重復(fù)的通信量因而造成浪費(fèi)。假定在路由器R2和R3之間還有一條連接的鏈路(請(qǐng)讀者注意,圖中并沒有畫出這條鏈路,而里的鏈路就是網(wǎng)絡(luò)),那么路由器R2必須知道,不應(yīng)當(dāng)向R3發(fā)送多播分組的副本,因?yàn)檫@是多余的。
圖7-29 D 類 IP 地址與以太網(wǎng)多播地址的映射關(guān)系
(3)IP多播地址到局域網(wǎng)上的路由器時(shí),還必須把32位的IP多播地址轉(zhuǎn)換為局域網(wǎng)的48位多播地址。這樣才能在局域網(wǎng)進(jìn)行多播。
因特網(wǎng)號(hào)碼指派管理局IANA擁有的以太網(wǎng)地址塊的高24位為00-00-5E,也就是說,IANA擁有的以太網(wǎng)MAC地址的范圍是從00-00-5E-00-00-00到00-00-5E-FF-FF-FF。在5、3、1節(jié)已講過,以太網(wǎng)MAC地址字段中第一字節(jié)的最低位1時(shí)即為多播地址。IANA用其中的一半作為多播地址,因此只剩下23位可自由使用了。這樣,以太網(wǎng)多播地址中的范圍就是從01-00-5E-00-00-00到01-00-5E-7F-FF-FF。但D類IP地址可供分配的有28位,可見,在這28位中的前5位不能映射到以太網(wǎng)的多播地址中。例如,IP多播地址224.128.64.32和另一個(gè)IP多播地址224.0.64.32轉(zhuǎn)換成以太網(wǎng)的多播地址都是01-00-5E-00-40-20。因?yàn)槎嗖?/span>IP地址與以太網(wǎng)多播地址的映射關(guān)系不是唯一的,所以,主機(jī)中的IP模塊還需要利用軟件進(jìn)行過慮,把不是本主機(jī)要接收的數(shù)據(jù)報(bào)丟棄。
(4)組成員的動(dòng)態(tài)關(guān)系
嚴(yán)格說來,組成員應(yīng)當(dāng)是主機(jī)中的進(jìn)程。一個(gè)主機(jī)中的多個(gè)進(jìn)程可以分別加入不同的多播組.然而多播組中的成員關(guān)系是動(dòng)態(tài)變化的.臨時(shí)組地址則是在每一次使用前都必須創(chuàng)建多播組.一個(gè)進(jìn)程可請(qǐng)求參加某個(gè)特定的多播組,或在任意時(shí)間退出該組。因此,應(yīng)當(dāng)使用一種機(jī)制使得單個(gè)的主機(jī)能夠把自己的組成員關(guān)系及時(shí)通告給本網(wǎng)絡(luò)上的路由器。因特網(wǎng)組管理協(xié)議IGMP就是用來支持這種機(jī)制的。
(5)多播路由器需要交換的信息
轉(zhuǎn)發(fā)多播分組的路由器需要彼此交換兩種信息。首先,這些路由器要知道哪些網(wǎng)絡(luò)包含給定多播組的成員。其次,這些路由器需要有足夠的信息來計(jì)算到達(dá)每一個(gè)包含多播組成員的網(wǎng)絡(luò)的最短路徑,這就需要有多播路由選擇協(xié)議和計(jì)算最短路徑的算法。
IGMP已經(jīng)有了3個(gè)版本.19889年公布的RFC1112(IGMPv1)早已成了因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議。1997年公布的RFC(IGMPv2)對(duì)IGMPv1進(jìn)行了更新,但IGMPv2只是個(gè)建議標(biāo)準(zhǔn)。2002年10月公布了RFC3376(IGMPv3,目前是建議標(biāo)準(zhǔn)),宣布了RFC2236(IGMPv2)是陳舊的。
和ICMP相似,IGMP使用IP數(shù)據(jù)報(bào)傳遞其報(bào)文(即IGMP報(bào)文加上IP首部構(gòu)成IP數(shù)據(jù)報(bào))。但IGMP也向IP提供服務(wù)。從原理上講,IGMP包括以下兩種操作。
(1)主機(jī)向多播路由器發(fā)送報(bào)文,要求加入或退出某給定地址的多播組。本地的多播路由器收到IGMP報(bào)文后,把組成員關(guān)系轉(zhuǎn)發(fā)給因特網(wǎng)上的其他多播路由器。
(2)多播路由器要周期性地檢驗(yàn)?zāi)男┒嗖ソM感興趣。前兩個(gè)版本的IGMP都具有以下的操作模型。
接受方必須申請(qǐng)加入某個(gè)多播組。
發(fā)送方不需要加入到任何多播組。
任何主機(jī)都可以向任何多播組發(fā)送多播分組。
但前兩個(gè)版本具有下面的缺點(diǎn)。
(1)多播組很容易泛濫成災(zāi),消耗大量網(wǎng)絡(luò)資源。
(2)在不知道發(fā)送方的位置的情況下,有時(shí)無法建立多播樹。
(3)不同的多播組可能使用相同的多播地址,因此全球多播地址不是唯一的。
IGMPv3采用以下措施來解決上述問題。
(1)允許主機(jī)指明“我愿意從哪些主機(jī)接收多播分組”,而從其他主機(jī)發(fā)送來的多播分組可以被阻攔掉。
(2)允許主機(jī)阻攔自己所不愿意要的多播分組。
IGMP定義了兩種報(bào)文:成員關(guān)系詢問報(bào)文和成員關(guān)系報(bào)告報(bào)文。主機(jī)要加入或退出多播組,都要發(fā)送成員關(guān)系報(bào)告報(bào)文。連接在局域網(wǎng)上的所有多播路由器都能收到這樣的報(bào)告報(bào)文。多播路由器周期性地發(fā)送成員關(guān)系詢問報(bào)文以維持當(dāng)前有效的、活躍的組地址。愿意繼續(xù)參加多播組的主機(jī)必須響應(yīng)以報(bào)告報(bào)文。
由于IP地址的緊缺,一個(gè)機(jī)構(gòu)能夠申請(qǐng)到的IP地址數(shù)往往遠(yuǎn)小于本機(jī)構(gòu)所擁有的主機(jī)數(shù)。實(shí)際上,出于安全等原因,一個(gè)機(jī)構(gòu)內(nèi)的很多主機(jī)并不需要接入到外部的因特網(wǎng),它們主要是和內(nèi)部的其他主機(jī)進(jìn)行通信。假定在一個(gè)機(jī)構(gòu)內(nèi)部的計(jì)算機(jī)通信也是采用TCP/IP,那么從原則上講,對(duì)于這些僅在機(jī)構(gòu)內(nèi)部使用的計(jì)算機(jī)就可以由本機(jī)構(gòu)自行分配其IP地址。這就是說,讓這些計(jì)算機(jī)使用僅在本機(jī)構(gòu)有效的IP地址(這種地址稱為本地地址),而不需要向因特網(wǎng)的管理機(jī)構(gòu)申請(qǐng)全球唯一的IP地址(這種地址稱為全球地址)。這樣就可以大大節(jié)約寶貴的全球IP地址資源。
但是,如果任意選擇一些IP地址作為本地地址,那么在某種情況下可能會(huì)引起一些麻煩。例如,一個(gè)不連接因特網(wǎng)的主機(jī)A分配到一個(gè)本地地址150.1.2.3。這個(gè)地址不需要在因特網(wǎng)地址管理機(jī)構(gòu)登記,但在本機(jī)構(gòu)內(nèi)必須是唯一的。然而正巧因特網(wǎng)上有一個(gè)主機(jī),其IP地址就是150.1.2.3,而且這個(gè)主機(jī)要和本機(jī)構(gòu)的某個(gè)具有全球地址的主機(jī)通信。這樣就會(huì)出現(xiàn)地址的二義性問題。
為了解決這一問題,RFC1918指明了一些專用地址。這些地址只能用于一個(gè)機(jī)構(gòu)的內(nèi)部通信,而不能用于和因特網(wǎng)上的主機(jī)通信。換言之,專用地址只能做本地地址而不能用做全球地址。在因特網(wǎng)中的所有路由器對(duì)目的地址是專用地址的數(shù)據(jù)報(bào)一律不進(jìn)行轉(zhuǎn)發(fā)。RFC1918指明的專用地址是:
(1)10.0.0.0到10.255.255.255 (或記為10/8,共有2*24個(gè)地址)
(2)172.16.0.0到172.31.255.255 (或記為172.16/12,共有2*20個(gè)地址)
(3)192.168.0.0到192.168.255.255 (或記為192.168/16,共有2*16個(gè)地址)
上面的3個(gè)地址塊分別相當(dāng)于一個(gè)A類網(wǎng)絡(luò)、16個(gè)連續(xù)的B類網(wǎng)絡(luò)和256個(gè)連續(xù)的C類網(wǎng)絡(luò)。A類地址本來早已用完了,而上面的地址10.0.0.0本來是分配給ARPANET的。因?yàn)?/span>ARPANET已經(jīng)關(guān)閉停止運(yùn)行了,所以這個(gè)地址就用做專用地址。
采用這樣的專門IP地址的互聯(lián)網(wǎng)絡(luò)稱為專用網(wǎng)絡(luò)或本地互聯(lián)網(wǎng),更簡(jiǎn)單些說,就叫做專用網(wǎng)。顯然,全世界可能有很多的專用互聯(lián)網(wǎng)絡(luò)具有相同的專用IP地址,但這并不會(huì)引起麻煩,因?yàn)檫@些專用地址僅在本機(jī)構(gòu)內(nèi)部使用。專用IP地址也叫做可重用地址。
有時(shí)一個(gè)很大的機(jī)構(gòu)有很多部門分布在相距很遠(yuǎn)的一些地點(diǎn),而在每一個(gè)地點(diǎn)都有自己的專用網(wǎng)。假定這些分布在不同地點(diǎn)的專用網(wǎng)需要經(jīng)常進(jìn)行通信。這時(shí),可以有兩種方法。第一種方法是租用電信公司的路線為本機(jī)構(gòu)專用。這種方法的好處是簡(jiǎn)單方便,但線路的租金太高。第二種方法是利用因特網(wǎng)(即公用互聯(lián)網(wǎng))來實(shí)現(xiàn)本機(jī)構(gòu)的專用網(wǎng),因此,這樣的專用網(wǎng)又稱為虛擬專用網(wǎng)VPN。“虛擬”即“好象是”,但實(shí)際上不是,因?yàn)楝F(xiàn)在是因特網(wǎng)(而并沒有用專線)來連接分散在各地的本地網(wǎng)絡(luò)。VPN只是在效果上和真正的專用網(wǎng)一樣。
假定某個(gè)機(jī)構(gòu)在兩個(gè)相隔較遠(yuǎn)的部門A和部門B建立了專用網(wǎng),其網(wǎng)絡(luò)地址分別為專用地址10.1.0.0和10.2.0.0?,F(xiàn)在這兩個(gè)部門需要通過因特網(wǎng)進(jìn)行通信。
顯然,每一個(gè)部門至少要有一個(gè)路由器具有合法的全球IP地址,如圖7-31(a)所示的路由器R1和R2。這兩個(gè)路由器和因特網(wǎng)的接口地址必須是合法的全球IP地址。路由器R1和R2在與專用網(wǎng)內(nèi)部網(wǎng)絡(luò)的接口地址則是專用網(wǎng)的本地地址。
現(xiàn)在設(shè)部門A的主機(jī)X要向部門B的主機(jī)Y發(fā)送數(shù)據(jù)報(bào),源地址是10.1.0.1,而目的地址是10.2.0.3。這個(gè)數(shù)據(jù)報(bào)作為本機(jī)構(gòu)的內(nèi)部數(shù)據(jù)報(bào)從X發(fā)送到與外界連接的路由器R1。路由器R1收到內(nèi)部數(shù)據(jù)后把整個(gè)的內(nèi)部數(shù)據(jù)報(bào)進(jìn)行加密,然后重新添加上數(shù)據(jù)報(bào)的首部封裝成為在因特網(wǎng)上發(fā)送的外部數(shù)據(jù)報(bào),其源地址是路由器R1的全球地址125.1.2.3,而目的地址是路由器R2的全球地址194,4.5.6。路由器R2收到數(shù)據(jù)報(bào)后將其數(shù)據(jù)部分取出進(jìn)行解密,恢復(fù)出原來的內(nèi)部數(shù)據(jù)報(bào),并轉(zhuǎn)發(fā)給主機(jī)Y。
圖7-31 用隧道技術(shù)實(shí)現(xiàn)虛擬專用網(wǎng)
下面討論另一種情況,就是在專用網(wǎng)內(nèi)部的一些主機(jī)本來已經(jīng)分配到了本地IP地址,但現(xiàn)在又想和因特網(wǎng)上的主機(jī)通信(并不需要加密),那么應(yīng)當(dāng)采取什么措施呢?
最簡(jiǎn)單的辦法就是設(shè)法再申請(qǐng)一些全球IP地址。但這在很多情況下是不容易做到了,因?yàn)槿?/span>IP地址已所剩不多了。目前使用的最多的方法是采用網(wǎng)絡(luò)地址轉(zhuǎn)換。
網(wǎng)絡(luò)地址轉(zhuǎn)換NAT方法是在1994年提出的。這種方法需要在專用網(wǎng)連接到因特網(wǎng)的路由器上安裝NAT軟件。裝有NAT路由器,它至少有一個(gè)有效的外部全球地址IPG。這樣,所有使用本地地址的主機(jī)在和外界通信時(shí),都要在NAT路由器上將其本地地址轉(zhuǎn)換成IPG才能和因特網(wǎng)連接。
例如,當(dāng)內(nèi)部主機(jī)X用其本地地址IPX和因特網(wǎng)上的主機(jī)Y通信時(shí),,它所發(fā)送的數(shù)據(jù)報(bào)必須經(jīng)過的NAT路由器。NAT路由器將數(shù)據(jù)報(bào)的源地址IPX轉(zhuǎn)換成自己的全球地址IPG,但目的地址IPY保持不變,然后發(fā)送到因特網(wǎng)。當(dāng)NAT路由器從因特網(wǎng)收到主機(jī)Y發(fā)回的數(shù)據(jù)報(bào)時(shí),知道數(shù)據(jù)報(bào)中的源地址是IPY,而目的地址是IPG。根據(jù)原來的記錄(這個(gè)記錄叫做NAT轉(zhuǎn)換表),NAT路由器知道這個(gè)數(shù)據(jù)報(bào)是要發(fā)送給主機(jī)X的,因此,NAT路由器將目的地址IPG轉(zhuǎn)換為IPX,轉(zhuǎn)發(fā)給最終的內(nèi)部主機(jī)X。
如果NAT路由器具有多個(gè)全球IP地址,那么就可以同時(shí)將多個(gè)本地地址轉(zhuǎn)換為全球IP地址,因而可以是多個(gè)擁有本地地址的主機(jī)能夠和因特網(wǎng)的主機(jī)進(jìn)行通信。
還有一種NAT轉(zhuǎn)換表將運(yùn)輸層的端口號(hào)也利用上,這樣就可以用一個(gè)全球IP地址是多個(gè)擁有本地地址的主機(jī)同時(shí)和因特網(wǎng)上的不同主機(jī)進(jìn)行通信。
IP是因特網(wǎng)的核心協(xié)議?,F(xiàn)在使用的IP是在20世紀(jì)70年代末期設(shè)計(jì)的,無論從計(jì)算機(jī)本身發(fā)展還是從因特網(wǎng)規(guī)模和網(wǎng)絡(luò)傳輸速率來看,現(xiàn)在IPV4已很不適用了。這里最主要的問題就是32位的IP地址不夠用。
要解決IP地址耗盡的問題,可以采用以下3個(gè)措施。
(1)采用無類別編址CIDR,使IP地址的分配更加合理。
(2)采用網(wǎng)絡(luò)地址轉(zhuǎn)換NAT方法,可節(jié)省許多全球IP地址。
(3)采用具有更大地址空間的新版本的IP,即IPV6。
盡管上述前兩項(xiàng)措施的采用使得IP地址耗盡的日期推后了不少,但卻不能從根本上解決IP地址即將耗盡的問題。因此,治本的方法應(yīng)當(dāng)是上述的第3種方法。
IETE早在1992年6月就提出要制定下一代的IP,即Ipng。Ipng現(xiàn)正式稱為IPV6。1998年12月發(fā)表的RFC2460~2463已成為因特網(wǎng)草案標(biāo)準(zhǔn)協(xié)議。應(yīng)當(dāng)指出,換一個(gè)新版的IP并非易事。世界上許多團(tuán)體都從因特網(wǎng)的發(fā)展中看到了機(jī)遇,因此,在新標(biāo)準(zhǔn)的制定過程中出于自身的經(jīng)濟(jì)利益而產(chǎn)生了激烈的爭(zhēng)論。到目前為止,IPV6還只是草案標(biāo)準(zhǔn)階段。
及早開始過渡到IPV6的好處是:有更多的時(shí)間來規(guī)劃平滑過渡;有更多的時(shí)間培養(yǎng)IPV6的專門人才;及早提供IPV6服務(wù)比較便宜。因此,現(xiàn)在有些ISP已經(jīng)開始進(jìn)行IPV6的過渡。
下面是IPv6的簡(jiǎn)介。
IPv6仍支持無連接的傳送,但將協(xié)議數(shù)據(jù)單元PDU稱分組,而不是IPv4的數(shù)據(jù)報(bào)。為方便起見,本書仍采用數(shù)據(jù)報(bào)這一名詞([COME06]和[TANE03]也是這樣做的)。
IPv6所引進(jìn)的主要變化如下。
(1)更大的地址空間。IPv6將地址從IPv4的32位增大到了128位,使地址空間增大了2*96倍。這樣大的地址空間在可預(yù)見的將來是不會(huì)用完的。
(2)擴(kuò)展的地址層次結(jié)構(gòu)。IPv6由于地址空間很大,因此可以劃分為更多的層次。
(3)靈活的首部格式,。IPv6數(shù)據(jù)報(bào)的首部和IPv4的并不兼容。IPv6定義了許多可選的擴(kuò)展首部,不僅可提供比IPv4更多的功能,而且還可提高路由器的處理效率,這是因?yàn)槁酚善鲗?duì)擴(kuò)展首部不進(jìn)行處理(除逐跳擴(kuò)展首部外)。
(4)改進(jìn)的選項(xiàng)。IPv6允許數(shù)據(jù)包含有選項(xiàng)的控制信息,因而可以包含一些新的選項(xiàng)。我們知道,IPv4所規(guī)定的選項(xiàng)是固定不變的。
(5)允許協(xié)議糾結(jié)擴(kuò)充。這一點(diǎn)很重要因?yàn)榧夹g(shù)總是在不斷地發(fā)展(如網(wǎng)絡(luò)硬件的更新)而新的應(yīng)用也還會(huì)出現(xiàn)。但我們知道,IPv4的功能是固定不變的。
(6)支持即插即用(即自動(dòng)配置)。
(7)支持資源的預(yù)分配。IPv6支持實(shí)時(shí)視像等要求保證一定的帶寬和時(shí)延的應(yīng)用。
IPv6將首部長(zhǎng)度變?yōu)楣潭ǖ?/span>40字節(jié),稱為基本首部。將不必要的功能取消了,首部的字段數(shù)減少到只有8個(gè)(雖然首部長(zhǎng)度增大了一倍)。此外,還取消了首部的檢驗(yàn)和字段(考慮到數(shù)據(jù)鏈路層和運(yùn)輸層都有差錯(cuò)檢驗(yàn)功能)。這樣就加快了路由器處理數(shù)據(jù)報(bào)的速度。
IPv6數(shù)據(jù)報(bào)在基本首部的后面允許有零個(gè)或多個(gè)擴(kuò)展首部,再后面是數(shù)據(jù),如圖7-32所示。但請(qǐng)讀者注意,所有的擴(kuò)展的首部都不屬于數(shù)據(jù)報(bào)的首部。所有的擴(kuò)展首部和數(shù)據(jù)合起來叫做數(shù)據(jù)報(bào)的有效載荷或凈負(fù)荷。
圖 7-32是具有多個(gè)可選擴(kuò)展首部的IPv6數(shù)據(jù)報(bào)的一般形式
圖7-33是IPv6數(shù)據(jù)包的基本首部。在基本首部后面是有效載荷,它包括運(yùn)輸層的數(shù)據(jù)和可能選用的擴(kuò)展首部。下面解釋IPv6基本首部中的各字段的作用。
圖7-33 IPv6的基本首部格式
(1)版本占4位。它指明了協(xié)議的版本,對(duì)IPv6該字段總是6。
(2)通信量類占8位。這是為了區(qū)分不同的IPv6數(shù)據(jù)報(bào)的類別或優(yōu)先級(jí)。目前正在進(jìn)行不同的通信量類性能的實(shí)驗(yàn)。
(3)流標(biāo)號(hào)占20位。IPv6的一個(gè)新的機(jī)制是支持資源預(yù)分配,并且允許路由器將每一個(gè)數(shù)據(jù)報(bào)與一個(gè)給定的資源分配相聯(lián)系。IPv6提出流的抽象概念。所謂“流”就是互聯(lián)網(wǎng)網(wǎng)絡(luò)上從特定源點(diǎn)到特定終點(diǎn)(單播或多播)的一系列數(shù)據(jù)報(bào)(如實(shí)時(shí)音頻或視頻傳輸),而在這個(gè)“流”所經(jīng)過路徑上的路由器都保證指明的服務(wù)質(zhì)量。所有屬于同一個(gè)流的數(shù)據(jù)報(bào)都具有同樣的流標(biāo)號(hào)。
(4)有效載荷長(zhǎng)度占16位。它指明IPv6數(shù)據(jù)報(bào)除基本首部以外的字節(jié)數(shù)(所有擴(kuò)展首部都算在有效載荷之內(nèi))。這個(gè)字段的最大值是64KB。
(5)下一個(gè)首部占8位,。它相當(dāng)于IPv4的協(xié)議字段或可選字段。
當(dāng)IPv6數(shù)據(jù)報(bào)沒有擴(kuò)展首部時(shí),下一個(gè)首部字段的作用和IPv4的協(xié)議字段一樣,它的值指出了基本首部后面的數(shù)據(jù)應(yīng)交付給IP上面的哪一個(gè)高層協(xié)議(例如,6或17分別表示應(yīng)付給TCP或UDP)。
當(dāng)出現(xiàn)擴(kuò)展首部時(shí),下一個(gè)首部字段的值就標(biāo)識(shí)后面第一個(gè)擴(kuò)展首部的類型。
(6)跳數(shù)限制占8位。用來防止數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中無限期地存在。源站在每個(gè)數(shù)據(jù)報(bào)發(fā)出時(shí)即設(shè)定某個(gè)跳數(shù)限制。每個(gè)路由器在轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)時(shí),要先在跳數(shù)限制字段中的值減1。當(dāng)跳數(shù)限制的值為零時(shí),就要將此數(shù)據(jù)報(bào)丟棄。
(7)源地址 占128位。是數(shù)據(jù)報(bào)的發(fā)送站的IP地址。
(8)目的地址 占128位。是數(shù)據(jù)報(bào)的接收站的IP地址。
IPv6為什么要使用擴(kuò)展首部呢?大家知道,IPv4的數(shù)據(jù)報(bào)如果在其首部中使用了選項(xiàng),那么沿?cái)?shù)據(jù)報(bào)傳送的路徑上的每路由器都必須對(duì)這些選項(xiàng)進(jìn)行一一檢查,這就降低了路由器處理數(shù)據(jù)報(bào)的速度。然而實(shí)際上,在一條路徑途中的路由器上很多選項(xiàng)是不需要檢查的。IPv6把原來IPv4首部中選項(xiàng)的功能都放在擴(kuò)展首部中,并將擴(kuò)展首部留給路徑兩端的源站和目的站的主機(jī)來處理,而數(shù)據(jù)報(bào)途中經(jīng)過的路由器都不處理這些擴(kuò)展首部(只有一個(gè)首部例外,即逐跳選項(xiàng)擴(kuò)展首部),這樣就大提高了路由器的處理效率。
在RFC2460中定義了以下6種擴(kuò)展首部:1.逐跳選項(xiàng);2.路由選擇;3.分片;4.鑒別;5.封裝安全有效載荷;6.目的站選項(xiàng)。
每一個(gè)擴(kuò)展首部都由若干個(gè)字段組成,他們的長(zhǎng)度也各不同。但所有擴(kuò)展首部的第一個(gè)字段都是8位的“下一個(gè)首部”字段。次字段的值指出了在該擴(kuò)展首部后面的字段是什么。當(dāng)使用多個(gè)擴(kuò)展首部時(shí),,應(yīng)按以上的先后順序出現(xiàn)。高層首部總是放在最后面。
一般來講,,一個(gè)IPV6數(shù)據(jù)報(bào)的目的地址可以是以下3種基本類型地址之一。
(1)單播 單播就是傳統(tǒng)的點(diǎn)對(duì)點(diǎn)通信。
(2)多播 多播是一點(diǎn)對(duì)多點(diǎn)的通信,數(shù)據(jù)報(bào)交付到一組計(jì)算機(jī)中的每一個(gè)。IPV6沒有采用廣播的術(shù)語,而是將廣播看作多播的一個(gè)特例。
(3)任播 這是IPV6增加的一種類型。任播的目的站是一組計(jì)算機(jī),但來自用戶的數(shù)據(jù)報(bào)在交付時(shí)只交付給這組計(jì)算機(jī)中的任何一個(gè),通常是距離最近的一個(gè)。
IPV6將實(shí)現(xiàn)IPV6的主機(jī)和路由器均稱為結(jié)點(diǎn),并將IPV6地址分配給結(jié)點(diǎn)上面的接口。一個(gè)接口可以有多個(gè)單播地址。一個(gè)結(jié)點(diǎn)接口的單播地址可用來唯一地標(biāo)志該結(jié)點(diǎn)。
在IPV6中,每個(gè)地址占128位,地址空間大于3.4*10*38。如果整個(gè)地球表面都覆蓋計(jì)算機(jī),那么IPV6允許每平方米擁有7*10*23個(gè)IP地址。如果地址分配速率是每微秒分配100萬個(gè)地址,則需要10*19年的時(shí)間才能將所有可能的地址分配完畢。可見,在想象得到的將來,IPV6的地址空間是不可能用完的。
巨大的地址范圍還必須是維護(hù)互聯(lián)網(wǎng)的人易于閱讀和操作這些地址。IPV6所用的點(diǎn)分十進(jìn)制記法現(xiàn)在也不夠方便了。例如,一個(gè)用點(diǎn)分十進(jìn)制的128位的地址:
104.230.140.100.255.255.255.255.0.0.17.128.150.10.255.255
為了使地址再簡(jiǎn)潔些,IPV6使用冒號(hào)十六進(jìn)制記法,它把每個(gè)16位的值用十六進(jìn)制表示,各值之間用冒號(hào)分隔。例如,如果前面所給的點(diǎn)分十進(jìn)制記法的值改為冒號(hào)十六進(jìn)制記法,就變成了:
68E6:8C64: FFFF: FFFF: 0:1180:960A: FFFF
在十六進(jìn)制記法中允許省去冒號(hào)之間的數(shù)中最前面的一串0,如000F可縮寫為F。
冒號(hào)十六進(jìn)制記法還包括兩個(gè)技術(shù)使它尤其有用。首先,冒號(hào)十六進(jìn)制記法可以允許零壓縮,即一連串連續(xù)的零可以為一對(duì)冒號(hào)所取代,例如:
FF05:0:0:0:0:0:0:B3
可以寫成:FF05::B3
為了保證零壓縮有一個(gè)不含混的解釋,規(guī)定在任意一個(gè)地址中只能使用一次零壓縮。該技術(shù)對(duì)已建議的分配策略特別有用,因?yàn)闀?huì)有很多地址包含連續(xù)的零串。
其次,冒號(hào)十六進(jìn)制記法可結(jié)合有點(diǎn)分十進(jìn)制記法的后綴。,我們下面會(huì)看到這種結(jié)合在IPV4向IPV6的轉(zhuǎn)換階段特別有用。例如,下面的串是一個(gè)合法的冒號(hào)十六進(jìn)制記法:
0:0:0:0:0:0:128.10.2.1
請(qǐng)讀者注意,在這種記法中,雖然為冒號(hào)所分隔的每一個(gè)值是一個(gè)16位值,但每個(gè)點(diǎn)分十進(jìn)制部分的值則指明一個(gè)字節(jié)(8位)的值。再使用零壓縮即可得出:
::128.10.2.1
IPV6和IPV4最重要的變化之一就是單播地址所使用的劃分策略,以及由此產(chǎn)生的多級(jí)地址體系.我們知道,采用CIDR后,IPV4的地址是兩級(jí)結(jié)構(gòu),它的地址被劃分為一個(gè)前綴和一個(gè)后綴。IPV6擴(kuò)展了地址的分級(jí)概念,它使用以下的3個(gè)等級(jí)。(1)等一級(jí)(頂級(jí)),指明全球知道的公共拓?fù)?。?/span>2)第二級(jí)(地點(diǎn)級(jí)),指明單個(gè)的地點(diǎn)。(3)第三級(jí),指明單個(gè)的網(wǎng)絡(luò)接口。IPV6的地址體系采用多級(jí)體系是充分考慮到怎樣使路由器可更快地查找路由。
和IPV4一樣,IPV6也需要使用ICMP。但舊版本的、適合于IPV4的ICMP并不能滿足IPV6全部的要求。因此,叫做ICMPV6的新版本在1998年底也問世了[RFC2463],它目前還只是草案標(biāo)準(zhǔn)協(xié)議。
ICMPV6的報(bào)文格式和IPV4使用的ICMP的相似,即前4個(gè)字節(jié)的字段名稱都是一樣的,但ICMPV6把第5個(gè)字節(jié)起的后面部分作為報(bào)文主體。ICMPV6把報(bào)文種類劃分為兩大類,即差錯(cuò)報(bào)文和提供信息的報(bào)文,并取消了使用得很少的ICMP報(bào)文。差錯(cuò)報(bào)文的類型字段的最高位是0,因此,其類型字段的值是0到127。提供信息的報(bào)文的類型字段的最高位是1,其值是128到255。但在RFC2463中只定義了6種類型的ICMPV6報(bào)文。
ICMPV6報(bào)文的前面是IPV6首部和零個(gè)或更多的IPV6擴(kuò)展首部。在ICMPV6前面的一個(gè)首部中的“下一個(gè)首部字段”的值應(yīng)當(dāng)置為58。請(qǐng)讀者注意,這和IPV4中標(biāo)志ICMP的值不同,在IPV4中標(biāo)志ICMP的值是1。
順便指出,與IPV6配套使用的沒有IGMPV6,因?yàn)?/span>ICMPV6已經(jīng)包含了所有ICMPV4和IGMP的功能。
聯(lián)系客服