OSPF動態路由協議筆記之(三) : 域內基本配置和抓包分析
通過前兩節筆記,已經介紹了OSPF的基本工作原理。包括如何建立鄰居關系和鄰接關系,鏈路狀態數據庫(LSDB)的同步過程,OSPF報文類型,報文結構,以及鏈路狀態信息通告(LSA)的頭部結構等。
本節筆記主要介紹OSPF(區域內)的基本配置方法,補充OSPF區域的概念,以及對建立關系和同步LSDB的過程進行抓包分析,以此驗證整個OSPF的工作過程。
OSPF區域
在繼續介紹下面的內容之前,我們需要先補充一下OSPF區域的概念。OSPF支持將一組網段組合在一起,這樣的一個組合稱為一個區域。
划分OSPF區域可以縮小路由器的LSDB規模,減少網絡流量。
要點①:區域內的詳細拓撲信息不向其他區域發送
區域內的詳細拓撲信息不向其他區域發送,區域間傳遞的是抽象的路由信息,而不是詳細的描述拓撲結構的鏈路狀態信息。每個區域都有自己的LSDB,不同區域的LSDB是不同的。路由器會為每一個自己所連接到的區域維護一個單獨的LSDB。由於詳細鏈路狀態信息不會被發布到區域以外,因此LSDB的規模大大縮小了。
要點②:Area 0為骨干區域,每個區域都必須連接到骨干區域
Area 0為骨干區域,為了避免區域間路由環路,非骨干區域之間不允許直接相互發布路由信息。因此,每個區域都必須連接到骨干區域。
要點③:ABR和ASBR的概念
運行在區域之間的路由器叫做區域邊界路由器ABR(Area Boundary Router),它包含所有相連區域的LSDB。運行在自治系統(AS)之間的路由器叫自治系統邊界路由器ASBR(Autonomous System Boundary Router),是指和其他AS中的路由器交換路由信息的路由器,這種路由器會向整個AS通告AS外部路由信息。
在規模較小的企業網絡中,可以把所有的路由器划分到同一個區域中,同一個OSPF區域中的路由器中的LSDB是完全一致的。OSPF區域號可以手動配置,為了便於將來的網絡擴展,推薦將該區域號設置為0,即骨干區域。
OSPF(區域內)的基本配置方法
打開華為模擬器eNSP,創建拓撲圖:
網絡中有三台路由器AR1,AR2以及AR3,分配環回(loopback)口地址以及端口IP地址分別如下圖所示。AR1和AR2之間的網段為172.16.100.0/24,AR1和AR3之間的網段為172.16.200.0/24,三台路由器均處於同一個區域內(area 0),即骨干區域。
Step 1:基本配置。為各路由器配置物理接口地址和loopback口地址,此處省略。
Step 2:配置區域內OSPF路由協議。如下圖所示,以AR1為例,首先配置OSPF使用的router-id號,進入OSPF進程。然后配置區域號為0的區域(即骨干區域),將需要OSPF協議學習的網段路由發布給其他路由器。(注:宣告網段時,網段后需填入反掩碼)
同理,AR2和AR3均使用同等的配置,如下圖所示:
此時稍待片刻,就能看到路由器界面提示OSPF的鄰居關系已經為Full,表示已成功建立。
查看路由表,可以發現已經生成OSPF的路由,路由的優先級為10。
Step 3:配置OSPF認證。
華為系列路由器運行OSPF時,支持兩種認證方式:區域認證和接口認證。
OSPF支持簡單認證及加密認證功能,加密認證對潛在的攻擊行為有更強的防范性。OSPF認證可以配置在接口或區域上,配置接口認證方式的優先級高於區域認證方式。
① 配置簡單認證和加密認證功能
Ⅰ、配置簡單認證,參數plain表示使用顯示密碼,參數cipher表示使用密文密碼,參數null表示不認證。接口或區域上都可以運行。
命令: ospf authentication-mode { simple [ [ plain ] <plain-text> | cipher <cipher-text>] | null }
Ⅱ、配置加密認證,MD5是一種保證鏈路認證安全的加密算法(具體配置已在舉例中給出),參數key-id表示接口加密認證中的認證密鑰ID,它必須與對端上的key-id一致。
命令: ospf authentication-mode { md5 | hmac-md5 } [ key-id { plain <plain-text >| [ cipher ] <cipher-text>} ]
② 配置區域認證和接口認證示例
Ⅰ、區域配置示例:以AR1和AR2為例,使用加密認證(MD5算法),兩路由器均需配置同樣的認證方式,加密方式兩邊應該保持一致。
AR2和AR1配置方法一致,此處省略。
Ⅱ、接口配置示例:以AR1和AR3為例,需分別進入端口進行配置。使用加密認證(MD5算法),兩路由器均需配置同樣的認證方式,加密方式兩邊應該保持一致。
AR3和AR1配置方法一致,此處省略。
Step 4:查看OSPF鄰居建立情況
命令: display ospf peer
查看ospf鄰居關系建立的情況。
注釋:State(狀態)為Full,為OSPF成功建立關系后的最終狀態。OSPF規定Hello報文每10秒發送一次,若40秒過去后仍沒收到對端的Hello報文,則自動結束OSPF鄰居關系。
上述回顯信息表明,由於默認OSPF路由器優先級(數值為1)相同,但R2的Router ID 10.1.0.2大於R1的Router ID 10.1.0.1,所以R2為DR,R1為BDR。
命令: ospf dr-priority
修改R1的DR優先級。
默認情況下,DR/BDR的選舉采用的是非搶占模式。路由器優先級修改后,不會自動重新選舉DR。因此,需要重置R1和R2間的OSPF鄰居關系。
先關閉然后再打開R1上的Gigabit Ethernet 0/0/1接口,重置R1和R2間的OSPF鄰居關系。
重置后,可以看到DR已由172.16.100.2轉變為172.16.100.1。
命令: display ospf routing
查看OSPF路由表。
關於如何通過OSPF路由表計算區域內的路由,將會放到下一節筆記進行說明。
OSPF報文抓包分析
OSPF報文擁有共五種報文類型,主要根據OSPF Header的Message Type進行區分,以下就按照不同的報文類型,對OSPF的報文字段進行分析。
① Hello Packet(Hello報文)
OSPF協議使用Hello報文來建立和維護相鄰鄰居路由器之間的鄰居關系。僅用來向鄰居路由器證明自己的存在。
Hello報文被周期性(Hello Interval,默認為10秒)地發向鄰居路由器接口發送,如果在設定的死亡時間(Router Dead Interval,默認為40秒,通常至少是Hello包發送時間間隔的4倍)內沒有收到對方OSPF路由器發送來的Hello報文,則本地路由器會認為該對方路由器無效。
報文內容包括一些定時器設置、DR、BDR以及本路由器已知的鄰居路由器。整個Hello報文格式如下表所示。
字段 |
長度 |
功能 |
Network Mask |
4字節 |
發送Hello報文接口所在的子網掩碼。 |
HelloInterval |
2字節 |
指定發送Hello報文的時間間隔,默認為10秒。 |
Options |
1字節 |
可選項,包括: E:允許泛洪AS-external-LAS; MC:允許轉發IP組播報文; N/P:允許處理Type 7 LSA; DC:允許處理按需鏈路。 |
Router Priority |
1字節 |
指定DR優先級,默認為1。數值越大越優先。如果設為0,則表示本路由器不參與DR/BDR選舉。 |
Router Dead Interval |
4字節 |
指定路由器失效時間,默認為40秒。如果在此時間內沒有收到鄰居路由器發來的Hello報文,則認為該鄰居路由器已失效。 |
Designated Router |
4字節 |
指定DR的接口IP地址 |
Backup Designated Router |
4字節 |
指定BDR的接口IP地址 |
Active Neighbor |
4字節 |
指定鄰居路由器的RID。可以指定多個鄰居路由器RID |
② Data Description(數據庫描述報文)
DD報文是用來描述本地路由器的鏈路狀態數據庫(LSDB),在兩個OSPF路由器初始化連接時要交換DD報文,進行LSDB數據庫同步。
DD報文內容部分包括:DD報文序列號和LSDB中每一條LSA的頭部等。對端路由器根據所收到的DD報文中的LSA頭部,判斷出自己的LSDB中是否已有這條LSA。
由於數據庫的內容可能相當長,所以可能需要多個數據庫描述報文來描述整個數據庫。所以有三個專門用於標識數據庫描述報文序列的比特位,即DD報文格式中的I、M和M/S這三位。接收方對報文的重新排序使其能夠真實地復制數據庫描述報文。
DD交換過程按詢問/應答方式進行,在DD報文交換中,一台為Master(主)角色,另一台為Slave(從)角色。Master路由器向從路由器發送它的路由表內容,並規定起始序列號,每發送一個DD報文,序列號加1,Slave則使用Master的序列號進行確定應答。但是顯然,主從之間的關系會因每個DD交換的不同而不同。網絡中的所有路由器會在不同時刻作用,在這個過程中既可能是主路由器又可能是從路由器。
對於的各字段說明如下表所示。
字段 |
長度 |
功能 |
Interface MTU |
2字節 |
指出發送DD報文的接口在不分段的情況下,可以發出的最大IP報文長度。 |
Options |
1字節 |
可選項,包括: E:允許泛洪AS-external-LAS; MC:允許轉發IP組播報文; N/P:允許處理Type 7 LSA; DC:允許處理按需鏈路。 |
I |
1比特 |
指定在連續發送多個DD報文,如果是第一個DD報文則置1,其它的均置0。 |
M |
1比特 |
指定在連續發送多個DD報文,如果后續還有報文需傳達則置1,如果是最后一個DD報文則置0。 |
M/S |
1比特 |
設置進行DD報文雙方的主從關系,如果本端是Master角色,則置1,否則置0。 |
DD Sequence Number |
4字節 |
指定所發送的DD報文序列號。主從雙方利用序列號來確保DD報文傳輸的可靠性和完整性。 |
LSA Header |
4字節 |
指定DD報文中所包括的LSA頭部。可以指定多個LSA頭部。 |
因為DD報文僅在兩台OSPF路由器初始化連接時才進行DD交換,所以它沒有發送周期。之后的數據庫存同步是通過LSR、LSU和LSAck報文進行同步的。
③ Link State Request(鏈路狀態請求報文)
LSR報文用於請求相鄰路由器鏈路狀態數據庫中的一部分數據。當兩台路由器互相交換完DD報文后,知道對端路由器有哪些LSA是本LSDB所沒有的,以及哪些LSA是已經失效的,則需要發送一個LSR報文,向對方請求所需的LSA。
LSR報文內容包括所需的LSA摘要,主要包含三個字段:Link State Type,Link State ID,Advertising Router;具體格式如下圖所示:
LSR報文內容部分各字段說明如下表所示:
字段 |
長度 |
功能 |
LS type |
4字節 |
OSPF指定所請求的LSA類型,總共11類,其中主要常用的共7類,其余均為特殊場景下應用,以下僅列出常見的LSA類型: 第一類:Router-LSA(路由器LSA); 第二類:Network-LSA(網絡LSA); 第三類:Network-Summary-LSA(網絡匯總LSA); 第四類:ASBR-Summary-LSA(ASBR匯總LSA); 第五類:AS-External-LSA(自治系統外部LSA); 第七類:NSSA-External-LSA(NSSA外部LSA)。 |
Link State ID |
4字節 |
用於指定ospf所描述的部分區域,該字段的使用方法根據不同的LSA類型而不同: 當為一類LSA時,該字段值是產生LSA 1的路由器的Router-ID; 當為二類LSA時,該字段值是DR的接口地址; 當為三類LSA時,該字段值是目的網絡的網絡地址; 當為四類LSA時,該字段值是ASBR的Router-ID; 當為五類LSA時,該字段值是目的網絡的網絡地址。 |
Advertising Router |
4字節 |
指定產生此所要請求的LSA的路由器ID |
④ Link State Update(鏈路狀態更新報文)
LSU報文是回應LSR報文的請求,用來向對端路由器發送所需的LSA,內容是多條LSA完整內容的集合。
LSU報文內容部分包括此次共發送的LSA數量(Number of LSAs字段)和每條LSA(LSAs字段)的完整內容,如下圖所示。
LSU報文在支持組播和多路訪問的鏈路上是以組播方式將LSA泛洪出去的,並且對沒有收到對方確認應答(就是下面將要介紹的LSAck報文)的LSA進行重傳,但重傳時的LSA是直接送到沒有收到確認應答的鄰居路由器上,而不再是泛洪。報文內容部分字段如下表所示。
字段 |
長度 |
功能 |
Number of LSA |
4字節 |
指定此報文中共發送的LSA數量。 |
LSAs |
4字節 |
是一條條具體的LSA完整信息,后面的省略號表示可多條LSA。 |
⑤ Link State Acknowledge(鏈路狀態確認報文)
LSAck報文是路由器在收到對端發來的LSU報文后所發出的確認應答報文,內容是需要確認的LSA頭部(LSA Headers)。
LSAck報文根據不同鏈路以單播或組播形式發送。整個LSAck報文的格式如下圖所示。
Q:在OSPF路由協議中,組播地址224.0.0.5和224.0.0.6分別代表什么,在什么情況下使用?
組播地址224.0.0.5代表所有運行OSPF的路由器,DR,BDR向DRother發送DD,LS Request,LS Update報文時,其發送的目的地址是224.0.0.5。可以理解為:DRother偵聽224.0.0.5。
組播地址224.0.0.6代表所有角色為DR的路由器,DRother向DR,BDR發送DD,LS Request,LS Update報文時,其發送的目的地址是224.0.0.6。可以理解為:DR偵聽224.0.0.6。
通過本節筆記,補充了OSPF區域的概念,並介紹了OSPF(區域內)的基本配置方法,然后從建立鄰居關系,到LSDB同步,最后建立鄰接關系的各過程中,所使用的OSPF報文類型進行抓包分析。
下一節筆記,將會繼續介紹OSPF域內路由的基本知識,內容涵蓋一類LSA(Router-LSA)和二類LSA(Network-LSA),以及如何使用這兩類LSA通過SPF算法計算域內路由。
參考鏈接:
https://zhidao.baidu.com/question/117619837.html
https://blog.51cto.com/u_13532838/2079671
https://blog.csdn.net/weixin_33971130/article/details/90074768