




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課課程程設設計計報報告告課程名稱:課程名稱: 計算機網(wǎng)絡 設計題目設計題目: RIP路由協(xié)議原型系統(tǒng)的實現(xiàn) 系系 別:別: 計算機與信息工程學院 專專 業(yè):業(yè): 物聯(lián)網(wǎng)專業(yè) 組組 別:別: 第五組 -起止日期起止日期: 2014 年 6 月 8 日2014 年 6 月 14 日-指導老師指導老師: 劉進軍 計算機科學與技術系二計算機科學與技術系二一四年制一四年制精選文檔2課程設計任務書課程設計任務書組長謝剛學號2012211588班級2012 級物聯(lián)網(wǎng)系別計算機與信息工程學院專業(yè)物聯(lián)網(wǎng)專業(yè)組員謝剛指導老師老師 劉進軍課程設計目的1)進一步理解動態(tài)內部網(wǎng)關協(xié)議 RIP 的工作原理。2)學會將所學
2、學問聯(lián)合運用,如本次 RIP 協(xié)議原型系統(tǒng)的設計即是將網(wǎng)絡與數(shù)據(jù)結構(圖)及 C 編程語言相結合。3)提高團隊合作力量,發(fā)揮每一名組員的特長。4)體會做一個項目的流程(包括前期的資料收集,系統(tǒng)要求分析,系統(tǒng)實現(xiàn)的語言選擇及實現(xiàn)方法的爭辯等) 。課程設計所需環(huán)境1)Windows 操作系統(tǒng)平臺2)VC+6.0 編譯環(huán)境3) Cisco Packet Tracer 仿真軟件課程設計任務要求1)實現(xiàn)一個 RIP 路由協(xié)議的原型系統(tǒng)2)廣播發(fā)布本地節(jié)點的路由信息3)其它節(jié)點接收信息并選擇最優(yōu)路徑4)支持最大不超過 15 跳的特性5)動態(tài)支持網(wǎng)絡拓撲結構的變化(如增加路由節(jié)點)課程設計工作進度方案序號起
3、止日期工 作 內 容分工狀況12014 年 6 月 8 日2014 年 6 月 9 日開放思路爭辯工作并搜集相關資料參考相關資料獨立完成22014 年 6 月 9 日2014 年 6 月 10 日分析課程設計要求,確定目標參考相關資料獨立完成32014 年 6 月 10 日2014 年 6 月 11 日設計軟件功能模塊參考相關資料獨立完成42014 年 6 月 11 日2014 年 6 月 12 日編寫代碼、實現(xiàn)功能模塊參考相關資料獨立完成52014 年 6 月 12 日2014 年 6 月 13 日系統(tǒng)整合以及測試參考相關資料獨立完成62014 年 6 月 13 日2014 年 6 月 14
4、 日完成課程設計文檔參考相關資料獨立完成教研室審核意見:教研室主任簽字: 年 月 日精選文檔3目目 錄錄1. 引言引言. 42. 系統(tǒng)開發(fā)分析系統(tǒng)開發(fā)分析. 4 2.1 系統(tǒng)需求分析系統(tǒng)需求分析. 4 2.2 系統(tǒng)設計原理系統(tǒng)設計原理43. 系統(tǒng)功能描述與軟件模塊劃分系統(tǒng)功能描述與軟件模塊劃分.54. 系統(tǒng)設計具體系統(tǒng)設計具體. 5 4.14.1 程序流程圖程序流程圖 6 6 4.2 程序源代碼程序源代碼7 5. 設計過程關鍵問題及其解決方法設計過程關鍵問題及其解決方法. 10 5.1 如何實現(xiàn)廣播本地路由及更新動態(tài)更新路由表如何實現(xiàn)廣播本地路由及更新動態(tài)更新路由表. 10 5.2 如何在網(wǎng)絡
5、拓撲結構轉變后實現(xiàn)動態(tài)更新維護路由表如何在網(wǎng)絡拓撲結構轉變后實現(xiàn)動態(tài)更新維護路由表.116. 程序設計結果界面演示程序設計結果界面演示11 6.1 設計結果演示設計結果演示.117. 課程設計總結與體會課程設計總結與體會157.1 總結總結.157.2 體會體會.17致謝致謝17參考文獻參考文獻18精選文檔41 引言引言 RIP(Routing information Protocol,路由信息協(xié)議)是應用較早、使用較普遍的內部網(wǎng)關協(xié)議(Interior Gateway Protocol,IGP) ,適用于小型同類網(wǎng)絡的一個自治系統(tǒng)(AS)內的路由信息的傳遞。RIP 協(xié)議是基于距離矢量算法(D
6、istanceVectorAlgorithms)的,在默認狀況下,RIP 使用一種格外簡潔的度量制度:距離就是通往目的站點所需經(jīng)過的鏈路數(shù),取值為 115,數(shù)值 16 表示無窮大。它使用“跳數(shù)”,即 metric 來衡量到達目標地址的路由距離。這種協(xié)議的路由器只關懷自己四周的世界,只與自己相鄰的路由器交換信息,范圍限制在 15 跳(15 度)之內,再遠,它就不關懷了。RIP 進程使用 UDP 的 520 端口來發(fā)送和接收 RIP 分組。RIP 分組每隔 30s 以廣播的形式發(fā)送一次,為了防止消滅“廣播風暴”,其后續(xù)的的分組將做隨機延時后發(fā)送。在 RIP 中,假如一個路由在 180s 內未被刷,
7、則相應的距離就被設定成無窮大,并從路由表中刪除該表項。RIP 應用于 OSI 網(wǎng)絡七層模型的網(wǎng)絡層。RIP 是一個用于路由器和主機間交換路由信息的距離向量協(xié)議,目前最新的版本為v4,也就是 RIPv4。2系統(tǒng)開發(fā)分析系統(tǒng)開發(fā)分析2.1 系統(tǒng)需求分析1.實現(xiàn)一個 RIP 路由協(xié)議的原型系統(tǒng)。2.廣播發(fā)布本地節(jié)點的路由信息。3.其它節(jié)點接收信息并選擇最優(yōu)路徑。4.支持最大不超過 15 跳的特性。5.動態(tài)支持網(wǎng)絡拓撲結構的變化(如增加路由節(jié)點)2.2 系統(tǒng)設計原理RIP 協(xié)議是動態(tài)路由協(xié)議,其運行至路由器中,而路由器是運行路由協(xié)議軟件的專用硬件,它的主要功能可以分成兩部分:路由選擇和分組轉發(fā)。其中路
8、由選擇是基礎。一個路由器對到來的每一個分組先選擇合適的路由,然后才能依據(jù)此路由進行正確的轉發(fā),本精選文檔5次課程設計就是設計有著廣泛的使用范圍的動態(tài)路由協(xié)議 RIP 協(xié)議體統(tǒng)原型。它是距離向量協(xié)議中的一種,屬于內部網(wǎng)關協(xié)議。運行協(xié)議的相鄰路由器通過彼此之間交換路由信息RIP 的距離向量,從而知道網(wǎng)絡的連接狀況,實現(xiàn)各個網(wǎng)絡之間的連通,這也是距離向量名稱的由來。(Distance Vector)運行協(xié)議的每個路由器都要維護一張自己的路由 RIP 表,該路由表是相應于與它直接相聯(lián)和通過路由器相連的網(wǎng)絡連接狀況而動態(tài)變化的。因此協(xié)議屬于動態(tài)路由協(xié) RIP 議。路由器依據(jù)路由表對發(fā)給它的包進行轉發(fā),從
9、而實現(xiàn) IP 路由功能。3系統(tǒng)功能描述與系統(tǒng)模塊劃分系統(tǒng)功能描述與系統(tǒng)模塊劃分本設計實現(xiàn)的 RIP 路由協(xié)議的原型系統(tǒng)功能主要包括,一:初始化每個路由器的路由表信息。即在使用者輸入網(wǎng)絡拓撲結構中的路由節(jié)點數(shù)及鏈路數(shù)后,系統(tǒng)首先會自動生成每個節(jié)點到其相鄰路由節(jié)點的路由信息,具體包括:目的地址、跳數(shù)、下一跳,初始設置相鄰節(jié)點的跳數(shù)為 1。 二:當路由器的初始路由表建立后,接下來就開頭進行鄰接節(jié)點的路由信息廣播,即路由節(jié)點將自身的路由表信息廣播至其相鄰的節(jié)點,具體的廣播信息是將每一條路由的目的地址不變,跳數(shù)加一,嚇一跳修改為自身路由器接口的名稱進行傳送,收到廣播信息的路由表對收到的每一條路由信息進行
10、推斷,分兩大狀況::若原來的路由表中沒有目的網(wǎng)絡 N,則將該項添加到路由表中,否則(即在該路由表中有到目的網(wǎng)絡 N 的信息,則觀看下一條)此時分兩種小狀況 1:若嚇一跳與原路由表項相同,則無條件進行更新。2:若嚇一跳與原路由表項不相同,則若收到的路由信息中距離 d 小于路由表中的距離,則進行更新。 (還有對于接受的路由信息跳數(shù)=16 的信息,則將跳數(shù)置為 16,表明不行達。 )三:動態(tài)轉變網(wǎng)絡拓撲結構,即當由于實際需要,需增設路由節(jié)點時,系統(tǒng)會依據(jù)增設的路由節(jié)點數(shù)、名稱、鏈路數(shù),首先進行新增設節(jié)點的路由表信息初始化,而后將該節(jié)點的路由信息想鄰接節(jié)點進行廣播,隨后整個網(wǎng)絡節(jié)點向鄰接節(jié)點進行路由信
11、息廣播,這樣經(jīng)過幾輪廣播后,每一個節(jié)點都接收到了新增路由節(jié)點的最小路徑信息,從而實現(xiàn)了路由表的動態(tài)維護與創(chuàng)建。4系統(tǒng)設計具體系統(tǒng)設計具體4,1 程序流程圖精選文檔7精選文檔8開頭輸入要建立網(wǎng)絡的拓撲結構所需路由節(jié)點數(shù)及鏈路數(shù)各路由節(jié)點向鄰接節(jié)點廣播路由信息各節(jié)點接收信息便進行路由表的更新建立各節(jié)點的初始路由表廣播信息內容:目的地址:不變跳數(shù):加 1嚇一跳:修改為廣播該路由信息的路由節(jié)點名稱若原來的路由表中無到此網(wǎng)絡的信息,則添加,否則 1:若嚇一跳與原路由表項相同,則無條件進行更新。2:若嚇一跳與原路由表項不相同,則推斷距離 d 若小于路由表中的距離,則更新。 (還有對于接受的路由信息跳數(shù)=1
12、6 的信息,則將跳數(shù)置為 16)節(jié)點路由信息更新完畢,詢問是否還需添加新的路由節(jié)點否結束是初始化新增路由節(jié)點路由表精選文檔94.2 程序源碼由于系統(tǒng)的設計涉及到網(wǎng)絡拓撲圖的存儲,所以本設計接受數(shù)據(jù)結構中圖的存儲思想來進行拓撲結構的存儲,輸出。下面是系統(tǒng)設計的主要代碼:首先分別設置了 4 種類型的結構體,以來表示鏈路信息、路由表、路由器,網(wǎng)絡拓撲圖。#include#include#define MAX_VERTEX_NUM 15#define MAX 15#include typedef struct ArcCell/存儲鏈路信息int adj;ArcCell,AmMAX_VERTEX_NUM
13、MAX_VERTEX_NUM;typedef struct/路由表char destinationMAX;int distance;char nextjumpMAX;TNode;typedef struct/路由結點char rMAX;/存儲路由器名稱TNode tMAX;/存儲路由結點的路由表信息。VNode;typedef structVNode vexMAX;Am arcs;int vexnum,arcnum;Graph;/用圖來存儲網(wǎng)絡拓撲結構。/另外在此設置一個全局變量,用來辨別路由表中信息的結束。TNode end=,0,;copy(char *str1,char *str2)in
14、t i; char *temp = str2; for(i=0;*temp!=0;i+) *(str1+i)=*(str2+i); temp+; *(str1+i)=0; /第一步:待設計好需要的結構模型后,接下來開頭依據(jù)路由節(jié)點的個數(shù)及鏈路數(shù)進精選文檔10行網(wǎng)絡拓撲結構的構造,具體代碼如下:Graph Create()Graph G;int i,j,k,count;char v120,v220;printf(分別輸入網(wǎng)絡拓撲結構中的路由數(shù)和鏈路數(shù)(中間用逗號隔開):n);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(分別輸入路由器名稱及路由表
15、n);int LocateVex(Graph *G,char s);void initRoute(Graph *G,int i,int j);for(i=0;iG.vexnum;i+)/構造路由結點count=0;printf(輸入第%d 個路由器名稱:n,i+1);scanf(%s,G.vexi.r);G.vexi.t0=end;for(i=0;iG.vexnum;i+)/初始化鄰接矩陣for(j=0;jG.vexnum;j+)G.arcsij.adj=10000;for(k=0;kG.arcnum;k+)/構造鄰接矩陣printf(輸入第%d 條鏈路的兩端路由器的名稱:n,k+1);sca
16、nf(%s%s,v1,v2);/用 scanf 輸入多個字符串,中間用空格隔開。i=LocateVex(&G,v1);j=LocateVex(&G,v2);G.arcsij.adj=1;G.arcsji.adj=1;/初始化該鏈路兩端路由節(jié)點的路由表。initRoute(&G,i,j);return G;int compare(char a,char b);void printG(Graph *G);void insertNewRoute(Graph *G);/其中的 LocateVex()函數(shù)用來確定 s 在圖中的位置,具體實現(xiàn)如下:int LocateVex(Gra
17、ph *G,char s)int i;for(i=0;i(*G).vexnum;i+)精選文檔11 if(compare(s,(*G).vexi.r)=1)return i;return -1;/其次步:構造完網(wǎng)路拓撲圖后,接下來進行拓撲結構中路由節(jié)點的路由表信息的初始化。void initRoute(Graph *G,int i,int j)int m,n;for(m=0;(*G).vexi.tm.distance!=0;m+);copy(*G).vexi.tm.destination,(*G).vexj.r);(*G).vexi.tm.distance=1;copy(*G).vexi.tm
18、.nextjump,(*G).vexi.r);(*G).vexi.tm+1=end;for(n=0;(*G).vexj.tn.distance!=0;n+);copy(*G).vexj.tn.destination,(*G).vexi.r);(*G).vexj.tn.distance=1;copy(*G).vexj.tn.nextjump,(*G).vexj.r);(*G).vexj.tn+1=end;/第三步:開頭進行鄰接節(jié)點的路由信息廣播:void Exchange(Graph *G)int i,j,k,h,count;char c; TNode temp;for(i=0;i(*G).ve
19、xnum;i+)for(j=0;j16) temp.distance=16;copy(temp.nextjump,(*G).vexi.r);count=0;for(h=0;(*G).vexj.th.distance!=0;h+)精選文檔12if(compare(temp.destination,(*G).vexj.r)=1)/表明該條路由信息的目的地址指向的是路由結點 j 本身,因而不需要更新及修改。count+;break;if(compare(*G).vexj.th.destination,temp.destination)=1)count+;if(compare(*G).vexj.th.
20、nextjump,temp.nextjump)=1)(*G).vexj.th.distance=temp.distance;else if(*G).vexj.th.distancetemp.distance)(*G).vexj.th.distance=temp.distance;copy(*G).vexj.th.nextjump,temp.nextjump);if(count=0)copy(*G).vexj.th.destination,temp.destination);(*G).vexj.th.distance=temp.distance;copy(*G).vexj.th.nextjump
21、,temp.nextjump);(*G).vexj.th+1=end;/printf(路由器%s 向路由器%s 發(fā)送消息n,(*G).vexi.r,(*G).vexj.r);printG(G);/printf(若需在原有網(wǎng)絡拓撲結構中增加新的節(jié)點,請輸入#鍵n);getchar();scanf(%c,&c);if(c=#)insertNewRoute(G);精選文檔13/第四步:增加路由表,實現(xiàn)網(wǎng)絡拓撲結構的動態(tài)變化及路由表信息的動態(tài)更新與維護。void insertNewRoute(Graph *G)int i,j,nVexNum,nArcNum,k,num;char v120,v2
22、20;printf(分別輸入新增加的路由數(shù)和鏈路數(shù)(中間用逗號隔開):n);scanf(%d,%d,&nVexNum,&nArcNum);printf(分別輸入路由器名稱及路由表n);for(num=0;numnVexNum;num+)printf(輸入新增第%d 個路由器名稱:n,num+1);scanf(%s,(*G).vexnum+(*G).vexnum.r);(*G).vexnum+(*G).vexnum.t0=end; (*G).vexnum+=nVexNum;(*G).arcnum+=nArcNum;for(k=0;knArcNum;k+)/構造鄰接矩陣printf
23、(輸入新增路由節(jié)點后第%d 條鏈路的兩端路由器的名稱:n,k+1);scanf(%s%s,v1,v2);/用 scanf 輸入多個字符串,中間用空格隔開。i=LocateVex(G,v1);j=LocateVex(G,v2);(*G).arcsij.adj=1; (*G).arcsji.adj=1; initRoute(G,i,j);for(i=0;i(*G).vexnum;i+)/初始化鄰接矩陣for(j=0;j(*G).vexnum;j+)if(*G).arcsij.adj!=1)(*G).arcsij.adj=10000;Exchange(G);/下面是系統(tǒng)設計過程中所需的幫助自定義函數(shù)
24、。int compare(char a,char b)int j; for(j=0;aj!=0&bj!=0;j+)if(aj!=bj)return 0;精選文檔14return 1;/顯示網(wǎng)絡拓撲結構:void printG(Graph *G)int i,j;for(i=0;i(*G).vexnum;i+)printf(t 路t 由t 器%s:n,(*G).vexi.r);printf(目的地址tt 距離tt 下一跳nn);for(j=0;(*G).vexi.tj.distance!=0;j+)printf(%sttt%dtt%snn,(*G).vexi.tj.destination,
25、(*G).vexi.tj.distance,(*G).vexi.tj.nextjump);printf(nn);/顯示指定路由節(jié)點 v 的路由表:void printv(VNode v)int i;printf(t 路t 由t 器%sn,v.r);printf(目的地址tt 距離tt 下一跳nn); for(i=0;v.ti.distance!=0;i+)printf(%sttt%dtt%snn,v.ti.destination,v.ti.distance,v.ti.nextjump); printf(nn);/通過主函數(shù)進行函數(shù)的調用運行:void main()Graph G=Create(
26、);printG(&G);Exchange(&G);精選文檔155設計過程關鍵問題及其解決方法設計過程關鍵問題及其解決方法5.15.1 如何如何實現(xiàn)廣播本地路由及更新動態(tài)更新路由表。實現(xiàn)廣播本地路由及更新動態(tài)更新路由表。路由器最初啟動時只包含了其直連網(wǎng)絡的路由信息,并且其直連網(wǎng)絡的 metric 值為1,然后它向四周的其他路由器發(fā)出完整路由表的 RIP 懇求。路由器依據(jù)接收到的 RIP 應答來更新其路由表,具體方法是添加新的路由表項,并將其 metric 值加 1。假如接收到與已有表項的目的地址相同的路由信息,則分下面四種狀況分別對待:第一種狀況,已有表項的來源端口與新表項的來
27、源端口相同,那么無條件依據(jù)最新的路由信息更新其路由表;其次種狀況,已有表項與新表項來源于不同的端口,那么比較它們的 metric 值,將 metric值較小的一個最為自己的路由表項;第三種狀況,新舊表項的 metric 值相等,普遍的處理方法是保留舊的表項。第四種狀況,新表項在該路由表中不存在,則將跳數(shù)加一,嚇一跳改為原發(fā)送路由器后添加到表項后。 5.25.2 如何在網(wǎng)絡拓撲結構轉變后實現(xiàn)動態(tài)更新維護路由表。如何在網(wǎng)絡拓撲結構轉變后實現(xiàn)動態(tài)更新維護路由表。首先要實現(xiàn)新添加路由表的路由信息初始化,而后再更新與之相鄰的路由節(jié)點的路由信息,接下來就進行路由信息的鄰接節(jié)點廣播,從而達到全網(wǎng)絡的路由信息
28、更新。6程序設計結果界面演示程序設計結果界面演示6.16.1 設計結果演示設計結果演示程序運行過程演示以及結果如下:1分別從鍵盤輸入網(wǎng)絡拓撲結構中的路由數(shù)和鏈路數(shù)(中間用逗號隔開)例如輸入 3,2 表示共有兩個路由器和一條鏈路,如圖 1-1 所示拓撲結構: 圖 1-12再分別輸入各個路由器名稱及其鏈路(中間用空格隔開)例如分別依次輸入第一個路由器名稱 v1 ,其次個路由器名稱 v2 及兩個路由器間的鏈路v1 v2.程序輸入數(shù)據(jù)界面與按下 ENTER 鍵后各路由表的初始路由信息如圖 1-2精選文檔16 4接下來轉變原始網(wǎng)絡拓撲結構,增加新的路由節(jié)點,如圖 1-3 中拓撲結構所示: 圖 1-3運行
29、命令后輸入如下:輸入新增第 1 個路由器名稱:v4輸入新增路由節(jié)點后第 1 條鏈路的兩端路由器的名稱:v2 v4 增加路由結點輸入界面如圖 1-4 所示:精選文檔17 圖 1-4按下 ENTER 鍵程序進行 v4 路由器的路由表信息初始化及路由信息廣播:V4 路由表初始信息動態(tài)生成如圖 1-7: 圖 1-5V2 向 v4 廣播信息如圖 1-6 所示: 圖 1-6幾輪廣播信息結束后,各路由節(jié)點路由信息如下圖 1-7 與 1-8 所示:精選文檔18圖 1-8 圖 1-95.若還需要在原有的網(wǎng)絡拓撲結構中連續(xù)增加新的節(jié)點,再輸入#鍵,按以上步驟連續(xù)操作,能實現(xiàn)不斷增加路由結點以及鏈路,并將路由表的持續(xù)更新。精選文檔197課程設計總結與體會課程設計總結與體會7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省F市新就業(yè)形態(tài)勞動者勞動權益保障問題研究
- 銑床加工流程
- 心理健康5A示范校匯報
- 慢阻肺健康宣教指南
- 頤和園教學說課課件
- 腸道健康的重要性
- 頸椎術后護理課件
- 教師培訓心得體會交流
- 中醫(yī)內科學:瘧疾診治要點
- 設備檢修培訓內容
- 教師違反師德的典型案例分析
- 《水利水電工程隧洞超前地質預報規(guī)程》
- 競走培訓課件
- 特殊教育學校課后服務安全制度
- 君樂寶在線測評題目
- 《園林快題設計》課件
- 安全生產(chǎn)常識 第3版 課件 第二章 職業(yè)健康安全
- 子宮肌瘤中醫(yī)護理常規(guī)
- 員工內部調配協(xié)議
- 靜脈輸液的常見并發(fā)癥及處理
- 「初中數(shù)學」利用對稱求線段和最值
評論
0/150
提交評論