五、因特網(wǎng)的路由選擇協(xié)議
1.有關(guān)路由選擇協(xié)議的幾個(gè)基本概念
Ⅰ、理想的路由算法
路由表中的路由是怎樣得出的呢?核心是路由算法。一個(gè)理想的路由算法要正確且完整、計(jì)算簡(jiǎn)單、能適應(yīng)通信量和網(wǎng)絡(luò)拓?fù)涞淖兓?、算法要有穩(wěn)定性、公平、最佳(這里指相對(duì)于某一種特定要求下得出的較為合理的選擇)。
路由選擇是復(fù)雜的,因?yàn)樗蔷W(wǎng)絡(luò)中的所有結(jié)點(diǎn)共同協(xié)調(diào)工作的結(jié)果,而且環(huán)境一直在變,可能發(fā)生擁堵。這樣很難從網(wǎng)絡(luò)中的各結(jié)點(diǎn)獲得所需的路由選擇信息。
靜態(tài)路由選擇策略:也叫非自適應(yīng)路由選擇,簡(jiǎn)單、開銷小、但不能及時(shí)適應(yīng)網(wǎng)絡(luò)狀態(tài)的變化,適應(yīng)于簡(jiǎn)單的小網(wǎng)絡(luò)
動(dòng)態(tài)路由選擇策略:也叫自適應(yīng)路由選擇,能較好適應(yīng)網(wǎng)絡(luò)狀態(tài)變化,但實(shí)現(xiàn)復(fù)雜、開銷大。
Ⅱ、分層次的路由選擇協(xié)議
因特網(wǎng)采用的路由選擇協(xié)議主要是自適應(yīng)的、分布式的。分層原因:①因特網(wǎng)大,路由表大,處理起來耗時(shí);②許多單位不愿意外界了解自己?jiǎn)挝痪W(wǎng)絡(luò)的布局細(xì)節(jié)。
于是因特網(wǎng)將整個(gè)互聯(lián)網(wǎng)劃分為許多較小的自治系統(tǒng)(autonomous system),記為AS。AS經(jīng)典定義是在單一技術(shù)管理下的一組路由器,而這些路由器使用一種AS內(nèi)部的路由選擇協(xié)議和共同的度量以確定分組在該AS內(nèi)的路由,同時(shí)還用一種AS之間的路由選擇協(xié)議用以確定分組在AS之間的路由。一個(gè)AS對(duì)其他AS表現(xiàn)出的是一個(gè)單一的和一致的路由選擇策略。
(1)內(nèi)部網(wǎng)關(guān)協(xié)議IGP(interior gateway protocol):與外部無關(guān),多用RIP、OSRF,自治系統(tǒng)之間的路由選擇也叫域內(nèi)路由選擇。
(2)外部網(wǎng)關(guān)協(xié)議EGP(external gateway protocol):若源主機(jī)和目的主機(jī)處在不同自治系統(tǒng)中(這兩個(gè)自治系統(tǒng)可使用不同的網(wǎng)關(guān)協(xié)議),當(dāng)數(shù)據(jù)報(bào)傳到一個(gè)自治系統(tǒng)的邊界時(shí),就需要使用一種協(xié)議將路由器選擇信息傳遞到另一個(gè)自治系統(tǒng)中,這樣的協(xié)議就是外部網(wǎng)關(guān)協(xié)議EGP。自治系統(tǒng)之間的路由選擇也叫域間路由選擇。多用BGP(外界網(wǎng)關(guān)協(xié)議BGP,border gateway protocol)。

2.內(nèi)部網(wǎng)關(guān)協(xié)議RIP
Ⅰ、工作原理
路由信息選擇協(xié)議RIP(routing information protocol)是內(nèi)部網(wǎng)關(guān)協(xié)議IGP中最先得到廣泛使用的協(xié)議,是一種分布式的基于距離向量的路由選擇協(xié)議,是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,其最大優(yōu)點(diǎn)是簡(jiǎn)單。
要求網(wǎng)絡(luò)中的每一個(gè)路由器都要維護(hù)從它自己到其他每一個(gè)目的網(wǎng)絡(luò)的距離記錄。從一路由器到直接連接的網(wǎng)絡(luò)的距離定義為1,從一路由器到非直接連接的網(wǎng)絡(luò)的距離定義為所經(jīng)過的路由器加1。也有定義:到直接連接的網(wǎng)絡(luò)的距離為0。距離也稱跳數(shù)(hop count)。
RIF協(xié)議和哪些路由器交換信息——僅和相鄰路由器交換信息
交換什么信息?——交換信息是當(dāng)前本路由器所知道的全部信息,即自己的路由表。即:我到本自治系統(tǒng)中所有網(wǎng)絡(luò)的(最短)距離,以及到每個(gè)網(wǎng)絡(luò)應(yīng)經(jīng)過的下一跳路由器。
什么時(shí)候交換信息?——按固定的時(shí)間間隔交換路由信息。如每隔30s,或者網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí)。
它主要信息是什么?——到達(dá)某個(gè)網(wǎng)絡(luò)的距離(即最短距離),以及應(yīng)經(jīng)過的下一跳地址。更新原則是找到每個(gè)目的網(wǎng)絡(luò)的最短距離,這種更新算法又稱為距離向量算法。
路由器只知道直接連接的網(wǎng)絡(luò)的距離,接著每一個(gè)路由器也只和數(shù)目非常有限的相鄰路由器交換并更新路由信息,這樣多次以后,所有路由器知道到達(dá)本自治系統(tǒng)中任何一個(gè)網(wǎng)絡(luò)的最短距離和下一跳路由器的地址。它有點(diǎn)像市場(chǎng)里聒噪的人,但又收斂,即在自治系統(tǒng)中所有的結(jié)點(diǎn)都得到正確的路由選擇信息的過程。
Ⅱ、距離向量算法
(1)對(duì)每一個(gè)相鄰路由器發(fā)送過來的RIP報(bào)文,先修改此報(bào)文中的所有項(xiàng)目:把“下一跳”字段中的地址都改為X,并把所有的“距離”字段的值加1。每一個(gè)項(xiàng)目都有三個(gè)關(guān)鍵數(shù)據(jù),即:到目的網(wǎng)絡(luò)N,距離是d,下一跳路由器是X。
[這樣做原因——便于進(jìn)行本路由的更新,假設(shè)從位于地址X的相鄰路由器發(fā)來的RIP報(bào)文的某一個(gè)項(xiàng)目是:“Net2,3,Y”,意思是“我經(jīng)過路由器Y到網(wǎng)絡(luò)Net2的距離是3”,那么本路由器就可推斷出:“我經(jīng)過X到網(wǎng)絡(luò)Net2的距離應(yīng)為3+1=4”。于是,本路由器就把收到的RIP報(bào)文的這一個(gè)項(xiàng)目修改為“Net2,4,X”,作為下一步和路由器原有項(xiàng)目進(jìn)行比較時(shí)使用(只有比較后才知道是否需要更新)。]
(2)對(duì)修改后的RIP報(bào)文中的每一個(gè)項(xiàng)目,進(jìn)行一下步驟:
若原來路由表中沒有目的網(wǎng)絡(luò)N,則把該項(xiàng)目添加到路由表中。
[這樣做的目的——表明這是新的目的網(wǎng)絡(luò),應(yīng)當(dāng)加入到路由器中。]
否則(即在路由表中有目的網(wǎng)絡(luò)N,這時(shí)就再查看下一跳路由器地址)
若下一跳地址路由器地址是X,則把收到的項(xiàng)目替換原路由表中的項(xiàng)目。
[替換的目的——這是最新的消息,要以最新的消息為準(zhǔn)。到目的網(wǎng)絡(luò)的距離有可能增大或減小,但有可能沒有改變。]
否則(即這個(gè)項(xiàng)目是:到目的網(wǎng)絡(luò)N,但下一跳路由器不是X)
若收到的項(xiàng)目中的距離d小于路由器中的距離,則進(jìn)行更新。
[這樣做的目的——使距離最短]
否則什么也不做。
[這樣做的原因——若距離更大了,顯然不應(yīng)更新。若距離不變,更新后得不到好處,因此也不更新。]
(3)若3分鐘還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達(dá)的路由器,則把距離置為16(距離為16表示不可達(dá))。
(4)返回。
上述算法基礎(chǔ):Bellman-Ford算法。設(shè)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的最短路徑。
Ⅲ、舉例
R6收到相鄰路由器R4發(fā)來的路由更新信息,現(xiàn)在更新R6的路由表。

