基于路徑標識的多路徑域間路由的開(kāi)發(fā)與實(shí)現
3.2 UPDATE消息處理模塊
該模塊主要實(shí)現UPDATE消息的發(fā)送和接收。在BGP當中用來(lái)在對等體之問(wèn)傳遞可用路由前綴、撤銷(xiāo)路由等,在多路徑域間方案中需要修改數據包發(fā)送函數和接收函數,使之能夠正常地傳遞新的網(wǎng)絡(luò )可達性信息,同時(shí)需要修改包安全性檢查等函數,使之能夠不被錯誤地丟棄。
3.3 平面路由表模塊
該模塊主要實(shí)現在控制層維護核心路由表,并向轉發(fā)層下發(fā)最佳轉發(fā)信息。BGP的路由表是基于最長(cháng)前綴匹配的方式查找的,用二又樹(shù)具體組織。在多路徑域間路由方案中需要將其平面化,利用PID和AS號來(lái)檢索域間路由,利用HASH算法將路由節點(diǎn)信息存儲在一個(gè)雙向鏈表上面,實(shí)行了精確查找。
3.4 配置、顯示和調試命令模塊
該模塊主要實(shí)現多路徑域間路由協(xié)議的配置,并且提供了一些顯示核心路由表、對等體狀態(tài)等的顯示命令,還有一些路由器故障時(shí)的調試命令。相對于BGP,在多路徑域間路由方案中添加了以下的命令:
(1)路由顯示命令
通過(guò)該命令可以遍歷多路徑域間路由協(xié)議的核心路由表,顯示具體路由信息,即到目的AS的具體路由信息,包括PID、NEXT_PID和具體路徑顯示。
(2)路徑選擇命令
因為在多路徑路由方案中,在控制層可以發(fā)現多條路徑,通過(guò)該命令可以選擇控制層向轉發(fā)層通告的最佳路徑,在當前鏈路失效時(shí)選擇備份路徑下達到轉發(fā)層,實(shí)現鏈路的快速收斂,最終完成了轉發(fā)路徑的可控。
3.5 RTM模塊
該模塊主要實(shí)現轉發(fā)層模塊和控制層模塊之間的消息交互。多路徑域間路由協(xié)議在控制層擁有自己的核心路由表,但最終對轉發(fā)其作用的是轉發(fā)層的內核路由表,但是控制層不能對內核路由表直接起作用,該模塊實(shí)現了兩者之間的信息交互。它們之間的通信是通過(guò)套接字NET LINK起作用的,在公共消息格式中添加標識路由所需的PID、AS號和NEXT_PID等信息,滿(mǎn)足標識路由在轉發(fā)層的需要。
3.6 平面轉發(fā)表模塊
該模塊主要實(shí)現多路徑域問(wèn)路由在轉發(fā)層核心路由表的維護,當需要出路網(wǎng)絡(luò )流量的發(fā)送和接收時(shí)查詢(xún)該路由表。
Linux內核的轉發(fā)表是基于網(wǎng)絡(luò )掩碼的HASH表組織的,根據不同的網(wǎng)絡(luò )掩碼長(cháng)度被組織成不同的HASH表。因為IPv4使用32位地址,所以IPv4中有33個(gè)不同的網(wǎng)絡(luò )掩碼長(cháng)度,可對應于一個(gè)IP地址。fib_table數據結構來(lái)描述路由表。fib_table結構包含一個(gè)由33個(gè)指針組成的向量,每個(gè)指針對應一個(gè)網(wǎng)絡(luò )掩碼并指向一個(gè)類(lèi)型為fn_zone的數據結構。Fn_zone結構將路由組織成HASH表,因此通向目的網(wǎng)絡(luò )的路由,如果網(wǎng)絡(luò )掩碼長(cháng)度相同,就被放在同一個(gè)HASH表內。每個(gè)單獨的子網(wǎng)對應一個(gè)fib_node實(shí)例,用變量fn_key(網(wǎng)絡(luò )掩碼)識別,它的值就表明該子網(wǎng)。在查找函數fn_hash_lookup中,也是通過(guò)遍歷路由表搜索關(guān)鍵詞fn_key,獲得最終結果。
多路徑路由方案中,轉發(fā)時(shí)需要檢查PID,并根據PID進(jìn)行檢索和轉發(fā),因此需要修改轉發(fā)表,使之可以根據關(guān)鍵詞PID進(jìn)行查找。在查找時(shí),只需要根據PID進(jìn)行精確匹配,而不用計算網(wǎng)絡(luò )掩碼。在修改后的路由節點(diǎn)fib_bgp_node中,添加了PID的信息,使得修改后的路由表fib _bgp_table可以根據PID為關(guān)鍵詞索引。路由表結構如圖4所示。本文引用地址:http://dyxdggzs.com/article/190503.htm
3.7 數據包封裝解封模塊
該模塊主要實(shí)現數據包中標識的轉換,Linux內核中采用IP地址進(jìn)行路由,而在多路徑域間路由方案中,在域間有需要才用AS號路由,因此需要在發(fā)送數據包時(shí),添加PID、目的AS號和源AS號等信息,但為了兼容現有的網(wǎng)絡(luò )架構,方便現有網(wǎng)絡(luò )其他服務(wù)的處理,在數據包進(jìn)入網(wǎng)絡(luò )層前,去除PID、目的AS號、源AS號等擴展選項。只是在數據包離開(kāi)網(wǎng)絡(luò )層后,才增減以上擴展選項。修改后的數據包頭如圖5所示。
3.8 數據包轉發(fā)處理模塊
該模塊主要實(shí)現基于PID的數據包轉發(fā),同時(shí)維護一個(gè)PID、AS號和NEXT_PID一一對應的查詢(xún)表,實(shí)現到目的AS路徑標識PID的填充。Lin ux內核是基于IP地址前綴路由的,而在多路徑域間路由方案中是基于A(yíng)S號,在查詢(xún)平面轉發(fā)表要使用PID,如果數據包是終端第一次經(jīng)過(guò)路由器時(shí),不存在PID等信息,需要根據目的AS號添加PID等信息,還有域內路由時(shí)根據設計要使用Local Identiner,只有在數據包進(jìn)入Linux內核網(wǎng)絡(luò )層前,進(jìn)行了該模塊處理,才能完成標識路由的功能。
4 基于路徑標識的多路徑域間路由方案的功能驗證
多路徑域間路由方案的功能驗證,主要包括控制層基于路徑標識的多路徑路由發(fā)現和轉發(fā)層基于路徑標識的數據包正常轉發(fā)。
評論