

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計任務書</b></p><p><b> 目錄</b></p><p> 前言...........................................................................3</p><p> 計算機網絡課程設計......
2、.......................................................4</p><p> 1.1設計課題及目的..........................................................4</p><p> 1.2設計原理和流程圖......................................
3、..................4</p><p> 1.3交換機的基本操作........................................................6</p><p> 1.3.1學習...............................................................6</p><
4、p> 1.3.2過期...............................................................6</p><p> 1.3.3防洪...............................................................6</p><p> 1.3.4選擇性轉發(fā)...............
5、..........................................7</p><p> 1.3.5更新...............................................................7</p><p> 1.4程序界面設計及運行過程..............................................
6、....8</p><p> 1.4.1界面設計...........................................................8</p><p> 1.4.2運行程序...........................................................8</p><p> 1.5程序主要代
7、碼及分析..................................................... 11</p><p> 1.6設計的優(yōu)缺點和感想.....................................................17</p><p> 參考文獻...........................................
8、...........................18</p><p><b> 前言</b></p><p> 本學期學習了計算機網絡,一直就聽說計算機網絡是一門非常重要的專業(yè)課,特別是現在互聯網的發(fā)展非常迅猛,計算機網絡方面的專業(yè)人才非常缺乏。在學計算機網絡前,我并不清楚什么是計算機網絡,只是簡單的知道互聯網就是計算機網絡的一種。計算機網絡這么課程從微觀和
9、宏觀上全面的介紹了計算機網絡,讓我對計算機網絡有了一個大概的了解,從中我也學到了許多知識。在以前,我一直把編程當做我最喜歡也是最重要的部分,對網絡并不感冒。直到開始學習后,我才發(fā)現原來計算機網絡也是一門很有意思的課程,與編程也是密切相關的。</p><p> 通過這學期的網絡學習,我對網絡有了更深入的認識。通過老師的講解,我從底層的網絡協(xié)議到高層的網絡架構有了一個初步的認識。明白了計算機網絡的基本配置和功能。在
10、學習過程中我對底層的網絡協(xié)議最為喜歡,因為協(xié)議是通過編程來實現的。我很好奇科學家們是怎么通過協(xié)議把電信號轉化為信息的。由于,計算機網絡的課程設計包括了此方面的內容。于是,我選擇了交換機模擬作為自己的設計課題。借此機會,鍛煉自己的編程能力,同時加深對交換機查表功能的理解。</p><p> 總之,很高興能有這次實踐機會,希望自己的作品能讓老師滿意。</p><p><b> 計
11、算機網絡課程設計</b></p><p> 1.1設計課題及目的</p><p> 課題名稱:模擬交換機查表功能</p><p> 設計目的:通過此課程設計提高自己對交換機查表功能的理解,深入理解交換機的原理。同時通過課程設計還能提高自己的編程能力,提高自己解決實際問題的能力。為將來自己進入社會工作打好基礎。</p><p>
12、; 1.2設計原理和流程圖</p><p><b> 設計原理:</b></p><p><b> 程序基本流程:</b></p><p> 接收幀,在mac里查找源mac地址。</p><p> 如果找到判斷是否是進入端口,如不是則轉發(fā)至該端口,轉到4。</p><p
13、> 如果不存在,則將該mac地址添加到mac表,轉到4。</p><p> 判斷目的mac地址是否在mac表。</p><p> 如果找到則從對應端口轉發(fā),如果不存在則轉發(fā)至出本端口外的其他所有端口。</p><p> 更新mac表里mac地址的計時器。</p><p> 7.等待接收新的數據幀,轉到1。</p>
14、<p><b> 圖1:程序流程圖</b></p><p> 1.3交換機的基本操作</p><p> 交換機采用5種基本操作來實現其用途:</p><p><b> ■學習</b></p><p><b> ■過期</b></p><
15、p><b> ■泛洪</b></p><p><b> ■選擇性轉發(fā)</b></p><p><b> ■過濾</b></p><p><b> 1.3.1學習</b></p><p> MAC表中必須填入MAC地址以及其對應的端口,學習過
16、程是交換機在正常運行期間動態(tài)獲取這些映射。</p><p> 當每個幀進入交換機時,交換機會檢查源MAC地址。通過查詢過程,交換機將確定表中是否已經包含該MAC地址的條目。如果未包含,交換機將使用源MAC地址在MAC表中新建一個條目,然后將此條目與達到的端口進行配對。現在,交換機可以使用該映射將該幀轉發(fā)到該節(jié)點。</p><p><b> 1.3.2過期</b>&
17、lt;/p><p> 通過學習過程獲取的MAC表條目具有時間戳。時間戳用于從MAC表中刪除舊條目。當</p><p> 某個條目在MAC表中創(chuàng)建之后,就會使用其時間戳作為起始值開始遞減計數。值計數到0后,表此條目過期,并從MAC表中刪除。當交換機下一次在相同端口又從該節(jié)點接收幀是,此計時器重置。重置計數器會阻止MAC條目的刪除。如,計時器設置為300秒。如果300秒內沒有從節(jié)點收到幀,此條
18、目從MAC表中刪除。</p><p><b> 1.3.3泛洪</b></p><p> 如果交換機的MAC地址表中沒有與收到幀的目的MAC地址的匹配項,將會泛洪此幀。</p><p> 泛洪值將幀發(fā)送到除此幀進入端口之外的所有接口。交換機之所以不將幀轉發(fā)到接收該幀的端口,是因為該網段的所有目的都已經收到了幀。泛洪還用于發(fā)送到廣播MAC
19、地址的幀。</p><p> 1.3.4選擇性轉發(fā)</p><p> 選擇性轉發(fā)是檢查幀的目的MAC地址后將幀從適當的端口轉發(fā)出去的過程。這是交換機的核心功能。當節(jié)點發(fā)送幀到交換機時,如果交換機知道該節(jié)點的MAC地址,交換機會將此地址與MAC地址表中的條目比對,然后將幀轉發(fā)到對應端口。此時交換機不是將幀泛洪到所有端口,而是通過將其制定端口發(fā)送到目的節(jié)點。此操作稱為轉發(fā)。</p&g
20、t;<p><b> 1.3.5過濾</b></p><p> 在某些情況下,幀不會被轉發(fā)。此過程稱為幀過濾。前面已經描述了過濾的一次使用:</p><p> 交換機不會將幀轉發(fā)到接受幀的端口。另外,交換機還會丟棄損壞的真。如果真沒有通過CRC檢查被丟棄。對幀進行過濾的另一個原因是安全。交換機具有安全設置,用于阻擋法網和或來自選定MAC地址或特定端
21、口的幀。</p><p> 1.4程序界面設計及運行過程</p><p><b> 1.4.1界面設計</b></p><p> 為了簡化程序復雜度同時又要易于用戶操作和理解交換機的查表功能,界面上我盡量簡單易于操作和觀察。我限制了交換機的端口數量,采用了6端口的交換機。用按鈕來代替交換機端口,每個按鈕代表一個端口,同時簡化了mac表,每
22、個端口代表該端口的所有mac地址。通過點擊按鈕完成數據幀的輸入,第一次點擊的按鈕代表該數據幀的源mac地址,第二次點擊的按鈕代表該數據幀的目的端口。輸入數據幀完成后,出現一條線段,代表該數據幀的路徑。</p><p> 同時,程序還添加了提示信息編輯框和mac表。信息編輯框里包含了數據幀從進入交換機到輸出交換機的路徑信息。Mac表包含了各端口的源mac地址,時間戳和端口。Mac表以秒為周期自動更新,當輸入的數據
23、幀源端口不再mac表時,程序會將該mac地址信息加入mac表。當mac地址的時間戳到期時,程序會自動將該mac地址信息刪除出mac表。通過該mac表,用戶可隨時了解mac表的信息,可以相應的改變輸入操作,來獲取自己想要的信息。</p><p> 這是界面的概述,具體界面如下。</p><p> 1.4.2程序運行過程</p><p> 圖2:應用程序初始化界面
24、</p><p> 這是應用程序的初始化界面,信息框和mac表都是空的。</p><p> 圖3:首次進入數據幀的情況</p><p> 這是交換機首次進入數據幀的情況,由于mac表是空的,該幀從端口1進入交換機,查表為發(fā)現目的mac時從除1外的其他端口泛洪出交換機。信息框顯示了相應的信息,mac表添加了mac1的信息。</p><p>
25、; 圖4:交換機選擇性轉發(fā)</p><p> 這是交換機選擇性轉發(fā)的運行情況,從信息框可以看出該交換機已經進入了3個數據幀,前3個數據幀進入交換機時由于不存在幀的源端口,對應的端口都已經被程序添加到mac表里,第三個數據幀進入交換機時,程序查找對應目的端口,找到該目的mac存在1端口后,交換機將該幀從1端口轉發(fā)出去,從紅的的路徑線可以看出。</p><p> 圖5:交換機mac表的更
26、新</p><p> 從圖中可以看到mac表更新了mac1的時間戳,應為mac1最后一次進入交換機,所以它對應的剩余生存時間最長。</p><p> 圖6:mac表過期信息被刪除</p><p> 從信息框可以看出mac表應該包含mac1、mac2、mac3、mac4的信息。而此時mac表里只有mac3和mac4的信息,這是應為mac1和mac2已經過期被程序
27、從mac表里刪除。</p><p><b> 圖7:程序運行結束</b></p><p> 這是程序運行結束后的界面,由于所有mac信息都已經過期,所以mac表為空。從信息框可以看出交換機之前是有幀進入過的。</p><p> 1.5程序主要代碼及分析</p><p> 程序使用mfc開發(fā),使用對話框模式,具體代
28、碼如下:</p><p><b> 程序的主要變量有:</b></p><p> int LifeTime;//生存時間</p><p> CEdit *add;//編輯框指針</p><p> int flag0;//標記0</p><p>
29、 int flag1;//標記1</p><p> typedef struct Mac//幀結構體</p><p><b> {</b></p><p> CString address;//mac地址</p><p> short port;//端口號<
30、/p><p> int time;//剩余生存時間</p><p><b> }Mac;</b></p><p> vector<Mac> m_table;//Mac地址數組</p><p> 程序主要包含六個模塊函數:</p><p> 增加mac地址到m
31、ac表函數AddToTable()</p><p> 查看mac表函數LookUp(CString str)</p><p> 顯示路徑信息函數ShowRoad(int m)</p><p> 畫途徑線函數Paint()</p><p> 顯示mac表函數ShowTable()</p><p> 更新mac表
32、函數RefreshTable()</p><p> AddToTable()</p><p> void CNetwork3Dlg::AddToTable()//增加源mac地址到mac表</p><p><b> {</b></p><p> CString str;</p><
33、;p> str.Format("%s%d", "mac", flag0);</p><p><b> Mac temp;</b></p><p> temp.address = str;</p><p> temp.port = flag0;</p><p> te
34、mp.time = LifeTime;</p><p> m_table.push_back(temp);</p><p><b> }</b></p><p> LookUp(CString str)</p><p> bool CNetwork3Dlg::LookUp(CString str)/查看Mac
35、表,存在返回true,否則返回false</p><p><b> {</b></p><p> CString temp;</p><p> temp.Format("%s%d", "mac", flag0);</p><p> vector<Mac>::it
36、erator iter = m_table.begin();</p><p> for (; iter != m_table.end(); iter++)</p><p><b> {</b></p><p> if (iter->address == str)</p><p><b> {<
37、;/b></p><p> if (str == temp)</p><p><b> {</b></p><p> iter->time = LifeTime;</p><p><b> }</b></p><p> return TRUE;</
38、p><p><b> }</b></p><p><b> }</b></p><p> return FALSE;</p><p><b> }</b></p><p> ShowRoad(int m)</p><p>
39、 void CNetwork3Dlg::ShowRoad(int m)</p><p><b> {</b></p><p> CString str1, str2;</p><p> str1.Format("%s%d", "mac", flag0);</p><p>
40、 str2.Format("%s%d", "mac", flag1);</p><p> if(m == 1)</p><p><b> {</b></p><p> str1.Format("%s%d%s%d%s\r\n", "mac", flag0, &q
41、uot;從mac", flag1, "離開交換機。");</p><p> add->ReplaceSel(str1);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b&
42、gt;</p><p> str2.Format("%s%d%s\r\n", "mac", flag0, "泛洪出交換機。");</p><p> add->ReplaceSel(str2);</p><p><b> }</b></p><p>&
43、lt;b> }</b></p><p><b> Paint()</b></p><p> void CNetwork3Dlg::Paint()//畫圖函數</p><p><b> {</b></p><p> int sx, sy, dx, dy;
44、</p><p> sx = 70 + (flag0 - 1) * 65;</p><p><b> sy = 63;</b></p><p> dx = 70 + (flag1 - 1) * 65;</p><p><b> dy = 63;</b></p><p>
45、;<b> Back();</b></p><p> CString str;</p><p> str.Format("%s%d", "mac", flag0);</p><p> if (!LookUp(str))//判斷源端口是否存在mac表</p><
46、;p><b> {</b></p><p> AddToTable();</p><p><b> }</b></p><p> str.Format("%s%d", "mac", flag1);</p><p> if (LookUp(str
47、))//選擇性轉發(fā)</p><p><b> {</b></p><p> ShowRoad(1);</p><p> CClientDC dc(this);</p><p> CPen MyPen;//定義一只筆</p><p> MyPen.
48、CreatePen(PS_DASH, 2, RGB(255, 0, 0));//定義筆的參數</p><p> CPen *OldPen;</p><p> OldPen = dc.SelectObject(&MyPen);//選中新筆</p><p><b> if (1)</b></p>
49、<p><b> {</b></p><p> dc.MoveTo(sx, sy);</p><p> dc.LineTo(sx, 30);</p><p> dc.LineTo(dx, 30);</p><p> dc.LineTo(dx, dy);</p><p> dc
50、.LineTo(dx + 10, 50);</p><p> dc.LineTo(dx, dy);</p><p> dc.LineTo(dx - 10, 50);</p><p><b> }</b></p><p> dc.SelectObject(OldPen);//還原默認筆</p&
51、gt;<p><b> }</b></p><p><b> else</b></p><p><b> {//泛洪</b></p><p> ShowRoad(2);</p><p> CClientDC dc(this);</p>&
52、lt;p> CPen MyPen;//定義一只筆</p><p> MyPen.CreatePen(PS_DASH, 2, RGB(255, 0, 0));//定義筆的參數</p><p> CPen *OldPen;</p><p> OldPen = dc.SelectObject(&MyPen);
53、//選中新筆</p><p> for (int i = 1; i <= 6; i++)</p><p><b> {</b></p><p> dx = 70 + (i - 1) * 65;</p><p><b> dy = 63;</b></p><p&g
54、t; if (sx != dx)</p><p><b> {</b></p><p> dc.MoveTo(sx, sy);</p><p> dc.LineTo(sx, 30);</p><p> dc.LineTo(dx, 30);</p><p> dc.LineTo(dx,
55、dy);</p><p> dc.LineTo(dx + 10, 50);</p><p> dc.LineTo(dx, dy);</p><p> dc.LineTo(dx - 10, 50);</p><p><b> }</b></p><p><b> }</b&
56、gt;</p><p> dc.SelectObject(OldPen);//還原默認筆</p><p><b> }</b></p><p><b> }</b></p><p> ShowTable()</p><p> void CNetwor
57、k3Dlg::ShowTable()</p><p><b> {</b></p><p> CString str;</p><p> m_ctrlTable.DeleteAllItems();//刪除所有記錄</p><p> vector<Mac>::const_iterator it
58、er = m_table.begin();</p><p> for(; iter != m_table.end(); iter++)//寫入所有記錄</p><p><b> {</b></p><p> int index = m_ctrlTable.GetItemCount();</p><p>
59、m_ctrlTable.InsertItem(index, iter->address);</p><p> str.Format("%d", iter->port);</p><p> m_ctrlTable.SetItemText(index, 1, str);</p><p> str.Format("%d&qu
60、ot;, iter->time);</p><p> m_ctrlTable.SetItemText(index, 2, str);</p><p><b> }</b></p><p><b> }</b></p><p> RefreshTable()</p><
61、;p> void CNetwork3Dlg::RefreshTable()</p><p><b> {</b></p><p> vector<Mac>::iterator iter = m_table.begin();</p><p> if (flag0 && flag1)</p>
62、<p><b> {</b></p><p> for (; iter != m_table.end(); iter++)</p><p><b> {</b></p><p> if (iter->time == 0)//時間到期即刪除</p><p><
63、;b> {</b></p><p> m_table.erase(iter);</p><p> iter = m_table.begin();</p><p> if (iter == m_table.end())</p><p><b> {</b></p><p>
64、;<b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p> else//否則減1</p><p> iter->time--;</p><p>&
65、lt;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 此外還需要一個定時器函數來定期刷新mac表和顯示mac表。這就是系統(tǒng)的OnTimer() 函數。</p><p> void CNetwork3Dlg::
66、OnTimer(UINT nIDEvent) </p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> RefreshTable();</p><p> ShowTab
67、le();</p><p> CDialog::OnTimer(nIDEvent);</p><p><b> }</b></p><p> 1.5設計優(yōu)缺點和感想</p><p> 以上就是我這次課程設計的全部內容,從這次課程設計中我學到了許多東西。我做的第一個程序跟現在這個不一樣,它采用自己輸入mac地址
68、。交給趙老師看時,趙老師立刻指出了它的不足,雖然它能實現交換機的查表功能,但軟件是拿給用戶使用的,是為了讓不懂軟件的用戶來明白它的基本原理。采用自己輸入會讓用戶很難理解和使用。因此,趙老師要求我把界面做成簡單易懂,易于用戶操作。從這里面我學到了,軟件的好壞不在于它的算法是否先進,而在于用戶使用它是否滿意。用戶關心的是操作是否方便,而算法什么的是程序員的事情。</p><p> 為此,我在界面上做了改變,采用了按
69、鈕代替文本輸入,簡化了交換機的端口。這樣易于用戶學習和操作,或許這能算優(yōu)點之一吧。</p><p> 至于缺點,我認為太多了。首先,我只是做了交換機的很小一部分功能,程序很簡單。</p><p> 其次,程序的結構尚不清晰,小程序還好,一旦你做大了,程序結構就很重要了。</p><p> 總之,這次我順利的完成了課程設計。雖然做的很簡單,但感覺還是蠻有成就感的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論