版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計任務(wù)書</b></p><p><b> 目錄</b></p><p> 前言...........................................................................3</p><p> 計算機網(wǎng)絡(luò)課程設(shè)計......
2、.......................................................4</p><p> 1.1設(shè)計課題及目的..........................................................4</p><p> 1.2設(shè)計原理和流程圖......................................
3、..................4</p><p> 1.3交換機的基本操作........................................................6</p><p> 1.3.1學(xué)習(xí)...............................................................6</p><
4、p> 1.3.2過期...............................................................6</p><p> 1.3.3防洪...............................................................6</p><p> 1.3.4選擇性轉(zhuǎn)發(fā)...............
5、..........................................7</p><p> 1.3.5更新...............................................................7</p><p> 1.4程序界面設(shè)計及運行過程..............................................
6、....8</p><p> 1.4.1界面設(shè)計...........................................................8</p><p> 1.4.2運行程序...........................................................8</p><p> 1.5程序主要代
7、碼及分析..................................................... 11</p><p> 1.6設(shè)計的優(yōu)缺點和感想.....................................................17</p><p> 參考文獻...........................................
8、...........................18</p><p><b> 前言</b></p><p> 本學(xué)期學(xué)習(xí)了計算機網(wǎng)絡(luò),一直就聽說計算機網(wǎng)絡(luò)是一門非常重要的專業(yè)課,特別是現(xiàn)在互聯(lián)網(wǎng)的發(fā)展非常迅猛,計算機網(wǎng)絡(luò)方面的專業(yè)人才非常缺乏。在學(xué)計算機網(wǎng)絡(luò)前,我并不清楚什么是計算機網(wǎng)絡(luò),只是簡單的知道互聯(lián)網(wǎng)就是計算機網(wǎng)絡(luò)的一種。計算機網(wǎng)絡(luò)這么課程從微觀和
9、宏觀上全面的介紹了計算機網(wǎng)絡(luò),讓我對計算機網(wǎng)絡(luò)有了一個大概的了解,從中我也學(xué)到了許多知識。在以前,我一直把編程當(dāng)做我最喜歡也是最重要的部分,對網(wǎng)絡(luò)并不感冒。直到開始學(xué)習(xí)后,我才發(fā)現(xiàn)原來計算機網(wǎng)絡(luò)也是一門很有意思的課程,與編程也是密切相關(guān)的。</p><p> 通過這學(xué)期的網(wǎng)絡(luò)學(xué)習(xí),我對網(wǎng)絡(luò)有了更深入的認識。通過老師的講解,我從底層的網(wǎng)絡(luò)協(xié)議到高層的網(wǎng)絡(luò)架構(gòu)有了一個初步的認識。明白了計算機網(wǎng)絡(luò)的基本配置和功能。在
10、學(xué)習(xí)過程中我對底層的網(wǎng)絡(luò)協(xié)議最為喜歡,因為協(xié)議是通過編程來實現(xiàn)的。我很好奇科學(xué)家們是怎么通過協(xié)議把電信號轉(zhuǎn)化為信息的。由于,計算機網(wǎng)絡(luò)的課程設(shè)計包括了此方面的內(nèi)容。于是,我選擇了交換機模擬作為自己的設(shè)計課題。借此機會,鍛煉自己的編程能力,同時加深對交換機查表功能的理解。</p><p> 總之,很高興能有這次實踐機會,希望自己的作品能讓老師滿意。</p><p><b> 計
11、算機網(wǎng)絡(luò)課程設(shè)計</b></p><p> 1.1設(shè)計課題及目的</p><p> 課題名稱:模擬交換機查表功能</p><p> 設(shè)計目的:通過此課程設(shè)計提高自己對交換機查表功能的理解,深入理解交換機的原理。同時通過課程設(shè)計還能提高自己的編程能力,提高自己解決實際問題的能力。為將來自己進入社會工作打好基礎(chǔ)。</p><p>
12、; 1.2設(shè)計原理和流程圖</p><p><b> 設(shè)計原理:</b></p><p><b> 程序基本流程:</b></p><p> 接收幀,在mac里查找源mac地址。</p><p> 如果找到判斷是否是進入端口,如不是則轉(zhuǎn)發(fā)至該端口,轉(zhuǎn)到4。</p><p
13、> 如果不存在,則將該mac地址添加到mac表,轉(zhuǎn)到4。</p><p> 判斷目的mac地址是否在mac表。</p><p> 如果找到則從對應(yīng)端口轉(zhuǎn)發(fā),如果不存在則轉(zhuǎn)發(fā)至出本端口外的其他所有端口。</p><p> 更新mac表里mac地址的計時器。</p><p> 7.等待接收新的數(shù)據(jù)幀,轉(zhuǎn)到1。</p>
14、<p><b> 圖1:程序流程圖</b></p><p> 1.3交換機的基本操作</p><p> 交換機采用5種基本操作來實現(xiàn)其用途:</p><p><b> ■學(xué)習(xí)</b></p><p><b> ■過期</b></p><
15、p><b> ■泛洪</b></p><p><b> ■選擇性轉(zhuǎn)發(fā)</b></p><p><b> ■過濾</b></p><p><b> 1.3.1學(xué)習(xí)</b></p><p> MAC表中必須填入MAC地址以及其對應(yīng)的端口,學(xué)習(xí)過
16、程是交換機在正常運行期間動態(tài)獲取這些映射。</p><p> 當(dāng)每個幀進入交換機時,交換機會檢查源MAC地址。通過查詢過程,交換機將確定表中是否已經(jīng)包含該MAC地址的條目。如果未包含,交換機將使用源MAC地址在MAC表中新建一個條目,然后將此條目與達到的端口進行配對?,F(xiàn)在,交換機可以使用該映射將該幀轉(zhuǎn)發(fā)到該節(jié)點。</p><p><b> 1.3.2過期</b>&
17、lt;/p><p> 通過學(xué)習(xí)過程獲取的MAC表條目具有時間戳。時間戳用于從MAC表中刪除舊條目。當(dāng)</p><p> 某個條目在MAC表中創(chuàng)建之后,就會使用其時間戳作為起始值開始遞減計數(shù)。值計數(shù)到0后,表此條目過期,并從MAC表中刪除。當(dāng)交換機下一次在相同端口又從該節(jié)點接收幀是,此計時器重置。重置計數(shù)器會阻止MAC條目的刪除。如,計時器設(shè)置為300秒。如果300秒內(nèi)沒有從節(jié)點收到幀,此條
18、目從MAC表中刪除。</p><p><b> 1.3.3泛洪</b></p><p> 如果交換機的MAC地址表中沒有與收到幀的目的MAC地址的匹配項,將會泛洪此幀。</p><p> 泛洪值將幀發(fā)送到除此幀進入端口之外的所有接口。交換機之所以不將幀轉(zhuǎn)發(fā)到接收該幀的端口,是因為該網(wǎng)段的所有目的都已經(jīng)收到了幀。泛洪還用于發(fā)送到廣播MAC
19、地址的幀。</p><p> 1.3.4選擇性轉(zhuǎn)發(fā)</p><p> 選擇性轉(zhuǎn)發(fā)是檢查幀的目的MAC地址后將幀從適當(dāng)?shù)亩丝谵D(zhuǎn)發(fā)出去的過程。這是交換機的核心功能。當(dāng)節(jié)點發(fā)送幀到交換機時,如果交換機知道該節(jié)點的MAC地址,交換機會將此地址與MAC地址表中的條目比對,然后將幀轉(zhuǎn)發(fā)到對應(yīng)端口。此時交換機不是將幀泛洪到所有端口,而是通過將其制定端口發(fā)送到目的節(jié)點。此操作稱為轉(zhuǎn)發(fā)。</p&g
20、t;<p><b> 1.3.5過濾</b></p><p> 在某些情況下,幀不會被轉(zhuǎn)發(fā)。此過程稱為幀過濾。前面已經(jīng)描述了過濾的一次使用:</p><p> 交換機不會將幀轉(zhuǎn)發(fā)到接受幀的端口。另外,交換機還會丟棄損壞的真。如果真沒有通過CRC檢查被丟棄。對幀進行過濾的另一個原因是安全。交換機具有安全設(shè)置,用于阻擋法網(wǎng)和或來自選定MAC地址或特定端
21、口的幀。</p><p> 1.4程序界面設(shè)計及運行過程</p><p><b> 1.4.1界面設(shè)計</b></p><p> 為了簡化程序復(fù)雜度同時又要易于用戶操作和理解交換機的查表功能,界面上我盡量簡單易于操作和觀察。我限制了交換機的端口數(shù)量,采用了6端口的交換機。用按鈕來代替交換機端口,每個按鈕代表一個端口,同時簡化了mac表,每
22、個端口代表該端口的所有mac地址。通過點擊按鈕完成數(shù)據(jù)幀的輸入,第一次點擊的按鈕代表該數(shù)據(jù)幀的源mac地址,第二次點擊的按鈕代表該數(shù)據(jù)幀的目的端口。輸入數(shù)據(jù)幀完成后,出現(xiàn)一條線段,代表該數(shù)據(jù)幀的路徑。</p><p> 同時,程序還添加了提示信息編輯框和mac表。信息編輯框里包含了數(shù)據(jù)幀從進入交換機到輸出交換機的路徑信息。Mac表包含了各端口的源mac地址,時間戳和端口。Mac表以秒為周期自動更新,當(dāng)輸入的數(shù)據(jù)
23、幀源端口不再mac表時,程序會將該mac地址信息加入mac表。當(dāng)mac地址的時間戳到期時,程序會自動將該mac地址信息刪除出mac表。通過該mac表,用戶可隨時了解mac表的信息,可以相應(yīng)的改變輸入操作,來獲取自己想要的信息。</p><p> 這是界面的概述,具體界面如下。</p><p> 1.4.2程序運行過程</p><p> 圖2:應(yīng)用程序初始化界面
24、</p><p> 這是應(yīng)用程序的初始化界面,信息框和mac表都是空的。</p><p> 圖3:首次進入數(shù)據(jù)幀的情況</p><p> 這是交換機首次進入數(shù)據(jù)幀的情況,由于mac表是空的,該幀從端口1進入交換機,查表為發(fā)現(xiàn)目的mac時從除1外的其他端口泛洪出交換機。信息框顯示了相應(yīng)的信息,mac表添加了mac1的信息。</p><p>
25、; 圖4:交換機選擇性轉(zhuǎn)發(fā)</p><p> 這是交換機選擇性轉(zhuǎn)發(fā)的運行情況,從信息框可以看出該交換機已經(jīng)進入了3個數(shù)據(jù)幀,前3個數(shù)據(jù)幀進入交換機時由于不存在幀的源端口,對應(yīng)的端口都已經(jīng)被程序添加到mac表里,第三個數(shù)據(jù)幀進入交換機時,程序查找對應(yīng)目的端口,找到該目的mac存在1端口后,交換機將該幀從1端口轉(zhuǎn)發(fā)出去,從紅的的路徑線可以看出。</p><p> 圖5:交換機mac表的更
26、新</p><p> 從圖中可以看到mac表更新了mac1的時間戳,應(yīng)為mac1最后一次進入交換機,所以它對應(yīng)的剩余生存時間最長。</p><p> 圖6:mac表過期信息被刪除</p><p> 從信息框可以看出mac表應(yīng)該包含mac1、mac2、mac3、mac4的信息。而此時mac表里只有mac3和mac4的信息,這是應(yīng)為mac1和mac2已經(jīng)過期被程序
27、從mac表里刪除。</p><p><b> 圖7:程序運行結(jié)束</b></p><p> 這是程序運行結(jié)束后的界面,由于所有mac信息都已經(jīng)過期,所以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//幀結(jié)構(gòu)體</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地址數(shù)組</p><p> 程序主要包含六個模塊函數(shù):</p><p> 增加mac地址到m
31、ac表函數(shù)AddToTable()</p><p> 查看mac表函數(shù)LookUp(CString str)</p><p> 顯示路徑信息函數(shù)ShowRoad(int m)</p><p> 畫途徑線函數(shù)Paint()</p><p> 顯示mac表函數(shù)ShowTable()</p><p> 更新mac表
32、函數(shù)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()//畫圖函數(shù)</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、))//選擇性轉(zhuǎn)發(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));//定義筆的參數(shù)</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));//定義筆的參數(shù)</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> 此外還需要一個定時器函數(shù)來定期刷新mac表和顯示mac表。這就是系統(tǒng)的OnTimer() 函數(shù)。</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設(shè)計優(yōu)缺點和感想</p><p> 以上就是我這次課程設(shè)計的全部內(nèi)容,從這次課程設(shè)計中我學(xué)到了許多東西。我做的第一個程序跟現(xiàn)在這個不一樣,它采用自己輸入mac地址
68、。交給趙老師看時,趙老師立刻指出了它的不足,雖然它能實現(xiàn)交換機的查表功能,但軟件是拿給用戶使用的,是為了讓不懂軟件的用戶來明白它的基本原理。采用自己輸入會讓用戶很難理解和使用。因此,趙老師要求我把界面做成簡單易懂,易于用戶操作。從這里面我學(xué)到了,軟件的好壞不在于它的算法是否先進,而在于用戶使用它是否滿意。用戶關(guān)心的是操作是否方便,而算法什么的是程序員的事情。</p><p> 為此,我在界面上做了改變,采用了按
69、鈕代替文本輸入,簡化了交換機的端口。這樣易于用戶學(xué)習(xí)和操作,或許這能算優(yōu)點之一吧。</p><p> 至于缺點,我認為太多了。首先,我只是做了交換機的很小一部分功能,程序很簡單。</p><p> 其次,程序的結(jié)構(gòu)尚不清晰,小程序還好,一旦你做大了,程序結(jié)構(gòu)就很重要了。</p><p> 總之,這次我順利的完成了課程設(shè)計。雖然做的很簡單,但感覺還是蠻有成就感的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機網(wǎng)絡(luò)課程設(shè)計--交換機、路由器配置
- 計算機網(wǎng)絡(luò)課程設(shè)計--網(wǎng)絡(luò)規(guī)劃(交換機環(huán)、ftp server、hdlc、rip、生成樹)
- 計算機網(wǎng)絡(luò)模擬方案課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 《計算機網(wǎng)絡(luò)課程設(shè)計》
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計---網(wǎng)絡(luò)設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)組建課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 《計算機網(wǎng)絡(luò)》課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
評論
0/150
提交評論