830 likes | 940 Views
第三章 路由協定. 章節目錄. Introduction 路由協定: RIPng 路由協定: OSPFv3 路由協定: BGP4+ 參考文獻. Introduction. IP 封包依據路由器之路由表來決定下一傳送點,經由此方式將封包送達目的地 路由協定是收集路由資訊的方式,用以建立路由表 路由資訊可以在同一個或不同的自治系統 (Autonomous System) 間散播
E N D
章節目錄 • Introduction • 路由協定:RIPng • 路由協定:OSPFv3 • 路由協定:BGP4+ • 參考文獻
Introduction • IP封包依據路由器之路由表來決定下一傳送點,經由此方式將封包送達目的地 • 路由協定是收集路由資訊的方式,用以建立路由表 • 路由資訊可以在同一個或不同的自治系統(Autonomous System)間散播 • 單一自治系統中散播路由資訊的協定稱為IGP(Interior Gateway Protocol),網路管理者可以自由選擇其內部網路所需之路由協定,目前有許多有效率的路由協定,如RIP(Routing Information Protocol)、OSPF(Open Shortest Path First)、IGRP(Internet Gateway Routing Protocol)等 • 多個AS之間散播路由資訊的協定稱為EGP (Exterior Gateway Protocol),如BGP(Border Gateway Protocol) • 在眾多路徑中如何選擇一個較好的路徑,所以必須訂一些路徑值(metric),如跳躍數(hop count)等。路由協定依據其演算法的不同可分成兩大類 • 距離向量(Distance Vector)方式:如RIP • 鏈路狀態(Link State)方式: 如OSPF
RIPng簡介 • 以距離向量(Distance Vector)演算法為基礎的路由協定。 • RIPng是一個UDP架構的協定。使用UDP埠號521(稱作RIPng埠)來傳送與接收封包。
協定的限制 • 網路的最長路徑(或網路的直徑)限制於15個傳送點。 • 此協定依賴“無窮計數(counting to infinity)”的方法來解決不平常的情況,如路由迴圈。在解決路由迴圈前,使用這方法將會耗費大量的網路頻寬。 • 此協定使用固定的路徑值(metric)來與其他的路由器比較,而忽略了即時性的參數,如延遲、可靠性、負載。
RIPng路由表 • IPv6目的地位址(包含位址前綴)。 • 路徑值(metric):可以指出將封包資料從路由器到達目的地的總成本(網路路徑的距離) • 下一傳送點(next hop):表示到達目的地的路徑中下一個路由器的IPv6位址。若是直接連結的網路,則不需要此項。 • 路由改變旗標(route change flag):用以指示有關於路由器資訊最近是否有被修改。 • 各種與路由相關的計時器(timer):用來提供路徑時間內和時間到期時,應該有的處置。例如30秒計時器會觸發傳送路由表資訊到鄰近路由器。
RIPng訊息格式 • 命令: 1-請求:表示送出請求訊息要求回應系統送出全部或部分路由表。 2-回應:表示送出包含發送端之所有或部分路由表的更新訊息。有可能是先前請求的回應,或是定期路由更新亦或是觸發路由更新所產生出來的一種未受邀請的更新訊息。 • 版本:值被設定為1。 • 路由表項目(RTE):每一個項目佔20個位元組。RIPng標頭後面會跟著一個或多個路由表項目(Route Table Entry,簡稱RTE)。
路由表項目格式 IPv6位址前綴 路由標籤:用以指示此路由是否得自另一路由協定(如BGP) 。 位址前綴長度:其數值範圍為0~128。 路徑值:表示到達目的地的花費成本。其數值範圍為0~16。其中值16表無限大。
下一個傳送點路由表項目格式 這個特殊的路由表項目是在路徑值欄位上填上值0xFF
計時器 • 每隔30秒,RIPng程序會觸發以送出未邀請的回應訊息給每個鄰近的路由器,其訊息內容包含了完整的路由表。 • 在建置RIPng路由更新時,需要注意以下兩點: • 30秒的更新動作是由路由器的時鐘所計算和觸發,與系統的負載無關。 • 30秒計時器可以使用小的隨機時間(加減0~15秒)來補償。補償的計算方式可以是0.5*更新週期。 • 兩個時間器與路由相關的計時器:時間到期(time out)、垃圾收集時間(garbage-collection time)。當時間到期的時間期滿後,此路由則不再合法(valid)。但仍然保留在路由表一小段時間,以便芳鄰可以被通知此路由已停止。當垃圾收集時間期滿後,此路由終於從路由表中移除。
計時器(cont.) • 從上次時間超過計時器初始化過了180秒後,此路由就被認為期滿,且會開始刪除程序(deletion process)。 • 直到垃圾收集時間計時器期滿時,包含此路由的所有更新會被此路由器所發送。而當垃圾收集時間計時器期滿時,此路由會從路由表中刪除掉。 • 當垃圾收集計時器在執行時,到此網路的新路由被建立,新的路由將會取代要被刪除的路由。而垃圾收集計時器必須被清除掉。
刪除程序 • 刪除程序會在以下兩個原因之一中發生:時間超過期滿,或是路徑值被設定為16。 • 程序如下: • 垃圾收集時間計時器被設定為120秒。 • 將此路由的路徑值設定為16(無限大)。這會使得此路由從服務中移除。 • 路由改變旗標表示為更新狀態。 • 輸出程序發出回應。
請求訊息 請求訊息 路由器 輸入處理(請求訊息) • 特定項目的請求:查詢路由表並回應此項目,並不會做水平分割(Split Horizon)處理。 • 整個路由表的請求:使用標準的輸出處理,並包含水平分割。
輸入處理(回應訊息) • 收到回應有以下幾種不同的理由之一: • 回應特定的查詢 • 週期性的更新(未受邀請的回應) • 因路由改變而觸發的更新 • 基本的認證測試如下: • 目的地位址前綴是否合法(如:不會為群體傳播位址前綴、不會為鏈結區域位址) • 位址前綴長度是否合法(如:值介於0~128) • 路徑值是否合法(如:值介於0~16) • 若是檢查沒問題,會更新其路徑值。規則如下: • 路徑值=MIN(路徑值+花費, 無限大)
輸入處理(回應訊息) • 若是尚未有此路由,則會將路由加到路由表中,會異動的項目如下: • 設定目的地的位址前綴和長度。 • 設定最新計算的路徑值。 • 設定下一個傳送點的位址。 • 初始化此路由的時間超過計時器。若是此路由的垃圾收集計時器正在執行,則把它停止。 • 設定路由改變旗標。 • 送出觸發更新的訊號。 • 若是已有此路由存在,則會比較路徑值。若是新的路徑值比原有的路徑值小,則表示有較佳的路由,路由器會處理的項目如下: • 採用新的路徑值,若是有需要,則可以調整下一個傳送點。 • 設定路徑改變旗標,並送出觸發更新的訊號。 • 若是路徑值是無限大,則會進行刪除的程序。否則會重新初始時間超過計時器。
回應訊息 回應訊息 路由器 輸出處理 • 此程序會被觸發的事項如下: • 由輸入處理來觸發,當路由器收到請求,若是有需要,則會觸發輸出程序。 • 週期性的路由更新(每30秒)會觸發輸出程序。 • 路由更改時,會需要更新路由表,於是需要觸發輸出程序。
OSPFv3簡介 • 用來克服RIP所產生的一些問題,如:RIP只適用在小範圍的網路中、長的收斂時間、造成迴圈等問題 • IPv6 OSPF定義於RFC2740,是修改現有的IPv4 OSPF來支援IPv6,但IPv4 OSPF的基本原理不變
IPv4 OSPF VS. OSPFv3 • 協定處理是針對每一鏈路(per-link)而非每一子網路(per-subnet) • 定址語義的移除 • 全面散播範圍 • 明確支援每一鏈路中可存在多個OSPF協定實體 • 鏈路區域位址的使用 • 認證 • OSPF封包的改變 • LSA格式的改變 • 處理未知的LSA類型 • 支援殘段區域(Stub Area)
OSPF區域定義 • 區域邊緣路由器(Area Border Router,簡稱ABR) • 自治系統邊界路由器(Autonomous System Border Router,簡稱ASBR) • 虛擬鏈路(virtual link) • 骨幹區域 (backbone area) • 轉送區域(transit area) • 殘段區域(Stub Area) • Not-So-Stubby區域(NSSA)
OSPF區域定義(cont.) ABR Area 0 R1 Virtual Link R2 ABR Area 1 ABR R 3 ASBR Area 2 NSSA
IPv6 OSPF的訊息格式 • 版本(1 byte):3 • 類型(1 byte):如下表
IPv6 OSPF的訊息格式(cont.) • 封包長度(2 bytes):OSPF協定封包的長度(Byte),包含OSPF標頭。 • 路由器識別碼(4 bytes):發送此封包之路由器的路由器識別碼(Router ID)。每個路由器有一個唯一的路由器識別碼,32位元的數值。 • 區域識別碼(4 bytes):發送此OSPF封包之介面的區域識別碼(Area ID),用以辨識封包所屬的區域,而所有的OSPF封包都僅能隸屬於某一區域。區域識別碼是一個32位元的整數值。 • Checksum(2 bytes):查核總值。 • 實體識別碼(1 byte):用以辨識此封包屬於哪個OSPF實體。路由器上每個介面的8位元數值,預設值為0。實體識別碼讓多個OSPF協定實體可以同時執行於單一鏈路上。如果進行接收的路由器不認得封包的實體識別碼,則會捨棄該封包。
Hello封包(cont.) • 介面識別碼(4 bytes):用以辨識Hello封包是經由哪個路由器上的介面所發送,OSPF路由器的每個介面都會被指定一個介面識別碼,此介面識別碼在此路由器中必須是唯一的 • 路由器優先權(1 byte):路由器指定給此介面的優先權號碼,在選舉DR和BDR才有意義。0表示此介面無法做為DR或BDR。 • 選項(3 bytes):被設定在Hello封包、資料庫描述封包、Router-LSA、Network-LSA、Inter-Area-Router-LSA和Link-LSA中 • Hello間隔時間(2 bytes):傳送Hello封包的間隔秒數 • 路由器失效間隔時間(2 bytes):宣告靜止路由器(不發出任何Hello封包)失效前的間隔秒數 • 專任路由器(4 bytes):表此路由器在此鏈路上之DR的路由器識別碼,無任何DR被選出或點對點鏈路時,此值被設為0.0.0.0。 • 備用專任路由器(4 bytes):表此路由器在此鏈路上之BDR的路由器識別碼,無任何DR被選出或點對點鏈路時,此值被設為0.0.0.0。 • 芳鄰識別碼(4 bytes):在上次路由器失效間隔時間內,此路由器在此鏈路上曾收到此芳鄰有效的Hello封包。此芳鄰的路由器識別碼
Hello封包(cont.) 選項欄位
資料庫描述封包(cont.) • 介面最大傳輸單元(2 bytes):在此介面上不經分割可傳送的最大訊框大小。在虛擬鏈路上,此欄位應設定為0 • I-bit:1代表最初的資料庫描述封包,此封包將不含任何資料,路由器會將芳鄰的狀態從2-way改變至exchange-start • M-bit:1代表後面還跟著更多的資料庫描述封包 • MS-bit:1表示此路由器在資料庫交換階段為Master,否則為Slave • DD sequence number(4 bytes):master會對所要發送的每個資料庫描述封包的序列號碼加1,而slave則是引用從master所收到的最新序列號碼
鏈路狀態更新封包 # LSAs(4 bytes):在此封包中LSA的個數
LSA標頭 鏈路狀態存活時間(2 bytes):從LSA產生到現在的時間,以秒計時 鏈路狀態類型(2 bytes) 鏈路狀態識別碼(4 bytes):鏈路狀態識別的一部分 公告路由器(4 bytes):產生此LSA之路由器的路由器識別碼 鏈路狀態序列號碼(4 bytes):用來偵測舊的或重複的LSA。號碼數值愈高表示愈新。 Checksum(2 bytes):LSA之完整內容的查核總值,包含LSA的標頭,但不含鏈路狀態存活時間欄位。 長度(2 bytes):LSA的長度,含LSA的標頭。
LSA標頭(cont.) • 鏈路狀態類型 • U位元:指示路由器如何處理未知LSA功能編碼的LSA,0表示將LSA視為鏈路區域的全面散播範圍;1表示須儲存此LSA,且全面散播如已知類型一般。 • S2及S1位元:定義LSA的全面散播範圍,00:鏈路區域,僅全面散播至產生此LSA的鏈路上,01:區域,全面散播至產生此LSA之區域上的所有路由器,10:自治系統區域,11:保留
LSA標頭(cont.) 最後的l3位元用來表示實際的LSA功能編碼
Router-LSA 每一路由器發出此Router-LSA,描述此路由器經由點對點、虛擬或轉送鏈路與芳鄰連接 旗標(1 byte)
Router-LSA (cont.) • 路徑值(2 bytes):每一鏈路具有以介面為基礎的路徑值 • 芳鄰介面識別碼及路由器識別碼是經由Hello協定學得的
Network-LSA 區域中每一轉送鏈路的專任路由器會生Network- LSA。鏈路狀態識別碼會被設定成轉送鏈路上DR介面的介面識別碼。選項欄位之後則為一串路由器識別碼,用以辨識依附在特定轉送鏈路上的所有路由器
Inter-Area-Prefix-LSA • 產生自ABR,用以公告從其他區域至此LSA區域的IPv6位址前綴 路徑值(20 bits):從ABR至Inter-Area-Prefix-LSA所公告之IPv6位址位址前綴的路徑值。若此路由是一個精簡過的路由,則此欄位應該設為相同前導碼中路徑值最高者 位址前綴長度(1 byte):位址前綴的長度,預設路由的位址前綴長度為0
Inter-Area-Prefix-LSA (cont.) • 位址前綴選項(1 byte) • 位址前綴(依據位址前綴長度可為0,4,8,12,16個位元組):表示IPv6位址,在本地區域以外之IPv6路由的位址前綴,但仍在AS範圍內,此欄位有時必須以0位元來填充,以便成為完整的字元長度(32位元)
Inter-Area-Router- LSA • 產生自ABR,公告從其他區域進入本地區域的ASBR。ABR會對每個ASBR分別產生一項Inter-Area-Router-LSA,這是為了通知本地區域中所有路由器,有外部ASBR的存在 • 路徑值(20 bits):ABR至ASBR的路徑值 • 目的端路由器識別碼(4 bytes):為ASBR的路由器識別碼
AS-External-LSA • 公告自ASBR,用以將外部的IPv6位址前綴匯入自治系統。每項AS-External-LSA代表一項OSPF外部的IPv6位址前綴。AS-External-LSA將會全面散播到整個自治系統,因此所有路器都將會收到AS-External-LSA
AS-External-LSA (cont.) • E-bit:設定此位元,表示所指定的路徑為類型2的外部路徑值。此路值會被視為大於自治系統中任何路由的任何路徑。若設定為0,表示所指定的路徑值為類型1的外部路徑值,而使用的路徑值單位也與Router-LSA、Inter-Area-Prefix-LSA及Intra-Area-Prefix-LSA等相同 • F-bit:如果設定此位元,表示此LSA中已包含轉送位址 • T-bit:如果設定此位元,表示此LSA中已包含外部路由器標籤 • 路徑值(3 bytes):從ASBR至外部IPv6位址前綴的路徑值 • 被參考的LS類型(2 bytes):如果設為非0的值,表示有額外的LSA與此外部路由有關。該LSA指定於被參考的鏈路狀態識別碼欄位中 • 轉送位址(4 bytes):如果F位元已設定,則自治系統中的路由器都會將資料訊務轉送至轉送位址。如果F位元未設定,則資料訊務將轉送至產生此LSA之ASBR • 外部路由標籤(4 bytes):如果T位元已設定,則表示此欄位包含有關外部路由的額外資訊。 • 被參考的鏈路狀態識別碼(4 bytes):參考LS類型被設定為非0值,則被參考的LS類型、被參考的鏈路狀態識別碼及公告此LSA的路由器,代表著一項存在於LSDB的LSA,並提供此外部IPv6位址前綴的額外資訊
Link-LSA 每一路由皆會對路由器上的每一鏈路產生一項Link-LSA,而此項Link-LSA並不會全面散播超出此鏈路的範圍。鏈路狀態識別會被設定為此鏈路的介面識別碼。Link-LSA會對此鏈路所附接的其他路由器提供此路由器的鏈路區域位址,也提供與此鏈路相關IPv6位址前綴列表和此鏈路之DR所使用的選項列表
Link-LSA (cont.) • 路由器優先權(1 byte):此路由器在此介面的優先權值 • Link-local Interface Address(16 bytes):產生此Link-LSA之路由器,其介面在此鏈路的鏈路區域位址 • 位址前綴數量(4 bytes):此LSA所公告之位址前綴的數量
Intra-Area-Prefix-LSA 路由器會以Intra-Area-Prefix-LSA將本身或Network-LSA之一項或多項相關的IPv6位址前綴公告出去
Intra-Area-Prefix-LSA (cont.) • 位址前綴數量(2 bytes):此LSA所公告之位址前綴的數量。 • 被參考的LS類型(2 bytes):若設定1,則位址前綴與此路由器有關。於是被參考的鏈路狀態識別碼會被設定為0,且被參考的公告路由器會被設定為產生此LSA之路由器的路由器識別碼。若設定為2,則位址前綴與Network-LSA有關。於是被參考的鏈路狀態識別碼會被設定為此鏈路之DR的介面別碼,而且被參考的公告的路由器會被設為DR的路由器識別碼。 • 被參考的鏈路狀態識別碼(4 bytes) • 被參考的公告路由器(4 bytes)
鄰接 • 路由器會檢查收到之Hello封包中之芳鄰列表,是否有自己的路由器識別碼,若有則進入2-way狀態,路由器可決定是否要與此芳鄰形成鄰接,若否則仍維持在2-way狀態。 • 形成鄰接兩個路由器會開始進行LSDB的內容交換,路由器會將芳鄰的狀態從2-way改變至exchange-start,且送出不含資料的初始資庫描述封包 • 路由器彼此間會建立master-slave關係以便有順序地交換資料庫描述封包 • 在初始資料庫描述封包中,路由器會宣告自己為master。在初始的資料庫描述封包中唯一有意義的資訊是雙方所送出的資料庫描述序列號碼。芳鄰接著會進入交換狀態 • 雙方路由器不再發送任何封包,則雙方路由器會進入載入階段 • 在載入階段路由器會請求遺漏的LSA,或是從資料庫描述交換中學得逾期的LSA • 當遺漏或逾時的資料更新完畢,芳鄰會進入完全狀態,由Hello封包維持鄰接的存在
R1 R2 Hello (neighbor=0) Time 2-way Hello (neighbor=R1) Hello (neighbor=R2) 2-way Ex-Start DD (Seq=X, init, More, Master) Ex-Start DD (Seq=Y, init, More, Master) DD (Seq=Y, More, Slave) Exchange Exchange DD (Seq=Y+1, More, Master) DD (Seq=Y+1, More, Slave) .............. DD (Seq=Y+n-1, Master) DD (Seq=Y+n-1, More, Slave) DD (Seq=Y+n, Master) DD (Seq=Y+n, Slave) Loading Link State Request Loading Link State Update Link State Ack .............. Link State Request Link State Update Link State Ack Full Full Hello 鄰接(cont.)