解:如同路由器一樣,我們不需要知道該網(wǎng)絡(luò)的拓?fù)?。先把距離加1,并把下一跳路由器都改為R4,得出下表:

把這個(gè)表和a比較。第一行在a中沒有,就添加到a中。第二行的Net2在表中有,且下一跳路由器也是R4,因此要更新(距離增大了)。第三行的Net3在a中有,但下一跳路由器不同,于是比較距離,新的路由信息的距離是2,小于原來表中的4,因此要更新。這樣更新后的R6的路由表如下:

RIP協(xié)議讓一個(gè)自治系統(tǒng)中的所有路由器都和自己的相鄰路由器定期交換路由信息,并不斷更新其路由表,使得從每一個(gè)路由器到每一個(gè)目的網(wǎng)絡(luò)的路由都是最短的(即跳數(shù)最少)。這里還應(yīng)注意:雖然所有的路由器最終都擁有了整個(gè)自治系統(tǒng)的全局路由信息,但由于每一個(gè)路由器的位置不同,它們的路由表當(dāng)然也是不同的。
Ⅳ、RIP協(xié)議的報(bào)文格式
較新版本是RIF2,可支持變長(zhǎng)子網(wǎng)掩碼和CIDR,還提供簡(jiǎn)單的鑒別過程支持多播。RIF2和RIF1的首部相同,但后面的路由部分不一樣,它使用運(yùn)輸層的用戶數(shù)據(jù)報(bào)UDP進(jìn)行傳送(使用UDP的端口520)。

解釋:命令字段指出報(bào)文意義,1表示請(qǐng)求路由信息,2表示對(duì)請(qǐng)求路由信息的響應(yīng)或未被請(qǐng)求而發(fā)出的路由更新報(bào)文。首部后面“必為0”是為了4字節(jié)字的對(duì)齊。地址族標(biāo)識(shí)符(又稱為地址類別)字段用來標(biāo)志所使用的地址協(xié)議。如采用IP地址就令這個(gè)字段的值為2(原來考慮RIP也可用于其他非TCP/IP協(xié)議的情況)。路由標(biāo)記填入自治系統(tǒng)號(hào)ASN(autonomous system number),這是考慮使RIP有可能收到本自治系統(tǒng)以外的路由選擇信息。
一個(gè)報(bào)文最多可包括25個(gè)路由,因而RIP報(bào)文的最大長(zhǎng)度是4+20*25=504字節(jié)。如超過,必須再用一個(gè)RIP報(bào)文來傳送。
鑒別功能時(shí)報(bào)文怎么變?——把原來寫入第一個(gè)路由信息(20字節(jié))的位置用作鑒別,這時(shí)應(yīng)將地址族標(biāo)識(shí)符置為全1,而路由標(biāo)記寫入鑒別類型,剩下的16字節(jié)為鑒別數(shù)據(jù)。在鑒別數(shù)據(jù)之后才寫入路由信息,但這時(shí)最多只能再放入24個(gè)路由信息。
Ⅴ、評(píng)價(jià)
缺點(diǎn)——當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時(shí),要經(jīng)過很長(zhǎng)時(shí)間才能將此信息傳送到所有的路由器。好消息傳播得快,而壞消息傳播得慢。舉例如下:

在R1將“1,16,直接”傳遞到R2之前,有30s,然而R2可能已經(jīng)把自己的路由表信息發(fā)送給了R1。R1收到后誤認(rèn)為R2可能到達(dá)網(wǎng)1,所以把路由信息修改為“1,3,R2”,表明“我到網(wǎng)1的距離是3,下一跳經(jīng)過R2”,并把更新的信息發(fā)送給R2。等等。
為使壞消息傳播得更快,可以讓路由器記錄收到某特定路由信息的接口,而不讓同一路由信息再通過此接口向反方向傳送。
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,開銷小
缺點(diǎn):①RIF限制了網(wǎng)絡(luò)的規(guī)模,它能使用的最大距離為15(16表示不可達(dá))
②路由器間交換的路由信息是路由器中的完整路由表,因而隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,開銷也就增加。
③壞消息傳播得慢,使更新過程的收斂時(shí)間過長(zhǎng)。
3.內(nèi)部網(wǎng)關(guān)協(xié)議OSPF
Ⅰ、OSPF協(xié)議的基本特點(diǎn)
名字:最短路徑優(yōu)先OSPF(open shortest path first),使用了Dijkstra提出的最短路徑算法SPF。它不表示其他的路由選擇協(xié)議不是“最短路徑優(yōu)先”。實(shí)際上,所有自治系統(tǒng)內(nèi)部使用的路由選擇協(xié)議(包括RIF協(xié)議)都是要尋找一條最短的路徑。
最主要特征——使用分布式的鏈路狀態(tài)協(xié)議(link state protocol),而不是像RIF那樣的距離向量協(xié)議。
和RIP相比的特點(diǎn):
如何發(fā)送信息?——向本自治系統(tǒng)中所有路由器發(fā)送信息。這里用洪泛法,路由器通過所有輸出端口向所有相鄰的路由器發(fā)送信息,而每一個(gè)相鄰路由器又將此信息發(fā)往其所有的相鄰路由器(但不再發(fā)送給剛剛發(fā)來信息的那個(gè)路由器)。這樣,最終整個(gè)區(qū)域中所有的路由器都得到了這個(gè)信息的一個(gè)副本。而RIP只是向自己相鄰的幾個(gè)路由器發(fā)送信息。
發(fā)送什么信息?——與本路由器相鄰的所有路由器的鏈路狀態(tài),但這只是路由器所知道的部分信息。所謂“鏈路狀態(tài)”就是說明本路由器都和哪些路由器相鄰,以及該鏈路的“度量”(表示費(fèi)用、距離、時(shí)延、帶寬等)。
什么時(shí)候發(fā)送信息?——當(dāng)鏈路狀態(tài)發(fā)生變化時(shí),而RIP是定期交換路由表的信息。它優(yōu)點(diǎn)是更新過程收斂得快。
各路由器頻繁交換鏈路狀態(tài)信息,所以所有的路由器最終都能建立一個(gè)鏈路狀態(tài)數(shù)據(jù)庫(link-state database),這個(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)造出自己的路由表(使用Dijkstra的最短路徑路由算法)。而RIP協(xié)議的每一個(gè)路由只知道所有網(wǎng)絡(luò)的距離以及下一跳路由器,但卻不知道全網(wǎng)的拓?fù)浣Y(jié)構(gòu)。
Ⅱ、劃分區(qū)域
劃分原因:為使OSPF能夠用于規(guī)模更大的網(wǎng)絡(luò),它將一個(gè)自治系統(tǒng)再劃分為若干個(gè)更小的范圍,叫作區(qū)域。每個(gè)區(qū)域都有一個(gè)32位的區(qū)域標(biāo)識(shí)符(點(diǎn)分十進(jìn)制表示)。一個(gè)區(qū)域不要太大,在一個(gè)區(qū)域內(nèi)的路由器最好不超過200個(gè)。

區(qū)域內(nèi)部通信——利用洪泛法交換鏈路狀態(tài)信息的范圍局限于每一個(gè)區(qū)域而不是整個(gè)的自治網(wǎng)絡(luò),這樣大大減少了通信量。一個(gè)區(qū)域內(nèi)的路由器只知道本區(qū)域的完整網(wǎng)絡(luò)拓?fù)?,而不知道其他區(qū)域的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
區(qū)域間如何通信?——OSPF使用層次結(jié)構(gòu)的區(qū)域劃分。上層的區(qū)域叫作主干區(qū)域(backhome area),主干區(qū)域的標(biāo)識(shí)符規(guī)定為0.0.0.0,它是用來連通其他在下層的區(qū)域,從其他區(qū)域來的信息都由區(qū)域邊界路由器進(jìn)行概括,R3,R4,R7都是區(qū)域邊界路由器。每一個(gè)區(qū)域至少有一個(gè)區(qū)域邊界路由器。主干區(qū)域內(nèi)的路由器叫作主干路由器,如R3,R4,R5,R6,R7。一個(gè)主干路由器可以同時(shí)是區(qū)域邊界路由器。在主干路由器內(nèi)還要有一個(gè)路由器專門和本自治系統(tǒng)外的其他自治系統(tǒng)交換路由信息。這樣的路由器叫作自治系統(tǒng)邊界路由器(如R6)。
區(qū)域劃分優(yōu)點(diǎn)?——使交換信息的種類增多了,但協(xié)議復(fù)雜了。每一個(gè)區(qū)域內(nèi)部交換路由信息的通信量大大減小,這樣使OSPF協(xié)議能夠用于規(guī)模很大的自治系統(tǒng)中。
Ⅲ、OSPF直接用IP數(shù)據(jù)報(bào)傳送(而不是UDP)
原因——構(gòu)成的數(shù)據(jù)報(bào)很短,能減少路由信息的通信量。還不必將長(zhǎng)的數(shù)據(jù)報(bào)分片傳送,分片傳送的數(shù)據(jù)報(bào)只要丟失一個(gè),就無法組裝成原來的數(shù)據(jù)報(bào),而真?zhèn)€數(shù)據(jù)報(bào)就必須重傳。

