<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > EPON系統(tǒng)三層路由及接口設(shè)計(jì)

          EPON系統(tǒng)三層路由及接口設(shè)計(jì)

          作者: 時(shí)間:2011-06-12 來源:網(wǎng)絡(luò) 收藏
          2軟件

          本文引用地址:http://www.ex-cimer.com/article/156198.htm

            2.1管理模塊

            可以分為靜態(tài)路由和動(dòng)態(tài)路由兩大類。靜態(tài)路由由網(wǎng)絡(luò)管理者直接配置產(chǎn)生,動(dòng)態(tài)路由由路由協(xié)議學(xué)習(xí)生成。為了實(shí)現(xiàn)軟件路由表和交換芯片路由表的同步和路由擇優(yōu)等功能,需要進(jìn)行路由信息收集、過濾、優(yōu)選等操作,因此中需要路由管理模塊維護(hù)不同的路由表項(xiàng)。路由管理模塊(RTM)位于各軟硬件平臺(tái)驅(qū)動(dòng)層之上,三層功能協(xié)議層及管理層之下,是三層功能實(shí)現(xiàn)的核心模塊。根據(jù),它在中需要完成的工作如下:

            ① 管理員配置添加三層,包括添加SUPER-VLAN、SUB-VLAN以及IP;

            ② 管理模塊向路由管理模塊通告事件,如接口的UP/DOWN事件;

           ?、?協(xié)議模塊學(xué)習(xí)到動(dòng)態(tài)路由,進(jìn)行動(dòng)態(tài)路由的添加/刪除;

           ?、?路由管理模塊處理接口變化事件,并通知各三層功能協(xié)議模塊;同時(shí)管理來自協(xié)議模塊的動(dòng)態(tài)路由的寫入與刪除;

           ?、?OS IP協(xié)議棧ARP功能提供主機(jī)路由表的維護(hù),并向路由管理模塊提供路由條目中下一跳Gate-way相關(guān)的ARP功能;

            ⑥ 交換芯片驅(qū)動(dòng)為路由管理模塊提供硬件FIB表的刪除與寫入功能。

           ?、?OS IP協(xié)議棧向路由管理模塊提供硬件FIB表的刪除與寫入功能。

            對(duì)應(yīng)上述功能,設(shè)計(jì)將路由管理模塊劃分成更小的模塊來分別實(shí)現(xiàn)。如圖2所示,路由管理模塊(RTM)由路由表控制模塊(RTM_CTRL)、主機(jī)路由控制模塊、管理與配置模塊、動(dòng)態(tài)路由消息處理模塊、接口消息處理模塊、操作適配層以及驅(qū)動(dòng)適配層組成。

            路由表(RIB table)由節(jié)點(diǎn)鏈表組成,每個(gè)節(jié)點(diǎn)表示到達(dá)一個(gè)目的網(wǎng)段的所有路由。如圖3所示,每一個(gè)node中都記錄3張RIB表,分別是RIB-active表、RIB-standby表和RIB-pend表,每一個(gè)表的子項(xiàng)都是到達(dá)該目的網(wǎng)段的路由信息,即RIB路由條目、RIB里面記錄路由類型(RIP/OSPF/靜態(tài)等)、下一跳網(wǎng)關(guān)、距離、metric和生成時(shí)間等。

            

          路由管理模塊

            RIB-active中的RIB路由表示當(dāng)前激活的路由,該路由會(huì)被寫入到硬件FIB和OS FIB中去,實(shí)現(xiàn)業(yè)務(wù)流的三層轉(zhuǎn)發(fā)功能。通常一個(gè)目的網(wǎng)段只有一個(gè)active路由。

            RIB-standby中的路由條目是可到達(dá)但不是最優(yōu)路徑的路由,當(dāng)active路由不可用時(shí),路由管理模塊會(huì)在standby RIB找一個(gè)最優(yōu)路由升級(jí)為active路由。

            RIB-pend路由表中的路由是由于該路由的下一跳網(wǎng)關(guān)不可達(dá)(查ARP表)而暫時(shí)掛起的路由路徑,當(dāng)下一跳網(wǎng)關(guān)可達(dá)后,該路由會(huì)升級(jí)為standby路由或者是active路由。

            2.2 OSPF路由原理

            OSPF是一種鏈路狀態(tài)路由協(xié)議,被設(shè)計(jì)用于單一的自制系統(tǒng)(AS)中。每個(gè)OSPF路由器都維持著同樣的數(shù)據(jù)庫以描述AS的拓?fù)浣Y(jié)構(gòu),并以此數(shù)據(jù)庫來創(chuàng)建最短路徑樹和計(jì)算路由表。OSPF提供等值多路徑。在發(fā)現(xiàn)拓?fù)涓淖兒?,OSPF僅利用很少的路由流量就可以快速地重新計(jì)算出路徑。通過提供區(qū)域路徑,來提供額外的路徑保護(hù)并可以減少協(xié)議所需要的流量。有關(guān)路由表的計(jì)算是OSPF的核心內(nèi)容,它是動(dòng)態(tài)生成路由器內(nèi)核路由表的基礎(chǔ)。這里將復(fù)雜的OSPF計(jì)算過程總結(jié)為以下四點(diǎn):

           ?、?當(dāng)路由器初始化或當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)發(fā)生變化(例如增減路由器,鏈路狀態(tài)發(fā)生變化等)時(shí),路由器會(huì)產(chǎn)生鏈路狀態(tài)廣播數(shù)據(jù)包LSA(Link-State Advertisement),該數(shù)據(jù)包里包含路由器上所有相連鏈路,也即為所有端口的狀態(tài)信息。

            ② 所有路由器會(huì)通過一種被稱為刷新(Flooding)的方法來交換鏈路狀態(tài)數(shù)據(jù)。Flooding是指路由器將其LSA數(shù)據(jù)包傳送給所有與其相鄰的OSPF路由器,相鄰路由器根據(jù)其接收到的鏈路狀態(tài)信息更新自己的數(shù)據(jù)庫,并將該鏈路狀態(tài)信息轉(zhuǎn)送給與其相鄰的路由器,直至穩(wěn)定的一個(gè)過程。

           ?、?當(dāng)網(wǎng)絡(luò)重新穩(wěn)定下來,即OSPF路由協(xié)議收斂下來時(shí),所有的路由器會(huì)根據(jù)其各自的鏈路狀態(tài)信息數(shù)據(jù)庫計(jì)算出各自的路由表。該路由表中包含路由器到每一個(gè)可到達(dá)目的地的Cost以及到達(dá)該目的地所要轉(zhuǎn)發(fā)的下一個(gè)路由器(next-hop)。

           ?、?當(dāng)網(wǎng)絡(luò)狀態(tài)比較穩(wěn)定時(shí),網(wǎng)絡(luò)中傳遞的鏈路狀態(tài)信息是比較少的。這也正是鏈路狀態(tài)路由協(xié)議區(qū)別于距離矢量路由協(xié)議的一大特點(diǎn)。

            通過以上步驟,OSPF動(dòng)態(tài)監(jiān)視網(wǎng)絡(luò)狀態(tài),一旦發(fā)生變化則迅速擴(kuò)散,達(dá)到對(duì)網(wǎng)絡(luò)拓?fù)涞目焖倬酆?,從而確定出新的網(wǎng)絡(luò)路由表。這里的路由表不同于實(shí)現(xiàn)路由轉(zhuǎn)發(fā)功能時(shí)用到的內(nèi)核路由表,它只是OSPF本身的內(nèi)部路由表。因此,完成上述工作后,往往還要通過路由管理模塊與內(nèi)核路由表交互,實(shí)現(xiàn)三層轉(zhuǎn)發(fā)。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();