OSPF在點到點網絡下鄰居的建立過程

OSPF協議在點到點網絡下會經歷7個狀態,最後達到完全鄰接狀態。在這其中,雙方路由器會發送若干個數據報文。我通過下方拓撲搭建的實驗台,帶領大家還原這7個狀態所發送的數據報文信息,來搞清楚OSPF在點到點網絡下是如何建立鄰居的。

工具/原料

cisco路由器
GNS3
Wireshark

步驟1:基本配置

請先按照拓撲進行環境搭建,並在兩台設備間的線路上開啟Wireshark進行抓包,注意選擇HDLC協議。

首先,我們需要對兩台路由器做基本的配置設置。下圖是在R1上進行的接口配置和路由配置。

下圖是在R2上進行的接口配置和路由配置。

鄰居的建立是非常快的,其實現在兩台設備的OSPF鄰居表中,已經是FULL狀態了;同時,我們也發現Wireshark已經抓取到大量的數據報文了,這些就是鄰居建立過程中產生的報文信息。

為了方便信息,我們打開Wireshark報文統計功能:點擊statistics—Flow Graph——點擊OK。就能看到整個鄰居建立過程的報文統計圖。

下面我們開始對這些報文進行分析。

步驟2:過程分析

路由器收到對方發來的hello包時,會在鄰居表內將對方置為init狀態。Hello包都發送到組播地址,並在OSPF報頭中攜帶發送者的Router ID信息。

在將鄰居的狀態變為init後,路由器在之後發送的Hello報文中,會在Active Neighbour欄位中添加上鄰居的RID信息。

那麼如果路由器收到一個Hello報文,且該Hello包內的OSPF Hello Packet報文中的Active Neighbor欄位,攜帶有自己的RID信息時,該路由器會將鄰居狀態置為2way。

當路由器將鄰居置為2way狀態後,便開始發送DBD報文信息。路由器會發送空的資料庫描述數據包,通過MS欄位進行主/從選舉。

當路由器收到DBD狀態信息時,該路由器就會將鄰居狀態轉換成Exstart狀態。

路由器一旦收到鄰居發來的資料庫描述數據包,就會將對方狀態轉換到Exchange狀態。

當路由器收到對方發來的DBD報文後,它將發送一個響應的DBD報文,通過雙方首次DBD報文交換,主從選出。MS=0為從、MS=1為主。注意,在為選出主/從之前,路由器發送的第一個DBD,都講自己設成主。

同時,該數據包將會傳送該路由器的的鏈路狀態摘要列表的LSA頭部。其中攜帶路由目錄信息。

當鄰居路由器收到上述攜帶LSA頭部的DBD報文時,其會發送一個包含相同序列號的確認數據包。這個過程將一直延續,直到路由器收到最後一個LSA摘要DBD包,且其中的M位置為0時,代表Exchange過程已經完成。

如果此時路由器的鏈路狀態請求列表中還存在LSA條目(即本路由器沒有,鄰居鏈路狀態摘要列表中存在的路由條目),路由器將會把鄰居狀態改為Loading狀態。

在Loading狀態時,鄰居雙方會依照各自的鏈路狀態請求列表發送LSR—收到LSU發送LSA來進行LSA的更新。當路由器收到最後一個資料庫描述報文時,該路由器就會把鄰居狀態改為Full狀態。

當雙方的鄰居表內的鄰居狀態都置為Full狀態時,則雙方已建立完全鄰接關係,OSPF鄰居建立成功。

注意事項

因為鄰居建立過程是很快的,正常情況下,我們在鄰居表中只能看到FULL狀態。
在廣播網絡中,我們能看到2Way狀態
當鄰居建立不成功時,我們可以看到鄰居表中的鄰居路由器會停滯在某一狀態中
在搭建網絡環境的時候,注意路由器鏈路的選擇,如果你選擇的接口是FastEthernet接口,則意味著你的OSPF接口網絡類型是個廣播網絡

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場