版本:當(dāng)前版本號(hào)是2。
類型:五種類型分組中的一種。
分組長(zhǎng)度:包括OSPF首部在內(nèi)的分組長(zhǎng)度,以字節(jié)為單位。
路由器標(biāo)識(shí)符:標(biāo)志發(fā)送該分組的路由器的接口的IP地址。
區(qū)域標(biāo)識(shí)符:分組屬于的區(qū)域的標(biāo)識(shí)符。
檢驗(yàn)和:用來檢測(cè)分組中的差錯(cuò)。
鑒別類型:目前只有兩種,0(不用)和1(口令)。
鑒別:類型為0時(shí)就填入0,為1時(shí)就填入8個(gè)字符的口令。
OSPF的其他特點(diǎn):
①靈活性:對(duì)不同的鏈路可根據(jù)IP分組的不同服務(wù)類型(TOS)而設(shè)置成不同的代價(jià),它對(duì)于不同類型的業(yè)務(wù)可計(jì)算出不同的路由。這是RIP沒有的。
②負(fù)載平衡:如果到同一個(gè)目的網(wǎng)絡(luò)有多條相同代價(jià)的路徑,那么可以將通信量分配給這幾條路徑。在代價(jià)相同的多條路徑上分配通信量是通信量工程中的簡(jiǎn)單形式。而RIP只能找到某個(gè)網(wǎng)絡(luò)的一條路徑。
③所有OSPF路由器之間交換的分組都具有鑒別的功能,因而保證了僅在可信賴的路由器之間交換鏈路狀態(tài)信息。
④支持可變長(zhǎng)度的子網(wǎng)劃分和無分類的編址CIDR。
⑤由于網(wǎng)絡(luò)中的鏈路狀態(tài)可能經(jīng)常發(fā)生變化,因此OSPF讓每一個(gè)鏈路狀態(tài)都帶上一個(gè)32位的序號(hào),序號(hào)越大狀態(tài)就越新。
Ⅳ、OSPF的五種分組類型
類型一:?jiǎn)柡颍╤ello)分組。用來發(fā)現(xiàn)和維持鄰站的可達(dá)性
類型二:數(shù)據(jù)庫描述(database description)分組。向鄰站給出自己的鏈路狀態(tài)數(shù)據(jù)庫中的所有鏈路狀態(tài)項(xiàng)目的摘要信息。
類型三:鏈路狀態(tài)請(qǐng)求(link state request)分組。向?qū)Ψ秸?qǐng)求發(fā)送某些鏈路狀態(tài)項(xiàng)目的詳細(xì)信息。
類型四:鏈路狀態(tài)更新(link state update)分組。用洪泛法對(duì)全網(wǎng)更新鏈路狀態(tài)。這種分組復(fù)雜、核心。路由器用這種分組將其鏈路狀態(tài)通知給鄰站。共有五種不同的鏈路狀態(tài)。
類型五:鏈路狀態(tài)確認(rèn)(link state acknowledgment)分組。對(duì)鏈路更新分組的確認(rèn)。
問候分組的用處——OSPF規(guī)定每?jī)蓚€(gè)相鄰路由器每隔10秒鐘要交換一次問候分組,這樣就能確知哪些鄰站是可達(dá)的。只有可達(dá)才能將鄰站的鏈路狀態(tài)信息存入鏈路狀態(tài)數(shù)據(jù)庫。若有40秒未收到鄰路由器發(fā)來的問候分組,則認(rèn)為該鄰站是不可達(dá)的,應(yīng)立即修改鏈路狀態(tài)數(shù)據(jù)庫,并重新計(jì)算路由表。
其他四種分組都是用來進(jìn)行鏈路狀態(tài)數(shù)據(jù)庫的同步。同步是指不同路由器的鏈路狀態(tài)數(shù)據(jù)庫的內(nèi)容是一樣的。兩個(gè)同步的路由器叫作“完全鄰接的”(fully adjacent)路由器。不是完全鄰接的路由器表明它們雖然在物理上是相鄰的,但其鏈路狀態(tài)數(shù)據(jù)庫并沒有達(dá)到一致。
其他四種分組用來進(jìn)行鏈路狀態(tài)數(shù)據(jù)庫同步的原因?
①一個(gè)路由器開始工作時(shí),它只能通過問候分組得知它有哪些相鄰的路由器在工作,以及將數(shù)據(jù)發(fā)往相鄰路由器所需的“代價(jià)”。如果所有路由器都把自己的本地鏈路狀態(tài)信息對(duì)全網(wǎng)進(jìn)行廣播,那么各路由器只要將這些鏈路狀態(tài)信息綜合起來就可得出鏈路狀態(tài)數(shù)據(jù)庫。但這樣開銷太大。
②所以,OSPF讓每一個(gè)路由器用數(shù)據(jù)庫描述分組和相鄰路由器交換本數(shù)據(jù)庫中已有的鏈路狀態(tài)摘要信息。摘要信息主要就是指出有哪些路由器的鏈路狀態(tài)信息已經(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ù)鏈路數(shù)據(jù)庫就建立了。

在網(wǎng)絡(luò)運(yùn)行的過程中,只要一個(gè)路由器的鏈路狀態(tài)發(fā)生變化,該路由器就要使用鏈路狀態(tài)更新分組,用洪泛法向全網(wǎng)更新鏈路狀態(tài)。OSPF用的是可靠的洪泛法。如下圖,小箭頭表示更新分組,空心箭頭表示確認(rèn)分組。

