五、因特網的路由選擇協議
1.有關路由選擇協議的幾個基本概念
Ⅰ、理想的路由算法
路由表中的路由是怎樣得出的呢?核心是路由算法。一個理想的路由算法要正確且完整、計算簡單、能適應通信量和網絡拓撲的變化、算法要有穩定性、公平、最佳(這里指相對于某一種特定要求下得出的較為合理的選擇)。
路由選擇是復雜的,因為它是網絡中的所有結點共同協調工作的結果,而且環境一直在變,可能發生擁堵。這樣很難從網絡中的各結點獲得所需的路由選擇信息。
靜態路由選擇策略:也叫非自適應路由選擇,簡單、開銷小、但不能及時適應網絡狀態的變化,適應于簡單的小網絡
動態路由選擇策略:也叫自適應路由選擇,能較好適應網絡狀態變化,但實現復雜、開銷大。
Ⅱ、分層次的路由選擇協議
因特網采用的路由選擇協議主要是自適應的、分布式的。分層原因:①因特網大,路由表大,處理起來耗時;②許多單位不愿意外界了解自己單位網絡的布局細節。
于是因特網將整個互聯網劃分為許多較小的自治系統(autonomous system),記為AS。AS經典定義是在單一技術管理下的一組路由器,而這些路由器使用一種AS內部的路由選擇協議和共同的度量以確定分組在該AS內的路由,同時還用一種AS之間的路由選擇協議用以確定分組在AS之間的路由。一個AS對其他AS表現出的是一個單一的和一致的路由選擇策略。
(1)內部網關協議IGP(interior gateway protocol):與外部無關,多用RIP、OSRF,自治系統之間的路由選擇也叫域內路由選擇。
(2)外部網關協議EGP(external gateway protocol):若源主機和目的主機處在不同自治系統中(這兩個自治系統可使用不同的網關協議),當數據報傳到一個自治系統的邊界時,就需要使用一種協議將路由器選擇信息傳遞到另一個自治系統中,這樣的協議就是外部網關協議EGP。自治系統之間的路由選擇也叫域間路由選擇。多用BGP(外界網關協議BGP,border gateway protocol)。
2.內部網關協議RIP
Ⅰ、工作原理
路由信息選擇協議RIP(routing information protocol)是內部網關協議IGP中最先得到廣泛使用的協議,是一種分布式的基于距離向量的路由選擇協議,是因特網的標準協議,其最大優點是簡單。
要求網絡中的每一個路由器都要維護從它自己到其他每一個目的網絡的距離記錄。從一路由器到直接連接的網絡的距離定義為1,從一路由器到非直接連接的網絡的距離定義為所經過的路由器加1。也有定義:到直接連接的網絡的距離為0。距離也稱跳數(hop count)。
RIF協議和哪些路由器交換信息——僅和相鄰路由器交換信息
交換什么信息?——交換信息是當前本路由器所知道的全部信息,即自己的路由表。即:我到本自治系統中所有網絡的(最短)距離,以及到每個網絡應經過的下一跳路由器。
什么時候交換信息?——按固定的時間間隔交換路由信息。如每隔30s,或者網絡拓撲發生變化時。
它主要信息是什么?——到達某個網絡的距離(即最短距離),以及應經過的下一跳地址。更新原則是找到每個目的網絡的最短距離,這種更新算法又稱為距離向量算法。
路由器只知道直接連接的網絡的距離,接著每一個路由器也只和數目非常有限的相鄰路由器交換并更新路由信息,這樣多次以后,所有路由器知道到達本自治系統中任何一個網絡的最短距離和下一跳路由器的地址。它有點像市場里聒噪的人,但又收斂,即在自治系統中所有的結點都得到正確的路由選擇信息的過程。
Ⅱ、距離向量算法
(1)對每一個相鄰路由器發送過來的RIP報文,先修改此報文中的所有項目:把“下一跳”字段中的地址都改為X,并把所有的“距離”字段的值加1。每一個項目都有三個關鍵數據,即:到目的網絡N,距離是d,下一跳路由器是X。
[這樣做原因——便于進行本路由的更新,假設從位于地址X的相鄰路由器發來的RIP報文的某一個項目是:“Net2,3,Y”,意思是“我經過路由器Y到網絡Net2的距離是3”,那么本路由器就可推斷出:“我經過X到網絡Net2的距離應為3+1=4”。于是,本路由器就把收到的RIP報文的這一個項目修改為“Net2,4,X”,作為下一步和路由器原有項目進行比較時使用(只有比較后才知道是否需要更新)。]
(2)對修改后的RIP報文中的每一個項目,進行一下步驟:
若原來路由表中沒有目的網絡N,則把該項目添加到路由表中。
[這樣做的目的——表明這是新的目的網絡,應當加入到路由器中。]
否則(即在路由表中有目的網絡N,這時就再查看下一跳路由器地址)
若下一跳地址路由器地址是X,則把收到的項目替換原路由表中的項目。
[替換的目的——這是最新的消息,要以最新的消息為準。到目的網絡的距離有可能增大或減小,但有可能沒有改變。]
否則(即這個項目是:到目的網絡N,但下一跳路由器不是X)
若收到的項目中的距離d小于路由器中的距離,則進行更新。
[這樣做的目的——使距離最短]
否則什么也不做。
[這樣做的原因——若距離更大了,顯然不應更新。若距離不變,更新后得不到好處,因此也不更新。]
(3)若3分鐘還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達的路由器,則把距離置為16(距離為16表示不可達)。
(4)返回。
上述算法基礎:Bellman-Ford算法。設X是結點A到B的最短路徑上的一個結點,若把路徑A→B拆成兩段路徑A→X和X→B,則每一段路徑A→X和X→B也都分別是結點A到X和結點X到B的最短路徑。
Ⅲ、舉例
R6收到相鄰路由器R4發來的路由更新信息,現在更新R6的路由表。
解:如同路由器一樣,我們不需要知道該網絡的拓撲。先把距離加1,并把下一跳路由器都改為R4,得出下表:
把這個表和a比較。第一行在a中沒有,就添加到a中。第二行的Net2在表中有,且下一跳路由器也是R4,因此要更新(距離增大了)。第三行的Net3在a中有,但下一跳路由器不同,于是比較距離,新的路由信息的距離是2,小于原來表中的4,因此要更新。這樣更新后的R6的路由表如下:
RIP協議讓一個自治系統中的所有路由器都和自己的相鄰路由器定期交換路由信息,并不斷更新其路由表,使得從每一個路由器到每一個目的網絡的路由都是最短的(即跳數最少)。這里還應注意:雖然所有的路由器最終都擁有了整個自治系統的全局路由信息,但由于每一個路由器的位置不同,它們的路由表當然也是不同的。
Ⅳ、RIP協議的報文格式
較新版本是RIF2,可支持變長子網掩碼和CIDR,還提供簡單的鑒別過程支持多播。RIF2和RIF1的首部相同,但后面的路由部分不一樣,它使用運輸層的用戶數據報UDP進行傳送(使用UDP的端口520)。
解釋:命令字段指出報文意義,1表示請求路由信息,2表示對請求路由信息的響應或未被請求而發出的路由更新報文。首部后面“必為0”是為了4字節字的對齊。地址族標識符(又稱為地址類別)字段用來標志所使用的地址協議。如采用IP地址就令這個字段的值為2(原來考慮RIP也可用于其他非TCP/IP協議的情況)。路由標記填入自治系統號ASN(autonomous system number),這是考慮使RIP有可能收到本自治系統以外的路由選擇信息。
一個報文最多可包括25個路由,因而RIP報文的最大長度是4+20*25=504字節。如超過,必須再用一個RIP報文來傳送。
鑒別功能時報文怎么變?——把原來寫入第一個路由信息(20字節)的位置用作鑒別,這時應將地址族標識符置為全1,而路由標記寫入鑒別類型,剩下的16字節為鑒別數據。在鑒別數據之后才寫入路由信息,但這時最多只能再放入24個路由信息。
Ⅴ、評價
缺點——當網絡出現故障時,要經過很長時間才能將此信息傳送到所有的路由器。好消息傳播得快,而壞消息傳播得慢。舉例如下:
在R1將“1,16,直接”傳遞到R2之前,有30s,然而R2可能已經把自己的路由表信息發送給了R1。R1收到后誤認為R2可能到達網1,所以把路由信息修改為“1,3,R2”,表明“我到網1的距離是3,下一跳經過R2”,并把更新的信息發送給R2。等等。
為使壞消息傳播得更快,可以讓路由器記錄收到某特定路由信息的接口,而不讓同一路由信息再通過此接口向反方向傳送。
優點:實現簡單,開銷小
缺點:①RIF限制了網絡的規模,它能使用的最大距離為15(16表示不可達)
②路由器間交換的路由信息是路由器中的完整路由表,因而隨著網絡規模的擴大,開銷也就增加。
③壞消息傳播得慢,使更新過程的收斂時間過長。
3.內部網關協議OSPF
Ⅰ、OSPF協議的基本特點
名字:最短路徑優先OSPF(open shortest path first),使用了Dijkstra提出的最短路徑算法SPF。它不表示其他的路由選擇協議不是“最短路徑優先”。實際上,所有自治系統內部使用的路由選擇協議(包括RIF協議)都是要尋找一條最短的路徑。
最主要特征——使用分布式的鏈路狀態協議(link state protocol),而不是像RIF那樣的距離向量協議。
和RIP相比的特點:
如何發送信息?——向本自治系統中所有路由器發送信息。這里用洪泛法,路由器通過所有輸出端口向所有相鄰的路由器發送信息,而每一個相鄰路由器又將此信息發往其所有的相鄰路由器(但不再發送給剛剛發來信息的那個路由器)。這樣,最終整個區域中所有的路由器都得到了這個信息的一個副本。而RIP只是向自己相鄰的幾個路由器發送信息。
發送什么信息?——與本路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分信息。所謂“鏈路狀態”就是說明本路由器都和哪些路由器相鄰,以及該鏈路的“度量”(表示費用、距離、時延、帶寬等)。
什么時候發送信息?——當鏈路狀態發生變化時,而RIP是定期交換路由表的信息。它優點是更新過程收斂得快。
各路由器頻繁交換鏈路狀態信息,所以所有的路由器最終都能建立一個鏈路狀態數據庫(link-state database),這個數據庫實際上就是全網的拓撲結構圖,這個拓撲結構圖在全網范圍內是一致的(這稱為鏈路狀態數據庫的同步),于是每個路由器都能使用鏈路狀態數據庫中的數據,構造出自己的路由表(使用Dijkstra的最短路徑路由算法)。而RIP協議的每一個路由只知道所有網絡的距離以及下一跳路由器,但卻不知道全網的拓撲結構。
Ⅱ、劃分區域
劃分原因:為使OSPF能夠用于規模更大的網絡,它將一個自治系統再劃分為若干個更小的范圍,叫作區域。每個區域都有一個32位的區域標識符(點分十進制表示)。一個區域不要太大,在一個區域內的路由器最好不超過200個。
區域內部通信——利用洪泛法交換鏈路狀態信息的范圍局限于每一個區域而不是整個的自治網絡,這樣大大減少了通信量。一個區域內的路由器只知道本區域的完整網絡拓撲,而不知道其他區域的網絡拓撲結構。
區域間如何通信?——OSPF使用層次結構的區域劃分。上層的區域叫作主干區域(backhome area),主干區域的標識符規定為0.0.0.0,它是用來連通其他在下層的區域,從其他區域來的信息都由區域邊界路由器進行概括,R3,R4,R7都是區域邊界路由器。每一個區域至少有一個區域邊界路由器。主干區域內的路由器叫作主干路由器,如R3,R4,R5,R6,R7。一個主干路由器可以同時是區域邊界路由器。在主干路由器內還要有一個路由器專門和本自治系統外的其他自治系統交換路由信息。這樣的路由器叫作自治系統邊界路由器(如R6)。
區域劃分優點?——使交換信息的種類增多了,但協議復雜了。每一個區域內部交換路由信息的通信量大大減小,這樣使OSPF協議能夠用于規模很大的自治系統中。
Ⅲ、OSPF直接用IP數據報傳送(而不是UDP)
原因——構成的數據報很短,能減少路由信息的通信量。還不必將長的數據報分片傳送,分片傳送的數據報只要丟失一個,就無法組裝成原來的數據報,而真個數據報就必須重傳。
版本:當前版本號是2。
類型:五種類型分組中的一種。
分組長度:包括OSPF首部在內的分組長度,以字節為單位。
路由器標識符:標志發送該分組的路由器的接口的IP地址。
區域標識符:分組屬于的區域的標識符。
檢驗和:用來檢測分組中的差錯。
鑒別類型:目前只有兩種,0(不用)和1(口令)。
鑒別:類型為0時就填入0,為1時就填入8個字符的口令。
OSPF的其他特點:
①靈活性:對不同的鏈路可根據IP分組的不同服務類型(TOS)而設置成不同的代價,它對于不同類型的業務可計算出不同的路由。這是RIP沒有的。
②負載平衡:如果到同一個目的網絡有多條相同代價的路徑,那么可以將通信量分配給這幾條路徑。在代價相同的多條路徑上分配通信量是通信量工程中的簡單形式。而RIP只能找到某個網絡的一條路徑。
③所有OSPF路由器之間交換的分組都具有鑒別的功能,因而保證了僅在可信賴的路由器之間交換鏈路狀態信息。
④支持可變長度的子網劃分和無分類的編址CIDR。
⑤由于網絡中的鏈路狀態可能經常發生變化,因此OSPF讓每一個鏈路狀態都帶上一個32位的序號,序號越大狀態就越新。
Ⅳ、OSPF的五種分組類型
類型一:問候(hello)分組。用來發現和維持鄰站的可達性
類型二:數據庫描述(database description)分組。向鄰站給出自己的鏈路狀態數據庫中的所有鏈路狀態項目的摘要信息。
類型三:鏈路狀態請求(link state request)分組。向對方請求發送某些鏈路狀態項目的詳細信息。
類型四:鏈路狀態更新(link state update)分組。用洪泛法對全網更新鏈路狀態。這種分組復雜、核心。路由器用這種分組將其鏈路狀態通知給鄰站。共有五種不同的鏈路狀態。
類型五:鏈路狀態確認(link state acknowledgment)分組。對鏈路更新分組的確認。
問候分組的用處——OSPF規定每兩個相鄰路由器每隔10秒鐘要交換一次問候分組,這樣就能確知哪些鄰站是可達的。只有可達才能將鄰站的鏈路狀態信息存入鏈路狀態數據庫。若有40秒未收到鄰路由器發來的問候分組,則認為該鄰站是不可達的,應立即修改鏈路狀態數據庫,并重新計算路由表。
其他四種分組都是用來進行鏈路狀態數據庫的同步。同步是指不同路由器的鏈路狀態數據庫的內容是一樣的。兩個同步的路由器叫作“完全鄰接的”(fully adjacent)路由器。不是完全鄰接的路由器表明它們雖然在物理上是相鄰的,但其鏈路狀態數據庫并沒有達到一致。
其他四種分組用來進行鏈路狀態數據庫同步的原因?
①一個路由器開始工作時,它只能通過問候分組得知它有哪些相鄰的路由器在工作,以及將數據發往相鄰路由器所需的“代價”。如果所有路由器都把自己的本地鏈路狀態信息對全網進行廣播,那么各路由器只要將這些鏈路狀態信息綜合起來就可得出鏈路狀態數據庫。但這樣開銷太大。
②所以,OSPF讓每一個路由器用數據庫描述分組和相鄰路由器交換本數據庫中已有的鏈路狀態摘要信息。摘要信息主要就是指出有哪些路由器的鏈路狀態信息已經寫入了數據庫。經過與相鄰路由器交換數據庫描述分組后,路由器就使用鏈路狀態請求分組,向對方請求發送自己所缺少的某些鏈路狀態項目的詳細信息。通過一系列的這種分組交換,全網同步的數據鏈路數據庫就建立了。
在網絡運行的過程中,只要一個路由器的鏈路狀態發生變化,該路由器就要使用鏈路狀態更新分組,用洪泛法向全網更新鏈路狀態。OSPF用的是可靠的洪泛法。如下圖,小箭頭表示更新分組,空心箭頭表示確認分組。
?為確保鏈路狀態數據庫與全網的狀態保持一致,OSPF還規定每隔一段時間,如30分鐘,要刷新一次數據庫中的鏈路狀態。
由于一個路由器的鏈路狀態只涉及到與相鄰路由器的連通狀態,因而與整個互聯網的規模并無直接關系。因此當互聯網規模很大時,OSPF協議要比距離向量協議RIP好很多。它也沒有“壞消息傳播得慢”的問題。
若N個路由器連接在一個以太網上,則每個路由器要向其他(N—1)個路由器發送鏈路狀態信息,因而共有(N—1)^2個鏈路狀態要在這個以太網上傳送。OSPF協議對這種多點接入的局域網采用了指定的路由器的方法,使廣播的信息量大大減少。指定的路由器代表該局域網上所有的鏈路向連接到該網絡上的各路由器發送狀態信息。
4.外部網關協議BGP
Ⅰ、背景
BGP是不同AS的路由器之間交換路由信息的協議。那不同AS之間的路由選擇為什么不用內部網關協議?
內部網關協議主要是設法使數據報在一個AS中盡可能有效地從源站傳送到目的站。在一個AS內部也不需要考慮其他方面的策略。然而BGP使用的環境卻不同。這是因為:
①因特網的規模太大,使得AS之間路由選擇非常困難。
原因有兩點,一點是連接在因特網主干上的路由器,必須對任何有效的IP地址都能在路由表中找到匹配目的的網絡。而主干路由器中,一個路由器的項目數早已超過了5萬個網絡前綴。如果使用鏈路狀態協議,則每一個路由器必須維持一個河大的鏈路狀態數據庫。對于這樣大的主干網用Dijkstra算法計算最短路徑時花費的時間也太長。
另一點是,AS各自運行自己選定的內部路由選擇協議,并使用本AS指明的路徑度量,因此,當一條路徑通過幾個不同AS時,要想對這樣的路徑計算出有意義的代價是不太可能的。比如,對某AS來說,代價為1000可能表示一條比較長的路由,但對另一AS代價為1000卻不可能表示不可接受的壞路由。因此,對于AS之間的路由選擇,要用“代價”作為度量來尋找最佳路由也是很不現實的。比較合理的做法是在AS之間交換“可達性”信息。例如,告訴相鄰路由器:“到達目的網絡N可經過ASx”。
②AS之間的路由選擇必須考慮有關政策。
比如AS1要發數據報給AS2,本來最好是經過AS3,但是AS3不愿意讓這些數據報經過本AS的網絡。又比如,僅在到達某些地址時才經過ASx。
于是,邊界網關協議BGP只能是力求尋找一條能夠到達目的網絡且比較好的路由(不能兜圈子),而并非要尋找一條最佳路由。BGP采用了路徑向量(path ?vector)路由選擇協議,它與距離向量協議和鏈路狀態選擇協議都有很大區別。
Ⅱ、路徑向量選擇協議
在配置BGP時,每一個AS的管理員要選擇至少一個路由器作為該AS的“BGP發言人”。一般說來,兩個BGP發言人是通過一個共享網絡連接在一起的,而BGP發言人往往就是BGP邊界路由器,但也可以不是BGP邊界路由器。
一個BGP發言人與其他AS的BGP發言人要交換路由信息,就要先建立TCP連接,然后在此連接上交換BGP報文以建立BGP會話(session),利用BGP會話交換路由信息,如增加了新的路由,或撤銷過時的路由,以及報告出差錯的情況等等。使用TCP連接能提供可靠的服務,也簡化了路由選擇協議。使用TCP連接交換路由信息的兩個BGP發言人,彼此成為對方的鄰站(neighbor)或對等站(peer)。每一個BGP發言人除了必須運行BGP協議外,還必須運行該AS所使用的內部網關協議,如OSPF或RIP。
BGP所交換的網絡可達性的信息就是要到達某個網絡(用網絡前綴表示)所要經過的一系列AS。當BGP發言人互相交換了網絡可達性的信息后,各BGP發言人就根據所采用的策略從收到的路由信息中找出到達各AS的較好路由。下圖是上圖AS1上的一個BGP發言人構造出的AS連通圖,它是樹形結構,不存在回路。
因特網的多級結構的網絡拓撲決定了BGP路由選擇協議的特點。看下圖,自治系統AS2的BGP發言人通知主干網的BGP發言人:“要到達網絡N1,N2,N3和N4,可經過AS2。”主干網在收到這個通知后,就發出通知:“要到達網絡N1,N2,N3和N4可沿路徑(AS1,AS2)?!蓖恚鞲删W還可以發出通知:“要到達網絡N5,N6和N7可沿路徑(AS1,AS3)。”
從上面的討論可以看出,BGP協議交換路由信息的結點數量級是自治系統AS數的量級,這要比這些AS中的網絡數少很多。要在許多AS之間尋找一條較好的路徑,就是要尋找正確的BGP發言人(或邊界路由器),而在每一個AS中BGP發言人(或邊界路由器)的數目是很少的。這就使得AS之間的路由選擇不致過分復雜。
BGP支持CIDR,因此BGP的路由表也就應當包括目的網絡前綴、下一跳路由器,以及到達該目的網絡所要經過的AS序列。由于使用了路徑向量的信息,就可以很容易地避免產生兜圈子的理由。如果一個BGP發言人收到了其他BGP發言人發來的路徑通知,它就要檢查一下本AS是否在此通知的路徑中。如果在這條路徑中,就不能采用這條路徑(因為會兜圈子)。
在BGP剛剛運行時,BGP的鄰站是交換整個的BGP路由表。但以后只需要在發生變化時更新有變化的部分。這樣做對節省網絡帶寬和減少路由器的處理開銷方面都有好處。
BGP—4的四種報文:OPEN(打開)報文,用來與相鄰的另一個BGP發言人建立關系,使通信初始化。UPDATE(更新)報文,用來通告某一路由的信息,以及列出要撤銷的多條路由。KEEPALIVE(?;顖笪模?/i>用來周期性地證實鄰站的連通性。NOTIFICATION(通知報文),用來發送檢測到的差錯。
若兩個鄰站屬于兩個不同AS,而其中一個鄰站打算和另一個鄰站定期地交換路由信息,這就應當有一個商談的過程(因為很可能對方路由器的負荷已很重因而不愿意再加重負擔)。因此,一開始向鄰站進行商談時就必須發送OPEN報文。如果鄰站接收這種鄰站關系,就用KEEPALIVE報文響應。這樣,兩個BGP發言人的鄰站關系就建立了。
一旦鄰站關系建立了,就要繼續維持這種關系。雙方中的每一方都要確信對方是存在的,且一直在保持這種鄰站關系。為此,這兩個BGP發言人彼此要周期性地交換KEEPALIVE報文(一般每隔30秒)。KEEPALIVE報文只有19字節長(只用BGP報文的首部),因此不會造成網絡上太大的開銷。
UPDATE報文是BGP協議的核心內容。BGP發言人可以用UPDATE報文撤銷它以前曾經通知過的路由,也可以宣布增加新的路由。撤銷路由可以一次撤銷許多條,但增加新路由時,每個更新報文只能增加一條。
BGP可以很容易解決距離向量路由選擇算法中的“壞消息傳播得慢”這一問題。當某個路由器或鏈路出故障時,由于BGP發言人可以從不止一個鄰站獲得路由信息,因此很容易選出新的路由。距離向量算法往往不能給出正確的選擇,是因為這些算法不能指出哪些鄰站到目的站的路由是獨立的。
Ⅲ、BGP報文的格式
通用首部分:
標記字段——鑒別收到的BGP報文(假定將來會有人發明出合理的鑒別方案),當不使用鑒別時,標記字段要置為全1。
長度字段——指出包括通用首部在內的整個BGP報文以字節為單位的長度,最小值是19,最大值是4096。
類型字段——值為1到4,分別對應于上述四種BGP報文中的一種。
OPEN報文:
共6字段,即版本(1字節,現在的值是4)、本自治系統號(2字節,使用全球唯一的16為自治系統號)、保持時間(2字節,以秒計算的保持為鄰站關系的時間)、BGP標識符(4字節,通常就是該路由器的IP地址)、可選參數長度(1字節)和可選參數。
UPDATE報文:
共有5個字段,即不可行路由長度(2字節,指明下一個字段的長度)、撤銷的路由(列出所有要撤銷的路由)、路徑屬性總長度(2字節,指明下一個字段的長度)、路徑屬性(定義在這個報文中增加的路徑的屬性)和網絡層可達性信息NLRI(network layer reachability information)。最后這個字段定義發出此報文的網絡,包括網絡前綴的位數、IP地址前綴。
KEEPALIVE報文:
只有BGP的19字節長的通用首部
NOTIFICATION報文:
有3個字段,即差錯代碼(1字節)、差錯子代碼(1字節)和差錯數據(給出有關差錯的診斷信息)。
5.路由器的構成
Ⅰ、路由器的結構、查找轉發表、轉發分組
是一種具有多個輸入端口和多個輸出端口的專用計算機,其任務是轉發分組。
整個路由器結構可劃分為兩大部分:路由選擇部分和分組轉發部分。
路由選擇部分:
也叫控制部分,核心構件是路由選擇處理機,其任務是根據所選定的路由選擇協議構造出路由表,同時經?;蚨ㄆ诘睾拖噜徛酚善鹘粨Q路由信息而不斷地更新和維護路由表。(如何根據路由選擇協議和更新路由表?)
分組轉發部分:
由三部分組成:交換結構、一組輸入端口和一組輸出端口(端口指硬件接口)。
交換結構——switching fabric,又稱交換組織,作用是根據轉發表(forwarding table)對分組進行處理,將某個輸入端口進入的分組從一個合適的輸出端口轉發出去。它本身是網絡,但又包含在路由器中,所以叫“路由器中的網絡”。
轉發和路由選擇區別——“轉發”就是路由器根據轉發表把收到的IP數據報從路由器合適的端口轉發出去,只涉及到一個路由器。但“路由選擇”則涉及到很多路由器,路由表則是許多路由器協同工作的結果。這些路由器按照復雜的路由算法,得出整個網絡的拓撲結構變化情況,因而能夠動態地改變所選擇的路由,并由此構造出整個的路由表。路由表一般僅包含從目的網絡到下一跳(用IP地址表示,后面寫)的映射,而轉發表是從路由表中得出的。轉發表包含完成轉發功能所必須的信息。這就是說,在轉發表的每一行必須包含從要到達的目的網絡到輸出端口和某些MAC地址信息(如下一跳的以太網地址)的映射。將轉發表和路由表用不同的數據結構實現會帶來一些好處,這是因為在轉發分組時,轉發表的結構應當使查找過程最優化,但路由表則需要對網絡拓撲變化的計算最優化。路由表總是用軟件實現的,但轉發表可以由特殊的硬件來實現。注意:在討論路由選擇原理時,往往不去區分轉發表和路由表的區別,而可以籠統地都使用路由表這一名詞。
輸入輸出端口——有三個方框,1、2、3分別代表物理層、數據鏈路層、網絡層的處理模塊。物理層進行比特幣的接收。數據鏈路層則按照鏈路層協議接收傳送分組的幀。在把幀的首部和尾部剝去后,分組就被送入網絡層的處理模塊。若接收到的分組是路由器之間交換路由信息的分組(如RIP或OSPF分組等),則把這種分組送交路由器的路由選擇部分中的路由選擇處理機。若收到的是數據分組,則按照分組首部中的目的地址查找轉發表,根據得出的結果,分組就經過交換結構到達合適的輸出端口。一個路由器的輸入端口和輸出端口就做在路由器的線路接口卡上。
輸入端口中的查找和轉發功能在路由器的交換功能中是最重要的。為了使交換功能分散化,往往把復制的轉發表放在每一個輸入端口中(如上圖中的虛線箭頭)。路由選擇處理機負責對各轉發表的副本進行更新。這些副本稱為“影子副本”(shadow copy)。分散化交換可以避免在路由器中的某一點上出現瓶頸。
Ⅱ、查找轉發表和轉發分組實現中的困難
上述已介紹了查找轉發表和轉發分組的概念。問題就在于路由器必須以很高的速率轉發分組,最理想的情況就是輸入端口的處理速率能夠跟上線路把分組傳送到路由器的速率。這種速率稱為線速(line speed或wire speed)。重點在于提高轉發表的速率。
看下圖,輸出端口從交換結構接收分組,然后把它們發送到路由器外面的線路上。在網絡層的處理模塊中設有一個緩沖區,實際上它就是一個隊列。當交換結構傳送過來的分組速率超過輸出鏈路的發送速率時,來不及發送的分組就必須暫時存放在這個隊列中。數據鏈路層處理模塊把分組加上鏈路層的首部和尾部,交給物理層后發送到外部線路。
若分組處理的速率趕不上分組進入隊列的速率,則隊列的存儲空間最終必定減少到零,這就使后面再進入隊列的分組由于沒有存儲空間而只能被丟棄。以前我們提到過的分組丟失就是發生在路由器中的輸入或輸出隊列產生溢出的時候。當然,設備或線路出故障也可能使分組丟失。
Ⅲ、交換結構
作用:將分組從一個輸入端口轉移到某個合適的輸出端口。
下面介紹三種常用的交換方法,它們都是將輸入端口I1收到的分組轉發到輸出端口O2。
(a)通過存儲器
最早使用的路由器就是利用普通的計算機,用計算機的CPU作為路由器的路由選擇處理機。路由器的輸入和輸出端口的功能和傳統的操作系統中的I/O設備一樣。當路由器的某個輸入端口收到一個分組時,就用中斷方式通知路由選擇處理機。然后分組就從輸入端口復制到存儲器中。路由器處理機從分組首部提取目的地址,查找路由表,再將分組復制到合適的輸出端口的緩存中。若存儲器的帶寬(讀或寫)為每秒M個分組,那么路由器的交換速率(即分組從輸入端口傳送到輸出端口的速率)一定小于M/2。這是因為存儲器對分組的讀和寫需要花費的時間是同一個數量級。
圖中,分組通過存儲器進行交換。與早期的路由器的區別就是,目的地址的查找和分組在存儲器中的緩存都是在輸入端口中進行的。
(b)通過總線
數據報從輸入端口通過共享的總線直接傳送到合適的輸出端口,而不需要路由選擇處理機的干預。但是,由于總線是共享的,因此在同一時間之能有一個分組在總線上傳送。當分組到達輸入端口時若發現總線忙(因為總線正在傳送另一個分組),則被阻塞而不能通過交換結構,并在輸入端口排隊等待。因為每一個要轉發的分組都要通過這一條總線,因此路由器的轉發帶寬就受總線速率的限制。
(c)通過互連網絡
它有2N條總線,可以使N個輸入端口和N個輸出端口相連接,這取決于相應的交叉結點是使水平總線和垂直總線連通還是斷開。當輸入端口收到一個分組時,就將它發送到與該輸入端口相連的水平總線上。若通向所要轉發的輸出端口的垂直總線是空閑的,則在這個結點將垂直總線與水平總線連通,然后將該分組轉發到這個輸出端口。但若該垂直總線已被占用(有另一個分組正在轉發到同一個輸出端口),則后到達的分組就被阻塞,必須在輸入端口排隊。
六、IP多播
1.IP多播的概念
圖a是視頻服務器用單播方式向90個主機傳送同樣的視頻節目。為此,需要發送90個單播,即同一個視頻分組要發送90個副本。路由器R1在轉發分組時,需要把收到的分組復制成3個副本,分別向R2、R3、R4各轉發1個副本。當分組到達目的局域網時,由于局域網具有硬件多播功能,因此不需要復制分組,在局域網上的多播組成員都能收到這個視頻分組。
圖b是視頻服務器用多播方式向同一個多播組的90個成員傳送節目。這時,視頻服務器只需把視頻分組當做多播數據報來發送,并且只需發送一次。主機很大時,能減輕網絡中各種資源的消耗。在因特網范圍的多播要靠路由器來實現,這些路由器必須增加一些能夠識別多播數據報的軟件。能夠運行多播協議的路由器稱為多播路由器(multicast router)。多播路由器當然也可以轉發普通的單播IP數據報。
在因特網上進行多播就叫做IP多播。IP多播所傳送的分組需要使用多播IP地址,而一個主機有唯一的IP地址。如果某個主機想接受某個特定多播組的分組,那么怎么才能使這個多播數據報傳送到這個主機?
顯然,這個多播數據報的目的地址一定不能寫入這個主機的IP地址。這是因為在同一時間可能有成千上萬個主機加入到同一個多播組。多播數據報不可能在其首部寫入這樣多的主機的IP地址。在多播數據報的目的地址寫入的是多播組的標識符,然后設法讓加入到這個多播組的主機的IP地址與多播組的標識符關聯起來。
其實多播組的標識符就是IP地址中的D類地址,我們用每一個D類地址標識一個多播組。它是“盡最大努力交付”,不保證一定能夠交付給多播組內的所有成員。因此,多播數據報和一般的IP數據報的區別就是它使用D類IP地址作為目的地址,并且首部中的協議字段值是2,表明使用IGMP協議。
顯然,多播地址只能用于目的地址,而不能用于源地址。此外,對多播數據報不產生ICMP差錯報文。因此,若在PING命令后面鍵入多播地址,將永遠不會收到響應。
D類地址中有一些不能隨意使用,因為有的地址已經被IANA指派為永久組地址了。
IP多播可分為兩種,一種是只在本局域網上進行硬件多播,另一種則是在因特網的范圍進行多播。前一種比較簡單,但很重要,因為現在大部分主機都是通過局域網接入因特網的。在因特網上進行多播的最后階段,還是要把多播數據報在局域網上用硬件多播交付給多播組的所有成員(看圖b)。下面討論硬件多播。
2.在局域網上進行硬件多播
因特網號碼指派局IANA擁有的以太網地址塊的高24位為00-00-5E,因此TCP/IP協議使用的以太網多播地址塊的范圍是從00-00-5E-00-00-00到00-00-5E-FF-FF-FF。在3.4.3講過,以太網硬件地址字段中的第1字節的最低位為1時即為多播地址,這種多播地址數占IANA分配到的地址數的一半。因此IANA擁有的以太網多播地址的范圍是從01-00-5E-00-00-00到01-00-5E-7F-FF-FF。不難看出,在每一個地址中,只有23位可用作多播。這只能和D類IP地址中的23位有一一對應的關系。D類IP地址可供分配的有28位,可見在這28位中的前5位不能用來構成以太網硬件地址。由于多播IP地址與以太網硬件地址的映射關系不是唯一的,因此收到多播數據報的主機,還要在IP層利用軟件進行過濾,把不是本主機要接收的數據報丟棄。
下面討論IP多播所需要的協議。
3.網際組管理協議IGMP和多播路由選擇協議
Ⅰ、IP多播需要兩種協議
看下圖,標有IP地址的四個主機都參加了一個多播組,其組地址是226.15.37.123。顯然,多播數據報應當傳送到路由器R1,R2,R3,而不應當傳送到R4,因為與R4連接的局域網上現在沒有這個多播組的成員。但這些路由器又怎樣知道多播組的成員信息呢?這需要網際組管理協議IGMP(internet group management protocol)。
IGMP并非在因特網范圍內對所有多播組成員進行管理的協議,它不知道IP多播組包含的成員數,也不知道這些成員都分布在哪些網絡上。它是讓連接在本地局域網上的多播路由器知道本局域網上是否有主機(嚴格講,是主機上的某個進程)參加或退出了某個多播組。
顯然,僅有IGMP協議是不能完成多播任務的,連接在局域網上的多播路由器還必須和因特網上的其他多播路由器協同工作,以便把多播數據報用最小代價傳送給所有的組成員。這就需要使用多播路由選擇協議。它比單播路由選擇協議復雜得多。
舉例:看上圖,多播組①的成員有主機A,B,C,多播組②的成員有主機D,E,F。這些主機分布在三個網絡N1、N2、N3上。
路由器R不應當向網絡N3轉發多播組①的分組,因為網絡N3上沒有多播組①的成員。但是每一個主機可以隨時加入或離開一個分組。例如,主機G現在加入了多播組①。從這時起,路由器R就必須也向網絡N3轉發多播組①的分組。這就是說,多播轉發必須動態地適應多播組成員的變化(這時網絡拓撲并未發生變化)。請注意,單播路由選擇通常是在網絡拓撲發生變化時才需要更新路由。
再看一種情況。主機E和F都是多播組②的成員。當E向F發送多播數據報時,路由器R把這個多播數據報轉發到網絡N3。但當F向E發送多播數據報時,路由器R則把多播數據報轉發到網絡N2。如果路由器R收到來自主機A的多播數據報(A不是多播組②的成員,但也可向多播組發送多播數據報),那么路由器R就應當把多播數據報轉發到N2和N3。由此可見,多播路由器在轉發多播數據報時,不能僅僅根據多播數據報中的目的地址,而是要考慮這個多播數據報從什么地方來和要到什么地方去。
還有一種情況。主機G沒有參加任何多播組,但G卻可向任何多播組發送多播數據報。例如,G可向多播組①和②發送多播數據報。主機G所在的局域網上可以沒有任何多播組的成員。顯然,多播數據報所經過的許多網絡,也不一定非要有多播組成員??傊?,多播數據報可以由沒有加入多播組的主機發出,也可以通過沒有組成員接入的網絡。
所以,IP多播復雜了。
Ⅱ、網際組管理協議IGMP
和ICMP相比,IGMP使用IP數據報傳遞其報文(即IGMP報文加上IP首部構成了IO數據報),但它也向IP提供服務。因此,我們不把IGMP看成是一個單獨的協議,而是屬于整個網際協議IP的一個組成部分。
從概念上講,IGMP的工作可分為兩個階段:
第一階段:當某個主機加入到新的多播組時,該主機應向多播組的多播地址發送一個IGMP報文,聲明自己要成為改組的成員。本地的多播路由器收到IGMP報文后,還要利用多播路由器選擇協議把這種組成員關系轉發給因特網上的其他多播路由器。
第二階段:組成員關系是動態的。本地多播路由器要周期性地探尋本地局域網上的主機,以便知道這些主機是否還繼續是組的成員。只要有一個主機對某個組響應,那么多播路由器就認為這個組是活躍的。但一個組在經過幾次的探尋后仍然沒有一個主機響應,多播路由器就認為本網絡上的主機已經都離開了這個組,因此也就不再把這個組的成員關系轉發給其他的多播路由器。
IGMP設計得很仔細,避免了多播控制信息給網絡增加大量的開銷。采用的措施有如下:
(1)在主機和多播路由器之間的所有通信都是使用IP多播。只要有可能,攜帶IGMP報文的數據報都用硬件多播來傳送。因此在支持硬件多播的網絡上,沒有參加IP多播的主機不會收到IGMP報文。
(2)多播路由器在探詢組成員關系時,只需要對所有的組發送一個請求信息的詢問報文,而不需要對每一個組發送一個詢問報文(雖然也允許對一個特定組發送詢問報文)。默認的詢問速率是每125秒發送一次(通信量并不太大)。
(3)當同一個網絡上連接有幾個多播路由器時,它們能夠迅速和有效地選擇其中的一個來探詢主機的成員關系。因此,網絡上多個多播路由器并不會引起IGMP通信量的增大。
(4)在IGMP的詢問報文中有一個數值N,它指明一個最長響應時間(默認值為10秒)。當收到詢問時,主機在0到N之間隨機選擇發送響應所需經過的時延。因此,若一個主機同時參加了幾個多播組,則主機對每一個多播組選擇不同的隨機數。對應于最小時延的響應最先發送。
(5)同一個組內的每一個主機都要監聽響應,只要有本組的其他主機先發送了響應,自己就可以不再發送響應了。這樣就抑制了不必要的通信量。
多播路由器并不需要保留組成員關系的準確記錄,因為向局域網上的組成員轉發數據報使用硬件多播。多播路由器只需知道網絡上是否還有一個主機是本組成員即可。對詢問報文實際上每一個組只有一個主機發送響應。
如果一個主機上有多個進程都加入了某個多播組,那么這個主機對發送給這個多播組的每個多播數據報只接收一個副本,然后給主機中的每一個進程發送一個本地復制的副本。
強調指出,多播數據報的發送者和接受者都不知道(也無法找出)一個多播組的成員有多少,以及這些成員是哪些主機。因特網中的路由器和主機都不知道那個應用進程將要向哪個多播器發送多播數據報,因為任何應用進程都可以在任何時候向任何一個多播組發送多播數據報,而這個應用進程并不需要加入這個多播組。
Ⅲ、多播路由選擇協議
在多播過程中一個多播組中的成員是動態變化的,例如在收聽網上某個廣播節目時,隨時會有主機加入或離開這個多播組。多播路由選擇實際上就是要找出以源主機為根節點的多播轉發樹。在多播轉發樹上,每一個多播路由器向樹的葉節點方向轉發收到的多播數據報,但在多播轉發樹上的路由器不會收到重復的多播數據報(即多播數據報不應在互聯網中兜圈子)。不難看出,對不同的多播組對應于不同的多播轉發樹。同一個多播組,對不同的源點也會有不同的轉發樹。
多播路由選擇協議在轉發多播數據報時采用了以下三種辦法:
(1)洪泛與剪除
適合于較小的多播組,而所有的組成員接入的局域網也是相鄰接的。一開始,路由器轉發多播數據報使用洪泛的方法。為了避免兜圈子,采用了反向路徑廣播RPB(reverse path broadcasting)的策略。它要點是:每一個路由器在收到一個多播數據報時,先檢查數據報是否從源點經最短路徑傳送過來的。進行這種檢查很容易,只要從本路由器尋找到源點的最短路徑上(之所以叫做反向路徑,因為在計算最短路徑時是把源點當作終點)的第一個路由器是否就是剛才把多播數據報傳送過來的路由器。若是,就向所有其他方向轉發剛才收到的多播數據報(但進入的方向除外),否則就丟棄而不轉發。如果本路由器又好幾個相鄰路由器都處在到源點的最短路徑上(也就是說,存在幾條同樣長度的最短路徑),那么只能選擇一條最短路徑,選擇的準則就是看這幾條最短路徑中的相鄰路由器誰的IP地址最小。
(2)隧道技術
適用于多播組的位置在地理上很分散的情況。R1對多播數據報進行再次封裝,即再加上普通數據報首部,使之成為向單一目的站發送的單播數據報,然后通過“隧道”從R1發送到R2。這種使用隧道技術傳送數據報又叫做IP中的IP(IP-in-IP)。
(3)基于核心的發現技術
對于多播組的大小在較大范圍內變化時都適合。它是對每一個多播組G指定一個核心路由器,給出它的IP單播地址。核心路由器按照前面講過的方法創建出對應于多播組G的轉發樹。如果有一個路由器R1向這個核心路由器發送數據報,那么它在途中經過的每一個路由器都要檢查其內容。當數據報到達參加了多播組G的路由器R2時,R2就處理這個數據報。如果R1發出的是一個多播數據報,其目的地址是G的組地址,R2就向多播組G的成員轉發這個多播數據報。如果R1發出的數據報是一個請求加入多播組G的數據報,R2就把這個信息加到它的路由中,并用隧道技術向R1轉發每一個多播數據報的一個副本。這樣,參加到多播組G的路由器就從核心向外增多了,擴大了多播轉發樹的覆蓋范圍。
多播路由選擇協議:
(1)距離向量多播路由選擇協議DVMRP(distance vector multicast routing protocol)
(2)基于核心的轉發樹CBT(core basted tree)
使用核心路由器作為轉發樹的根節點。一個大的自治系統AS可劃分為幾個區域,每一個區域選擇一個核心路由器。
(3)開放最短通路優先的多播擴展MOSPF(multicast extensions to OSPF)
是OSPF的擴充。它使用多播鏈路狀態路由選擇創建出基于源點的多播轉發樹。
(4)協議無關多播-稀疏方式PIM-SM(protocol independent multicast-space mode)
使用和CBT同樣的方法構成多播轉發樹,采用“協議無關”是強調:雖然在建立多播轉發樹時是使用單播數據報來和遠程路由器來聯系,但這并不要求使用特定的單播路由選擇協議。這個協議適用于組成員的分布非常分散的情況。
(5)協議無關多播-密集方式PIM-DM(protocol independent multicast-dense mode)
適用于組成員的分布非常集中的情況,例如組成員都在一個機構內。不使用核心路由器,而使用洪泛方式轉發數據報。