狀态機
- Down:這是一個鄰居會話的初始狀态,一旦發出hello包将進入下一個狀态
- init:收到來自鄰居路由器的hello包,但是雙向通訊仍然沒有建立。
- 2-way:表明本地路由器已經在來自鄰居路由器的hello包中看到了自己路由器的ID,也就意味着,一個雙向通信的會話成功建立。
-
比對條件
點到點網絡直接進入下一個狀态,
MA網絡先選DR/BDR:非DR/BDR間不能進入下一狀态
-
Exstart:在這一狀态下,本地路由器和他的鄰居将建立主/從關系,并确定資料庫描述包的序列号,以便為資料庫描述包的資訊互動做準備。
主從選舉DBD不包含LSA資訊;主從選舉規則:最大的 router-id,主用于控制 LSA 互動(互動的速度等)保證雙方沒有進行确認。
-
Exchange:在這一狀态,本地路由器将向他的鄰居路由器發送可以描述它整個鍊路狀态資料庫資訊的資料庫描述資料包(DBD)。同時,在這個狀态下,本地路由器也會發送LSR給它的鄰居路由器,用來請求最新的LSA。
主從選舉完成,發送LSA頭部資訊進入同時進行隐形确認,使用正真的DBD包共享資料目錄,需要ACK确認。
-
loading:在這一狀态下,本地路由器将會向它的鄰居路由發送LSR,用來請求最新的LSA通告,雖然在exchange狀态已經發現了這些最新的LSA通告,但是本地路由器還沒有收到這些LSA通告。
對鍊路狀态資料庫和收到的DBD的lsa頭部進行比較,發現自己資料庫中沒有的LSA就會發送LSR,向鄰居請求LSA;鄰居收到LSR之後,回應LSU;收到鄰居發來的LSU,儲存到自己的鍊路狀态資料庫,發送LSack确認。
-
Full:在這一狀态下,鄰居路由器之間将建立起完全的鄰接關系
對端鄰居,産生的請求清單和重傳清單都清空,意味着LSDB同步完成
結論
1. 在點到點網絡中,肯定存在1類LSA,是否存在其他LSA得看實際情況。若在建立鄰居時,鄰居已經建立過鄰居那麼鄰居資料庫中有幾類LSA就發幾類LSA。 2. 在MA網絡中,一定存在1類LSA,若存在DR必定有2類LSA。是否存在其他LSA得看實際情況。若在建立鄰居時,鄰居已經建立過鄰居那麼鄰居資料庫中有幾類LSA就發幾類LSA。 3. 1類LSA為路由器LSA,所有路由器産生,OSPF區域内的所有路由器都會有的LSA,可以判斷在所有的狀态機都有其參與 2類LSA為網絡LSA,此類LSA隻會在MA/NBMA網絡中并且選舉到DR之後才會出現,可以判斷,該LSA會出現在選舉到DR之後的2-way 狀态 3類LSA為網絡彙總LSA,宣告者是BDR,也就意味着這條LSA會出現在選舉到BDR的2-way狀态中 4類LSA是ASBR彙總LSA,通告者是ABR,該條LSA會出現在更新資料庫資訊的狀态中即exchange、loading和full狀态中 5類LSA是自制系統外部LSA,通告者是ASBR,該條LSA會出現在更新資料庫資訊的狀态中即exchange、loading和full狀态中 7類LSA是NSSA外部LSA,通告者是ASBR ,是在非純末梢區域的5類LSA,該條LSA會出現在更新資料庫資訊的狀态中即exchange、 loading和full狀态中
OSPF DBD 封包格式
兩台路由器在鄰接關系初始化時,用BDB封包來描述自己的LSDB,進行資料庫的同步。封包内容包括LSDB中每一條LSA的頭部(LSA的頭部可以唯一辨別一條LSA)。LSA頭部隻占一條LSA的整個資料量的一小部分,這樣可以減少路由器之間的協定封包流量,對端路由器根據LSA頭部就可以判斷出是否已有這條LSA。在兩台路由器交換機DBD封包的過程中,一台為master,另一台為slave。由master規定起始序列号,沒發送一個DBD封包序列号加1,slave方使用master的序列号作為确認
BDB封包格式

字段 | 長度 | 含義 |
---|---|---|
interface MTU | 16比特 | 在不分片的情況下,此接口最大可發出的ip封包長度 |
options | 8比特 | 可選項:E:允許Flood AS-External-LSAs;MC:轉發IP多點傳播封包;N/P:處理Type-7 LSAs;DC:處理按需鍊路。 |
I | 1比特 | 當發送連續多個dbd封包時,如果這是第一個dbd封包,則置1,否則置為0. |
M(more) | 1比特 | 當發送連續多個DBD封包時,如果這是最後一個DBD封包,則置為0。否則置為1,表示後面還有其他的DBD封包。 |
M/S(master/slave) | 1比特 | 當兩台OSPF路由器交換DBD封包時,首先需要确定雙方的主從關系,Router ID大的一方會成為Master。當值為1時表示發送方為Master。 |
DD sequence number | 32比特 | DD封包序列号。主從雙方利用序列号來保證DD封包傳輸的可靠性和完整性。 |
LSA Headers | 可變 | 該DD封包中所包含的LSA的頭部資訊。 |
常見的六種LSA
常用的LSA共有6中:Router-LSA、Network-LSA、Summary-LSA、ASBR-Summary-LSA、和
External-LSA、NSSA-LSA
所有的LSA都有相同的封包頭
字段 | 長度 | 含義 |
---|---|---|
LS age | 16比特 | LSA産生後所經過的時間,以秒為機關。無論LSA是在鍊路上傳送,還是儲存在LSDB中,其值都會在不停的增長。 |
Options | 8比特 | 可選項:E:允許泛洪AS-External-LSA;MC:轉發IP多點傳播封包;N/P:處理Type-7 LSA;DC:處理按需鍊路。 |
LS type | 8比特 | LSA的類型:Type1:Router-LSA Type2:Network-LSA Type3:Network-summary-LSA Type4:ASBR-summary-LSA Type5:AS-External-LSA Type7:NSSA-LSA |
Link State ID | 32比特 | 與LSA中的LS Type和LSA description一起在路由域中描述一個LSA。 |
Advertising Router | 32比特 | 産生此LSA的路由器的Router ID。 |
LS sequence number | 32比特 | LSA的序列号。其他路由器根據這個值可以判斷哪個LSA是最新的。 |
LS checksum | 16比特 | 除了LS age外其它各域的校驗和。 |
length | 16比特 | LSA的總長度,包括LSA Header,以位元組為機關 |