互换机MAC地址表形成进程动态演示_第1页
互换机MAC地址表形成进程动态演示_第2页
互换机MAC地址表形成进程动态演示_第3页
互换机MAC地址表形成进程动态演示_第4页
互换机MAC地址表形成进程动态演示_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、互换机MAC地址表的形成进程动态演示今天不经意间从电脑里发觉了自己大学时的一课程设计,仍是自己在学校时那会比较勤奋,勇于想象,敢天动脑筋仍是贴到那个地址留念一下一、课程设计的目的路由与互换技术这门课程的内容包括了运算机网络的关键技术,要学好这门课程,与实践是不能分开的。 路由器和互换机已普遍应用于运算机局域网及互联网中,把握路由器和互换机的利用方式和配置知 识及相关内容,关于学好路由与互换技术这门课程有专门 大的帮忙。希望同窗们能够在一周的时刻里,切实依照课程设计的要求,结合所学的理论知识和平常积存 的实践能力,踊跃查找相关资料,完成好这次课程设计,熟悉所选项目的内 容,提高网络应用能力,丰硕

2、自己的网络实践经历,为以后的实际工作积存一些体会。二、设计内容1、设计题目:互换机MAC地址表的形成进程动态演示2、原理知识:如果网络中的运算机是通过集线器连接的,那么这种网络就被称为共享式以太 网。利用集线器互连的网络环境很容易发生数据的碰撞,因为不管发送数据仍是接收数据 都利用同一个数据通道,因此,主机在发送数据的同时必需利用接收 线对检测是不是发生了碰撞,这种机制使得主机只能以半双工的模式工作。 另一 方面,集线器是物 理层设备,通过对信号的中继放大,延长了网线的通达距离, 扩展了网络规模。网络规模的扩大意味着碰撞域的扩大, 进一步地降低了网络的 性能。共享式局域网的特性严峻制约着网络性

3、能的提高,慢慢地被利用互换机组成的互 换式局域网所取代:(1) 互换机取代集线器解决了碰撞问题。互换机是工作在数据链路层的设备(因此 也称第2层互换机),它能够识别数据帧中封装的 MAC地址,并依照地址信息把数据互换到特定的端口,而不是像集线器工作时那样,把从一个端口接收到的数 据复制到所有其他端口。如此的工作方式使互换机的不同端口之间可不能产生碰 撞,也确实是说互换性能够分割碰撞域。 若是一个端口只连接一台主机的话, 就 等于排除碰撞。(2) 互换机解决了集线器与和它相连的主机不能全双工通信的问题。互换机利用 独立的收、发通道为每一个接口相连的主机转发数据, 如此主性能够全双工地工 作。(3

4、) 互换性能够为任意两个互换数据的端口成立一条独立的数据通道进行 互换数据,大大提高了数据互换的效率。互换机具有这些特性是由它的工作原理决定的。互换机依照数据帧中封装的目的地 MAC地址做出转发数据的决定。互换 机在转发数据前必需明白它的每一个端口所连接的主机的MAC地址,构建出一个MAC地址表,以便作出正确的转发决定。当互换机从某个端口收到数据帧后,读 取数据帧中封装的目的地 MAC地址信息,然后查阅事前构建的 MAC地 址表, 找出和目的地址相对应的端口,从该接口把数据转发出去,其他接口不受阻 碍。互换机在地址表中找不到目的地址和端口的相对应记录时,那么会把数 据向除 数据来源端口外的其他

5、所有端口转发,因此广播数据会被互换机转 发到其所有端口,使得和互换机相连的设备处于同一个广播域内。下面举例说明互换机成立地址表的进程。fi I -2上七产应当互换机启动时,初始的 MAC地址表是空的现在,主机A向主机C发送一个数据帧(每一个数据帧中都包括有源MAC地址和目的MAC地址),当该数据帧从E0端口进入互换机后,互换机通过检查数据帧中的源MAC地址字段,将该字段的值(主机A的MAC地址)放入MAC地址表中,并把它与 E0端口对应起来,表 示E0端口所连接的主机是 A。在MAC地址表中没有关于目的地 MAC地址(主机C的MAC地址) 的条款,因此互换机将此帧向除E0端口之外的所有端口转发

