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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于路徑標(biāo)識(shí)的多路徑域間路由的開發(fā)與實(shí)現(xiàn)

          基于路徑標(biāo)識(shí)的多路徑域間路由的開發(fā)與實(shí)現(xiàn)

          作者: 時(shí)間:2012-04-17 來源:網(wǎng)絡(luò) 收藏

          3.2 UPDATE消息處理模塊
          該模塊主要實(shí)現(xiàn)UPDATE消息的發(fā)送和接收。在BGP當(dāng)中用來在對等體之問傳遞可用前綴、撤銷等,在多域間方案中需要修改數(shù)據(jù)包發(fā)送函數(shù)和接收函數(shù),使之能夠正常地傳遞新的網(wǎng)絡(luò)可達(dá)性信息,同時(shí)需要修改包安全性檢查等函數(shù),使之能夠不被錯(cuò)誤地丟棄。
          3.3 平面表模塊
          該模塊主要實(shí)現(xiàn)在控制層維護(hù)核心路由表,并向轉(zhuǎn)發(fā)層下發(fā)最佳轉(zhuǎn)發(fā)信息。BGP的路由表是基于最長前綴匹配的方式查找的,用二又樹具體組織。在多域間路由方案中需要將其平面化,利用PID和AS號(hào)來檢索域間路由,利用HASH算法將路由節(jié)點(diǎn)信息存儲(chǔ)在一個(gè)雙向鏈表上面,實(shí)行了精確查找。
          3.4 配置、顯示和調(diào)試命令模塊
          該模塊主要實(shí)現(xiàn)多域間路由協(xié)議的配置,并且提供了一些顯示核心路由表、對等體狀態(tài)等的顯示命令,還有一些路由器故障時(shí)的調(diào)試命令。相對于BGP,在域間路由方案中添加了以下的命令:
          (1)路由顯示命令
          通過該命令可以遍歷域間路由協(xié)議的核心路由表,顯示具體路由信息,即到目的AS的具體路由信息,包括PID、NEXT_PID和具體路徑顯示。
          (2)路徑選擇命令
          因?yàn)樵?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/多路徑">多路徑路由方案中,在控制層可以發(fā)現(xiàn)多條路徑,通過該命令可以選擇控制層向轉(zhuǎn)發(fā)層通告的最佳路徑,在當(dāng)前鏈路失效時(shí)選擇備份路徑下達(dá)到轉(zhuǎn)發(fā)層,實(shí)現(xiàn)鏈路的快速收斂,最終完成了轉(zhuǎn)發(fā)路徑的可控。
          3.5 RTM模塊
          該模塊主要實(shí)現(xiàn)轉(zhuǎn)發(fā)層模塊和控制層模塊之間的消息交互。多路徑域間路由協(xié)議在控制層擁有自己的核心路由表,但最終對轉(zhuǎn)發(fā)其作用的是轉(zhuǎn)發(fā)層的內(nèi)核路由表,但是控制層不能對內(nèi)核路由表直接起作用,該模塊實(shí)現(xiàn)了兩者之間的信息交互。它們之間的通信是通過套接字NET LINK起作用的,在公共消息格式中添加路由所需的PID、AS號(hào)和NEXT_PID等信息,滿足路由在轉(zhuǎn)發(fā)層的需要。
          3.6 平面轉(zhuǎn)發(fā)表模塊
          該模塊主要實(shí)現(xiàn)多路徑域問路由在轉(zhuǎn)發(fā)層核心路由表的維護(hù),當(dāng)需要出路網(wǎng)絡(luò)流量的發(fā)送和接收時(shí)查詢該路由表。
          Linux內(nèi)核的轉(zhuǎn)發(fā)表是基于網(wǎng)絡(luò)掩碼的HASH表組織的,根據(jù)不同的網(wǎng)絡(luò)掩碼長度被組織成不同的HASH表。因?yàn)镮Pv4使用32位地址,所以IPv4中有33個(gè)不同的網(wǎng)絡(luò)掩碼長度,可對應(yīng)于一個(gè)IP地址。fib_table數(shù)據(jù)結(jié)構(gòu)來描述路由表。fib_table結(jié)構(gòu)包含一個(gè)由33個(gè)指針組成的向量,每個(gè)指針對應(yīng)一個(gè)網(wǎng)絡(luò)掩碼并指向一個(gè)類型為fn_zone的數(shù)據(jù)結(jié)構(gòu)。Fn_zone結(jié)構(gòu)將路由組織成HASH表,因此通向目的網(wǎng)絡(luò)的路由,如果網(wǎng)絡(luò)掩碼長度相同,就被放在同一個(gè)HASH表內(nèi)。每個(gè)單獨(dú)的子網(wǎng)對應(yīng)一個(gè)fib_node實(shí)例,用變量fn_key(網(wǎng)絡(luò)掩碼)識(shí)別,它的值就表明該子網(wǎng)。在查找函數(shù)fn_hash_lookup中,也是通過遍歷路由表搜索關(guān)鍵詞fn_key,獲得最終結(jié)果。
          多路徑路由方案中,轉(zhuǎn)發(fā)時(shí)需要檢查PID,并根據(jù)PID進(jìn)行檢索和轉(zhuǎn)發(fā),因此需要修改轉(zhuǎn)發(fā)表,使之可以根據(jù)關(guān)鍵詞PID進(jìn)行查找。在查找時(shí),只需要根據(jù)PID進(jìn)行精確匹配,而不用計(jì)算網(wǎng)絡(luò)掩碼。在修改后的路由節(jié)點(diǎn)fib_bgp_node中,添加了PID的信息,使得修改后的路由表fib _bgp_table可以根據(jù)PID為關(guān)鍵詞索引。路由表結(jié)構(gòu)如圖4所示。

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

          d.jpg


          3.7 數(shù)據(jù)包封裝解封模塊
          該模塊主要實(shí)現(xiàn)數(shù)據(jù)包中的轉(zhuǎn)換,Linux內(nèi)核中采用IP地址進(jìn)行路由,而在多路徑域間路由方案中,在域間有需要才用AS號(hào)路由,因此需要在發(fā)送數(shù)據(jù)包時(shí),添加PID、目的AS號(hào)和源AS號(hào)等信息,但為了兼容現(xiàn)有的網(wǎng)絡(luò)架構(gòu),方便現(xiàn)有網(wǎng)絡(luò)其他服務(wù)的處理,在數(shù)據(jù)包進(jìn)入網(wǎng)絡(luò)層前,去除PID、目的AS號(hào)、源AS號(hào)等擴(kuò)展選項(xiàng)。只是在數(shù)據(jù)包離開網(wǎng)絡(luò)層后,才增減以上擴(kuò)展選項(xiàng)。修改后的數(shù)據(jù)包頭如圖5所示。
          3.8 數(shù)據(jù)包轉(zhuǎn)發(fā)處理模塊
          該模塊主要實(shí)現(xiàn)基于PID的數(shù)據(jù)包轉(zhuǎn)發(fā),同時(shí)維護(hù)一個(gè)PID、AS號(hào)和NEXT_PID一一對應(yīng)的查詢表,實(shí)現(xiàn)到目的AS路徑標(biāo)識(shí)PID的填充。Lin ux內(nèi)核是基于IP地址前綴路由的,而在多路徑域間路由方案中是基于AS號(hào),在查詢平面轉(zhuǎn)發(fā)表要使用PID,如果數(shù)據(jù)包是終端第一次經(jīng)過路由器時(shí),不存在PID等信息,需要根據(jù)目的AS號(hào)添加PID等信息,還有域內(nèi)路由時(shí)根據(jù)設(shè)計(jì)要使用Local Identiner,只有在數(shù)據(jù)包進(jìn)入Linux內(nèi)核網(wǎng)絡(luò)層前,進(jìn)行了該模塊處理,才能完成標(biāo)識(shí)路由的功能。

          4 基于路徑標(biāo)識(shí)的多路徑域間路由方案的功能驗(yàn)證
          多路徑域間路由方案的功能驗(yàn)證,主要包括控制層基于路徑標(biāo)識(shí)的多路徑路由發(fā)現(xiàn)和轉(zhuǎn)發(fā)層基于路徑標(biāo)識(shí)的數(shù)據(jù)包正常轉(zhuǎn)發(fā)。



          評論


          相關(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); })();