?為確保鏈路狀態(tài)數(shù)據(jù)庫與全網(wǎng)的狀態(tài)保持一致,OSPF還規(guī)定每隔一段時(shí)間,如30分鐘,要刷新一次數(shù)據(jù)庫中的鏈路狀態(tài)。
由于一個(gè)路由器的鏈路狀態(tài)只涉及到與相鄰路由器的連通狀態(tài),因而與整個(gè)互聯(lián)網(wǎng)的規(guī)模并無直接關(guān)系。因此當(dāng)互聯(lián)網(wǎng)規(guī)模很大時(shí),OSPF協(xié)議要比距離向量協(xié)議RIP好很多。它也沒有“壞消息傳播得慢”的問題。
若N個(gè)路由器連接在一個(gè)以太網(wǎng)上,則每個(gè)路由器要向其他(N—1)個(gè)路由器發(fā)送鏈路狀態(tài)信息,因而共有(N—1)^2個(gè)鏈路狀態(tài)要在這個(gè)以太網(wǎng)上傳送。OSPF協(xié)議對(duì)這種多點(diǎn)接入的局域網(wǎng)采用了指定的路由器的方法,使廣播的信息量大大減少。指定的路由器代表該局域網(wǎng)上所有的鏈路向連接到該網(wǎng)絡(luò)上的各路由器發(fā)送狀態(tài)信息。
4.外部網(wǎng)關(guān)協(xié)議BGP
Ⅰ、背景
BGP是不同AS的路由器之間交換路由信息的協(xié)議。那不同AS之間的路由選擇為什么不用內(nèi)部網(wǎng)關(guān)協(xié)議?
內(nèi)部網(wǎng)關(guān)協(xié)議主要是設(shè)法使數(shù)據(jù)報(bào)在一個(gè)AS中盡可能有效地從源站傳送到目的站。在一個(gè)AS內(nèi)部也不需要考慮其他方面的策略。然而BGP使用的環(huán)境卻不同。這是因?yàn)椋?/p>
①因特網(wǎng)的規(guī)模太大,使得AS之間路由選擇非常困難。
原因有兩點(diǎn),一點(diǎn)是連接在因特網(wǎng)主干上的路由器,必須對(duì)任何有效的IP地址都能在路由表中找到匹配目的的網(wǎng)絡(luò)。而主干路由器中,一個(gè)路由器的項(xiàng)目數(shù)早已超過了5萬個(gè)網(wǎng)絡(luò)前綴。如果使用鏈路狀態(tài)協(xié)議,則每一個(gè)路由器必須維持一個(gè)河大的鏈路狀態(tài)數(shù)據(jù)庫。對(duì)于這樣大的主干網(wǎng)用Dijkstra算法計(jì)算最短路徑時(shí)花費(fèi)的時(shí)間也太長(zhǎng)。
另一點(diǎn)是,AS各自運(yùn)行自己選定的內(nèi)部路由選擇協(xié)議,并使用本AS指明的路徑度量,因此,當(dāng)一條路徑通過幾個(gè)不同AS時(shí),要想對(duì)這樣的路徑計(jì)算出有意義的代價(jià)是不太可能的。比如,對(duì)某AS來說,代價(jià)為1000可能表示一條比較長(zhǎng)的路由,但對(duì)另一AS代價(jià)為1000卻不可能表示不可接受的壞路由。因此,對(duì)于AS之間的路由選擇,要用“代價(jià)”作為度量來尋找最佳路由也是很不現(xiàn)實(shí)的。比較合理的做法是在AS之間交換“可達(dá)性”信息。例如,告訴相鄰路由器:“到達(dá)目的網(wǎng)絡(luò)N可經(jīng)過ASx”。
②AS之間的路由選擇必須考慮有關(guān)政策。
比如AS1要發(fā)數(shù)據(jù)報(bào)給AS2,本來最好是經(jīng)過AS3,但是AS3不愿意讓這些數(shù)據(jù)報(bào)經(jīng)過本AS的網(wǎng)絡(luò)。又比如,僅在到達(dá)某些地址時(shí)才經(jīng)過ASx。
于是,邊界網(wǎng)關(guān)協(xié)議BGP只能是力求尋找一條能夠到達(dá)目的網(wǎng)絡(luò)且比較好的路由(不能兜圈子),而并非要尋找一條最佳路由。BGP采用了路徑向量(path ?vector)路由選擇協(xié)議,它與距離向量協(xié)議和鏈路狀態(tài)選擇協(xié)議都有很大區(qū)別。
Ⅱ、路徑向量選擇協(xié)議

在配置BGP時(shí),每一個(gè)AS的管理員要選擇至少一個(gè)路由器作為該AS的“BGP發(fā)言人”。一般說來,兩個(gè)BGP發(fā)言人是通過一個(gè)共享網(wǎng)絡(luò)連接在一起的,而BGP發(fā)言人往往就是BGP邊界路由器,但也可以不是BGP邊界路由器。
一個(gè)BGP發(fā)言人與其他AS的BGP發(fā)言人要交換路由信息,就要先建立TCP連接,然后在此連接上交換BGP報(bào)文以建立BGP會(huì)話(session),利用BGP會(huì)話交換路由信息,如增加了新的路由,或撤銷過時(shí)的路由,以及報(bào)告出差錯(cuò)的情況等等。使用TCP連接能提供可靠的服務(wù),也簡(jiǎn)化了路由選擇協(xié)議。使用TCP連接交換路由信息的兩個(gè)BGP發(fā)言人,彼此成為對(duì)方的鄰站(neighbor)或?qū)Φ日荆╬eer)。每一個(gè)BGP發(fā)言人除了必須運(yùn)行BGP協(xié)議外,還必須運(yùn)行該AS所使用的內(nèi)部網(wǎng)關(guān)協(xié)議,如OSPF或RIP。

BGP所交換的網(wǎng)絡(luò)可達(dá)性的信息就是要到達(dá)某個(gè)網(wǎng)絡(luò)(用網(wǎng)絡(luò)前綴表示)所要經(jīng)過的一系列AS。當(dāng)BGP發(fā)言人互相交換了網(wǎng)絡(luò)可達(dá)性的信息后,各BGP發(fā)言人就根據(jù)所采用的策略從收到的路由信息中找出到達(dá)各AS的較好路由。下圖是上圖AS1上的一個(gè)BGP發(fā)言人構(gòu)造出的AS連通圖,它是樹形結(jié)構(gòu),不存在回路。

因特網(wǎng)的多級(jí)結(jié)構(gòu)的網(wǎng)絡(luò)拓?fù)錄Q定了BGP路由選擇協(xié)議的特點(diǎn)。看下圖,自治系統(tǒng)AS2的BGP發(fā)言人通知主干網(wǎng)的BGP發(fā)言人:“要到達(dá)網(wǎng)絡(luò)N1,N2,N3和N4,可經(jīng)過AS2。”主干網(wǎng)在收到這個(gè)通知后,就發(fā)出通知:“要到達(dá)網(wǎng)絡(luò)N1,N2,N3和N4可沿路徑(AS1,AS2)。”同理,主干網(wǎng)還可以發(fā)出通知:“要到達(dá)網(wǎng)絡(luò)N5,N6和N7可沿路徑(AS1,AS3)?!?/p>

從上面的討論可以看出,BGP協(xié)議交換路由信息的結(jié)點(diǎn)數(shù)量級(jí)是自治系統(tǒng)AS數(shù)的量級(jí),這要比這些AS中的網(wǎng)絡(luò)數(shù)少很多。要在許多AS之間尋找一條較好的路徑,就是要尋找正確的BGP發(fā)言人(或邊界路由器),而在每一個(gè)AS中BGP發(fā)言人(或邊界路由器)的數(shù)目是很少的。這就使得AS之間的路由選擇不致過分復(fù)雜。
BGP支持CIDR,因此BGP的路由表也就應(yīng)當(dāng)包括目的網(wǎng)絡(luò)前綴、下一跳路由器,以及到達(dá)該目的網(wǎng)絡(luò)所要經(jīng)過的AS序列。由于使用了路徑向量的信息,就可以很容易地避免產(chǎn)生兜圈子的理由。如果一個(gè)BGP發(fā)言人收到了其他BGP發(fā)言人發(fā)來的路徑通知,它就要檢查一下本AS是否在此通知的路徑中。如果在這條路徑中,就不能采用這條路徑(因?yàn)闀?huì)兜圈子)。
在BGP剛剛運(yùn)行時(shí),BGP的鄰站是交換整個(gè)的BGP路由表。但以后只需要在發(fā)生變化時(shí)更新有變化的部分。這樣做對(duì)節(jié)省網(wǎng)絡(luò)帶寬和減少路由器的處理開銷方面都有好處。
BGP—4的四種報(bào)文:OPEN(打開)報(bào)文,用來與相鄰的另一個(gè)BGP發(fā)言人建立關(guān)系,使通信初始化。UPDATE(更新)報(bào)文,用來通告某一路由的信息,以及列出要撤銷的多條路由。KEEPALIVE(保活報(bào)文),用來周期性地證實(shí)鄰站的連通性。NOTIFICATION(通知報(bào)文),用來發(fā)送檢測(cè)到的差錯(cuò)。
若兩個(gè)鄰站屬于兩個(gè)不同AS,而其中一個(gè)鄰站打算和另一個(gè)鄰站定期地交換路由信息,這就應(yīng)當(dāng)有一個(gè)商談的過程(因?yàn)楹芸赡軐?duì)方路由器的負(fù)荷已很重因而不愿意再加重負(fù)擔(dān))。因此,一開始向鄰站進(jìn)行商談時(shí)就必須發(fā)送OPEN報(bào)文。如果鄰站接收這種鄰站關(guān)系,就用KEEPALIVE報(bào)文響應(yīng)。這樣,兩個(gè)BGP發(fā)言人的鄰站關(guān)系就建立了。
一旦鄰站關(guān)系建立了,就要繼續(xù)維持這種關(guān)系。雙方中的每一方都要確信對(duì)方是存在的,且一直在保持這種鄰站關(guān)系。為此,這兩個(gè)BGP發(fā)言人彼此要周期性地交換KEEPALIVE報(bào)文(一般每隔30秒)。KEEPALIVE報(bào)文只有19字節(jié)長(zhǎng)(只用BGP報(bào)文的首部),因此不會(huì)造成網(wǎng)絡(luò)上太大的開銷。
UPDATE報(bào)文是BGP協(xié)議的核心內(nèi)容。BGP發(fā)言人可以用UPDATE報(bào)文撤銷它以前曾經(jīng)通知過的路由,也可以宣布增加新的路由。撤銷路由可以一次撤銷許多條,但增加新路由時(shí),每個(gè)更新報(bào)文只能增加一條。
BGP可以很容易解決距離向量路由選擇算法中的“壞消息傳播得慢”這一問題。當(dāng)某個(gè)路由器或鏈路出故障時(shí),由于BGP發(fā)言人可以從不止一個(gè)鄰站獲得路由信息,因此很容易選出新的路由。距離向量算法往往不能給出正確的選擇,是因?yàn)檫@些算法不能指出哪些鄰站到目的站的路由是獨(dú)立的。
Ⅲ、BGP報(bào)文的格式

