什么是OSPF鏈路狀態(tài)路由協(xié)議?OSPF可適應(yīng)于大規(guī)模網(wǎng)絡(luò)組網(wǎng),為了適應(yīng)大型網(wǎng)絡(luò),OSPF在AS類劃分多個(gè)區(qū)域。每個(gè)區(qū)域內(nèi)部的OSPF路由器只維護(hù)所在區(qū)域的完整鏈路信息。
Area0是骨干區(qū)域,Area1和Area2是子區(qū)域
OSPF的路由器類型可分為:
區(qū)域邊界路由器(ABR):用來連接骨干區(qū)域和其他子區(qū)域的路由器。
自治邊界路由器(ASBR):用來連接所在AS與外部自治區(qū)域的路由器,可以連接采用非OSPF協(xié)議(比如RIP或EIGRP)管理的自治區(qū)域。
內(nèi)部路由器:保存自己區(qū)域的鏈路狀態(tài)信息。內(nèi)部路由器又可分為指定路由器(DR)、非指定路由器(BDR)和其他路由器(DRother)。
其他路由器只與DR形成鄰接關(guān)系(adjacency),如果DR失效,那么BDR就頂上去工作。
Router ID及DR的選舉
在OSPF區(qū)域內(nèi),用Router ID(RID)作為唯一標(biāo)識(shí)區(qū)分每一個(gè)路由器。RID可以手工配置,也可以自動(dòng)生成。如果沒有指定RID,將按照如下邏輯自動(dòng)生成一個(gè)RID:
首先選取所有Loopback接口上數(shù)值較大的IP地址作為RID;
如果沒有配置Loopback接口,那么選取所有物理接口中數(shù)值較大的IP地址作為RID。
有了RID以后才能判斷DR和BDR。DR和BDR可以手動(dòng)選擇,也可以自動(dòng)選舉。自動(dòng)選舉的邏輯是:
網(wǎng)段上RID較大的路由器被選為DR;
網(wǎng)段上RID第二大的路由器被選為BDR。
OSPF協(xié)議包
OSPF協(xié)議共有5種包類型:
OSPF包類型
Hello:用于建立和維護(hù)OSPF鄰居關(guān)系;
DBD:用于向鄰居發(fā)送鏈路狀態(tài)數(shù)據(jù)庫(LSDB)中LSA的摘要;
LSR:鏈路狀態(tài)請(qǐng)求,用于向OSPF鄰居請(qǐng)求鏈路狀態(tài)信息;
LSU:鏈路狀態(tài)更新,收到LSR后發(fā)送鏈路狀態(tài)通告(LSA),一個(gè)LSU可能包含一條或多條LSA;
LSAck:鏈路狀態(tài)確認(rèn),確認(rèn)收到LSU,LSU中的每個(gè)LSA需要分別確認(rèn)。
鄰接關(guān)系的建立
鄰居關(guān)系的建立和維持都是靠Hello包完成的,一般Hello包以周期性的規(guī)律發(fā)送。鄰接關(guān)系的建立可分為4個(gè)階段:
鄰居發(fā)現(xiàn):發(fā)現(xiàn)直連鏈路上的OSPF路由器,建立雙向關(guān)系。
協(xié)商主從關(guān)系:交換LSA摘要信息。
數(shù)據(jù)庫同步:請(qǐng)求和發(fā)送完整的LSA信息。
進(jìn)入完全鄰接(full adjacency)階段。
OSPF路由器狀態(tài)
OSPF路由器在進(jìn)入完全鄰接階段之前,通常要經(jīng)歷幾個(gè)狀態(tài):Down: 初始化狀態(tài)Init: 收到了Hello包,但是雙向通信還沒有建立起來Two-way: 雙向會(huì)話建立ExStart: 信息交換初始態(tài),本地路由器和鄰居間建立主從關(guān)系,向鄰居發(fā)送數(shù)據(jù)庫描述包(DBD)Exchange: 信息交換狀態(tài),向鄰居發(fā)送LSR用于請(qǐng)求新的LSALoading: 信息加載狀態(tài),本地路由器向鄰居發(fā)送LSR用于請(qǐng)求新的LSAFull: 完全鄰接狀態(tài),這種鄰接出現(xiàn)在Router LSA和Network LSA中
總結(jié)
以O(shè)SPF為代表的鏈路狀態(tài)路由協(xié)議,我們將工作原理總結(jié)如下:
每臺(tái)路由器通過使用Hello報(bào)文與它的鄰居之間建立鄰接關(guān)系;
每臺(tái)路由器向每個(gè)鄰居發(fā)送鏈路狀態(tài)通告(LSA),也叫鏈路狀態(tài)報(bào)文(LSP)。每個(gè)鄰居在收到LSP之后,還要向它的鄰居轉(zhuǎn)發(fā)這些LSP(OSPF泛洪);
每臺(tái)路由器要在數(shù)據(jù)庫中保存一份它所收到的LSA的備份,所有路由器的數(shù)據(jù)庫應(yīng)該相同;
依照拓?fù)鋽?shù)據(jù)庫每臺(tái)路由器使用Dijkstra算法(SPF算法)計(jì)算出到每個(gè)網(wǎng)絡(luò)的最短路徑,并將結(jié)果輸出到路由選擇表中。