李冬霞,陳 佩,金恒豐
(中國(guó)民航大學(xué) 電子信息與自動(dòng)化學(xué)院,天津 300300)
路由信息協(xié)議(Routing Information Protocol,RIP)是Internet的標(biāo)準(zhǔn)協(xié)議[1],屬于最早應(yīng)用的分布式域內(nèi)路由協(xié)議。由于其配置簡(jiǎn)單、兼容性強(qiáng)等優(yōu)點(diǎn),在小型網(wǎng)絡(luò)中一直廣泛使用,具有很強(qiáng)的生命力[2-3]。RIP作為典型的動(dòng)態(tài)路由協(xié)議,也成為計(jì)算機(jī)網(wǎng)絡(luò)類課程教學(xué)中的重點(diǎn),由于所涉及到的路由算法及運(yùn)行原理過(guò)于抽象,同時(shí)也是教學(xué)中的難點(diǎn),如何設(shè)計(jì)能充分展現(xiàn)RIP原理的仿真實(shí)驗(yàn)顯得尤其重要[4]。
當(dāng)前,已有多種基于軟件或軟硬件相結(jié)合的RIP仿真實(shí)驗(yàn)系統(tǒng)在教學(xué)實(shí)踐中使用[5-9],這些系統(tǒng)大多是在所使用的網(wǎng)絡(luò)系統(tǒng)仿真軟件(如GNS3,Packet Tracer等)環(huán)境下,將路由器的工作協(xié)議配置為RIP,實(shí)驗(yàn)過(guò)程強(qiáng)調(diào)配置方法以及運(yùn)行結(jié)果驗(yàn)證,并不能動(dòng)態(tài)展示RIP的具體運(yùn)行過(guò)程,不利于學(xué)生真正理解RIP工作原理。也有部分實(shí)驗(yàn)系統(tǒng)是用戶自主開(kāi)發(fā)的網(wǎng)絡(luò)協(xié)議仿真系統(tǒng)[10-11],但是很少涉及到RIP路由協(xié)議,軟件功能也不夠完善。本文設(shè)計(jì)了專門針對(duì)RIP的虛擬仿真系統(tǒng),直觀形象地展示RIP動(dòng)態(tài)運(yùn)行全過(guò)程,并輔以實(shí)時(shí)的運(yùn)行狀態(tài)說(shuō)明,便于學(xué)生深入透徹地理解RIP的動(dòng)態(tài)路由特性和功能;同時(shí)也為理解更為復(fù)雜的動(dòng)態(tài)路由協(xié)議、剖析路由器功能,掌握計(jì)算機(jī)網(wǎng)絡(luò)整體運(yùn)行規(guī)律起到積極的作用。
RIP是以跳數(shù)(hop count)作為度量的距離向量路由協(xié)議,通過(guò)與相鄰路由器動(dòng)態(tài)交換路由信息,實(shí)現(xiàn)在一個(gè)自治系統(tǒng)內(nèi)部的路由選擇;利用更新、失效、垃圾收集和抑制等計(jì)時(shí)器調(diào)節(jié)其運(yùn)行狀態(tài)。為了防止路由環(huán)路的發(fā)生以及在網(wǎng)絡(luò)結(jié)構(gòu)發(fā)生變化時(shí)縮短網(wǎng)絡(luò)收斂時(shí)間,RIP使用水平切割、毒性逆轉(zhuǎn)、觸發(fā)更新及抑制計(jì)時(shí)等穩(wěn)健機(jī)制[1-3]。本文基于RIP v2(RFC2453)標(biāo)準(zhǔn)[12]設(shè)計(jì)RIP虛擬仿真系統(tǒng),該系統(tǒng)具備以下關(guān)鍵功能:
(1)基本功能。在RIP各穩(wěn)健機(jī)制條件下,對(duì)各類路由信息報(bào)文交互過(guò)程、計(jì)時(shí)器工作時(shí)間、路由表內(nèi)容更新等基本功能進(jìn)行動(dòng)態(tài)仿真,并針對(duì)各運(yùn)行狀態(tài)進(jìn)行必要的原理解釋與狀態(tài)說(shuō)明。
(2)最優(yōu)路徑算法仿真。距離向量算法的基礎(chǔ)是Bellman_Ford算法,本文設(shè)計(jì)了Bellman_Ford最優(yōu)路徑算法仿真子系統(tǒng),通過(guò)選擇不同鏈路代價(jià)值,驗(yàn)證最優(yōu)路徑計(jì)算結(jié)果。該子系統(tǒng)也便于使用者理解使用Bellman_Ford算法的其他路由協(xié)議。
(3)路由信息報(bào)文內(nèi)容展示。對(duì)RIP路由信息報(bào)文內(nèi)容的解析是理解路由策略和狀態(tài)變化最直接的方法,本文系統(tǒng)提供捕獲正在交互的路由信息報(bào)文,查看其封裝格式與內(nèi)容的功能。
(4)RIP缺陷仿真。對(duì)RIP缺陷的認(rèn)識(shí)是學(xué)習(xí)該協(xié)議不可缺少的部分。本文系統(tǒng)包含RIP缺陷仿真子系統(tǒng),通過(guò)實(shí)例展示其路由缺陷,便于將RIP與其他路由協(xié)議進(jìn)行性能比較。
RIP虛擬仿真系統(tǒng)由協(xié)議說(shuō)明子系統(tǒng)、顯示子系統(tǒng)、控制子系統(tǒng)及計(jì)時(shí)器子系統(tǒng)等4大部分組成,整體框圖如圖1所示。
圖1 RIP虛擬仿真系統(tǒng)組成
圖1中,協(xié)議說(shuō)明子系統(tǒng)對(duì)仿真系統(tǒng)軟件的設(shè)計(jì)與操作、RIP的穩(wěn)健機(jī)制和計(jì)時(shí)器功能進(jìn)行說(shuō)明,同時(shí)也包括Bellman_Ford算法仿真、RIP缺陷仿真調(diào)用及其說(shuō)明等。顯示子系統(tǒng)包括路由過(guò)程動(dòng)態(tài)演示、報(bào)文具體內(nèi)容顯示、路由表內(nèi)容動(dòng)態(tài)變化顯示3部分;顯示子系統(tǒng)各部分皆相互關(guān)聯(lián),即在路由過(guò)程動(dòng)態(tài)演示過(guò)程中可以同時(shí)顯示報(bào)文具體內(nèi)容和路由表內(nèi)容動(dòng)態(tài)變化情況??刂谱酉到y(tǒng)包括仿真進(jìn)程控制和仿真模式控制,與計(jì)時(shí)器子系統(tǒng)和顯示子系統(tǒng)協(xié)調(diào)運(yùn)行,控制路由過(guò)程仿真。計(jì)時(shí)器系子統(tǒng)模擬RIP各計(jì)時(shí)器功能。
本文選用面向?qū)ο笳Z(yǔ)言C#,在Visual Studio編譯環(huán)境下利用.NET Framework平臺(tái)開(kāi)發(fā)RIP虛擬仿真系統(tǒng)[13],以下描述系統(tǒng)關(guān)鍵功能設(shè)計(jì)與實(shí)現(xiàn)方法。
本文系統(tǒng)主界面包括菜單欄、RIP工作進(jìn)程仿真區(qū)、路由表顯示區(qū)和功能控制區(qū)4大部分,各區(qū)域分布如圖2所示。
主界面菜單欄的設(shè)計(jì)有兩個(gè)目的:一是方便用戶熟悉系統(tǒng)本身的操作流程;二是方便用戶在系統(tǒng)使用過(guò)程中隨時(shí)查閱RIP原理和關(guān)鍵功能描述,更好地理解和驗(yàn)證仿真系統(tǒng)運(yùn)行結(jié)果。
RIP工作進(jìn)程仿真區(qū)是系統(tǒng)軟件運(yùn)行的核心區(qū)域,用于展示RIP報(bào)文的動(dòng)態(tài)交互過(guò)程。以仿真系統(tǒng)結(jié)構(gòu)(6臺(tái)主機(jī)通過(guò)3臺(tái)交換機(jī)連到3臺(tái)路由器)作為背景,右側(cè)使用不同顏色的信封標(biāo)簽標(biāo)識(shí)RIP 4種類型報(bào)文,同時(shí)提供RIP報(bào)文標(biāo)準(zhǔn)格式及網(wǎng)絡(luò)拓?fù)湔f(shuō)明鏈接,方便使用者查閱路由器接口配置信息[15]和網(wǎng)段劃分情況。
路由表顯示區(qū)模擬真實(shí)的路由表內(nèi)容,顯示每條路由的“編號(hào)”“類型”“目的網(wǎng)絡(luò)”“端口”“下一跳IP地址”及“度量值”。為方便觀察各路由表動(dòng)態(tài)狀態(tài)變化,這里將3臺(tái)路由器的路由表同時(shí)顯示,其內(nèi)容變化完全同步于RIP工作進(jìn)程。
功能控制區(qū)分為上下兩部分。上半部分由“激活”“斷開(kāi)端口”“暫?!薄皬?fù)位”按鈕控制當(dāng)前仿真進(jìn)程,下半部分控制各種穩(wěn)健機(jī)制模式。
RIP虛擬仿真系統(tǒng)啟動(dòng)運(yùn)行后,首先出現(xiàn)歡迎界面,暫停一段時(shí)間(3~5 s)后自行關(guān)閉,隨之出現(xiàn)圖2所示的主界面;在協(xié)議功能仿真過(guò)程中需要大量可選擇性顯示的報(bào)文及協(xié)議說(shuō)明、狀態(tài)說(shuō)明等。以上功能均利用C#中Form窗體類實(shí)現(xiàn)[14],設(shè)計(jì)時(shí)通過(guò)調(diào)用自定義方法來(lái)改變新實(shí)例化窗體的標(biāo)題、背景等信息,這樣可以使代碼簡(jiǎn)潔明了,亦可大大減少工作量。
Bellman_Ford算法仿真和RIP缺陷仿真都需要生成鏈路代價(jià)值,并進(jìn)行數(shù)值大小比較。本文在隨機(jī)數(shù)組的生成及顯示設(shè)計(jì)過(guò)程中,提供用戶自主選擇數(shù)值和系統(tǒng)自動(dòng)隨機(jī)取值兩種方式。首先根據(jù)所需條件(如:隨機(jī)數(shù)數(shù)量,數(shù)值的最小值、最大值)生成合適的隨機(jī)數(shù)組,調(diào)用C#自帶的隨機(jī)數(shù)生成功能,以計(jì)算機(jī)當(dāng)前時(shí)間生成參數(shù),將生成的隨機(jī)數(shù)依次填入數(shù)組,再將數(shù)組中的內(nèi)容轉(zhuǎn)化為字符串形式填入選擇框中。數(shù)值大小比較之前,需將窗口中輸入的字符串類型的數(shù)值轉(zhuǎn)換為整型,而后通過(guò)數(shù)值判斷和比較得到所選擇的數(shù)據(jù)。
圖2 系統(tǒng)主界面
(1)動(dòng)畫效果的實(shí)現(xiàn)。RIP報(bào)文的產(chǎn)生與交互過(guò)程均以動(dòng)態(tài)變化形式展示,動(dòng)畫效果的實(shí)現(xiàn)需與計(jì)時(shí)器配合。先建立一個(gè)合適大小的位圖控件作為報(bào)文的載體模型,再利用計(jì)時(shí)器逐步改變此位圖控件的可視狀態(tài)、位置等,即可出現(xiàn)動(dòng)畫效果,這里計(jì)時(shí)器觸發(fā)間隔設(shè)計(jì)為120 ms。
(2)路由表信息動(dòng)態(tài)顯示。路由表信息的顯示使用dataGridView控件[13]實(shí)現(xiàn),每個(gè)路由器的路由表對(duì)應(yīng)一個(gè)獨(dú)立dataGridView控件。通過(guò)對(duì)此控件中的條目進(jìn)行添加、修改、刪除等操作,模擬出路由表信息實(shí)時(shí)變化的效果。Bellman_Ford算法仿真子系統(tǒng)中路由表信息的動(dòng)態(tài)結(jié)果顯示采用相同方法設(shè)計(jì)。
(3)狀態(tài)說(shuō)明標(biāo)簽的顯示。狀態(tài)說(shuō)明標(biāo)簽用于對(duì)系統(tǒng)仿真運(yùn)行過(guò)程中所經(jīng)歷的各狀態(tài)進(jìn)行輔助說(shuō)明。為避免代碼行過(guò)長(zhǎng),在設(shè)計(jì)時(shí)沒(méi)有采用常規(guī)的字符串設(shè)計(jì)方式,而是將所有仿真過(guò)程說(shuō)明內(nèi)容存儲(chǔ)在一個(gè)外部“.txt”文檔中,需要使用時(shí)創(chuàng)建“寫入流(Stream Reader)”,以默認(rèn)編碼方式打開(kāi)指定的文檔,再按文本行采用循環(huán)方式進(jìn)行讀取,實(shí)現(xiàn)調(diào)用。
本文系統(tǒng)提供默認(rèn)仿真與穩(wěn)健機(jī)制仿真兩種具體仿真模式,二者所開(kāi)啟的穩(wěn)健機(jī)制數(shù)量和路由器的初始狀態(tài)不同。默認(rèn)仿真模式下“毒性逆轉(zhuǎn)”沒(méi)有開(kāi)啟,穩(wěn)健機(jī)制仿真模式可選擇4種具體的穩(wěn)健機(jī)制類型??刂乒δ苤械倪M(jìn)程控制是指在仿真過(guò)程中的任何時(shí)刻允許進(jìn)行“暫停/繼續(xù)”、“復(fù)位”操作,以便查看報(bào)文內(nèi)容和計(jì)時(shí)器時(shí)間等信息;也可以進(jìn)行“斷開(kāi)端口”操作,模擬某端口斷開(kāi)事件發(fā)生后路由動(dòng)態(tài)更新過(guò)程。
RIP中各種計(jì)時(shí)器功能使用計(jì)時(shí)器控件模擬實(shí)現(xiàn)。考慮到為每條路由條目設(shè)置多個(gè)計(jì)時(shí)器并不是仿真系統(tǒng)實(shí)現(xiàn)的最佳選擇,故在功能實(shí)現(xiàn)過(guò)程中部分計(jì)時(shí)器存在多重利用現(xiàn)象。RIP規(guī)定的周期更新間隔為25.5~30 s之間的某個(gè)隨機(jī)值[3],本仿真系統(tǒng)的路由器數(shù)量不多,且報(bào)文的模擬傳輸也不是瞬時(shí)完成,設(shè)計(jì)時(shí)將更新時(shí)間固定為26 s,并使各路由器發(fā)送周期報(bào)文的時(shí)間相互錯(cuò)開(kāi)。
限于篇幅,以下僅就RIP虛擬仿真系統(tǒng)默認(rèn)仿真模式下的部分功能以及Bellman_Ford算法仿真驗(yàn)證結(jié)果進(jìn)行說(shuō)明。
圖3所示為Bellman_Ford算法仿真窗口,包括算法說(shuō)明,操作區(qū)域和最下方的結(jié)果顯示區(qū)域3部分。仿真操作分為以下3個(gè)步驟。
(1)鏈路代價(jià)設(shè)置。各鏈路的代價(jià)值有選擇設(shè)置與隨機(jī)設(shè)置兩種設(shè)置方法。圖3所示每條鏈路設(shè)有下拉列表,包含8個(gè)可選擇的鏈路代價(jià)值。當(dāng)采取隨機(jī)設(shè)置時(shí),點(diǎn)擊“隨機(jī)取值”按鈕可自動(dòng)進(jìn)行隨機(jī)鏈路代價(jià)值設(shè)置。
圖3 Bellman_Ford算法演示窗
(2)獲取Bellman_Ford算法結(jié)果。點(diǎn)擊“獲取結(jié)果”按鈕,將根據(jù)所設(shè)置的鏈路代價(jià)值計(jì)算出最短路徑并顯示于結(jié)果顯示區(qū)域。以頂點(diǎn)C作為源結(jié)點(diǎn)得出的計(jì)算過(guò)程及結(jié)果如圖4所示。
hLh(A)PathLh(B)PathLh(D)PathLh(E)PathLh(F)Path0∞//∞//∞//∞//∞//1∞//3C-B∞//1C-E2C-F24C-B-A2C-E-B2C-E-D1C-E2C-F33C-E-B-A2C-E-B2C-E-D1C-E2C-F43C-E-B-A2C-E-B2C-E-D1C-E2C-F53C-E-B-A2C-E-B2C-E-D1C-E2C-F
圖4 最短路徑計(jì)算結(jié)果顯示
(3)清零操作。若需要再次驗(yàn)證最優(yōu)路徑計(jì)算結(jié)果,則先進(jìn)行清零操作,清除上次鏈路代價(jià)設(shè)置結(jié)果與最短路徑計(jì)算結(jié)果,否則兩次計(jì)算結(jié)果將會(huì)重疊,影響查看效果。
默認(rèn)情況下,RIP虛擬仿真系統(tǒng)啟動(dòng)后進(jìn)入默認(rèn)仿真模式,“水平切割”和“觸發(fā)更新”機(jī)制默認(rèn)開(kāi)啟。此時(shí)可觀察到路由器Router0(簡(jiǎn)稱R0)從激活到完全融入網(wǎng)絡(luò)的報(bào)文交互完整過(guò)程,以及發(fā)生“斷開(kāi)/連接端口”事件時(shí)各路由器的路由表狀態(tài)變化情況。
(1)“激活”功能。點(diǎn)擊功能控制區(qū)域的“激活”按鈕,路由器R0的RIP進(jìn)程被激活,開(kāi)始發(fā)送RIP“請(qǐng)求報(bào)文”到路由器Router1(簡(jiǎn)稱R1),發(fā)送過(guò)程截圖如圖5所示;R1隨即向R0返回RIP“應(yīng)答報(bào)文”,如圖6所示。
圖5 R0發(fā)送“請(qǐng)求報(bào)文”到R1
圖6 R1發(fā)送“應(yīng)答報(bào)文”到R0
(2)報(bào)文內(nèi)容查看功能。點(diǎn)擊“暫?!卑粹o,再點(diǎn)擊圖5中R0發(fā)出的“請(qǐng)求報(bào)文”標(biāo)簽,即可查看其具體內(nèi)容。如圖7所示,此報(bào)文的命令域顯示為“1”(16進(jìn)制顯示),版本號(hào)為“2”,地址標(biāo)識(shí)符為“0”,Metric值為“16”,其余為“0”,可判斷此數(shù)據(jù)包屬于RIPv2的請(qǐng)求報(bào)文,并請(qǐng)求全部?jī)?nèi)容。
0x010x020x00000x00000x00000x000000000x000000000x000000000x00000000
圖7 R0發(fā)送的“請(qǐng)求報(bào)文”內(nèi)容
同理,也可對(duì)圖6中R1發(fā)送的“應(yīng)答報(bào)文”內(nèi)容進(jìn)行查看,如圖8所示。此報(bào)文的命令域?yàn)椤?”,地址標(biāo)識(shí)符為“2”,可判斷其為應(yīng)答報(bào)文,其中包含3條路由信息,內(nèi)容分別為(16進(jìn)制顯示):
0x020x020x00000x00020x00000xC0A801000xFFFFFF000x000000000x000000010x00020x00000xC0A803000xFFFFFF000x000000000x000000010x00020x00000xC0A804000xFFFFFF000x000000000x00000002
圖8 R1發(fā)送的“應(yīng)答報(bào)文”內(nèi)容
● IP:192.168.1.0,跳數(shù)1,子網(wǎng)掩碼255.255.255.0;
● IP:192.168.3.0,跳數(shù)1,子網(wǎng)掩碼255.255.255.0;
● IP:192.168.4.0,跳數(shù)2,子網(wǎng)掩碼255.255.255.0。
(3)路由更新功能。R0接收到R1的應(yīng)答報(bào)文,發(fā)現(xiàn)其中含有全新的路由信息,便更新其路由表,如圖9所示。與圖2所示的初始路由相比,增加了編號(hào)為3、4、5的3條RIP路由信息。
圖9 R0路由表(更新后)
(4)“斷開(kāi)端口”模擬仿真。點(diǎn)擊“斷開(kāi)端口”按鈕后,路由器R0下方的端口被斷開(kāi),端口連接指示燈由綠色變?yōu)榧t色。若此時(shí)離R0的周期更新時(shí)間較長(zhǎng),R0將會(huì)向R1發(fā)送一個(gè)“觸發(fā)更新”報(bào)文,如圖10所示;若此時(shí)離R0的周期更新時(shí)間較短,即R0的周期更新立即開(kāi)始,此時(shí)R0會(huì)向R1發(fā)送“周期報(bào)文”,觸發(fā)更新的內(nèi)容將會(huì)包含在周期更新之中,觸發(fā)更新取消。圖11所示為R0向R1發(fā)送“周期報(bào)文”,同時(shí)R1也向R0和R3發(fā)送“周期報(bào)文”。
“斷開(kāi)端口”后R0路由表發(fā)生變化,如圖12所示,與斷開(kāi)的端口相連的網(wǎng)絡(luò)(192.168.2.0)的跳數(shù)變成了“16”,若在60s(兩個(gè)更新周期)之內(nèi)沒(méi)有再次連接,則此路由條目將被刪除。
圖10 端口斷開(kāi)后R0發(fā)送“觸發(fā)更新”報(bào)文
圖11 端口斷開(kāi)后R0發(fā)送“周期更新”報(bào)文
圖12 R0路由表(斷開(kāi)端口后)
與已有的RIP仿真系統(tǒng)相比,本文設(shè)計(jì)的RIP虛擬仿真系統(tǒng)可透視RIP內(nèi)部,對(duì)其運(yùn)行過(guò)程進(jìn)行全面動(dòng)態(tài)展示,對(duì)關(guān)鍵的最短路徑選擇算法和協(xié)議缺陷也進(jìn)行功能仿真。系統(tǒng)人機(jī)交互友好,仿真過(guò)程完全可控,對(duì)于路由表與具體報(bào)文信息的查看非常直觀便利,在筆者教學(xué)實(shí)踐中得到了學(xué)生普遍歡迎。該系統(tǒng)設(shè)計(jì)方法也可為其他動(dòng)態(tài)路由協(xié)議仿真系統(tǒng)的設(shè)計(jì)提供有價(jià)值的參考。