通用首部分:
標(biāo)記字段——鑒別收到的BGP報(bào)文(假定將來會(huì)有人發(fā)明出合理的鑒別方案),當(dāng)不使用鑒別時(shí),標(biāo)記字段要置為全1。
長(zhǎng)度字段——指出包括通用首部在內(nèi)的整個(gè)BGP報(bào)文以字節(jié)為單位的長(zhǎng)度,最小值是19,最大值是4096。
類型字段——值為1到4,分別對(duì)應(yīng)于上述四種BGP報(bào)文中的一種。
OPEN報(bào)文:
共6字段,即版本(1字節(jié),現(xiàn)在的值是4)、本自治系統(tǒng)號(hào)(2字節(jié),使用全球唯一的16為自治系統(tǒng)號(hào))、保持時(shí)間(2字節(jié),以秒計(jì)算的保持為鄰站關(guān)系的時(shí)間)、BGP標(biāo)識(shí)符(4字節(jié),通常就是該路由器的IP地址)、可選參數(shù)長(zhǎng)度(1字節(jié))和可選參數(shù)。
UPDATE報(bào)文:
共有5個(gè)字段,即不可行路由長(zhǎng)度(2字節(jié),指明下一個(gè)字段的長(zhǎng)度)、撤銷的路由(列出所有要撤銷的路由)、路徑屬性總長(zhǎng)度(2字節(jié),指明下一個(gè)字段的長(zhǎng)度)、路徑屬性(定義在這個(gè)報(bào)文中增加的路徑的屬性)和網(wǎng)絡(luò)層可達(dá)性信息NLRI(network layer reachability information)。最后這個(gè)字段定義發(fā)出此報(bào)文的網(wǎng)絡(luò),包括網(wǎng)絡(luò)前綴的位數(shù)、IP地址前綴。
KEEPALIVE報(bào)文:
只有BGP的19字節(jié)長(zhǎng)的通用首部
NOTIFICATION報(bào)文:
有3個(gè)字段,即差錯(cuò)代碼(1字節(jié))、差錯(cuò)子代碼(1字節(jié))和差錯(cuò)數(shù)據(jù)(給出有關(guān)差錯(cuò)的診斷信息)。
5.路由器的構(gòu)成
Ⅰ、路由器的結(jié)構(gòu)、查找轉(zhuǎn)發(fā)表、轉(zhuǎn)發(fā)分組
是一種具有多個(gè)輸入端口和多個(gè)輸出端口的專用計(jì)算機(jī),其任務(wù)是轉(zhuǎn)發(fā)分組。

整個(gè)路由器結(jié)構(gòu)可劃分為兩大部分:路由選擇部分和分組轉(zhuǎn)發(fā)部分。
路由選擇部分:
也叫控制部分,核心構(gòu)件是路由選擇處理機(jī),其任務(wù)是根據(jù)所選定的路由選擇協(xié)議構(gòu)造出路由表,同時(shí)經(jīng)?;蚨ㄆ诘睾拖噜徛酚善鹘粨Q路由信息而不斷地更新和維護(hù)路由表。(如何根據(jù)路由選擇協(xié)議和更新路由表?)
分組轉(zhuǎn)發(fā)部分:
由三部分組成:交換結(jié)構(gòu)、一組輸入端口和一組輸出端口(端口指硬件接口)。
交換結(jié)構(gòu)——switching fabric,又稱交換組織,作用是根據(jù)轉(zhuǎn)發(fā)表(forwarding table)對(duì)分組進(jìn)行處理,將某個(gè)輸入端口進(jìn)入的分組從一個(gè)合適的輸出端口轉(zhuǎn)發(fā)出去。它本身是網(wǎng)絡(luò),但又包含在路由器中,所以叫“路由器中的網(wǎng)絡(luò)”。
轉(zhuǎn)發(fā)和路由選擇區(qū)別——“轉(zhuǎn)發(fā)”就是路由器根據(jù)轉(zhuǎn)發(fā)表把收到的IP數(shù)據(jù)報(bào)從路由器合適的端口轉(zhuǎn)發(fā)出去,只涉及到一個(gè)路由器。但“路由選擇”則涉及到很多路由器,路由表則是許多路由器協(xié)同工作的結(jié)果。這些路由器按照復(fù)雜的路由算法,得出整個(gè)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)變化情況,因而能夠動(dòng)態(tài)地改變所選擇的路由,并由此構(gòu)造出整個(gè)的路由表。路由表一般僅包含從目的網(wǎng)絡(luò)到下一跳(用IP地址表示,后面寫)的映射,而轉(zhuǎn)發(fā)表是從路由表中得出的。轉(zhuǎn)發(fā)表包含完成轉(zhuǎn)發(fā)功能所必須的信息。這就是說,在轉(zhuǎn)發(fā)表的每一行必須包含從要到達(dá)的目的網(wǎng)絡(luò)到輸出端口和某些MAC地址信息(如下一跳的以太網(wǎng)地址)的映射。將轉(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)。注意:在討論路由選擇原理時(shí),往往不去區(qū)分轉(zhuǎn)發(fā)表和路由表的區(qū)別,而可以籠統(tǒng)地都使用路由表這一名詞。
輸入輸出端口——有三個(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)行更新。這些副本稱為“影子副本”(shadow copy)。分散化交換可以避免在路由器中的某一點(diǎn)上出現(xiàn)瓶頸。
Ⅱ、查找轉(zhuǎn)發(fā)表和轉(zhuǎn)發(fā)分組實(shí)現(xiàn)中的困難
上述已介紹了查找轉(zhuǎn)發(fā)表和轉(zhuǎn)發(fā)分組的概念。問題就在于路由器必須以很高的速率轉(zhuǎn)發(fā)分組,最理想的情況就是輸入端口的處理速率能夠跟上線路把分組傳送到路由器的速率。這種速率稱為線速(line speed或wire speed)。重點(diǎn)在于提高轉(zhuǎn)發(fā)表的速率。

看下圖,輸出端口從交換結(jié)構(gòu)接收分組,然后把它們發(fā)送到路由器外面的線路上。在網(wǎng)絡(luò)層的處理模塊中設(shè)有一個(gè)緩沖區(qū),實(shí)際上它就是一個(gè)隊(duì)列。當(dāng)交換結(jié)構(gòu)傳送過來的分組速率超過輸出鏈路的發(fā)送速率時(shí),來不及發(fā)送的分組就必須暫時(shí)存放在這個(gè)隊(duì)列中。數(shù)據(jù)鏈路層處理模塊把分組加上鏈路層的首部和尾部,交給物理層后發(fā)送到外部線路。

若分組處理的速率趕不上分組進(jìn)入隊(duì)列的速率,則隊(duì)列的存儲(chǔ)空間最終必定減少到零,這就使后面再進(jìn)入隊(duì)列的分組由于沒有存儲(chǔ)空間而只能被丟棄。以前我們提到過的分組丟失就是發(fā)生在路由器中的輸入或輸出隊(duì)列產(chǎn)生溢出的時(shí)候。當(dāng)然,設(shè)備或線路出故障也可能使分組丟失。
Ⅲ、交換結(jié)構(gòu)
作用:將分組從一個(gè)輸入端口轉(zhuǎn)移到某個(gè)合適的輸出端口。
下面介紹三種常用的交換方法,它們都是將輸入端口I1收到的分組轉(zhuǎn)發(fā)到輸出端口O2。

