計算機網(wǎng)絡(luò)課程設(shè)計---模擬交換機查表功能_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論