以太网交换机自学习算法及可视化Word下载.docx
《以太网交换机自学习算法及可视化Word下载.docx》由会员分享,可在线阅读,更多相关《以太网交换机自学习算法及可视化Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
Keywords:
Theswitch;
Selflearning;
Turnpublished;
Visualization;
1引言
1.1课题背景
随着经济的发展,社会的进步,互联网已经普及到千家万户,对于互联网的学习和了解已经越来越迫切。
此程序的开发,可以简洁方便的了解互联网的协议的交换机的模拟,通过操作的过程,可以深入的了解交换机的工作过程和原理,通过简单的界面操作把书本中的知识迅速的转化为自己的技能。
本程序可以最大限度的了解此协议,高效率的完成学习的目的。
在数据链路层扩展要以太网要使用交换机。
交换机工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发和过滤[1]。
以太网交换机实质上就是一个多接口网桥,和工作在物理层的转发器和集线器有很大的差别,此外,多接口交换机的每个接口都直接与一个单个主机或另一个集线器相连,并且一般都工作在全双工方式。
当主机需要通信时,交换机能同时连通许多对的接口,使每一对相互通信的主机都能像独占通信媒体那样,无碰撞地传输数据。
其内部的帧转发表也是通过自学习算法逐渐建立起来的。
本课题便是基于交换机的自学习算法展开,依托于C#模拟交换机自学习过程以及模拟单播广播[2]。
1.2课题研究的目的与意义
本设计主要是将书本上的理论通过编程展示出来,以便更好让读者了解交换机自学习算法的过程。
在计算机网络的学习中,两个主机之间的数据传输总是在一段一段的链路上传送,在两个相邻结点之间传送数据是直接传送的,这就需要使用专门的链路层的协议,在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上“透明”地传输帧中的数据。
这样的一个界面我们可以清楚地测试交换机的自学习以及转发帧的过程,还有转发表的形成,展现了数据链路层,当交换机收到一个帧,根据目的MAC地址,进行单播或者广播,即一对一通信,或者发送给本局域网上所有站点的帧。
1.3程序开发工具简介
1.3.1C#简介
我们所做的多接口交换机自学习算法是用C#语言编写。
所以,在这里我介绍一下C#语言。
C#是在之前的开发语言的基础上推出的一种最新的、面向对象的编程语言。
其具有强大完善的功能,能够方便编写各种基于Microsoft.NET平台的应用程序,Microsoft.NET平台依靠其强大的服务工具给编程人员的开发带来便利[3]。
应该看到C#拥有众多的工具,简单便利的语言结构,使其成为众多面向对象工具的代表,在构建各类组件时,使用C#能够使程序员方便地将各类运用转化为XML网络服务,而不受语言与操作系统的兼容限制。
正是由于C#的这些特点,使它成为程序员构建各类程序主要组件的首要选择[4]。
1.3.2visualstudio简介
MicrosoftVisualStudio2008是面向WindowsVista、Office2007、Web2.0的下一代开发工具,代号“Orcas”,是对VisualStudio2005一次及时、全面的升级。
VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。
使用VisualStudio2008可以高效开发Windows应用。
设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。
同时VisualStudio2008支持项目模板、调试器和部署程序。
VisualStudio2008可以高效开发Web应用,集成了ASP.NETAJAX1.0,包含ASP.NETAJAX项目模板,它还可以高效开发Office应用和Mobile应用。
1.3.3程序开发环境
操作系统:
MicrosoftWindows7
开发工具:
C#
开发平台:
MicrosoftVisualStudio2008
2相关原理简介
2.1工作原理
交换机监听它连接的每个网段上的传输数据,它将每个数据帧的地址和自身软件的一个地址表进行比较。
当一个数据帧的目的地址和它的源地址是在不同的网段时,交换机将该帧转发到与目的网段相连的端口[5]。
由于只转发目的地址在其他网段的数据帧,交换机增加了整个网络吞吐率的有效性。
交换机并不查看帧的内容,只检查帧头中包含的自知并在需要的时候转发它们。
交换机具有有效性:
可以过滤通信量,增大吞吐量。
交换机工作在链路层的MAC子层,可以是以太网各网段成为隔离开的碰撞域。
如果把交换机换成工作在物理层的转发器,那就没有这种过滤通信量的功能。
不同网段上的通信不会相互干扰。
同时交换机具有扩大了物理范围,因而也增加了整个以太网工作站的最大数目的作用[6]。
交换机具有可靠性,提高了可靠,当网络出现故障时,一般只影响个别网段。
并且交换机具有互联性,可互联不同物理层、不同MAC子层和不同速率的以太网。
2.2自学习能力
若从某个站点A发出的帧从接口x进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传送到站点A.所以交换机只要每收到一个帧,就记下其源地址和进入交换机的接口,作为转发表中的一个项目。
应当注意的是转发表中并没有“源地址”这一栏,而只有“地址”这一栏。
在建立转发表时是把帧首部中的源地址写在“地址”这一栏的下面[7]。
当交换机接收到一个数据帧时,它将其源地址和自身的地址转发表进行比较。
若源地址不在转发表中,交换机会将它加入,同时加入的还有接收该数据帧的端口号。
由于交换机具有这样的自学习能力,交换机学习然后知道了网络中主机的地址,新的主机可以自动添加到网络中而不必花人工去配置每个交换机,最后交换机学习并知道所有连接其端口的MAC地址[8]。
2.3过滤/转发
交换机将收到的每个帧的目的地址和自身的地址转发表进行对比。
如果目的地址和源地址在同一个网段,交换机就会将此帧过滤掉,即丢弃该帧[9]。
如果目的地址和源地址不在同一个网段上,交换机就会查出哪个端口将会接收该目的地址,并将该帧转发到相应的端口。
如果目的地址不在转发表中,交换机将此帧转发除接收端口以外的所有端口。
2.4单播
单播即一对一通信,主机之间一对一的通讯模式,网络中的交换机和交换机对数据只进行转发不进行复制。
如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。
但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用单播模式。
2.5广播
主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。
有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。
在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
2.6交换机的局限性
2.6.1广播风暴
由于网络中不同部分的结点和交换机间的差异,一个广播帧可能被错误地解释,而错误地解释使该帧的交换机又引发了另一个广播帧,这第二个广播帧再一次地被错误地解释,依次类推,结果就导致了广播帧风暴,它将严重地影响网络性能,这个问题很难解决。
2.6.2广播通信量的增长
由于许多交换机交换机加入到网络中,广播通信量的增长速度是指数而不是线性增长。
最终,广播帧可能占用网络带宽的可观部分。
2.6.3有毒分组[10]
当网络软件发生变化时,可能出现程序问题。
有时接受到特定类型的广播帧给接收到此帧的每一个交换机或结点带来灾难性的影响,将这种广播帧称为“有毒分组”,其原因是它将使网络上的所有用户同时经历这样的影响。
3总体设计
3.1设计思路
此个程序根据以下所需功能进行设计:
本程序主要是模拟以太网交换机工作的原理的操作系统。
该程序需要有查看(查看当前转发表),更新信息(更新当前转发表信息),输入交换机的位置信息功能(输入目标地址与源地址),以及单播、广播的区别实现;
以太网交换机的基本信息为:
源地址位置,目标地址的位置,交换机接口;
在运行时,此程序可以简单快捷的输入信息以及对交换机进行查看及更新转发表以及对应的各种操作,省去了繁琐复杂的脑力劳动,同时此程序表现出稳定性好,响应速度快,可靠性高,安全性强的特点。
此次设计以以太网交换机为出发点,通过界面展示图我们可以看到,界面中分别有单播、广播、监视三个按钮。
另外界面下方还可以继续添加主机,以实现动态化。
然后在监视这个按钮中,我们可以监视交换机单播多播广播的情况。
图3-1界面展示图
3.2模块设计
根据分析整个系统主要划分为5个功能模块,分别执行要求中的功能。
该系统需要有以太网交换机的构建,输入目标地址及源地址,转发表的显示查看及更新,单播通信、广播通信。
3.2.1信息选择模块
合理的输入源地址与目标地址,在编程过程中,首先每个交换机设定了十二个端口,开始时每个端口只有一个主机。
源地址和目的地址均为mac地址,mac地址为48位,为方便起见,在源地址和目的地址中的端口按钮设计成选择性框架,这样省去了输入的麻烦,刚开始,选定了交换机并且选择了端口也就选定了相应的mac地址。
图3-2信息选择
3.2.2转发表(监视)的操作模块
该模块分为:
转发表的显示模块:
根据源地址及目标地址,显示转发表内容。
转发表的更新模块:
根据输入的不同的源地址与目标地址,更新转发表的内容,并有显示模块显示出来。
图3-3转发表
3.2.3发送单播广播的操作模块
当点击单播按钮时,首先要先输入源地址和目的地址,此时单播也就是交换机的自学习,若未输入,则程序便会提醒用户输入。
当点击多播按钮时,同样需要输入源地址和目的地址,在交换机中,主机进行多播时,也是要输入源地址和目的地址。
但在这个实验中其实只能模拟多播的一小部分,因为组播的成功进行还需要IGMPsnopping协议,在这个实验中,只能先广播。
当点击广播播按钮时,同样需要输入源地址和目的地址,在交换机中,目的地址为全1。
图3-4发送
3.2.4主机添加模块
对于这样的一个模拟程序设计,两台交换机相连,每个端口都有一个主机并且有一个固定的mac地址,那设计这样一个添加主机的窗口,可以实现动态化,因为网络中会有很多个交换机,同时每个交换机又都会有各个端口,所以设计了这样一个添加主机的窗口。
图3-5主机添加
4程序的实现
4.1程序调试
程序调试软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)在输入目标地址与源地址数据时,必须按照图上所示,正确输入,由于输入不正确,程序将会进行提示,然后重新输入。
(2)显示转发表时,由于没将之前的进行累加,所以出现了只显示当前转发表的情况。
加入了数组存数累加之后,正确的显示了转发表的输出结果。
(3)在转发表更新时,要注意前面一个转发表是否丢弃,如果前一个转发表丢弃,后一个转发表则不显示任何内容。
4.2自学习
一开始转发表为空,当某个主机想要与另一个主机通信时,交换机接收到一个数据帧时,它将其源地址和自身的地址转发表进行比较。
而且交换机与网桥也存在诸多不同,此次设计中交换机有多个接口,并且设计中有两个交换机,两个交换机都能够自学习到。
图4-1自学习过程
图4-2自学习结果
现在输入源地址和目的地址:
由于转发表为空,所以根本不能知道目的地址由哪个端口转发出去,但是源地址将被学习下来,以后有数据发给目的地址AA-AA-AA-00-05-01的便知道从交换机0的端口5转发出去,如图所示:
图4-3转发结果
转发过滤:
如果源地址和目的地址属于同一个端口则交换机将会丢弃这个数据帧。
图4-4过滤
自学习、转发过滤的相关代码:
switch(num_Switch_Source)
{
case0:
{
//判断转发表中有没有此源地址的记录
for(i=0;
i<
A_Table_Switch[0].Count;
i++)
if(A_Table_Switch[0][i].Equals(Source))
break;
}
//没有就将地址和端口添加到转发表中
if(i==A_Table_Switch[0].Count)
A_Table_Switch[0].Add(Source);
A_Table_Switch[1].Add(num_Port_Source.ToString());
MessageBox.Show("
该地址不在转发表中,已经添加到交换机"
+num_Switch_Source+"
的转发表中!
"
);
//数组第一个是地址,第二个是端口
//查找网桥数组中是否有目的地址
if(num_Switch_Source==num_Switch_Destination&
&
num_Port_Source==num_Port_Destination)
源端口和目的端口一样,丢弃!
return;
if(A_Table_Switch[0][i].Equals(Destination))
转发表中有目的地址的记录,已经向端口"
+System.Convert.ToInt32(A_Table_Switch[1][i].ToString())+"
发送了信息!
//转发表中没有目的地址的记录
if(i==A_Table_Switch[1].Count)
转发表中没有目的地"
+Destination+"
的记录,向其他端口转发!
B_Table_Switch[0].Count;
if(B_Table_Switch[0][i].Equals(Source))
if(i==B_Table_Switch[0].Count)
B_Table_Switch[0].Add(Source);
B_Table_Switch[1].Add("
11"
+num_Switch_Destination+"
if(B_Table_Switch[0][i].Equals(Destination))
+System.Convert.ToInt32(B_Table_Switch[1][i])+"
if(i==B_Table_Switch[1].Count)
return;
4.3多播、广播
以太网交换机只是简单地把多播数据当成广播来发送接收,所以多播和广播有相似之处,在此设计中,当目的mac地址为01开头,交换机将会进行广播,转发到除了接收此帧的端口外的所有端口,当目的mac地址为全F时,交换机也将进行广播,转发到除了接收此帧的端口外的所有端口。
广播也类似,只是目的地址为FF-FF-FF-FF-FF-FF。
在界面上输入目的地址FF-FF-FF-FF-FF-FF,交换机会将其转发到所有端口。
如图所示:
图4-5广播过程一
图4-6广播过程二
图4-8广播过程三
此时点击监视,同样能够自学习到交换机0的4端口的mac地址,反映在交换机0上的转发表学习到的4端口,而反映在交换机1上的学习到的同样的mac地址,但是转发帧的接口却是两个交换机相连的11端口。
广播过程的相关代码:
privatevoidbutton1_Click(objectsender,EventArgse)
try
if(comboBox6.Text=="
FF-FF-FF-FF-FF-FF"
)
Broadcast();
elseif(comboBox6.Text!
="
Unicast();
else
catch
异常!
联系CML,她会帮你解决!
4.4主机添加
在这个模拟程序中,设置了一个地址格式的判断程序,如果输入的不是大写字母和数字,那么就会显示地址格式不正确,只有正确输入才能够添加成功,并且也能用这个mac地址去实现交换机的自学习及转发过滤。
输入格式不按照要求时:
图4-8地址输入格式判断
输入格式按照要求时:
图4-9地址输入正确
添加主机的相关代码:
//判断输入格式
if(new_Pc_address.Length!
=17)
地址格式不正确!
15;
i+=3)
if((judge_format(new_Pc_address[i])&
judge_format(new_Pc_address[i+1])&
new_Pc_address[i+2]=='
-'
)==false)
if(judge_format(new_Pc_address[i])&
judge_format(new_Pc_address[i+1])==false)
if(comboBox7.Text=="
||comboBox8.Text=="
请选择交换机和端口号!
i=System.Convert.ToInt32(comboBox7.Text);
j=System.Convert.ToInt32(comboBox8.Text);
if(i==0)
A_Port_Switch[j].Add(new_Pc_address);
添加成功!
B_Port_Switch[j].Add(new_Pc_address);
结束语
毕业设计顺利完成,任务书中所提出的要求全部实现,可以实现交换机交换机工作原理直观观看,可以显示转发表,更新转发表,智能的输出。
不过这个程序还有些不够完善,程序还有待改进。
为期两个月的以太网交换机自学习算法及可视化毕业设计终于顺利完成,在这期间付出汗水,辛劳可是一言难尽。
但是在付出的同时我门也在收获着,我们收获了宝贵的实践经验,并且能够熟练的掌握以太网交换机的工作原理,能够熟练的运用学到的函数,学会了在曾经编写过的函数上加以修改实现了我期望实现的功能。
此次课设实践充分的