OSPF路由協(xié)議是一種開(kāi)放式最短路徑優(yōu)先協(xié)議,它更是一種鏈路狀態(tài)路由協(xié)議。而所謂的鏈路狀態(tài),主要是指鏈路狀態(tài)信息,包含接口IP地址、網(wǎng)絡(luò)類型、接口對(duì)象、對(duì)端IP地址、接口的開(kāi)銷等等。
我們的OSPF路由協(xié)議就可以根據(jù)這些鏈路狀態(tài)信息和SPF算法計(jì)算出全網(wǎng)的拓?fù)洌?jiǎn)單來(lái)說(shuō)就是OSPF可以以此獲得一張全網(wǎng)地圖,最后路由器就可以根據(jù)這張全網(wǎng)地圖來(lái)轉(zhuǎn)發(fā)我們的數(shù)據(jù)報(bào)文。這篇文章就是一個(gè)關(guān)于OSPF的總結(jié)和概括,關(guān)于OSPF,我主要是用了1~7個(gè)數(shù)字來(lái)概括它的絕大多數(shù)內(nèi)容,是的,絕大多數(shù),不是所有,因?yàn)槟壳霸撐恼聝?nèi)容只是涉及到IA內(nèi)容。一、一種協(xié)議“1”就是指我們的一種協(xié)議,OSPF協(xié)議。除此之外,“1”還包括OSPF學(xué)習(xí)過(guò)程中涉及到一些名詞概念。比如,LSA,LSDB和Router ID。LSA,就是我們?cè)谏厦嫣岬降逆溌窢顟B(tài)信息,全英文是Link State Advertisement,這里不再重復(fù)贅述。LSDB,Link State DataBase,即鏈路狀態(tài)數(shù)據(jù)庫(kù),是運(yùn)行OSPF協(xié)議的每臺(tái)路由器都會(huì)有的,主要作用就是存儲(chǔ)自己和其它路由器的LSA。Router ID,這是路由器的標(biāo)識(shí)符,作用就是用來(lái)唯一標(biāo)識(shí)一臺(tái)路由器,它的產(chǎn)生有幾種方式,并且優(yōu)先級(jí)不同,首先是經(jīng)由我們網(wǎng)絡(luò)管理員手工配置,若沒(méi)有手動(dòng)配置的Router ID,選取Loopback接口上最大的IP地址作為Router ID,若連Loopback接口都沒(méi)有配置,則選擇已經(jīng)配置IP地址的接口上數(shù)值最大的IP地址作為Router ID。值得注意的是,Router ID是一個(gè)32bit的無(wú)符號(hào)整數(shù),所以不一定是路由器上的接口IP地址,只要它的范圍是從0.0.0.0~255.255.255.255就可以了,之所以我們經(jīng)常將Router ID和接口IP地址聯(lián)系在一起,則是因?yàn)樗?dú)特的選舉機(jī)制。二、兩層結(jié)構(gòu)“2”主要是指OSPF的分層結(jié)構(gòu),可以說(shuō)是OSPF將網(wǎng)絡(luò)分成了骨干區(qū)域和非骨干區(qū)域。非骨干區(qū)域必須和骨干區(qū)域相連,非骨干區(qū)域之間不可以連接,這是為了防止環(huán)路的產(chǎn)生。雖然在以后的進(jìn)階學(xué)習(xí)中,會(huì)有一個(gè)叫虛連接的方法來(lái)解決非骨干區(qū)域沒(méi)有和骨干區(qū)域連接在一起的問(wèn)題。但I(xiàn)A階段中,非骨干區(qū)域和骨干區(qū)域直接相連是毫無(wú)問(wèn)題的。三、三張表/三種身份“3”主要是指三張表和三種身份。1、三張表三張表包括OSPF鄰居表、OSPF拓?fù)浔砗蚈SPF路由表。OSPF鄰居表就是用來(lái)記錄路由器鄰居關(guān)系的表,包括鄰居的相關(guān)描述和狀態(tài)。也就是說(shuō)可以用鄰居表來(lái)顯示該路由器與哪些設(shè)備建立鄰居或鄰接關(guān)系,我們可以用display OSPF peer來(lái)查看這張表。OSPF拓?fù)浔恚脖唤凶鯨SDB表,這張表存儲(chǔ)了當(dāng)前區(qū)域的所有鏈路狀態(tài)信息,用來(lái)計(jì)算OSPF的最優(yōu)路由。而OSPF路由表記錄根據(jù)LSDB的鏈路狀態(tài)信息和SPF算法計(jì)算出來(lái)的最優(yōu)路由,這些路由將有可能作為最優(yōu)加入該表。這里需要注意,OSPF路由表不是我們的全局路由表,我們使用display ip router-table查看的就是路由器的全局路由表,它保存的是根據(jù)所有途徑學(xué)習(xí)到的最優(yōu)路由,而OSPF路由表存儲(chǔ)的是根據(jù)OSPF協(xié)議計(jì)算到最優(yōu)路由。2、三種身份三種身份則是指運(yùn)行了OSPF協(xié)議路由器的身份,主要是DR,BDR和DRother。首先明確OSPF需要為路由器劃分身份的背景。假設(shè)沒(méi)有對(duì)運(yùn)行OSPF協(xié)議的路由器進(jìn)行任何的配置,那么整個(gè)網(wǎng)絡(luò)中,所有運(yùn)行OSPF協(xié)議的路由器兩兩之間都會(huì)建立起鄰居和鄰接關(guān)系,它們之間都會(huì)互相發(fā)送和學(xué)習(xí)報(bào)文,那么可能就會(huì)造成一種重復(fù)學(xué)習(xí)的現(xiàn)象。類似于教室中,學(xué)生A把他的筆記給了學(xué)生B和學(xué)生C進(jìn)行抄錄,然后學(xué)生B又將他的筆記給了學(xué)生A和學(xué)生C抄錄。在這個(gè)過(guò)程中,學(xué)生B的筆記是已經(jīng)包括了學(xué)生A的,那么學(xué)生A和學(xué)生C就會(huì)不得不再次抄錄一遍最開(kāi)始學(xué)生A的筆記,這就是重復(fù)學(xué)習(xí)。然后為了防止路由器之間重復(fù)學(xué)習(xí)造成的資源浪費(fèi)問(wèn)題,OSPF就給路由器劃定了角色,也就是DR,BDR和DRother。這三種角色類似于組長(zhǎng),副組長(zhǎng)和組員的關(guān)系,其中DR是組長(zhǎng),BDR是副組長(zhǎng),DRother則是組員。之后當(dāng)組員需要交換筆記的時(shí)候,就只會(huì)把筆記提交給組長(zhǎng)和副組長(zhǎng),然后由他們把筆記分發(fā)給各個(gè)組員,而組員之間不能夠互相交換筆記。這就是我們DR和BDR的作用,也就是之后OSPF網(wǎng)絡(luò)中,DRother的路由器只會(huì)把LSA信息提交給DR和BDR,然后由他們進(jìn)行分發(fā),而DRother之間不會(huì)傳遞LSA信息。其中DR和BDR的選舉首先是根據(jù)接口的優(yōu)先級(jí)來(lái)選的,不過(guò)路由器接口的優(yōu)先級(jí)一般默認(rèn)都是1,所以接下來(lái)就會(huì)根據(jù)Router ID來(lái)進(jìn)行選舉,Router ID大的優(yōu)選。需要注意的是,接口優(yōu)先級(jí)的取值范圍是0-255,為0時(shí),表示當(dāng)前路由器不參加選舉。而且,當(dāng)選舉已經(jīng)結(jié)束,再加入新的設(shè)備,即便新設(shè)備的優(yōu)先級(jí)更高,也不會(huì)重新選舉DR和BDR,DR不故障,就不會(huì)選舉DR,DR故障后,只會(huì)是BDR成為DR,再競(jìng)選新的BDR。四、四種網(wǎng)絡(luò)類型/四種路由器類型“4”主要包括四種網(wǎng)絡(luò)類型和四種路由器類型。1、四種網(wǎng)絡(luò)類型四種網(wǎng)絡(luò)類型,分別是Broadcast,NBMA,P2MP和P2P。這四種網(wǎng)絡(luò)類型主要影響OSPF在接口上的操作,例如采用什么方式來(lái)發(fā)送OSPF協(xié)議報(bào)文,以及是否需要選舉DR和BDR。首先是Broadcast,廣播多點(diǎn)可達(dá),當(dāng)鏈路層協(xié)議是Ethernet時(shí),OSPF默認(rèn)的網(wǎng)絡(luò)類型就是這個(gè),這個(gè)時(shí)候需要選舉DR和BDR。接著是NBMA,非廣播多點(diǎn)可達(dá),該網(wǎng)絡(luò)類似是取消了廣播報(bào)文的廣播多點(diǎn)可達(dá)類型,當(dāng)鏈路層協(xié)議是幀中繼類型,OSPF默認(rèn)的網(wǎng)絡(luò)類型就是此項(xiàng),這個(gè)時(shí)候也是需要選舉DR和BDR。第三個(gè)是P2MP,點(diǎn)到多點(diǎn)網(wǎng)絡(luò),該網(wǎng)絡(luò)類型必須由其它網(wǎng)絡(luò)類型更改的,一般是由NBMA網(wǎng)絡(luò)類型更改過(guò)來(lái)的,不需要選舉DR和BDR,這是為了加快OSPF網(wǎng)絡(luò)中鄰居的建立速度。第四個(gè)就是P2P,點(diǎn)到點(diǎn)網(wǎng)絡(luò),當(dāng)鏈路層協(xié)議是PPP時(shí),OSPF默認(rèn)的網(wǎng)絡(luò)類型就是這個(gè),這個(gè)時(shí)候不需要選舉DR和BDR。2、四種路由器類型接著是四種路由器類型,這是根據(jù)OSPF網(wǎng)絡(luò)的分層結(jié)構(gòu)進(jìn)行劃分的。首先是區(qū)域內(nèi)路由器,IR,路由器所有接口都是在同一區(qū)域中的路由器。接著是區(qū)域邊界路由器,ABR,是連接骨干區(qū)域和非骨干區(qū)域的路由器。然后是自治系統(tǒng)邊界路由器,ASBR,是與其它自治系統(tǒng)交換路由信息的路由器。最后是骨干路由器,BR,有接口在骨干區(qū)域中的路由器。五、五種報(bào)文“5”即五種報(bào)文:Hello報(bào)文,DD報(bào)文,LSR報(bào)文,LSU報(bào)文和LSAck報(bào)文。Hello報(bào)文,它的作用就是發(fā)現(xiàn)、建立和維護(hù)鄰居關(guān)系。DD報(bào)文,全英文是Database Description,就是描述鏈路狀態(tài)信息,用于選舉主從以及攜帶LSA的摘要信息。LSR報(bào)文,Link State Request,鏈路狀態(tài)請(qǐng)求報(bào)文,根據(jù)對(duì)方發(fā)送過(guò)來(lái)的DD報(bào)文的摘要信息,請(qǐng)求獲取自己沒(méi)有的LSA信息。LSU報(bào)文,Link State Update,鏈路狀態(tài)更新報(bào)文,根據(jù)對(duì)方發(fā)送過(guò)來(lái)的請(qǐng)求,向?qū)Ψ桨l(fā)送相應(yīng)的LSA信息,此時(shí)LSA信息是完整的。LSAck報(bào)文,鏈路狀態(tài)確認(rèn)報(bào)文,回復(fù)對(duì)方自己收到了LSA信息,如果對(duì)方長(zhǎng)時(shí)間沒(méi)有收到LSAck報(bào)文,對(duì)方就會(huì)重新發(fā)送LSU報(bào)文。六、六種LSA“6”即六種LSA信息。正如我開(kāi)篇所說(shuō),該文章是對(duì)IA階段內(nèi)容的概括,而這六種LSA是更高階的內(nèi)容,所以這里為了文章的完整性,只是稍微提及一下,不會(huì)作詳細(xì)的贅述。七、七種狀態(tài)“7”指七種狀態(tài),即運(yùn)行OSPF的路由器之間建立鄰居和鄰接的過(guò)程中,路由器所需要經(jīng)歷的狀態(tài)變化過(guò)程。嚴(yán)格來(lái)說(shuō),路由器的狀態(tài)應(yīng)該是8種,不過(guò)多的這一種只會(huì)出現(xiàn)在NBMA網(wǎng)絡(luò)中,應(yīng)用極少,且該狀態(tài)的作用和當(dāng)中其它的某種狀態(tài)也是相同的,所以我最后只是用了7種狀態(tài)而不是8種狀態(tài),不過(guò)我會(huì)在文章的最后對(duì)此狀態(tài)作補(bǔ)充。首先是第一種狀態(tài),Down狀態(tài),即關(guān)閉狀態(tài),這也是路由器的第一個(gè)穩(wěn)定狀態(tài),即不會(huì)隨便發(fā)現(xiàn)變化的狀態(tài),該狀態(tài)表示當(dāng)前接口沒(méi)有收到任何的Hello報(bào)文。然后當(dāng)路由器收到其它路由器發(fā)送過(guò)來(lái)的Hello報(bào)文之后,就會(huì)進(jìn)入Init狀態(tài),這是一種單方發(fā)現(xiàn)狀態(tài),該狀態(tài)表示已經(jīng)收到其它路由器發(fā)送的Hello報(bào)文,但在對(duì)方的Hello報(bào)文的鄰居表中沒(méi)有看到自己的Router ID,也就是對(duì)方還不知道我是鄰居。然后當(dāng)兩邊路由器相互發(fā)送Hello報(bào)文,建立起鄰居關(guān)系之后,就會(huì)進(jìn)入2-way狀態(tài),這是鄰居狀態(tài),也是第二個(gè)穩(wěn)定狀態(tài),表示路由器建立鄰居關(guān)系成功。之后當(dāng)路由器之間想要同步LSDB數(shù)據(jù)庫(kù)時(shí),路由器首先會(huì)進(jìn)入ExStart狀態(tài),該狀態(tài)表示路由器和它的鄰居路由器開(kāi)始協(xié)商主從關(guān)系,也就是協(xié)商誰(shuí)先發(fā)送報(bào)文。協(xié)商完成后,路由器就正式進(jìn)入Exchange狀態(tài),該狀態(tài)表示路由器的主從關(guān)系已經(jīng)確認(rèn),開(kāi)始正式交換DD報(bào)文,此時(shí)的DD報(bào)文主要包含路由器的LSDB的摘要信息。然后就會(huì)進(jìn)入Loading狀態(tài),該狀態(tài)中,路由器會(huì)比較DD報(bào)文和自己的LSDB信息,如果DD報(bào)文中存在LSDB不具有的LSA信息,則向鄰居發(fā)送LSU報(bào)文請(qǐng)求該LSA的完整信息。之后當(dāng)LSA信息交換完畢,也就是LSDB同步結(jié)束,路由器就會(huì)進(jìn)入最后一個(gè)狀態(tài)——Full狀態(tài),即鄰接狀態(tài),也是第三個(gè)和最后一個(gè)穩(wěn)定狀態(tài),該狀態(tài)就是表示路由器的LSDB同步已經(jīng)完成。之后,建立起關(guān)系的路由器之間就只會(huì)周期性發(fā)送Hello報(bào)文來(lái)維護(hù)彼此之間的關(guān)系。這就是運(yùn)行OSPF協(xié)議的路由器之間建立起鄰居或鄰接關(guān)系所需要經(jīng)歷的七種狀態(tài)。然后是只會(huì)出現(xiàn)在NBMA網(wǎng)絡(luò)中的第8種狀態(tài),Attempt狀態(tài),該狀態(tài)和Init狀態(tài)類似,當(dāng)路由器發(fā)現(xiàn)了Hello報(bào)文,但還沒(méi)有收到對(duì)方回應(yīng)的報(bào)文的時(shí)候,路由器就會(huì)處于這種狀態(tài)。近年來(lái),嵌入式系統(tǒng)的廣泛應(yīng)用已經(jīng)深刻改變了我們的生活方式。從智能手機(jī)到智能家居,從汽車到醫(yī)療設(shè)備,嵌入式技術(shù)已經(jīng)成為現(xiàn)代社會(huì)不可或缺的...詳情>>
2023-12-12 11:02:35在當(dāng)今的科技世界中,嵌入式系統(tǒng)已經(jīng)滲透到我們生活的方方面面,從智能手機(jī)、電視、汽車到醫(yī)療設(shè)備等。而在這些設(shè)備中,Linux網(wǎng)絡(luò)編程扮演著至...詳情>>
2023-12-12 09:55:55在數(shù)字化世界中,游戲已經(jīng)成為了人們休閑娛樂(lè)的重要方式之一。隨著科技的不斷進(jìn)步,游戲開(kāi)發(fā)行業(yè)也在不斷發(fā)展,而Java作為一門廣泛使用的編程語(yǔ)...詳情>>
2023-12-12 08:49:15在數(shù)字化的時(shí)代,網(wǎng)頁(yè)設(shè)計(jì)已經(jīng)成為了一個(gè)重要的領(lǐng)域。而在這個(gè)領(lǐng)域中,HTML(HyperTextMarkupLanguage)無(wú)疑是最基礎(chǔ)、最重要的一環(huán)。它是構(gòu)建...詳情>>
2023-12-12 08:15:55嵌入式系統(tǒng)開(kāi)發(fā)中,內(nèi)存分配是一個(gè)至關(guān)重要的話題。嵌入式系統(tǒng)通常具有有限的內(nèi)存資源,因此合理的內(nèi)存分配方式對(duì)系統(tǒng)的性能和穩(wěn)定性至關(guān)重要。...詳情>>
2023-12-12 06:35:55