6、。从而保证工作站C能收到该帧。其它接口的传送进程相同。二、设计方式1.拓扑图2.设计思想Computer 发 Messagefrommac,data,tomac,Switcher 从 Computer所在 的port ( 15)接收Message对 Message拆圭寸取得 Message的来源 mac和目标 mac从头运算机MACTable驻留在内存),并存入文件Table.txt,而又 MACTable.txt是记录MACS每次转变的情形,相当于 Table的日记文件。 (Table.txt 和 MACTable.txt 在 MAC目录下)必然要先计算 MACTable 再转发,如此运算机

7、若是给自己发消息的话即 frommac=tomac互换机即能够直接向消息来的 port转发,就不需要广播了 .其 实实际情形是若是frommac=tomac,消息在通过运算机网卡时,便立刻返回给 了自己,全然没有向网络上发布 . 这也是本系统做的一个不符合实际情形的地址, 实际情 况是运算机给自己发消息,自己收到消息,而互换机的MACTable没有记 录源主机的MAC地址.因为时刻伧促没有及时修改,十分遗憾。其它的工作情形大体符合事实 , 而且运行正常的很。哪怕在系统工作的时 候将 Computer 换接了 Switcher 端口,仍然依照修改后的系统正常工作。3. 开发工具4. 具体设计系统

8、工作的步骤:cofrom.SendData(sw);sw.RecvData(cofrom.port,cofrom.mess);sw.ComputeMACTable();sw.SendData();sw.SaveMAC();将MAC勺转变输出到文件以供查看for(int i=0;i<COMPUTER_NUM;i+)coi.RecvData(message1);程序文件结构Class.h:声明结构和类Class.cpp :概念类的成员函数数数Main.cpp :主程序struct Message / 消息结构char FromMAC18;char Data1024;char ToMAC18;

9、struct Recordset /MAC 表的记录结构int p_num;char MAC18;class Computer / 运算机类public:char recvfile20;void PrintInfo();char name20;int port;char MAC18;Message mess;Computer();Computer(char* c_name,int s_port,char* c_MAC);void RecvData(Message s_mess);void SendData(Switcher sw);void BindPort(int s_port);void

10、SetMACAddr(char c_MAC);void SetName(char c_name);void SetData(char* data, char* ToMAC);void SetRecvFile(char *filename);virtual Computer();class Switcherfriend Switcher;/ 互换机类public:void SetName(char sname);char name20;Switcher();void ComputeMACTable();void SendData();void RecvData(int p_num,Message

11、 str_me);void PrintTable();void SaveMAC();Switcher(int s_pnum,char* s_name );friend Computer;virtual Switcher();private:int mess_FromPort;char mess_FromMAC18;int PORTNUM;int mess_ToPort;char mess_ToMAC18;Message buffer;Recordset Temp;vector<Recordset>MACTable;/ 利用创建一个 Recordset 类型的序列容器 MACTAbl

12、e;主程序 (详细的见程序源代码 , 有注解 )const COMPUTER_NUM=5;void Graph();/ 打印拓扑图void Menu();/ 打印可选菜单char SelectNum();/ 等待输入选项void MakeMessage();/ 构造消息void Init();/ 系统初始化char* InputMAC();专门用于输入 MAC地址并返回其指针void SetComputer();/用于设置运算机void SetSwitcher();/用于设置互换机void Start();/ 演示系统运行void Working();/ 环境系统工作/ 构造演示系统的环境和设

13、备Switcher sw(5,"switcher");实例一个五口的互换机 名:switcherComputer coCOMPUTER_NUM;概念五台电脑Message message1;/ 概念一个消息int port;/ 消息从互换机的 port 端口进入int from,to;/ 记录消息的始 , 终运算机的下标char MAC18;/ 全局 MAC Input() 对其改变并返回指向它的指针/ 主函数 程序入口int main(int argc,char*)Init();Start();return 0;主程序中的部份函数char SelectNum()char

