第一篇:基于 OLSR 路由協(xié)議的 HIDA 算法概要
— 147— 36卷 第 9期
ol.36 No.9 2010年 5月
Ma 基于 OLSR 路由協(xié)議的 HIDA 算法 姚 勝,冷甦鵬
(電子科技大學(xué)通信抗干擾技術(shù)國家級重點(diǎn)實(shí)驗(yàn)室,成都 610054 摘 要:針對 Ad Hoc網(wǎng)絡(luò)中的蟲洞攻擊,根據(jù)最優(yōu)鏈路狀態(tài)路由(OLSR協(xié)議的運(yùn)行特點(diǎn),提出檢測偽鄰居的 HELLO 間隔分布式算法(HIDA。仿真結(jié)果表明,在網(wǎng)絡(luò)平均節(jié)點(diǎn)數(shù)大于
4、節(jié)點(diǎn)隨機(jī)最大移動速率大于 2 m/s時, HIDA 算法能達(dá)到 80%以上的蟲洞攻擊檢測率。關(guān)鍵詞:無線自組織網(wǎng)絡(luò);鄰居探測;蟲洞攻擊;最優(yōu)鏈路狀態(tài)路由協(xié)議;HELLO 間隔分布式算法
HIDA Algorithm Based on OLSR Routing Protocol YAO Sheng, LENG Su-peng(National Key Lab of Communication Anti-interference Technology, University of Electronic Science and Technology of China, Chengdu 610054 【 Abstract 】 Aiming at the wormhole attack in Ad Hoc network, according to Optimized Link State Routing(OLSR protocol, this paper presents a HELLO Interval Distributed Algorithm(HIDA to detect fake neighbor.Simulation results show that HIDA has wormhole attack detection rate above 80% when network average node number is greater than 4, node random maximal migration rate is greater than 2 m/s.【 Key words】 Wireless Ad Hoc Network(WANET;neighbor probing;wormhole attack;Optimized Link State Routing(OLSR protocol;HELLO Interval Distributed Algorithm(HIDA
計 算 機(jī) 工 程 Computer Engineering第 V y 2010 術(shù)·
文章編號:1000— 3428(201009— 0147— 03 文獻(xiàn)標(biāo)識碼:A 中圖分類號:TP393 ·安全技 1 概述
移動 Ad Hoc網(wǎng)絡(luò)是一種自適應(yīng)的自組織網(wǎng)絡(luò),由于它
性能優(yōu)越,因此在越來越多場合得到應(yīng)用。目前關(guān)于 Ad Hoc自組網(wǎng)的研究大多集中在基于可信任環(huán)境下的通信和路由有 效性。由于 Ad Hoc自組網(wǎng)無線信道的開放性,因此極易遭 到攻擊。攻擊方通過攻擊無線網(wǎng)絡(luò)協(xié)議,竊取傳輸信息使網(wǎng) 絡(luò)無法正常工作。因此,無線網(wǎng)絡(luò)的安全問題引起了很多關(guān) 注。路由協(xié)議是節(jié)點(diǎn)通信的基礎(chǔ),協(xié)議運(yùn)行環(huán)境為移動多跳 傳輸,這使 Ad Hoc網(wǎng)絡(luò)路由協(xié)議的可靠性必須依賴所有節(jié) 點(diǎn)協(xié)調(diào)工作。如果網(wǎng)絡(luò)中存在節(jié)點(diǎn)異常工作或被攻擊節(jié)點(diǎn)入 侵等情況, 則會導(dǎo)致路由協(xié)議崩潰, 整個網(wǎng)絡(luò)不能正常工作。因此,必須提升 Ad Hoc網(wǎng)絡(luò)的安全性能。
在移動 Ad Hoc網(wǎng)絡(luò)中的蟲洞攻擊是一種很特殊的惡意 攻擊形式。它通過控制路由入侵網(wǎng)絡(luò), 破壞性大且很難探測。一般的安全策略如加密認(rèn)證很難抵御蟲洞攻擊,因此,本文 以最優(yōu)鏈路狀態(tài)路由(Optimized Link State Routing, OLSR協(xié) 議為模型進(jìn)行針對性的改進(jìn)。
蟲洞攻擊一般由 2個能直接通信的攻擊節(jié)點(diǎn)協(xié)同發(fā)動, 它們之間的鏈路稱為“隧道”(其長度大于普通節(jié)點(diǎn)的信號覆 蓋半徑,在路由上體現(xiàn)為 1跳距離 是發(fā)動攻擊的基礎(chǔ) [1]。蟲 洞攻擊示意圖如圖 1所示,其中, A 和 B 是距離較遠(yuǎn)的 2個 節(jié)點(diǎn),不在信號覆蓋范圍內(nèi);X 和 Y 是協(xié)同攻擊節(jié)點(diǎn),在它 們之間建立一條私密的鏈路形成“隧道”。在這個網(wǎng)絡(luò)中, 通過彼此接收到對方的 HELLO 報文來確定鄰居探測。當(dāng) A 向
周圍鄰居發(fā)送 HELLO 報文時, X 收到該報文后通過隧道 傳給 Y , 由 Y 原封不動地重放到網(wǎng)絡(luò)中, B 接收到 A 的 HELLO 報文,判定 A 為 1跳鄰居。同理, A 認(rèn)為 B 是自己的鄰居。因此, A, B以及所有位于 X, Y傳播范圍內(nèi)正常節(jié)點(diǎn)的鄰居 表中均會存在偽鄰居。若路由協(xié)議是以最短路徑優(yōu)先原則建
立路由表項, A 到 B 的最短距離為(2n +2 跳, 則 A 的 n 跳內(nèi) 的鄰居會通過“隧道”建立路由表項到達(dá) B。所有節(jié)點(diǎn)的通 信都暴露在攻擊節(jié)點(diǎn)下,通過路由信息的擴(kuò)散傳播會使網(wǎng)絡(luò) 極大范圍內(nèi)的節(jié)點(diǎn)通信受控于攻擊節(jié)點(diǎn),攻擊者對通過其路 徑的信息進(jìn)行竄改或丟棄等惡意操作使網(wǎng)絡(luò)中部分節(jié)點(diǎn)無法 通信,甚至使整個網(wǎng)絡(luò)癱瘓。
圖 1 蟲洞攻擊示意圖 2 相關(guān)研究
由于移動 Ad Hoc網(wǎng)絡(luò)極易受到各種攻擊,因此已提出 很多安全協(xié)議。雖然安全路由協(xié)議有很多,但沒有一種能應(yīng) 對所有惡意攻擊,尤其是能繞過網(wǎng)絡(luò)加密認(rèn)證系統(tǒng)的蟲洞攻 擊,加密認(rèn)證系統(tǒng)對蟲洞攻擊沒有任何作用。因此,要對路 由協(xié)議單獨(dú)進(jìn)行針對性改進(jìn),使網(wǎng)絡(luò)能抵御蟲洞攻擊。
Packet Leashes[2]是經(jīng)典的抵御蟲洞攻擊的方法。其原理
基金項目:國家自然科學(xué)基金資助項目(60802024;教育部博士點(diǎn)新 教師基金資助項目(200806141014;通信抗干擾技術(shù)國家級重點(diǎn)實(shí)驗(yàn) 室基金資助項目
作者簡介:姚 勝(1983-, 男, 碩士研究生, 主研方向:數(shù)據(jù)通信, 無線自組織網(wǎng)絡(luò),網(wǎng)絡(luò)安全;冷甦鵬,副教授、博士 收稿日期:2009-11-28 E-mail :linmin17125@163.com 是在數(shù)據(jù)報文中附加限制報文最大傳輸距離的信息。這種信息可以分為 2種:位置限制和時間限制。該方法 需要網(wǎng)絡(luò)提供一個強(qiáng)大的密鑰管理和時鐘同步系統(tǒng),對網(wǎng)絡(luò) 帶寬有很高的要求。另一種檢測蟲洞攻擊的方法是計算節(jié)點(diǎn) 每跳傳輸時延或位置信息,它通過包含蟲洞鏈路的 2個節(jié)點(diǎn) 之間的傳輸時延遠(yuǎn)大于真實(shí) 1跳鄰居傳輸時延進(jìn)行判斷。TTM [3]是針對 AODV 協(xié)議計算路由發(fā)現(xiàn)過程中的每跳傳輸時 延來檢測是否有不正常鏈路存在。這種時延機(jī)制能有效抵御 蟲洞攻擊,但加重了路由協(xié)議的開銷,使其效率下降。然而, 一些蟲洞攻擊可通過 at the bit level或 at the physical layer發(fā) 起很難被時延分析檢測到。
文獻(xiàn) [4]提出一種針對按需的路由協(xié)議,利用路由統(tǒng)計信 息檢測蟲洞攻擊,通過在源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間建立多跳路 由路徑來判斷統(tǒng)計信息中是否存在嫌疑鏈路。這種多路徑方 法很可能由于統(tǒng)計信息不足導(dǎo)致誤判,效率較低。另外,一 些方法大多依賴精確時鐘同步的假設(shè)或需要特殊設(shè)備,很難 應(yīng)用到實(shí)際網(wǎng)絡(luò)中。
綜上所述,這些安全路由協(xié)議都存在局限性,它們一般 都對網(wǎng)絡(luò)進(jìn)行嚴(yán)格的假設(shè), 建立的理論模型與實(shí)際相差較大, 并且一些提出方法需要特殊硬件設(shè)備等。由于這些機(jī)制的引 入很難在路由協(xié)議的性能表現(xiàn)和抵御蟲洞攻擊的有效性方面 取得平衡,因此需要進(jìn)一步對提升它們的安全性能,降低路 由協(xié)議復(fù)雜度和網(wǎng)絡(luò)開銷。基于 OLSR 路由協(xié)議的 HIDA 算法 3.1 OLSR路由協(xié)議
移動 Ad Hoc網(wǎng)絡(luò)中的路由協(xié)議分為表驅(qū)動路由協(xié)議和 按需路由協(xié)議。OLSR 路由協(xié)議屬于表驅(qū)動鏈路狀態(tài)路由協(xié) 議,適合應(yīng)用于大型密集網(wǎng)絡(luò)。該協(xié)議通過節(jié)點(diǎn)周期性地交 換各種控制信息來建立分布式計算和更新網(wǎng)絡(luò)拓?fù)?節(jié)點(diǎn)根 據(jù)最短路徑優(yōu)先原則來計算路由表。
OLSR 協(xié)議運(yùn)行的基礎(chǔ)是 2種主要的控制報文:HELLO 報文和 TC(Topology Control報文。HELLO 報文在 1跳的范 圍內(nèi)被周期性廣播,不被轉(zhuǎn)發(fā),它用于建立節(jié)點(diǎn)的鄰居表(包 括鄰居節(jié)點(diǎn)地址以及本節(jié)點(diǎn)到鄰居節(jié)點(diǎn)的延遲 和計算節(jié)點(diǎn) 的多點(diǎn)中繼集(Multipoint Relay, MPR。TC 報文包含節(jié)點(diǎn) MPR 鄰居的信息被廣播到全網(wǎng),只有屬于 MPR 的鄰居節(jié)點(diǎn) 能轉(zhuǎn)發(fā) TC 控制報文。這種機(jī)制有效地控制了 TC 報文在網(wǎng)絡(luò) 中廣播的規(guī)模,減少了網(wǎng)絡(luò)負(fù)荷,避免形成廣播風(fēng)暴。節(jié)點(diǎn) 根據(jù)收到的 TC 報文中節(jié)點(diǎn)的鄰居關(guān)系獨(dú)立計算網(wǎng)絡(luò)的拓?fù)?圖,依據(jù)最短路徑優(yōu)先原則計算路由表。OLSR 路由協(xié)議包 括 4個主要過程:鄰居探測, MPR 選擇, TC 報文擴(kuò)散和路 由表計算,其中,通過發(fā)送 1跳內(nèi) HELLO 報文進(jìn)行鄰居偵 聽是該協(xié)議運(yùn)行的基礎(chǔ)。
由圖 1可以看出,蟲洞攻擊發(fā)動時會使 2個攻擊節(jié)點(diǎn)的 傳輸范圍內(nèi)所有正常節(jié)點(diǎn)相互收到 HELLO 報文,使它們成 為偽鄰居。由于節(jié)點(diǎn)依據(jù)這種錯誤的拓?fù)潢P(guān)系進(jìn)行路由計算, 因此破壞了 OLSR 路由協(xié)議的正常運(yùn)行。偽鄰居的產(chǎn)生是蟲 洞攻擊發(fā)動的基礎(chǔ),避免偽鄰居的產(chǎn)生有效抵御蟲洞攻擊。3.2 算法實(shí)現(xiàn)
本文基于蟲洞攻擊提出一種檢測偽鄰居的安全路由算 法—— HELLO 間隔分布式算法(HELLO Interval Distributed Algorithm, HIDA,并對 OLSR 協(xié)議進(jìn)行相應(yīng)改進(jìn)。本文模 型是一個大型密集的 Ad Hoc網(wǎng)絡(luò),節(jié)點(diǎn)不頻繁的隨機(jī)移動, 移動速率不高。改進(jìn)思想是依據(jù) OLSR 路由協(xié)議運(yùn)行的特點(diǎn), 通過比較正常鄰居和偽鄰居的產(chǎn)生是否導(dǎo)致非法拓?fù)浣Y(jié)構(gòu)來 判斷是否存在蟲洞攻擊。
偽鄰居的判斷示意圖如圖 2所示,假設(shè)互為鄰居的正常 節(jié)點(diǎn) A, B, C都位于攻擊節(jié)點(diǎn) X 的覆蓋范圍內(nèi),并假設(shè) Y 覆 蓋范圍內(nèi)正常節(jié)點(diǎn)中存在 2跳鄰居 M 和 N。當(dāng)發(fā)生蟲洞攻擊 時,在某個 HELLO 2 s間隔內(nèi), A, B, C節(jié)點(diǎn)均會收到 M 和 N 的 HELLO 報文并更新各自鄰居表。這時就能進(jìn)行判斷:新出現(xiàn)的 M 和 N 可不可能是 A 的正常鄰居節(jié)點(diǎn)。若 M 和 N 均 為 A 的正常鄰居節(jié)點(diǎn),那么說明它們在 HELLO 間隔內(nèi)均從 A 的覆蓋范圍之外移動到 A 覆蓋范圍之內(nèi)。因此, A 應(yīng)處于 M 和 N 的移動范圍重合處,即圖中陰影處。
同樣, B 和 C 節(jié)點(diǎn)也是如此。因?yàn)樵?HELLO 間隔這段時 間內(nèi),低速節(jié)點(diǎn)運(yùn)動距離很小,這樣 A, B, C 3個節(jié)點(diǎn)幾乎同 時位于以 M 和 N 移動距離為長和寬的矩形區(qū)域內(nèi),而這個面 積相對于節(jié)點(diǎn)的通信覆蓋范圍太小,本文認(rèn)為網(wǎng)絡(luò)中不存在 這樣不合理的拓?fù)錂C(jī)構(gòu),即認(rèn)為 M 和 N 均是 A 的偽鄰居, 網(wǎng)絡(luò)中存在蟲洞攻擊。
(a判斷過程
(b判斷結(jié)果
圖 2 偽鄰居的判斷示意圖
依據(jù)上述分析可知, HIDA 算法的主要思想是:某節(jié)點(diǎn) A 若在 HELLO 間隔這段時間內(nèi)第 1次收到 2個節(jié)點(diǎn) M 和 N 的 HELLO 報文, 并且這 2個節(jié)點(diǎn)不互為鄰居, 同時檢測到它們 不在 A 的 1跳和 2跳鄰居表內(nèi)。在 HELLO 間隔中, A 通過 接收到已存在的鄰居節(jié)點(diǎn)的 HELLO 報文可以計算這個短時 間內(nèi)收到 M 和 N 的 HELLO 報文的正常鄰居節(jié)點(diǎn)個數(shù), 若該 鄰居節(jié)點(diǎn)個數(shù)大于或等于 2個,則 A 就可判定 M 和 N 為偽 鄰居, 忽略它們的 HELLO 報文以及 M 和 N 鄰居表中節(jié)點(diǎn)的 HELLO 報文,該算法從收到一個未知的新 HELLO 報文開始 啟動,并在 2倍 HELLO 間隔時間內(nèi)周期地進(jìn)行計算。4 仿真分析
文獻(xiàn) [5]提出另一種基于 OLSR 路由協(xié)議的防御蟲洞攻擊 算法:異常拓?fù)浞植际剿惴?Abnormal Topology Distributed Algorithm, ATDA,它利用拓?fù)浞治龅姆椒?依據(jù)網(wǎng)絡(luò)中發(fā) 生蟲洞攻擊時引入的不正常節(jié)點(diǎn)密集度進(jìn)行檢測,本文對 HIDA 和 ATDA 2種算法進(jìn)性仿真分析并比較性能。
本文仿真通過 NS2軟件平臺實(shí)現(xiàn)。在仿真時,對 NS2 — 148—
中 OLSR 協(xié)議模塊進(jìn)行相應(yīng)改動,添加 HIDA 算法,完成該 協(xié)議的安全改進(jìn)并建立仿真模型。本文共進(jìn)行 3次仿真,其 中,前 2次仿真對 ATDA 和 HIDA 2種算法進(jìn)行性能比較;第 3次仿真是對 HIDA 算法的有效性進(jìn)行分析。3次仿真的 場景參數(shù)各不相同,但都是節(jié)點(diǎn)隨機(jī)均勻分布在 800 m×800 m的矩形區(qū)域中,節(jié)點(diǎn)的通信距離是 100 m。
在不同節(jié)點(diǎn)數(shù)(節(jié)點(diǎn)數(shù)分別是 20, 40, 60, 80, 100, 120, 140, 160, 180, 200下,隨機(jī)生成拓?fù)?100次,每次均進(jìn)行一次蟲 洞攻擊,所有節(jié)點(diǎn)隨機(jī)移動,最大移動速度是 2 m/s,仿真時 間為 20 s,不同節(jié)點(diǎn)數(shù)下 2種算法攻擊檢測率的比較結(jié)果如 圖 3所示。
0.0 0.20.40.60.8 1.0 節(jié)點(diǎn)數(shù)
攻 擊 檢 測 率
圖 3 不同節(jié)點(diǎn)數(shù)下 2種算法的攻擊檢測率比較
在不同的移動速率下,節(jié)點(diǎn)數(shù)為 100,所有節(jié)點(diǎn)隨機(jī)移 動,速率大小服從均勻分布,最大速率分別為 0 m/s, 1 m/s, 2 m/s, 4 m/s, 6 m/s, 8 m/s, 10 m/s,隨機(jī)生成拓?fù)?200次并進(jìn) 行 100次攻擊,仿真時間為 20 s。2種算法的攻擊誤判率、漏判率比較如圖 4、圖 5所示。2 4 6 8 10 0.00 0.050.100.150.20 節(jié)點(diǎn)最大移動速率 /(m·s-1 攻 擊 誤 判 率
圖 4 2種算法的攻擊誤判率比較
節(jié)點(diǎn)最大移動速率 /(m·s-1 攻 擊 漏 判 率 02 4 6 8 10 0.20.40.6 圖 5 2種算法的攻擊漏判率比較
在不同節(jié)點(diǎn)數(shù)、不同移動速率下,節(jié)點(diǎn)數(shù)分別為 60, 80, 120,節(jié)點(diǎn)隨機(jī)移動最大速率為 0, 1 m/s, 2 m/s, 4 m/s, 6 m/s, 8 m/s, 10 m/s,仿真時間為 70 s,分析 HIDA 算法在成功檢測 蟲洞攻擊的情況下,HIDA 算法偽鄰居的誤判率和漏判率結(jié) 果如圖
6、圖 7所示。
節(jié)點(diǎn)最大移動速率 /(m·s-1 偽 鄰 居 誤
判 率
圖 6 HIDA算法的偽鄰居誤判率比較 0.0 0.20.40.60.8 1.0 節(jié)點(diǎn)最大移動速率 /(m·s-1 偽 鄰 居 漏 判 率
圖 7 HIDA算法的偽鄰居漏判率比較 5 結(jié)束語
通過仿真比較可知,本文 HIDA 算法相對于 ATDA 算法 在網(wǎng)絡(luò)節(jié)點(diǎn)分布不是很密集時性能表現(xiàn)更加優(yōu)越,能取得更 高的檢測率。在不同節(jié)點(diǎn)移動速率下, HIDA 算法的攻擊漏 判率更低,但攻擊誤判率在節(jié)點(diǎn)高速移動下表現(xiàn)卻稍差。在 成功檢測到蟲洞攻擊的情況下, HIDA 算法對偽鄰居的判斷 在節(jié)點(diǎn)低速移動下也具有較高性能,但在高速移動情形下協(xié) 議還需進(jìn)一步研究。
綜上所述, HIDA 算法在低速密集的無線自組織網(wǎng)絡(luò)中 對蟲洞攻擊的防御表現(xiàn)出優(yōu)越性能,同時該協(xié)議的運(yùn)行不會 對網(wǎng)絡(luò)產(chǎn)生多余流量,保證了協(xié)議的高效性。
參考文獻(xiàn)
[1] Hu Yih-Chun, Perrig A, Johnson D B.Wormhole Attacks in Wireless Networks[J].IEEE Journal on Selected Areas in Communications, 2006, 24(2: 370-380.[2] Hu Yih-Chun, Perrig A, Johnson D B.Packet Leashes: A Defense Against Wormhole Attacks in Wireless Ad Hoc Net-works[C]//Proc.of the 22nd Annual Joint Conference of IEEE Computer and Communications Societies.Pittsburgh, USA: IEEE Press, 2003.[3] Tran Phuong-Van, Hung Le-Xuan, Lee Young-Koo, et al.TTM: An Efficient Mechanism to Detect Wormhole Attacks in Wireless Ad Hoc Networks[C]//Proc.of CCNC’07.Las Vegas, USA: IEEE Press, 2007.[4] Qian Lijun, Song Ning, Li Xiangfang.Detecting and Locating Wormhole Attacks in Wireless Ad Hoc Networks Through Statistical Analysis of Multi-path[C]//Proc.of 2005 IEEE Wireless Communications and Networking Conference.[S.l.]: IEEE Press, 2005.[5] Maheshwari R, Gao Jie, Samir R D.Detecting Wormhole Attacks in Wireless Networks Using Connectivity Information[C]//Proc.of INFOCOM’07.[S.l.]: IEEE Press, 2007.編輯 陸燕菲
— 149—
第二篇:計算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報告(路由算法、Socket編程)
計算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報告
班級: 姓名: 學(xué)號:
實(shí)驗(yàn)一
一. 實(shí)驗(yàn)?zāi)康募耙?/p>
編寫程序,模擬距離矢量路由算法的路由表交換過程,演示交換后的路由表的變化。
二. 實(shí)驗(yàn)原理
距離矢量路由算法是這樣工作的:每個路由器維護(hù)一張路由表(即一個矢量),它以網(wǎng)絡(luò)中的每個路由器為索引,表中列出了當(dāng)前已知的路由器到每個目標(biāo)路由器的最佳距離,以及所使用的線路。通過在鄰居之間相互交換信息,路由器不斷地更新他們的內(nèi)部路由表。
舉例來說,假定使用延遲作為“距離”的度量標(biāo)準(zhǔn),并且該路由器發(fā)送一個列表,其中包含了他到每一個目標(biāo)路由器的延時估計值;同時,他也從每個鄰居路由器接收到一個類似的列表。假設(shè)一個路由器接收到來自鄰居x的一個列表,其中x(i)表示x估計的到達(dá)路由器i所需要的時間。如果該路由器知道他到x的延時為m毫秒,那么他也知道在x(i)+m毫秒之間內(nèi)經(jīng)過x可以到達(dá)路由器i。一個路由器針對每個鄰居都執(zhí)行這樣的計算,就可以發(fā)現(xiàn)最佳的估計值,然后在新的路由器表中使用這個最佳的估計值以及對應(yīng)的輸出路線。
三.源程序:
#include “stdio.h” #include “stdlib.h” #include “malloc.h” #include “graphics.h” #include “dos.h” #define VERNUM 7
typedef struct {
int dis;
int flag;
int flag2;}RoutNode;
char tmp[10];RoutNode data[VERNUM][VERNUM];
void welcome();
void InitRoutData(FILE* pfile);
void PrintRoutData();
void SendInf(int recv, int send);
void Exchange();
int main(){
int start, end, i, j, m, n;
FILE *pfile;
welcome();
pfile = fopen(“1.txt”, “r”);
if(pfile == NULL)
{
printf(“the file wrong,press any key to come back.n”);
getch();
return;
}
else
InitRoutData(pfile);
fclose(pfile);
printf(“nthe original route table:n”);
for(i = 0;i { printf(“%c||”, i + 65); for(j = 0;j < VERNUM;j++) if(data[i][j].dis > 0) printf(“<%c %d> ”, j + 65, data[i][j].dis); printf(“n”); } PrintRoutData(); getch(); for(i = 0;i < VERNUM;i++) { for(m = 0;m < VERNUM;m++) for(n = 0;n < VERNUM;n++) data[m][n].flag = 0; Exchange(); PrintRoutData(); getch(); } printf(“nexchange the route table:n”); return 0;} void welcome(){ int gdriver=DETECT,gmode; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode,“C:Win-TC”); cleardevice(); setbkcolor(CYAN); setviewport(0,0,639,479,1); clearviewport(); setbkcolor(BLUE); setcolor(14); rectangle(200,200,440,280); setfillstyle(1,5); floodfill(300,240,14); settextstyle(0,0,2); outtextxy(50,30,“Distance Vector Routing Algorithm”); setcolor(15); settextstyle(1,0,4); outtextxy(260,214,“Welcome to use!”); line(0,80,640,80); getch(); delay(300); cleardevice();} void InitRoutData(FILE* pfile){ char num[10]; int i = 0; char c; int m, n; fseek(pfile, 0, 0); for(m = 0;!feof(pfile)&& m < 7;m++) { for(n = 0;!feof(pfile)&& n < 7;n++) { while(!feof(pfile)) { c = fgetc(pfile); if(c == ',') { num[i] = '