域間路由協議,域間路由協議的內容有哪些?
域間路由協議,域間路由協議的內容有哪些?
當前Internet被劃分為多個自治系統,自治系統是一個實體,一般是指隸屬于一個管理機構的路由器集合。每個自治系統可以制定自己的路由策略。自治系統內部的路由器通過域內路由協議彼此交換路由信息,一般域內路由協議分為距離向量協議和鏈路狀態協議,前者以RIP代表,后者常用的有OSPF、IS-IS協議;自治系統邊界路由器通過域間路由協議交換路由信息,目前Internet上的域間路由協議事實標準是BGP-4協議。
BGP-4協議軟件的總體設計
如圖1所示,作者從功能上把協議軟件分為Init,Event Generator,FSM,Message Parser,Routing Information Processor,Protocol Messager和I/O等7個模塊,還有Config和RIB兩個數據庫.為了提高處理效率,減輕系統負擔,整個軟件設計為單進程結構,各個模塊之間的交互采用函數調用和數據交換的方式.下面簡單敘述各個模塊的功能.
圖1 BGP-4協議實現總體結構圖
Init:對用戶配置文件或控制臺輸入進行分析,從中讀取BGP-4協議軟件運行時所需的各項參數,同時進行語法和語義檢查,把正確的參數寫入Config數據庫中,供其他模塊在運行時檢索引用;之后初始化全局數據結構(如事件隊列、時鐘鏈等),并為某些結構分配空間;最后向FSM發送Start事件,啟動FSM模塊,進而使整個協議軟件開始運行.
Event Generator:生成事件,從而驅動FSM模塊.這些事件包括通過I/O模塊收到BGP報文以及檢測到TCP連接成功或失敗,通過檢查時鐘鏈得到時鐘超時事件.本模塊還負責維護事件隊列和時鐘鏈,提供對這些數據結構進行操作的函數接口.
FSM:接收模塊Init和Event Generator送來的事件,作為有限狀態機的輸入,產生狀態變遷及相應動作,控制Message Parser模塊的運行.本模塊還通過I/O模塊負責TCP連接的建立,同時還通過Event Generator產生新的事件.
Message Parser:對收到的4種BGP-4報文進行正確性檢查和分析.如果是UPDATE報文,還要通過調用模塊Routing Information Processor更新路由信息數據庫RIB,調用模塊Protocol Messager向相鄰的內部BGP網關發送協議報文.本模塊還在FSM的控制下,周期性地掃描路由器中的全局路由表,向相鄰的外部BGP網關廣播本地路由表的變化情況.
Routing Information Processor:從Message Parser模塊中得到要撤銷的和聲明為有效的路由,更新路由信息庫RIB.為了減小RIB的規模,提高處理效率,這里還對RIB中的路由進行合并和壓縮.另外,本模塊還提供了對RIB中的數據結構進行操作的所有函數.
Protocol Messager:對4種BGP報文進行格式化,并調用I/O模塊將其發出.
I/O:直接調用操作系統提供的TCP服務接口,完成TCP連接的建立和釋放;接收相鄰BGP網關送來的報文,提交給上層模塊;接收上層模塊發來的格式化為字節流的BGP報文,發送給相應的BGP網關.此外,對這些操作中產生的相應事件,本模塊還通過Event Generator發送給FSM.
Config:存放BGP協議軟件運行時所需的各項配置參數.這些參數可能來自配置文件,也可以由用戶通過控制臺輸入.
RIB:存放所有協議軟件所產生和要利用的路由信息的數據庫.實際上分為3個相互獨立的數據結構:Adj-RIBs-In存放從其他BGP網關收到的路由信息,Loc-RIB存放路由器中本地路由表的映射,Adj-RIBs-Out存放向相鄰BGP網關廣播過的路由信息.
由于BGP-4協議是一個比較復雜的動態路由協議,因此在實現中遇到了許多難點.主要有:如何在連接數比較多的情況下保證系統的效率,如何保證路由信息的及時交換,如何支持可變長地址掩碼和如何保證I/O的效率等.
BGP-4協議軟件的實現策略和優化
(1) 單進程體系結構
在高性能路由器中要同時運行多個路由協議軟件并且要維護很大的路由表.如果BGP-4在設計時采用傳統的多進程體系結構,那么當連接數比較多時,進程數會很多,勢必影響整個路由器系統的效率.為了提高系統效率,BGP-4軟件設計時沒有采用多進程結構,而是采用了單進程結構.這樣雖然提高了效率,但是也增加了實現的難度.為了在一個進程中實現本來需要多個進程完成的工作,我們把整個軟件設計成事件驅動方式,所有的系統操作和收發幀都通過向軟件發送事件來進行.而軟件的FSM模塊則不停的輪詢事件隊列,如果有事件則處理,如果沒有事件,軟件自動休眠2秒,這也是為了提高系統的效率.
(2) 基于二叉樹的支持可變長掩碼的路由表
為了便于路由的查找、更新及合并,同時支持可變長掩碼,作者把BGP-4協議軟件中的3種路由表(Adj_RIBs_In,bgpIGP,Adj_RIBs_Out)都設計為二叉數結構.這3種二叉數的結構和意義都大體相同.每個有效節點表示一條路由,從根到該節點的路徑表示此路由可達的目的網絡,其中左右子樹表示“0”或“1”,路徑長度表示子網掩碼的長度.這樣可以方便地表示變長掩碼的網絡,同時還可以大大加快路由表的查找速度,因為無論路由表的規模有多大,最多32次比較就可以找到某路由(通常情況下比較次數要少得多).此外,路由的插入、刪除和合并操作也可以高效地實現.
(3) 基于靜態數組的時鐘隊列
時鐘鏈是一個按照超時順序由近到遠排序的時鐘鏈表,各模塊啟動的時鐘都按序插入到此表中.判斷是否有時鐘超時,只要從鏈表頭節點(最先超時的時鐘)開始,把當前時刻與此節點超時時刻比較,小于則說明此時鐘已超時,發送超時事件.為了加快處理速度和減輕插入負擔,作者把時鐘鏈設計為靜態鏈表的結構.如下所示:
typedef struct_timerItem {
bgpTime timeout_val;
bgpPeer×peer;
int ev;
int next; int last;
} timerItem;
typedef struct_bgpTimerChain {
int av_head;
timerItem timer[BGPMAXTIMER];
} bgpTimerChain;
每個時鐘用一個timerItem結構表示,其中timeout_val記錄超時時刻,peer記錄此時鐘對應哪個網關,ev是超時后要發送的事件,last和next分別指向鏈表中的前后節點.時鐘鏈結構bgpTimerChain中av_head指向當前未分配時鐘構成的空閑鏈表的頭節點.初始時,所有未分配時鐘構成一個大的空閑鏈表.啟動時鐘時只要把此節點摘下,插入時鐘鏈的相應位置,并返回時鐘號.因為時鐘在數組timer中的位置不會變化,所以關閉時鐘時可以通過時鐘號把此節點直接摘下,放入到空閑鏈表中.
(4) 基于單進程體系結構的I/O模塊設計
BGP-4協議建立在TCP層之上,利用TCP協議軟件提供的服務接口完成建立連接和發送報文的工作.I/O模塊便是協議軟件中與TCP服務接口進行交互的部分.為了盡量減少系統開銷,作者把整個BGP-4協議軟件設計為單進程結構,這樣就加大了I/O模塊的設計難度.因為通常的設計思路是為每個BGP連接生成一個獨立進程,TCP調用采用阻塞模式,調用后等待,直到成功或失敗而返回,各進程之間互不影響;但是在單進程結構中,與所有相鄰網關的交互都在同一進程內執行,如果仍用阻塞模式,就會由于一個連接的等待而使其他連接的交互掛起,從而使協議失敗.因此,所有TCP調用必須立即返回,不管其運行狀態如何.之后再定期輪詢檢查各個連接的當前運行狀態,如有變化則通過Event Generator向FSM發送相應事件.這也是采用事件驅動機制的原因之一.
為了在輪詢時檢查哪些連接在等待哪些狀態,需要設立一些集合以記錄等待某狀態的連接.這里共有3種集合:
A、 等待建連響應的集合.這里記錄那些已經發出連接請求,正在等待對方響應的連接號.判斷連接是否建立好實際上是通過檢測此連接是否可寫完成的;
B、 等待主動連接的集合.這里記錄已經bind成功,正在等待對方發起主動連接請求的連接號.因為利用TCP服務可以監聽來自所有地址的連接請求,所以這個集合中實際上只有一個連接號,即bind調用成功后返回的連接號.判斷是否有主動連接請求到來是通過檢測此連接是否可讀(readable)完成的;
C、 等待數據到來的集合.這里記錄連接已正常建立且進入Established狀態,等待接收對方報文的連接號.判斷是否有數據到來也是通過檢測此連接是否可讀完成的.
為了在檢查到狀態變化時向某狀態機發送事件,還需要設置一個連接號到bgpPeer結構指針的映射表.實際上,輪詢檢查和發送事件是在Event Generator模塊中實現的.下面著重講一下TCP連接建立和數據發送的實現.
(5) TCP連接的建立
這里采用了與BSD Socket兼容的一系列TCP調用來完成連接的建立.實際上,這里并不等待連接建立的完成,而只是在調用結束后把返回的連接號置入相應的集合中待以后輪詢事件時檢測.
(6) 數據的發送
由于數據發送也采用了無阻塞方式,而且沒有設立等待發送完成的連接集合,因此,要在發送過程中累計實際發送的字節數,直到全部發送完為止.通常TCP協議軟件在實現時,先把待發送數據拷入系統緩沖區中,然后再逐步發送給遠端.因此,提供給用戶的數據發送接口不會發生阻塞.這樣,采用“全部發送完為止”的方式便不會影響協議軟件對其他TCP連接的響應.另外,在發送數據的過程中也會檢測到TCP連接失敗或關閉等事件,這時要通過Event Generator發送給相應的FSM.
非常好我支持^.^
(1) 100%
不好我反對
(0) 0%
相關閱讀:
- [電子說] OSPF鏈路狀態路由協議學習筆記 2023-08-23
- [通信網絡] OSPF是如何計算路由的?OSPF如何適應大型網絡的? 2023-08-18
- [電子說] 動態路由協議的基本工作原理 BGP Path Attributes與路由選擇 2023-07-31
- [電子說] 萬字爆肝整理-詳解路由協議 2023-07-26
- [通信網絡] 什么是is-is路由協議 IS-IS路由協議配置實踐 2023-07-25
- [通信網絡] 路由協議都有哪些 計算機網絡核心技術主要包括哪些 2023-07-24
- [電子說] 路由協議&OSPF中雙點雙向重發布解決路由引入問題(華為) 2023-06-25
- [電子說] OSPF路由協議:?趣解OSPF區域 2023-05-24
( 發表人:admin )