(a)通過存儲(chǔ)器
最早使用的路由器就是利用普通的計(jì)算機(jī),用計(jì)算機(jī)的CPU作為路由器的路由選擇處理機(jī)。路由器的輸入和輸出端口的功能和傳統(tǒng)的操作系統(tǒng)中的I/O設(shè)備一樣。當(dāng)路由器的某個(gè)輸入端口收到一個(gè)分組時(shí),就用中斷方式通知路由選擇處理機(jī)。然后分組就從輸入端口復(fù)制到存儲(chǔ)器中。路由器處理機(jī)從分組首部提取目的地址,查找路由表,再將分組復(fù)制到合適的輸出端口的緩存中。若存儲(chǔ)器的帶寬(讀或?qū)懀槊棵隡個(gè)分組,那么路由器的交換速率(即分組從輸入端口傳送到輸出端口的速率)一定小于M/2。這是因?yàn)榇鎯?chǔ)器對(duì)分組的讀和寫需要花費(fèi)的時(shí)間是同一個(gè)數(shù)量級(jí)。
圖中,分組通過存儲(chǔ)器進(jìn)行交換。與早期的路由器的區(qū)別就是,目的地址的查找和分組在存儲(chǔ)器中的緩存都是在輸入端口中進(jìn)行的。
(b)通過總線
數(shù)據(jù)報(bào)從輸入端口通過共享的總線直接傳送到合適的輸出端口,而不需要路由選擇處理機(jī)的干預(yù)。但是,由于總線是共享的,因此在同一時(shí)間之能有一個(gè)分組在總線上傳送。當(dāng)分組到達(dá)輸入端口時(shí)若發(fā)現(xiàn)總線忙(因?yàn)榭偩€正在傳送另一個(gè)分組),則被阻塞而不能通過交換結(jié)構(gòu),并在輸入端口排隊(duì)等待。因?yàn)槊恳粋€(gè)要轉(zhuǎn)發(fā)的分組都要通過這一條總線,因此路由器的轉(zhuǎn)發(fā)帶寬就受總線速率的限制。
(c)通過互連網(wǎng)絡(luò)
它有2N條總線,可以使N個(gè)輸入端口和N個(gè)輸出端口相連接,這取決于相應(yīng)的交叉結(jié)點(diǎn)是使水平總線和垂直總線連通還是斷開。當(dāng)輸入端口收到一個(gè)分組時(shí),就將它發(fā)送到與該輸入端口相連的水平總線上。若通向所要轉(zhuǎn)發(fā)的輸出端口的垂直總線是空閑的,則在這個(gè)結(jié)點(diǎn)將垂直總線與水平總線連通,然后將該分組轉(zhuǎn)發(fā)到這個(gè)輸出端口。但若該垂直總線已被占用(有另一個(gè)分組正在轉(zhuǎn)發(fā)到同一個(gè)輸出端口),則后到達(dá)的分組就被阻塞,必須在輸入端口排隊(duì)。
六、IP多播
1.IP多播的概念
圖a是視頻服務(wù)器用單播方式向90個(gè)主機(jī)傳送同樣的視頻節(jié)目。為此,需要發(fā)送90個(gè)單播,即同一個(gè)視頻分組要發(fā)送90個(gè)副本。路由器R1在轉(zhuǎn)發(fā)分組時(shí),需要把收到的分組復(fù)制成3個(gè)副本,分別向R2、R3、R4各轉(zhuǎn)發(fā)1個(gè)副本。當(dāng)分組到達(dá)目的局域網(wǎng)時(shí),由于局域網(wǎng)具有硬件多播功能,因此不需要復(fù)制分組,在局域網(wǎng)上的多播組成員都能收到這個(gè)視頻分組。
圖b是視頻服務(wù)器用多播方式向同一個(gè)多播組的90個(gè)成員傳送節(jié)目。這時(shí),視頻服務(wù)器只需把視頻分組當(dāng)做多播數(shù)據(jù)報(bào)來發(fā)送,并且只需發(fā)送一次。主機(jī)很大時(shí),能減輕網(wǎng)絡(luò)中各種資源的消耗。在因特網(wǎng)范圍的多播要靠路由器來實(shí)現(xiàn),這些路由器必須增加一些能夠識(shí)別多播數(shù)據(jù)報(bào)的軟件。能夠運(yùn)行多播協(xié)議的路由器稱為多播路由器(multicast router)。多播路由器當(dāng)然也可以轉(zhuǎn)發(fā)普通的單播IP數(shù)據(jù)報(bào)。

在因特網(wǎng)上進(jìn)行多播就叫做IP多播。IP多播所傳送的分組需要使用多播IP地址,而一個(gè)主機(jī)有唯一的IP地址。如果某個(gè)主機(jī)想接受某個(gè)特定多播組的分組,那么怎么才能使這個(gè)多播數(shù)據(jù)報(bào)傳送到這個(gè)主機(jī)?
顯然,這個(gè)多播數(shù)據(jù)報(bào)的目的地址一定不能寫入這個(gè)主機(jī)的IP地址。這是因?yàn)樵谕粫r(shí)間可能有成千上萬個(gè)主機(jī)加入到同一個(gè)多播組。多播數(shù)據(jù)報(bào)不可能在其首部寫入這樣多的主機(jī)的IP地址。在多播數(shù)據(jù)報(bào)的目的地址寫入的是多播組的標(biāo)識(shí)符,然后設(shè)法讓加入到這個(gè)多播組的主機(jī)的IP地址與多播組的標(biāo)識(shí)符關(guān)聯(lián)起來。
其實(shí)多播組的標(biāo)識(shí)符就是IP地址中的D類地址,我們用每一個(gè)D類地址標(biāo)識(shí)一個(gè)多播組。它是“盡最大努力交付”,不保證一定能夠交付給多播組內(nèi)的所有成員。因此,多播數(shù)據(jù)報(bào)和一般的IP數(shù)據(jù)報(bào)的區(qū)別就是它使用D類IP地址作為目的地址,并且首部中的協(xié)議字段值是2,表明使用IGMP協(xié)議。
顯然,多播地址只能用于目的地址,而不能用于源地址。此外,對(duì)多播數(shù)據(jù)報(bào)不產(chǎn)生ICMP差錯(cuò)報(bào)文。因此,若在PING命令后面鍵入多播地址,將永遠(yuǎn)不會(huì)收到響應(yīng)。
D類地址中有一些不能隨意使用,因?yàn)橛械牡刂芬呀?jīng)被IANA指派為永久組地址了。
IP多播可分為兩種,一種是只在本局域網(wǎng)上進(jìn)行硬件多播,另一種則是在因特網(wǎng)的范圍進(jìn)行多播。前一種比較簡(jiǎn)單,但很重要,因?yàn)楝F(xiàn)在大部分主機(jī)都是通過局域網(wǎng)接入因特網(wǎng)的。在因特網(wǎng)上進(jìn)行多播的最后階段,還是要把多播數(shù)據(jù)報(bào)在局域網(wǎng)上用硬件多播交付給多播組的所有成員(看圖b)。下面討論硬件多播。
2.在局域網(wǎng)上進(jìn)行硬件多播
因特網(wǎng)號(hào)碼指派局IANA擁有的以太網(wǎng)地址塊的高24位為00-00-5E,因此TCP/IP協(xié)議使用的以太網(wǎng)多播地址塊的范圍是從00-00-5E-00-00-00到00-00-5E-FF-FF-FF。在3.4.3講過,以太網(wǎng)硬件地址字段中的第1字節(jié)的最低位為1時(shí)即為多播地址,這種多播地址數(shù)占IANA分配到的地址數(shù)的一半。因此IANA擁有的以太網(wǎng)多播地址的范圍是從01-00-5E-00-00-00到01-00-5E-7F-FF-FF。不難看出,在每一個(gè)地址中,只有23位可用作多播。這只能和D類IP地址中的23位有一一對(duì)應(yīng)的關(guān)系。D類IP地址可供分配的有28位,可見在這28位中的前5位不能用來構(gòu)成以太網(wǎng)硬件地址。由于多播IP地址與以太網(wǎng)硬件地址的映射關(guān)系不是唯一的,因此收到多播數(shù)據(jù)報(bào)的主機(jī),還要在IP層利用軟件進(jìn)行過濾,把不是本主機(jī)要接收的數(shù)據(jù)報(bào)丟棄。

