摘要:自主路由系統常使用多種內部網關協議和外部網關協議進行路由信息交換。通過對RIP協議的深入研究和對Quagga代碼的分析、修改,文章對RIP協議的運用進行了擴展。普通的RIP協議以到達接口的跳數作為衡量距離的標準,文章在此基礎上引入新的命令因子(阻塞命令、非阻塞命令、系統負載等),這些命令與跳數的轉換相結合,向路由表內加入特殊路徑,從而實現Quagga功能的擴展和網絡的保護。
關鍵詞:路由;網關協議;RIP;命令因子;擴展
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)34-1573-03
Analysis and Research of Network Protection Using RIP
MAO Zhao-yang
(College of Software Engineering of Southeast University, Nanjing 211189, China)
Abstract: In a Routing AS, multiple IGP and EGP protocols are used to exchange routing information.This paper extends the function of RIP based on the deep analyze of RIP protocol and modification of Quagga code.Normal RIP measures the distance through the number of hops as the metric.This paper introduces some new command factors combining the hop and adds new entries into the routing table for in order to extend the functionality of Quagga and protect the network.
Key words: routing; gateway protocol; RIP; command factor; extending
1 RIP協議簡介
RIP協議的全稱是路由信息協議(Routing Information Protocol),它是一種內部網關協議(IGP),用于一個自治系統(AS)內的路由信息的傳遞[1]。在Quagga中RIP作為一個系統長駐進程(daemon)負責從網絡系統的其它路由器接收路由信息,從而對本地IP層路由表作動態的維護,保證IP層發送報文時選擇正確的路由,同時廣播本路由器的路由信息,通知相鄰路由器作相應的修改。RIP協議處于UDP協議的上層,其所接收的路由信息都封裝在UDP的數據報中,并對本地的路由表做相應的修改,同時通知其它路由器。通過這種方式,達到全局路由的有效。RIP使用距離矢量算法來生成自己的路由表。
2 Quagga的功能及結構
Quagga 是一個多線程,多服務分布式的免費路由軟件,它提供了OSPFv2, OSPFv3, RIP v1 and v2, RIPng 和BGP-4在多種平臺上的實現[2]。它在設計上針對每一個協議都采用一個單獨的進程來進行實現,因此Quagga具有良好的適應性和可靠性[3]。它的每一個模塊都可以單獨的更新,同時也能阻止一個模塊的錯誤擴散到整個系統中。Quagga中實現的每一個路由協議并不直接和Linux內核交互。相反,Quagga通過自己的Zebra來管理內部進程間交流,即任何別的協議的進程不能直接相互交互,只能和Zebra交互。同時Zebra負責和Linux內核進行交互。可以將Quagga模擬了一個客戶服務器模型。在這個模型當中各個協議的進程作為客戶端。而Zebra作為服務器端,負責從Linux內核分派服務和資源給客戶[4]。每一個后臺進程都有自己的路由表,Zebra進程負責內核路由表的更新和在各個協議的重分配。而別的進程主要對自身的協議實現負責。Quagga的體系結構如圖1所示[5]。
3 Quagga的功能改進分析
由于Quagga中的RIP采用的是普通的RIPV2數據包[6],在網絡節點出現問題時,會出現降低網絡數據傳輸效率,甚至會癱瘓網絡。圖2給出了一個問題網絡。
RTA和RTB分別代表正常路由器,X代表出現有問題的路由器或交換機。由于X已經出現了相關的軟件或是硬件問題,而RTA和RTB并未得知X的狀況,繼續向其發送數據信息或者通過它路由,這樣勢必會降低整個網絡的性能。為了避免類似情況的發生,應該設計一種機制,使得在X出現問題時能及時通知RTA和RTB,使它們在接收到X的問題類型的信息后能以不同的方式修改自身的路由表。比如RTA和RTB在收到X已經不能工作的信息時,可以立刻增加一條新特殊路徑,其目標為路由器X,其metric為16,進而創建一個過濾器,阻礙一切前往路由器X的包,這樣在一定程度上保護了整個網絡。
由于Quagga中沒有這樣的機制,所以本文使用一種特殊的RIP—SRIP包將特殊狀態的網絡節點的信息傳給網絡上其他需要的節點。改進目標如下所示:
1) 源路由器能夠產生RIP包并能將發送到網絡。
2) 源路由器能夠產生SRIP包來表示路由器的特殊狀態并能將其發送到網絡中。
3) 目標路由器能識RIP包并能修改自身路由表且根據特殊的RIP包采取不同的行為。
4) 目標路由器能識別SRIP包并能根據SRIP包采取不同的行為。
5) 一旦目標路由器修改了自身的路由表,它應該可以立即通知他的鄰居。
4 基于RIP的網絡保護設計
4.1 SRIP數據包格式設計
SRIP數據包使用和普通RIPv2一樣的頭部,但在其命令域中則使用12來表示SRIP數據包。圖3給出了SRIP的包頭格式。
■
圖3 SRIP的包頭格式
而在8比特的command位上,由于1到11已經使用,如表1所示,所以本文使用12來標識SRIP數據包。
SRIP包中的條目(entry)與普通的RIPv2包有著很大的區別:本文使用T.L.V來作為條目的內容,如圖4所示,T代表type,V代表value,L代表length。根據類型和值域,保護機制將采用不同的措施,當然在采取這些相應的措施前,得先從包頭部中提取源IP,因為有許多措施基于源地址。
■
圖4 SRIP的Entry格式
SRIP中的T使用兩個字節,其所代表的數據包類型如表2所示。
Block:將阻塞路由器在網絡中的使用,Unblock:恢復路由器在網絡中的使用,System load:由于負載均衡,Application:根據V中的值來做相應的操作,AdminCmd:管理員用來發送命令。
表2 Type的字段類型
■
4.2 保護算法設計思路
算法分為發送方和接收方。
發送方算法設計:
1) 用戶決定發送特殊包,在命令行界面鍵入相關命令。
2) 經過修改后的ripd進程將接受用戶輸入,并將其放入一個新的全局變量rte_special中,填充其內部相關的域值。
3) 在形成了全局變量rte_special后,經過修改的Ripd將使用rip_request_neighbor_all()把特殊包發送給全部鄰居。由于rip_request_neighbor_all ()發送包的機制是基于rip_request_send ()的,所以我們設計由rip_request_send ()通過檢測rte_special是否被設置來決定是否發將特殊包發送給指定目標地址。
4) 修改rip_output_process()使其周期性的發送特殊包,因為接受方加入的路徑,其實現機制當用戶輸入命令發送SRIP包,我們將對此類型的包進行一個復制,產生一個復制品,Extern struct rte_special *rte_special_regular,此特殊結構將在rip_request_send ()將rte_special設為缺省值之前,將值賦入。最后在rip_output_process()有規律的發送此副本,若要停止有規律的發送,只需要將此副本設回為默認值即可。
接收方算法設計:
1) 使用rip_read()對接收包進行一些普通的合法性檢查。
2) 從類型為Union的rip_buf中獲取數據包信息。
3) 檢查其command域中值是否是12。
4) 如果不是特殊類型則采用原有的方法進行檢驗。
5) 如果是,則使用SRIP類型來獲得rip_buf的值,然后創建一個新的普通類型的包含前面所述的特殊路徑,使用rip_response_process(rip_new_packet, size,from,ifc)將其加入路由表。
5 實驗結果分析
在RedHat 9上運行Quagga 0.99.6的結果如下。圖5所示的是本機向目標機器發送一個類型為Block的數據包,目標機器獲得這個信息,將路由表中將目的地是本機的路由設為不可達。這樣網絡中的數據信息就不會經過本機,這樣在一定程度上保護了網絡。
■
圖5 在目標機器中加入特殊路徑
6 結束語
RIP作為一種老式且廣泛應用的內部網關協議,有著其他許多協議不可比擬的優點,但其應用還局限于普通的路由交換,因此我們構想在可用的RIP程序中增加一種特征,使得路由表計算能夠與部分應用程序進行配合,即能將一定的應用程序(或別的路由器)的狀態或請求傳達給目的路由器,目的路由器根據收到的相關信息,采取相應的措施,這樣將單純的路由信息交互擴展到能夠實現阻塞等用戶功能,并為進一步進行擴展提供了空間。通過這樣一個對RIP協議的修改,在理論上減少了無關的路由信息,能提高網絡的傳輸速度。
參考文獻:
[1] RFC 2453[S].IETF,1998:.3-33.
[2] 黃瑜岳.基于IPV6的邊界網關路由協議BGP-4+的研究與應用[D].天津:天津工業大學,2006.
[3] Feng M,Leung R,Jun D S.Sumer Report 1999 Linux Network[D].加拿大:Network Architecture Lab Electrical and Computer Engineering University of Toronto,1999.
[4] Aweya J.IP Router Architectures: An Overview [R].1999.
[5] Brian \"Beej\" Hallr. Beej's Guide to Network Programming Using Internet Sockets[S].2005.
[6] 郭霞.路由器的開發——RIP的研究和實現[D].成都:電子科技大學,2001.
[7] Quaggaorg.Quagga 0.98 document[EB/OL].http://www.quagga.net/docs/quagga-0.98.pdf.
[8] Xuzhikun.Zebra基本配置[EB/OL].http://www.chinalinuxpub.com/read.php?wid=624.2005.