OSPF路由協(xié)議是一種開放式最短路徑優(yōu)先協(xié)議,它更是一種鏈路狀態(tài)路由協(xié)議。而所謂的鏈路狀態(tài),主要是指鏈路狀態(tài)信息,包含接口IP地址、網(wǎng)絡(luò)類型、接口對象、對端IP地址、接口的開銷等等。

我們的OSPF路由協(xié)議就可以根據(jù)這些鏈路狀態(tài)信息和SPF算法計算出全網(wǎng)的拓撲,簡單來說就是OSPF可以以此獲得一張全網(wǎng)地圖,最后路由器就可以根據(jù)這張全網(wǎng)地圖來轉(zhuǎn)發(fā)我們的數(shù)據(jù)報文。這篇文章就是一個關(guān)于OSPF的總結(jié)和概括,關(guān)于OSPF,我主要是用了1~7個數(shù)字來概括它的絕大多數(shù)內(nèi)容,是的,絕大多數(shù),不是所有,因為目前該文章內(nèi)容只是涉及到IA內(nèi)容。一、一種協(xié)議“1”就是指我們的一種協(xié)議,OSPF協(xié)議。除此之外,“1”還包括OSPF學(xué)習(xí)過程中涉及到一些名詞概念。比如,LSA,LSDB和Router ID。LSA,就是我們在上面提到的鏈路狀態(tài)信息,全英文是Link State Advertisement,這里不再重復(fù)贅述。LSDB,Link State DataBase,即鏈路狀態(tài)數(shù)據(jù)庫,是運行OSPF協(xié)議的每臺路由器都會有的,主要作用就是存儲自己和其它路由器的LSA。Router ID,這是路由器的標識符,作用就是用來唯一標識一臺路由器,它的產(chǎn)生有幾種方式,并且優(yōu)先級不同,首先是經(jīng)由我們網(wǎng)絡(luò)管理員手工配置,若沒有手動配置的Router ID,選取Loopback接口上最大的IP地址作為Router ID,若連Loopback接口都沒有配置,則選擇已經(jīng)配置IP地址的接口上數(shù)值最大的IP地址作為Router ID。值得注意的是,Router ID是一個32bit的無符號整數(shù),所以不一定是路由器上的接口IP地址,只要它的范圍是從0.0.0.0~255.255.255.255就可以了,之所以我們經(jīng)常將Router ID和接口IP地址聯(lián)系在一起,則是因為它獨特的選舉機制。二、兩層結(jié)構(gòu)“2”主要是指OSPF的分層結(jié)構(gòu),可以說是OSPF將網(wǎng)絡(luò)分成了骨干區(qū)域和非骨干區(qū)域。非骨干區(qū)域必須和骨干區(qū)域相連,非骨干區(qū)域之間不可以連接,這是為了防止環(huán)路的產(chǎn)生。雖然在以后的進階學(xué)習(xí)中,會有一個叫虛連接的方法來解決非骨干區(qū)域沒有和骨干區(qū)域連接在一起的問題。但IA階段中,非骨干區(qū)域和骨干區(qū)域直接相連是毫無問題的。三、三張表/三種身份“3”主要是指三張表和三種身份。1、三張表三張表包括OSPF鄰居表、OSPF拓撲表和OSPF路由表。OSPF鄰居表就是用來記錄路由器鄰居關(guān)系的表,包括鄰居的相關(guān)描述和狀態(tài)。也就是說可以用鄰居表來顯示該路由器與哪些設(shè)備建立鄰居或鄰接關(guān)系,我們可以用display OSPF peer來查看這張表。OSPF拓撲表,也被叫做LSDB表,這張表存儲了當前區(qū)域的所有鏈路狀態(tài)信息,用來計算OSPF的最優(yōu)路由。而OSPF路由表記錄根據(jù)LSDB的鏈路狀態(tài)信息和SPF算法計算出來的最優(yōu)路由,這些路由將有可能作為最優(yōu)加入該表。這里需要注意,OSPF路由表不是我們的全局路由表,我們使用display ip router-table查看的就是路由器的全局路由表,它保存的是根據(jù)所有途徑學(xué)習(xí)到的最優(yōu)路由,而OSPF路由表存儲的是根據(jù)OSPF協(xié)議計算到最優(yōu)路由。2、三種身份三種身份則是指運行了OSPF協(xié)議路由器的身份,主要是DR,BDR和DRother。首先明確OSPF需要為路由器劃分身份的背景。假設(shè)沒有對運行OSPF協(xié)議的路由器進行任何的配置,那么整個網(wǎng)絡(luò)中,所有運行OSPF協(xié)議的路由器兩兩之間都會建立起鄰居和鄰接關(guān)系,它們之間都會互相發(fā)送和學(xué)習(xí)報文,那么可能就會造成一種重復(fù)學(xué)習(xí)的現(xiàn)象。類似于教室中,學(xué)生A把他的筆記給了學(xué)生B和學(xué)生C進行抄錄,然后學(xué)生B又將他的筆記給了學(xué)生A和學(xué)生C抄錄。在這個過程中,學(xué)生B的筆記是已經(jīng)包括了學(xué)生A的,那么學(xué)生A和學(xué)生C就會不得不再次抄錄一遍最開始學(xué)生A的筆記,這就是重復(fù)學(xué)習(xí)。然后為了防止路由器之間重復(fù)學(xué)習(xí)造成的資源浪費問題,OSPF就給路由器劃定了角色,也就是DR,BDR和DRother。這三種角色類似于組長,副組長和組員的關(guān)系,其中DR是組長,BDR是副組長,DRother則是組員。之后當組員需要交換筆記的時候,就只會把筆記提交給組長和副組長,然后由他們把筆記分發(fā)給各個組員,而組員之間不能夠互相交換筆記。這就是我們DR和BDR的作用,也就是之后OSPF網(wǎng)絡(luò)中,DRother的路由器只會把LSA信息提交給DR和BDR,然后由他們進行分發(fā),而DRother之間不會傳遞LSA信息。其中DR和BDR的選舉首先是根據(jù)接口的優(yōu)先級來選的,不過路由器接口的優(yōu)先級一般默認都是1,所以接下來就會根據(jù)Router ID來進行選舉,Router ID大的優(yōu)選。需要注意的是,接口優(yōu)先級的取值范圍是0-255,為0時,表示當前路由器不參加選舉。而且,當選舉已經(jīng)結(jié)束,再加入新的設(shè)備,即便新設(shè)備的優(yōu)先級更高,也不會重新選舉DR和BDR,DR不故障,就不會選舉DR,DR故障后,只會是BDR成為DR,再競選新的BDR。四、四種網(wǎng)絡(luò)類型/四種路由器類型“4”主要包括四種網(wǎng)絡(luò)類型和四種路由器類型。1、四種網(wǎng)絡(luò)類型四種網(wǎng)絡(luò)類型,分別是Broadcast,NBMA,P2MP和P2P。這四種網(wǎng)絡(luò)類型主要影響OSPF在接口上的操作,例如采用什么方式來發(fā)送OSPF協(xié)議報文,以及是否需要選舉DR和BDR。首先是Broadcast,廣播多點可達,當鏈路層協(xié)議是Ethernet時,OSPF默認的網(wǎng)絡(luò)類型就是這個,這個時候需要選舉DR和BDR。接著是NBMA,非廣播多點可達,該網(wǎng)絡(luò)類似是取消了廣播報文的廣播多點可達類型,當鏈路層協(xié)議是幀中繼類型,OSPF默認的網(wǎng)絡(luò)類型就是此項,這個時候也是需要選舉DR和BDR。第三個是P2MP,點到多點網(wǎng)絡(luò),該網(wǎng)絡(luò)類型必須由其它網(wǎng)絡(luò)類型更改的,一般是由NBMA網(wǎng)絡(luò)類型更改過來的,不需要選舉DR和BDR,這是為了加快OSPF網(wǎng)絡(luò)中鄰居的建立速度。第四個就是P2P,點到點網(wǎng)絡(luò),當鏈路層協(xié)議是PPP時,OSPF默認的網(wǎng)絡(luò)類型就是這個,這個時候不需要選舉DR和BDR。2、四種路由器類型接著是四種路由器類型,這是根據(jù)OSPF網(wǎng)絡(luò)的分層結(jié)構(gòu)進行劃分的。首先是區(qū)域內(nèi)路由器,IR,路由器所有接口都是在同一區(qū)域中的路由器。接著是區(qū)域邊界路由器,ABR,是連接骨干區(qū)域和非骨干區(qū)域的路由器。然后是自治系統(tǒng)邊界路由器,ASBR,是與其它自治系統(tǒng)交換路由信息的路由器。最后是骨干路由器,BR,有接口在骨干區(qū)域中的路由器。五、五種報文“5”即五種報文:Hello報文,DD報文,LSR報文,LSU報文和LSAck報文。Hello報文,它的作用就是發(fā)現(xiàn)、建立和維護鄰居關(guān)系。DD報文,全英文是Database Description,就是描述鏈路狀態(tài)信息,用于選舉主從以及攜帶LSA的摘要信息。LSR報文,Link State Request,鏈路狀態(tài)請求報文,根據(jù)對方發(fā)送過來的DD報文的摘要信息,請求獲取自己沒有的LSA信息。LSU報文,Link State Update,鏈路狀態(tài)更新報文,根據(jù)對方發(fā)送過來的請求,向?qū)Ψ桨l(fā)送相應(yīng)的LSA信息,此時LSA信息是完整的。LSAck報文,鏈路狀態(tài)確認報文,回復(fù)對方自己收到了LSA信息,如果對方長時間沒有收到LSAck報文,對方就會重新發(fā)送LSU報文。六、六種LSA“6”即六種LSA信息。正如我開篇所說,該文章是對IA階段內(nèi)容的概括,而這六種LSA是更高階的內(nèi)容,所以這里為了文章的完整性,只是稍微提及一下,不會作詳細的贅述。七、七種狀態(tài)“7”指七種狀態(tài),即運行OSPF的路由器之間建立鄰居和鄰接的過程中,路由器所需要經(jīng)歷的狀態(tài)變化過程。嚴格來說,路由器的狀態(tài)應(yīng)該是8種,不過多的這一種只會出現(xiàn)在NBMA網(wǎng)絡(luò)中,應(yīng)用極少,且該狀態(tài)的作用和當中其它的某種狀態(tài)也是相同的,所以我最后只是用了7種狀態(tài)而不是8種狀態(tài),不過我會在文章的最后對此狀態(tài)作補充。首先是第一種狀態(tài),Down狀態(tài),即關(guān)閉狀態(tài),這也是路由器的第一個穩(wěn)定狀態(tài),即不會隨便發(fā)現(xiàn)變化的狀態(tài),該狀態(tài)表示當前接口沒有收到任何的Hello報文。然后當路由器收到其它路由器發(fā)送過來的Hello報文之后,就會進入Init狀態(tài),這是一種單方發(fā)現(xiàn)狀態(tài),該狀態(tài)表示已經(jīng)收到其它路由器發(fā)送的Hello報文,但在對方的Hello報文的鄰居表中沒有看到自己的Router ID,也就是對方還不知道我是鄰居。然后當兩邊路由器相互發(fā)送Hello報文,建立起鄰居關(guān)系之后,就會進入2-way狀態(tài),這是鄰居狀態(tài),也是第二個穩(wěn)定狀態(tài),表示路由器建立鄰居關(guān)系成功。之后當路由器之間想要同步LSDB數(shù)據(jù)庫時,路由器首先會進入ExStart狀態(tài),該狀態(tài)表示路由器和它的鄰居路由器開始協(xié)商主從關(guān)系,也就是協(xié)商誰先發(fā)送報文。協(xié)商完成后,路由器就正式進入Exchange狀態(tài),該狀態(tài)表示路由器的主從關(guān)系已經(jīng)確認,開始正式交換DD報文,此時的DD報文主要包含路由器的LSDB的摘要信息。然后就會進入Loading狀態(tài),該狀態(tài)中,路由器會比較DD報文和自己的LSDB信息,如果DD報文中存在LSDB不具有的LSA信息,則向鄰居發(fā)送LSU報文請求該LSA的完整信息。之后當LSA信息交換完畢,也就是LSDB同步結(jié)束,路由器就會進入最后一個狀態(tài)——Full狀態(tài),即鄰接狀態(tài),也是第三個和最后一個穩(wěn)定狀態(tài),該狀態(tài)就是表示路由器的LSDB同步已經(jīng)完成。之后,建立起關(guān)系的路由器之間就只會周期性發(fā)送Hello報文來維護彼此之間的關(guān)系。這就是運行OSPF協(xié)議的路由器之間建立起鄰居或鄰接關(guān)系所需要經(jīng)歷的七種狀態(tài)。然后是只會出現(xiàn)在NBMA網(wǎng)絡(luò)中的第8種狀態(tài),Attempt狀態(tài),該狀態(tài)和Init狀態(tài)類似,當路由器發(fā)現(xiàn)了Hello報文,但還沒有收到對方回應(yīng)的報文的時候,路由器就會處于這種狀態(tài)。