下面討論IP多播所需要的協(xié)議。
3.網(wǎng)際組管理協(xié)議IGMP和多播路由選擇協(xié)議
Ⅰ、IP多播需要兩種協(xié)議
看下圖,標(biāo)有IP地址的四個(gè)主機(jī)都參加了一個(gè)多播組,其組地址是226.15.37.123。顯然,多播數(shù)據(jù)報(bào)應(yīng)當(dāng)傳送到路由器R1,R2,R3,而不應(yīng)當(dāng)傳送到R4,因?yàn)榕cR4連接的局域網(wǎng)上現(xiàn)在沒有這個(gè)多播組的成員。但這些路由器又怎樣知道多播組的成員信息呢?這需要網(wǎng)際組管理協(xié)議IGMP(internet group management protocol)。

IGMP并非在因特網(wǎng)范圍內(nèi)對(duì)所有多播組成員進(jìn)行管理的協(xié)議,它不知道IP多播組包含的成員數(shù),也不知道這些成員都分布在哪些網(wǎng)絡(luò)上。它是讓連接在本地局域網(wǎng)上的多播路由器知道本局域網(wǎng)上是否有主機(jī)(嚴(yán)格講,是主機(jī)上的某個(gè)進(jìn)程)參加或退出了某個(gè)多播組。
顯然,僅有IGMP協(xié)議是不能完成多播任務(wù)的,連接在局域網(wǎng)上的多播路由器還必須和因特網(wǎng)上的其他多播路由器協(xié)同工作,以便把多播數(shù)據(jù)報(bào)用最小代價(jià)傳送給所有的組成員。這就需要使用多播路由選擇協(xié)議。它比單播路由選擇協(xié)議復(fù)雜得多。

舉例:看上圖,多播組①的成員有主機(jī)A,B,C,多播組②的成員有主機(jī)D,E,F(xiàn)。這些主機(jī)分布在三個(gè)網(wǎng)絡(luò)N1、N2、N3上。
路由器R不應(yīng)當(dāng)向網(wǎng)絡(luò)N3轉(zhuǎn)發(fā)多播組①的分組,因?yàn)榫W(wǎng)絡(luò)N3上沒有多播組①的成員。但是每一個(gè)主機(jī)可以隨時(shí)加入或離開一個(gè)分組。例如,主機(jī)G現(xiàn)在加入了多播組①。從這時(shí)起,路由器R就必須也向網(wǎng)絡(luò)N3轉(zhuǎn)發(fā)多播組①的分組。這就是說,多播轉(zhuǎn)發(fā)必須動(dòng)態(tài)地適應(yīng)多播組成員的變化(這時(shí)網(wǎng)絡(luò)拓?fù)洳⑽窗l(fā)生變化)。請(qǐng)注意,單播路由選擇通常是在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí)才需要更新路由。
再看一種情況。主機(jī)E和F都是多播組②的成員。當(dāng)E向F發(fā)送多播數(shù)據(jù)報(bào)時(shí),路由器R把這個(gè)多播數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到網(wǎng)絡(luò)N3。但當(dāng)F向E發(fā)送多播數(shù)據(jù)報(bào)時(shí),路由器R則把多播數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到網(wǎng)絡(luò)N2。如果路由器R收到來自主機(jī)A的多播數(shù)據(jù)報(bào)(A不是多播組②的成員,但也可向多播組發(fā)送多播數(shù)據(jù)報(bào)),那么路由器R就應(yīng)當(dāng)把多播數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到N2和N3。由此可見,多播路由器在轉(zhuǎn)發(fā)多播數(shù)據(jù)報(bào)時(shí),不能僅僅根據(jù)多播數(shù)據(jù)報(bào)中的目的地址,而是要考慮這個(gè)多播數(shù)據(jù)報(bào)從什么地方來和要到什么地方去。
還有一種情況。主機(jī)G沒有參加任何多播組,但G卻可向任何多播組發(fā)送多播數(shù)據(jù)報(bào)。例如,G可向多播組①和②發(fā)送多播數(shù)據(jù)報(bào)。主機(jī)G所在的局域網(wǎng)上可以沒有任何多播組的成員。顯然,多播數(shù)據(jù)報(bào)所經(jīng)過的許多網(wǎng)絡(luò),也不一定非要有多播組成員??傊?,多播數(shù)據(jù)報(bào)可以由沒有加入多播組的主機(jī)發(fā)出,也可以通過沒有組成員接入的網(wǎng)絡(luò)。
所以,IP多播復(fù)雜了。
Ⅱ、網(wǎng)際組管理協(xié)議IGMP
和ICMP相比,IGMP使用IP數(shù)據(jù)報(bào)傳遞其報(bào)文(即IGMP報(bào)文加上IP首部構(gòu)成了IO數(shù)據(jù)報(bào)),但它也向IP提供服務(wù)。因此,我們不把IGMP看成是一個(gè)單獨(dú)的協(xié)議,而是屬于整個(gè)網(wǎng)際協(xié)議IP的一個(gè)組成部分。
從概念上講,IGMP的工作可分為兩個(gè)階段:
第一階段:當(dāng)某個(gè)主機(jī)加入到新的多播組時(shí),該主機(jī)應(yīng)向多播組的多播地址發(fā)送一個(gè)IGMP報(bào)文,聲明自己要成為改組的成員。本地的多播路由器收到IGMP報(bào)文后,還要利用多播路由器選擇協(xié)議把這種組成員關(guān)系轉(zhuǎn)發(fā)給因特網(wǎng)上的其他多播路由器。
第二階段:組成員關(guān)系是動(dòng)態(tài)的。本地多播路由器要周期性地探尋本地局域網(wǎng)上的主機(jī),以便知道這些主機(jī)是否還繼續(xù)是組的成員。只要有一個(gè)主機(jī)對(duì)某個(gè)組響應(yīng),那么多播路由器就認(rèn)為這個(gè)組是活躍的。但一個(gè)組在經(jīng)過幾次的探尋后仍然沒有一個(gè)主機(jī)響應(yīng),多播路由器就認(rèn)為本網(wǎng)絡(luò)上的主機(jī)已經(jīng)都離開了這個(gè)組,因此也就不再把這個(gè)組的成員關(guān)系轉(zhuǎn)發(fā)給其他的多播路由器。
IGMP設(shè)計(jì)得很仔細(xì),避免了多播控制信息給網(wǎng)絡(luò)增加大量的開銷。采用的措施有如下:
(1)在主機(jī)和多播路由器之間的所有通信都是使用IP多播。只要有可能,攜帶IGMP報(bào)文的數(shù)據(jù)報(bào)都用硬件多播來傳送。因此在支持硬件多播的網(wǎng)絡(luò)上,沒有參加IP多播的主機(jī)不會(huì)收到IGMP報(bào)文。
(2)多播路由器在探詢組成員關(guān)系時(shí),只需要對(duì)所有的組發(fā)送一個(gè)請(qǐng)求信息的詢問報(bào)文,而不需要對(duì)每一個(gè)組發(fā)送一個(gè)詢問報(bào)文(雖然也允許對(duì)一個(gè)特定組發(fā)送詢問報(bào)文)。默認(rèn)的詢問速率是每125秒發(fā)送一次(通信量并不太大)。
(3)當(dāng)同一個(gè)網(wǎng)絡(luò)上連接有幾個(gè)多播路由器時(shí),它們能夠迅速和有效地選擇其中的一個(gè)來探詢主機(jī)的成員關(guān)系。因此,網(wǎng)絡(luò)上多個(gè)多播路由器并不會(huì)引起IGMP通信量的增大。
(4)在IGMP的詢問報(bào)文中有一個(gè)數(shù)值N,它指明一個(gè)最長(zhǎng)響應(yīng)時(shí)間(默認(rèn)值為10秒)。當(dāng)收到詢問時(shí),主機(jī)在0到N之間隨機(jī)選擇發(fā)送響應(yīng)所需經(jīng)過的時(shí)延。因此,若一個(gè)主機(jī)同時(shí)參加了幾個(gè)多播組,則主機(jī)對(duì)每一個(gè)多播組選擇不同的隨機(jī)數(shù)。對(duì)應(yīng)于最小時(shí)延的響應(yīng)最先發(fā)送。
(5)同一個(gè)組內(nèi)的每一個(gè)主機(jī)都要監(jiān)聽響應(yīng),只要有本組的其他主機(jī)先發(fā)送了響應(yīng),自己就可以不再發(fā)送響應(yīng)了。這樣就抑制了不必要的通信量。
多播路由器并不需要保留組成員關(guān)系的準(zhǔn)確記錄,因?yàn)橄蚓钟蚓W(wǎng)上的組成員轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)使用硬件多播。多播路由器只需知道網(wǎng)絡(luò)上是否還有一個(gè)主機(jī)是本組成員即可。對(duì)詢問報(bào)文實(shí)際上每一個(gè)組只有一個(gè)主機(jī)發(fā)送響應(yīng)。
如果一個(gè)主機(jī)上有多個(gè)進(jìn)程都加入了某個(gè)多播組,那么這個(gè)主機(jī)對(duì)發(fā)送給這個(gè)多播組的每個(gè)多播數(shù)據(jù)報(bào)只接收一個(gè)副本,然后給主機(jī)中的每一個(gè)進(jìn)程發(fā)送一個(gè)本地復(fù)制的副本。
強(qiáng)調(diào)指出,多播數(shù)據(jù)報(bào)的發(fā)送者和接受者都不知道(也無法找出)一個(gè)多播組的成員有多少,以及這些成員是哪些主機(jī)。因特網(wǎng)中的路由器和主機(jī)都不知道那個(gè)應(yīng)用進(jìn)程將要向哪個(gè)多播器發(fā)送多播數(shù)據(jù)報(bào),因?yàn)槿魏螒?yīng)用進(jìn)程都可以在任何時(shí)候向任何一個(gè)多播組發(fā)送多播數(shù)據(jù)報(bào),而這個(gè)應(yīng)用進(jìn)程并不需要加入這個(gè)多播組。
Ⅲ、多播路由選擇協(xié)議
在多播過程中一個(gè)多播組中的成員是動(dòng)態(tài)變化的,例如在收聽網(wǎng)上某個(gè)廣播節(jié)目時(shí),隨時(shí)會(huì)有主機(jī)加入或離開這個(gè)多播組。多播路由選擇實(shí)際上就是要找出以源主機(jī)為根節(jié)點(diǎn)的多播轉(zhuǎn)發(fā)樹。在多播轉(zhuǎn)發(fā)樹上,每一個(gè)多播路由器向樹的葉節(jié)點(diǎn)方向轉(zhuǎn)發(fā)收到的多播數(shù)據(jù)報(bào),但在多播轉(zhuǎn)發(fā)樹上的路由器不會(huì)收到重復(fù)的多播數(shù)據(jù)報(bào)(即多播數(shù)據(jù)報(bào)不應(yīng)在互聯(lián)網(wǎng)中兜圈子)。不難看出,對(duì)不同的多播組對(duì)應(yīng)于不同的多播轉(zhuǎn)發(fā)樹。同一個(gè)多播組,對(duì)不同的源點(diǎn)也會(huì)有不同的轉(zhuǎn)發(fā)樹。
多播路由選擇協(xié)議在轉(zhuǎn)發(fā)多播數(shù)據(jù)報(bào)時(shí)采用了以下三種辦法:
(1)洪泛與剪除
適合于較小的多播組,而所有的組成員接入的局域網(wǎng)也是相鄰接的。一開始,路由器轉(zhuǎn)發(fā)多播數(shù)據(jù)報(bào)使用洪泛的方法。為了避免兜圈子,采用了反向路徑廣播RPB(reverse path broadcasting)的策略。它要點(diǎn)是:每一個(gè)路由器在收到一個(gè)多播數(shù)據(jù)報(bào)時(shí),先檢查數(shù)據(jù)報(bào)是否從源點(diǎn)經(jīng)最短路徑傳送過來的。進(jìn)行這種檢查很容易,只要從本路由器尋找到源點(diǎn)的最短路徑上(之所以叫做反向路徑,因?yàn)樵谟?jì)算最短路徑時(shí)是把源點(diǎn)當(dāng)作終點(diǎn))的第一個(gè)路由器是否就是剛才把多播數(shù)據(jù)報(bào)傳送過來的路由器。若是,就向所有其他方向轉(zhuǎn)發(fā)剛才收到的多播數(shù)據(jù)報(bào)(但進(jìn)入的方向除外),否則就丟棄而不轉(zhuǎn)發(fā)。如果本路由器又好幾個(gè)相鄰路由器都處在到源點(diǎn)的最短路徑上(也就是說,存在幾條同樣長(zhǎng)度的最短路徑),那么只能選擇一條最短路徑,選擇的準(zhǔn)則就是看這幾條最短路徑中的相鄰路由器誰的IP地址最小。