14、error='e'char ch2;ch0=getche();ch1=getch();if(ch1='r'|ch1='n')/必然要保证第二个从键盘输入的为回车return ch0;elsereturn error;/不然返回一个 errorvoid MakeMessage()int i=1;char computer_name20;while(i)/ 确保系统中有源主机,直到输入正确的为至cout<<" 选择源主机 :"cin>>computer_name;for(i=0;i<COMPUTER_

15、NUM;i+)if(!strcmp(,computer_name)/ 找到这台运算机from=i;/ 记录源主机在数组中的下标port=coi.port;/ 源主机所接入的 switcher 的端口号break;if(i=5)cout<<" 输入错误 !n"elsei=0;i=1;/ 一样确保系统中有宿主机,直到输入正确的为至 while(i)cout<<" 选择宿主机 :"cin>>computer_name;for(i=0;i<COMPUTER_NUM;i+)if(!strcmp(coi.na

16、me,computer_name)to=i;break;if(i=5)cout<<" 输入错误 !n"elsei=0;strcpy(cofrom.mess.FromMAC,cofrom.MAC);/ 构造源主机所发消息的源MAC目标MACstrcpy(cofrom.mess.ToMAC,coto.MAC);port=cofrom.port;strcpy(message1.FromMAC,cofrom.MAC);构造系统消息的源 MACS标 MACstrcpy(message1.ToMAC,coto.MAC);cin.getline(message1.Data,1

17、024,'');cout<<" 输入要发送的内容 (以终止):"/ASSERT(message1.Data0='r');/ 用宏调试出message1.Data0为'r'/ 因此要过滤第一个字符 'r'for(i=0;i<1024&&message1.Datai!='0'i+)message1.Datai=message1.Datai+1;strcpy(cofrom.mess.Data,message1.Data);/ 构造源主机所发消息的数据部份char* I

18、nputMAC()int i;string temp;bool error=true;while(error)/直到输入正确的MAC形式如"fd-ae-bc-97-65-01"string:"cin>>temp;cout<<"inputif(temp.length()!=17)/输入的字符长度不是 17 立刻跳到最后错误立刻跳到最后+2)!='-')error=true;goto last;error=true;goto last;for(i=0;i<5;i+)/ 只要有一个if(temp.at(3*i个不在

19、 "0123456789abcdef" 中产生错误for(i=0;i<18;i=i+3)/ 只要一if(!( (temp.at(i)>='0'&&temp.at(i)<='9')|(temp.at(i)>='A'&&temp.at(i)<='F')|(temp.at(i)>='a'&&temp.at(i)<='f') )cout<<" 输入有cout<<&q

20、uot; 输入有&&!(temp.acout<<" 输入有t(i+1)>='0'&&temp.at(i+1)<='9')|cout<<" 输入有cout<<" 输入有(temp.cout<<" 输入有at(i+1)>='A'&&temp.at(i+1)<='F')|cout<<" 输入有cout<<" 输入有(temp.at(i+

21、1)>='acout<<" 输入有'&&temp.at(i+1)<='f') error=true;goto last;error=false;/ 若是程度执行到last:那个地址确信是正确的MAC没有errorif(error)错误n"cout<<" 输入有elsefor(i=0;i<temp.length();i+)MACi=tempi;MACi='0'/正确的MAC退出while(error) 返回MAC return MAC;void Start()b

22、ool flag=true;char num_select;while(flag)system("cls");Menu();Graph();num_select=SelectNum();switch(num_select)case'1':cout<<endl;cin.clear();/ 清空输入流MakeMessage();Working();cout.flush();system("pause");break;case'2':cout<<endl;sw.PrintTable();cout.flus

23、h();/ 刷新输出流system("pause");/ 暂停break;case'3':cout<<endl;if(port>0&&port<6)/ 构造消息 以后从互换机哪个 port 进入是确信的 15/ 才能工作Working();elsecout<<" 先构造消息 n"cout.flush();system("pause"); break;case'4':cout<<endl;SetComputer();cout.flush();

24、case'5':case'6':system("pause");break;cout<<endl;SetSwitcher();cout.flush();system("pause");break;/ 退出程序终止 while(flag)cout<<endl;flag=false;break;default:cout<<endl;cout<<" 选择错误从头选择 "system("pause");break;void Working()c

25、ofrom.SendData(sw);sw.RecvData(cofrom.port,cofrom.mess);sw.ComputeMACTable();sw.SendData();sw.SaveMAC();将MAC勺转变输出到文件以供查看for(int i=0;i<COMPUTER_NUM;i+)coi.RecvData(message1);四、软件说明书1. 界面如下图A h c D E *A.1f机乩a L _MBa. L1 11-11-11 11'llQI !2-2 2-23 -22-12-2KD:55-55-55-55-15-5507谆.二十京电 一1直rwt 二 ->>>>>> -1 2 3 4- E h.1 耳7 Dwiitcherti 1為沢盲主hm_'扎兽蜀芒的內容血練沁綠 好轉 订利".畫±1賁据心币 - Ult4 h"丛筑 lImgi"向朝口*畫巒耀:MHh寸空堤口N坛:上欲戶;Mlf <h«S80fa 4 W:®: irltcliej' 丰匚F r 較頂;2. 操作流程MAC表形成演示1. 构造消息2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论