——指定路由器產生用于描述所處的網段的鏈路數據包—network link,該數據包里包含在該網段上所有的路由器,包括指定路由器本身的狀態信息。
——指定路由器與所有與其處于同一網段上的OSPF路由器建立相鄰關系。由于OSPF路由器之間通過建立相鄰關系及以后的flooding來進行鏈路狀態數據庫是同步的,因此,我們可以說指定路由器處于一個網段的中心地位。 ——需要說明的是,指定路由器DR的定義與前面所定義的幾種路由器是不同的。DR的選擇是通過OSPF的Hello數據包來完成的,在OSPF路由協議初始化的過程中,會通過Hello數據包在一個廣播性網段上選出一個ID最大的路由器作為指定路由器DR,并且選出ID次大的路由器作為備份指定路由器BDR,BDR在DR發生故障后能自動替代DR的所有工作。當一個網段上的DR和BDR選擇產生后,該網段上的其余所有路由器都只與DR及BDR建立相鄰關系。在這里,一個路由器的ID是指向該路由器的標識,一般是指該路由器的環回端口或是該路由器上的最小的ip地址。
6.2 OSPF鏈路狀態廣播數據包種類
——隨著OSPF路由器種類概念的引入,OSPF路由協議又對其鏈路狀態廣播數據包(LSA)作出了分類。OSPF將鏈路狀態廣播數據包共分成5類,分別為:
類型1:又被稱為路由器鏈路信息數據包(Router Link),所有的OSPF路由器都會產生這種數據包,用于描述路由器上聯接到某一個區域的鏈路或是某一端口的狀態信息。路由器鏈路信息數據包只會在某一個特定的區域內廣播,而不會廣播至其它的區域。
——在類型1的鏈路數據包中,OSPF路由器通過對數據包中某些特定數據位的設定,告訴其余的路由器自身是一個區域邊界路由器或是一個AS邊界路由器。并且,類型1的鏈路狀態數據包在描述其所聯接的鏈路時,會根據各鏈路所聯接的網絡類型對各鏈路打上鏈路標識,Link ID。表一列出了常見的鏈路類型及鏈路標識。
鏈路類型 具體描述 鏈路標識
1 用于描述點對點的網絡 相鄰路由器的路由器標識
2 用于描述至一個廣播性網絡的鏈路 DR的端口地址
3 用于描述至非穿透網絡,即stub網絡的鏈路 stub網絡的網絡號碼
4 用于描述虛擬鏈路 相鄰路由器的路由器標識
——類型2:又被稱為網絡鏈路信息數據包(Network Link)。網絡鏈路信息數據包是由指定路由器產生的,在一個廣播性的、多點接入的網絡,例如以太網、令牌環網及FDDI網絡環境中,這種鏈路狀態數據包用來描述該網段上所聯接的所有路由器的狀態信息。
——指定路由器DR只有在與至少一個路由器建立相鄰關系后才會產生網絡鏈路信息數據包,在該數據包中含有對所有已經與DR建立相鄰關系的路由器的描述,包括DR路由器本身。類型2的鏈路信息只會在包含DR所處的廣播性網絡的區域中廣播,不會廣播至其余的OSPF路由區域。
——類型3和類型4:類型3和類型4的鏈路狀態廣播在OSPF路由協議中又稱為總結鏈路信息數據包(Summary Link),該鏈路狀態廣播是由區域邊界路由器或AS邊界路由器產生的。Summary Link描述的是到某一個區域外部的路由信息,這一個目的地地址必須是同一個AS中。Summary Link也只會在某一個特定的區域內廣播。類型3與類型4兩種總結性鏈路信息的區別在于,類型3是由區域邊界路由器產生的,用于描述到同一個AS中不同區域之間的鏈路狀態;而類型4是由AS邊界路由器產生的,用于描述不同AS的鏈路狀態信息。
——值得一提的是,只有類型3的Summary Link才能廣播進一個殘域,因為在一個殘域中不答應存在AS邊界路由器。殘域的區域邊界路由器產生一條默認的Summary Link對域內廣播,從而在其余路由器上產生一條默認路由信息。采用Summary Link可以減小殘域中路由器的鏈路狀態數據庫的大小,進而減少對路由器資源的利用,提高路由器的運算速度。
——類型5:類型5的鏈路狀態廣播稱為AS外部鏈路狀態信息數據包。類型5的鏈路數據包是由AS邊界路由器產生的,用于描述到AS外的目的地的路由信息,該數據包會在AS中除殘域以外的所有區域中廣播。一般來說,這種鏈路狀態信息描述的是到AS外部某一特定網絡的路由信息,在這種情況下,類型5的鏈路狀枋數據包的鏈路標識采用的是目的地網絡的IP地址;在某些情況下,AS邊界路由器可以對AS內部廣播默認路由信息,在這時,類型5的鏈路廣播數據包的鏈路標識采用的是默認網絡號碼0.0.0.0。
7.OSPF協議工作過程
——OSPF路由協議針對每一個區域分別運行一套獨立的計算法則,對于ABR來說,由于一個區域邊界路由器同時與幾個區域相聯,因此一個區域邊界路由器上會同時運行幾套OSPF計算方法,每一個方法針對一個OSPF區域。下面對OSPF協議運算的全過程作一概括性的描述。
7.1 區域內部路由
——當一個OSPF路由器初始化時,首先初始化路由器自身的協議數據庫,然后等待低層次協議(數據鏈路層)提示端口是否處于工作狀態。
——假如低層協議得知一個端口處于工作狀態時,OSPF會通過其Hello協議數據包與其余的OSPF路由器建立交互關系。一個OSPF路由器向其相鄰路由器發送Hello數據包,假如接收到某一路由器返回的Hello數據包,則在這兩個OSPF路由器之間建立起OSPF交互關系,這個過程在OSPF中被稱為adjacency。在廣播性網絡或是在點對點的網絡環境中,OSPF協議通過Hello數據包自動地發現其相鄰路由器,在這時,OSPF路由器將Hello數據包發送至一非凡的多點廣播地址,該多點廣播地址為ALLSPFRouters。在一些非廣播性的網絡環境中,我們需要經過某些設置來發現OSPF相鄰路由器。在多接入的環境中,例如以太網的環境,Hello協議數據包還可以用于選擇該網絡中的指定路由器DR。
——一個OSPF路由器會與其新發現的相鄰路由器建立OSPF的adjacency,并且在一對OSPF路由器之間作鏈路狀態數據庫的同步。在多接入的網絡環增中,非DR的OSPF路由器只會與指定路由器DR建立adjacency,并且作數據庫的同步。OSPF協議數據包的接收及發送正是在一對OSPF的adjacency間進行的。
——OSPF路由器周期性地產生與其相聯的所有鏈路的狀態信息,有時這些信息也被稱為鏈路狀態廣播LSA(Link State Advertisement)。當路由器相聯接的鏈路狀態發生改變時,路由器也會產生鏈路狀態廣播信息,所有這些廣播數據是通過Flood的方式在某一個OSPF區域內進行的。Flooding算法是一個非常可靠的計算過程,它保證在同一個OSPF區域內的所有路由器都具有一個相同的OSPF數據庫。根據這個數據庫,OSPF路由器會將自身作為根,計算出一個最短路徑樹,然后,該路由器會根據最短路徑樹產生自己的OSPF路由表。
7.2 建立OSPF交互關系adjacency
——OSPF路由協議通過建立交互關系來交換路由信息,但是并不是所有相鄰的路由器會建立OSPF交互關系。下面將OSPF建立adjacency的過程簡要介紹一下。
——OSPF協議是通過Hello協議數據包來建立及維護相鄰關系的,同時也用其來保證相鄰路由器之間的雙向通信。OSPF路由器會周期性地發送Hello數據包,當這個路由器看到自身被列于其它路由器的Hello數據包里時,這兩個路由器之間會建立起雙向通信。在多接入的環境中,Hello數據包還用于發現指定路由器DR,通過DR來控制與哪些路由器建立交互關系。
——兩個OSPF路由器建立雙向通信這后的第二個步驟是進行數據庫的同步,數據庫同步是所有鏈路狀態路由協議的最大的共性。在OSPF路由協議中,數據庫同步關系僅僅在建立交互關系的路由器之間保持。
——OSPF的數據庫同步是通過OSPF數據庫描述數據包(Database Description Packets)來進行的。OSPF路由器周期性地產生數據庫描述數據包,該數據包是有序的,即附帶有序列號,并將這些數據包對相鄰路由器廣播。相鄰路由器可以根據數據庫描述數據包的序列號與自身數據庫的數據作比較,若發現接收到的數據比數據庫內的數據序列號大,則相鄰路由器會針對序列號較大的數據發出請求,并用請求得到的數據來更新其鏈路狀態數據庫。
——我們可以將OSPF相鄰路由器從發送Hello數據包,建立數據庫同步至建立完全的OSPF交互關系的過程分成幾個不同的狀態,分別為:
——Down:這是OSPF建立交互關系的初始化狀態,表示在一定時間之內沒有接收到從某一相鄰路由器發送來的信息。在非廣播性的網絡環境內,OSPF路由器還可能對處于Down狀態的路由器發送Hello數據包。
——Attempt:該狀態僅在NBMA環境,例如幀中繼、X.25或ATM環境中有效,表示在一定時間內沒有接收到某一相鄰路由器的信息,但是OSPF路由器仍必須通過以一個較低的頻率向該相鄰路由器發送Hello數據包來保持聯系。
——Init:在該狀態時,OSPF路由器已經接收到相鄰路由器發送來的Hello數據包,但自身的IP地址并沒有出現在該Hello數據包內,也就是說,雙方的雙向通信還沒有建立起來。 ——2-Way:這個狀態可以說是建立交互方式真正的開始步驟。在這個狀態,路由器看到自身已經處于相鄰路由器的Hello數據包內,雙向通信已經建立。指定路由器及備份指定路由器的選擇正是在這個狀態完成的。在這個狀態,OSPF路由器還可以根據其中的一個路由器是否指定路由器或是根據鏈路是否點對點或虛擬鏈路來決定是否建立交互關系。
——Exstart:這個狀態是建立交互狀態的第一個步驟。在這個狀態,路由器要決定用于數據交換的初始的數據庫描述數據包的序列號,以保證路由器得到的永遠是最新的鏈路狀態信息。同時,在這個狀態路由器還必須決定路由器之間的主備關系,處于主控地位的路由器會向處于備份地位的路由器請求鏈路狀態信息。
——Exchange:在這個狀態,路由器向相鄰的OSPF路由器發送數據庫描述數據包來交換鏈路狀態信息,每一個數據包都有一個數據包序列號。在這個狀態,路由器還有可能向相鄰路由器發送鏈路狀態請求數據包來請求其相應數據。從這個狀態開始,我們說OSPF處于Flood狀態。
——Loading:在loading狀態,OSPF路由器會就其發現的相鄰路由器的新的鏈路狀態數據及自身的已經過期的數據向相鄰路由器提出請求,并等待相鄰路由器的回答。
——Full:這是兩個OSPF路由器建立交互關系的最后一個狀態,在這時,建立起交互關系的路由器之間已經完成了數據庫同步的工作,它們的鏈路狀態數據庫已經一致。 7.3 域間路由
——前面一節描述了OSPF路由協議的單個區域中的計算過程。在單個OSPF區域中,OSPF路由協議不會產生更多的路由信息。為了與其余區域中的OSPF路由器通訊,該區域的邊界路由器會產生一些其它的信息對域內廣播,這些附加信息描繪了在同一個AS中的其它區域的路由信息。具體路由信息交換過程如下:
——在OSPF的定義中,所有的區域都必須與區域0相聯,因此每一個區域都必須有一個區域邊界路由器與區域0相聯,這一個區域邊界路由器會將其相聯接的區域內部結構數據通過Summary Link廣播至區域0,也就是廣播至所有其它區域的邊界路由器。在這時,與區域0相聯的邊界路由器上有區域0及其它所有區域的鏈路狀態信息,通過這些信息,這些邊界路由器能夠計算出至相應目的地的路由,并將這些路由信息廣播至與其相聯接的區域,以便讓該區域內部的路由器找到與區域外部通信的最佳路由。
7.4 AS外部路由
——一個自治域AS的邊界路由器會將AS外部路由信息廣播至整個AS中除了殘域的所有區域。為了使這些AS外部路由信息生效,AS內部的所有的路由器(除殘域內的路由器)都必須知道AS邊界路由器的位置,該路由信息是由非殘域的區域邊界路由器對域內廣播的,其鏈路廣播數據包的類型為類型4。
8.OSPF路由協議驗證
——在OSPF路由協議中,所有的路由信息交換都必須經過驗證。在前文所描述的OSPF協議數據包結構中,包含有一個驗證域及一個64位長度的驗證數據域,用于特定的驗證方式的計算。
——OSPF數據交換的驗證是基于每一個區域來定義的,也就是說,當在某一個區域的一個路由器上定義了一種驗證方式時,必須在該區域的所有路由器上定義相同的協議驗證方式。另外一些與驗證相關的參數也可以基于每一個端口來定義,例如當采用單一口令驗證時,我們可以對某一區域內部的每一個網絡設置不同的口令字。 ——在OSPF路由協議的定義中,初始定義了兩種協議驗證方式,方式0及方式1,分別介紹如下:
——驗證方式0:采用驗證方式0表示OSPF對所交換的路由信息不驗證。在OSPF的數據包頭內64位的驗證數據位可以包含任何數據,OSPF接收到路由數據后對數據包頭內的驗證數據位不作任何處理。
——驗證方式1:驗證方式1為簡單口令字驗證。這種驗證方式是基于一個區域內的每一個網絡來定義的,每一個發送至該網絡的數據包的包頭內都必須具有相同的64位長度的驗證數據位,也就是說驗證方式1的口令字長度為64bits,或者為8個字符。
9.小結
——前文介紹了OSPF路由協議的概念及該協議的工作原理。OSPF路由協議定義于RFC1247及RFC1583,該協議提供了一個不同的網絡通過同一種TCP/IP協議交換網絡信息的途徑。作為一種鏈路狀態的路由協議,OSPF具備許多優點:快速收斂,支持變長網絡屏蔽碼,支持CIDR以及地址summary,具有層次化的網絡結構,支持路由信息驗證等。所有這些特點保證了OSPF路由協議能夠被應用到大型的、復雜的網絡環境中。
新聞熱點
疑難解答