(2)隧道技術(shù)
適用于多播組的位置在地理上很分散的情況。R1對(duì)多播數(shù)據(jù)報(bào)進(jìn)行再次封裝,即再加上普通數(shù)據(jù)報(bào)首部,使之成為向單一目的站發(fā)送的單播數(shù)據(jù)報(bào),然后通過“隧道”從R1發(fā)送到R2。這種使用隧道技術(shù)傳送數(shù)據(jù)報(bào)又叫做IP中的IP(IP-in-IP)。

(3)基于核心的發(fā)現(xiàn)技術(shù)
對(duì)于多播組的大小在較大范圍內(nèi)變化時(shí)都適合。它是對(duì)每一個(gè)多播組G指定一個(gè)核心路由器,給出它的IP單播地址。核心路由器按照前面講過的方法創(chuàng)建出對(duì)應(yīng)于多播組G的轉(zhuǎn)發(fā)樹。如果有一個(gè)路由器R1向這個(gè)核心路由器發(fā)送數(shù)據(jù)報(bào),那么它在途中經(jīng)過的每一個(gè)路由器都要檢查其內(nèi)容。當(dāng)數(shù)據(jù)報(bào)到達(dá)參加了多播組G的路由器R2時(shí),R2就處理這個(gè)數(shù)據(jù)報(bào)。如果R1發(fā)出的是一個(gè)多播數(shù)據(jù)報(bào),其目的地址是G的組地址,R2就向多播組G的成員轉(zhuǎn)發(fā)這個(gè)多播數(shù)據(jù)報(bào)。如果R1發(fā)出的數(shù)據(jù)報(bào)是一個(gè)請(qǐng)求加入多播組G的數(shù)據(jù)報(bào),R2就把這個(gè)信息加到它的路由中,并用隧道技術(shù)向R1轉(zhuǎn)發(fā)每一個(gè)多播數(shù)據(jù)報(bào)的一個(gè)副本。這樣,參加到多播組G的路由器就從核心向外增多了,擴(kuò)大了多播轉(zhuǎn)發(fā)樹的覆蓋范圍。
多播路由選擇協(xié)議:
(1)距離向量多播路由選擇協(xié)議DVMRP(distance vector multicast routing protocol)
(2)基于核心的轉(zhuǎn)發(fā)樹CBT(core basted tree)
使用核心路由器作為轉(zhuǎn)發(fā)樹的根節(jié)點(diǎn)。一個(gè)大的自治系統(tǒng)AS可劃分為幾個(gè)區(qū)域,每一個(gè)區(qū)域選擇一個(gè)核心路由器。
(3)開放最短通路優(yōu)先的多播擴(kuò)展MOSPF(multicast extensions to OSPF)
是OSPF的擴(kuò)充。它使用多播鏈路狀態(tài)路由選擇創(chuàng)建出基于源點(diǎn)的多播轉(zhuǎn)發(fā)樹。
(4)協(xié)議無關(guān)多播-稀疏方式PIM-SM(protocol independent multicast-space mode)
使用和CBT同樣的方法構(gòu)成多播轉(zhuǎn)發(fā)樹,采用“協(xié)議無關(guān)”是強(qiáng)調(diào):雖然在建立多播轉(zhuǎn)發(fā)樹時(shí)是使用單播數(shù)據(jù)報(bào)來和遠(yuǎn)程路由器來聯(lián)系,但這并不要求使用特定的單播路由選擇協(xié)議。這個(gè)協(xié)議適用于組成員的分布非常分散的情況。
(5)協(xié)議無關(guān)多播-密集方式PIM-DM(protocol independent multicast-dense mode)
適用于組成員的分布非常集中的情況,例如組成員都在一個(gè)機(jī)構(gòu)內(nèi)。不使用核心路由器,而使用洪泛方式轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)。