透明网桥的自学习和转发帧算法
计算机网络谢希仁版数据链路层知识点总结
数据链路层知识点总结数据链路层使用的主要两种信道:点对点信道,广播信道,分别使用点对点协议ppp以及CSMA/CD协议一、使用点对点信道的数据链路层1、链路:结点到结点的物理线路,只是一段路径的组成部分(也称物理链路)数据链路:把实现控制数据传输的通信协议的硬件和软件都加到链路上构成的(也称逻辑链路)2、数据链路层协议的基本传输单元——帧3、数据链路层协议解决的三个基本问题:封装成帧,透明传输,差错控制4、封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
确定帧的界限,也叫帧定界。
5、透明传输分成文本文件和非文本文件(图像,程序等)文本文件不会出现帧定界控制字符,所以就是透明传输非文本文件要进行字节填充,具体:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。
当接收端收到连续的两个转义字符时,就删除其中前面的一个。
6、差错检测:循环冗余检验 CRC,帧检验序列 FCSCRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
冗余码位数及除数都是事先选定好的7、可靠传输包括:无比特差错(CRC)和无传输差错(帧编号,确认和重传机制)要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
二、PPP协议1、应用:用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。
2、三个组成部分:一个将 IP 数据报封装到串行链路的方法。
链路控制协议 LCP (Link Control Protocol)。
网络控制协议 NCP (Network Control Protocol)。
计算机网络复习资料整理
《计算机网络》整理资料第1章 概述1、计算机网络的两大功能:连通性和共享; P22、因特网发展的三个阶段:①从单个网络 ARPANET 向互联网发展的过程。
②建成了三级结构的因特网。
③逐渐形成了多层次 ISP (Internet service provider ) 结构的因特网。
P5、6 3、因特网的组成:① 边缘部分:用户利用核心部分提供的服务直接使用网络进行通信并交换或共享信息;主机称为端系统,(是进程之间的通信)P11 两类通信方式:✧ 客户服务器方式:客户是服务的请求方,服务器是服务的提供方;客户程序:一对多,必须知道服务器程序的地址;服务程序:可同时处理多个远地或本地客户的请求(被动等待); ✧ 对等连接方式(p2p):平等的、对等连接通信。
既是客户端又是服务端; P12 ②核心部分:为边缘部分提供服务的(提供连通性和交换)(主要由路由器和网络组成);核心中的核心:路由器(转发收到的分组,实现分组交换) P12交换——按照某种方式动态地分配传输线路的资源:✧ 电路交换:建立连接(占用通信资源)→通话(一直占用通信资源)→释放资源(归还通信资源)始终占用资源; P13✧ 报文交换:基于存储转发原理(时延较长);✧ 分组交换:报文(message )切割加上首部(包头header )形成分组(包packet );优点:高效(逐段占用链路,动态分配带宽),灵活(独立选择转发路由),迅速(不建立连接就发送分组),可靠(保证可靠性的网络协议);存储转发时造成时延; 后两者不需要预先分配传输带宽;路由器处理分组过程:缓存→查找转发表→找到合适端口; 4、计算机网络的分类● 按作用范围:W AN(广),MAN (城),LAN (局),PAN (个人); P20 ● 按使用者:公用网,专用网;● 按介质:有线网,光纤网,无线网络; ● 按无线上网方式:WLAN ,WW AN (手机);● 按通信性能:资源共享,分布式计算机,远程通信网络。
如何设置路由器的透明网桥模式
如何设置路由器的透明网桥模式现代社会,互联网成为了人们生活中不可或缺的一部分,而路由器作为连接网络的重要设备之一,扮演着至关重要的角色。
为了满足不同网络需求,路由器提供了多种工作模式供使用者选择。
本文将重点介绍如何设置路由器的透明网桥模式。
一、什么是透明网桥模式透明网桥模式是路由器的一种工作方式,它主要用于连接两个网络,使其运行起来像一个统一的网络。
二、为什么选择透明网桥模式1.扩展网络:透明网桥模式可以将多个网络连接在一起,扩展网络范围,满足大规模网络需求。
2.减少网络堵塞:透明网桥模式可以减少因路由器转发引起的网络堵塞,提高网络传输速度和稳定性。
3.保护原有网络架构:透明网桥模式可以在网络扩展的同时,保护原有网络架构的稳定性,不对其进行干扰和改变。
三、如何设置路由器的透明网桥模式1.连接路由器:首先,将路由器与电脑通过网线连线连接,并确保连接正常。
2.登录路由器管理页面:打开浏览器,输入路由器的默认IP地址,进入路由器管理页面。
3.找到网桥设置选项:在管理页面中,找到相关的设置选项,通常位于"高级设置"或"网络设置"中。
4.启用透明网桥模式:在网桥设置选项中,找到“透明网桥模式”选项,勾选启用,并保存设置。
5.配置网络参数:根据实际需求,进行相关的网络参数配置,如IP地址、子网掩码等。
6.应用设置:完成配置后,点击应用设置,使设置生效。
四、设置透明网桥模式的注意事项1.了解网络架构:在设置透明网桥模式前,需要充分了解原有网络的架构和拓扑结构,避免设置错误导致网络故障。
2.正确选择设备:根据实际需求,选择适合的路由器设备,并确保其支持透明网桥模式。
3.避免冲突:在设置透明网桥模式时,需避免与其他网络设备冲突,提前规划好网络地址分配。
4.尽量保持默认设置:在设置透明网桥模式时,尽量保持其他设置为默认状态,避免冲突和不必要的干扰。
五、总结透明网桥模式作为路由器的一种工作方式,具有扩展网络、减少网络堵塞和保护原有网络架构等优点,适用于大规模网络环境。
透明模式的原理和转发规则
透明模式的原理和转发规则
首先针对用户来说是透明的,用户并不知道防火墙的存在.不需要对防火墙设置相应的IP地址。
如果将一台防火墙放置现有网络结构中,除了要对其做相应的IP设置外,同时还可能导致更改整个网络的路由和转发情况。
但是通过采用透明模式就不一样了,即采用了无IP的网桥一样,无须更改现有网络的任何结构和设置,同时还能时时监控和解析通过该设备的数据包。
转发规则:假设A为内部网络客户机,B为外部网络服务器,C为防火墙。
当A对B有连接请求时,TCP连接请求被防火墙截取并加以监控。
截取后当发现连接需要使用代理服务器时,A和C之间首先建立连接,然后防火墙建立相应的代理服务通道与目标B建立连接,由此通过代理服务器建立A和目标地址B的数据传输途径。
TRILL技术概述
三、TRILL——实现二层多路径转发1. TRILL技术概述TRILL(Transparent Interconnection of Lots of Links,多链路透明互联)是由IETF提出的"以太帧多路径转发"技术标准,目前该标准还处于草案阶段。
TRILL提供了一种与传统以太帧转发方式完全不同的技术。
"多路径"概念以往只用于IP转发。
当两台路由器间存在多条等价转发路径(等价或非等价),路由器可根据路由协议的计算结果,将IP报文沿最短路径、并按照路径度量值,基于流的方式进行分担转发,由此可充分利用带宽资源。
TRILL技术将IP报文转发思路应用于以太帧转发,支持TRILL技术的以太网交换机被称为"RBridge (Routing Bridge)"。
路由器可通过链路状态路由协议计算相互之间的最短路径、等价多路径/ECMP,并在拓扑变化时更新转发路径。
RBridge间通过类似IS-IS路由协议的链路状态控制协议TRILL IS-IS实现相互间最短路径和等价多路径的计算。
TRILL IS-IS只计算RBridge间的拓扑,而不关心网络中两台主机间的拓扑。
路由器具备"可寻址性",因此可通过链路状态路由协议(OSPF、IS-IS)计算整网拓扑,并通过已获得的拓扑计算出相互间最短路径和分担策略。
传统以太网交换机不具"可寻址性"(桥MAC只用在控制层协议/STP,不影响以太帧转发),以太帧头只包含源端和目的端主机MAC,转发路径中的所有交换机对于源端和目的端主机都是透明的。
TRILL定义的以太帧转发模型与IP报文在路由器上转发模型相似,因此RBridge必须与路由器一样成为可寻址设备。
TRILL网络中的RBridge都被赋予不同的Nickname(2字节),其更能类似与IP地址,由此RBridge变为可寻址设备。
【最新精选】透明网桥的实现
透明网桥的实现一 环境这是北京联通客服中心环境的简化, 因为客服业务的需要, 坐席台需与中心局域网共用一个网段.实现这样的要求可有几种方式,这里就介绍其中最简单的一种:将路由器2610配成透明网桥方式.二.概念介绍TCP/IP 模型 OSI 模型192.1.1.133192.1.1.1网桥是一种设备,运行与第二层既数据链路层, 它可以扩展局域网, 也可以减少局域网上的通讯流量. 网桥是透明的设备,它不涉及高层协议,不改变ethernet帧的源或目的地址,只是转发到适当的网段.第二层的地址格式由使用该地址的网络类型决定,其中,局域网lan和广域网wan是两类主要的网络. Lan使用的是”媒体访问类型”(Medium Access Control mac)地址;WAN数据通路大都采用点到点的形式,没有必要在帧头中表明自己的身份.网桥的工作过程:坐席1要与CTI server通讯, 刚开始,坐席1发的数据帧在网段乙上广播,网桥2 lan口收到这个帧,若发现坐席1 MAC地址不在自己的桥接表中, 则将此帧扩散到wan口,串口将此桥接帧封装成HDLC帧,送到网桥1的wan口, 串口将HDLC帧拆封并转发到lan口,再到网段甲上广播,CTI server收到该帧,作出回应.CTI server的MAC地址也被加入到两个网桥的网桥表中. 下次通讯时,网桥可直接查询自己的网桥表,不再广播.网桥表网桥是透明的, 对相互通信的pc而言,网桥看上去根本不存在,两个物理LAN被作为一个统一的逻辑LAN对待.三配置过程1.router1router1# config terminalrouter1(config)#bridge 1 protocol decrouter1(config)#bridge 1 priority 0router1(config)#int e0router1(config-if)# bridge-group 1router1(config-if)#exitrouter1(config)#int s0:0router1(config-if)# bridge-group 1router1(config-if)#<Ctrl-z>router1(config)#wr2.router2router1# config terminalrouter1(config)#bridge 1 protocol decrouter1(config)#int e0router1(config-if)# bridge-group 1router1(config-if)#exitrouter1(config)#int s0:0router1(config-if)# bridge-group 1router1(config-if)#<Ctrl-z>router1(config)#wr要点:1.两台路由器的e0,s0口都在一个网桥组中2.使用同样的生成树协议:DEC ,生成树协议是为了网桥冗余容错设计的,有DEC,IEEE两种标准,选择任意一种都行,只要各接口选择保持一致就可以了.3 设立一根桥接,是为了防止网桥容错时数据帧在网桥间死循环,多个路由器中只能设定一台.用bridge priority命令,把它的桥接优先级设为0四调试方法router#show bridge group /显示路由器已配置哪些桥组,以及各桥组成员分别是哪些接口.Router1#show bridge groupBridge Group 1 is running rhe DEC compatible Spanning Tree protocolPort 2 (etherbet0) of bridge group 1 is forwardongPort 3 (serial0) of bridge group 1 is forwardongrouter#show bridgeRouter1#show bridgeTotal of 300 station blocks,291 freeCodes:P-permanents, S-selfBridge group 1:Address action interface age rx cout tx cout 00a0.c996.eef7 forward ethernet0 0 3 100a0.c9dd.1804 forward ethernet0 1 1 0……………………………..Bridge Group 1 is running rhe DEC compatible Spanning Tree protocolPort 2 (etherbet0) of bridge group 1 is forwardongPort 3 (serial0) of bridge group 1 is forwardong五使用范围此方法也可使用于远程维护,集中记费等远程管理环境.彭亦辉6/19【附加公文一篇,不需要的朋友可以下载后编辑删除,谢谢】关于进一步加快精准扶贫工作意见为认真贯彻落实省委、市委扶贫工作文件精神,根据《关于扎实推进扶贫攻坚工作的实施意见》和《关于进一步加快精准扶贫工作的意见》文件精神,结合我乡实际情况,经乡党委、政府研究确定,特提出如下意见:一、工作目标总体目标:“立下愚公志,打好攻坚战”,从今年起决战三年,实现全乡基本消除农村绝对贫困现象,实现有劳动能力的扶贫对象全面脱贫、无劳动能力的扶贫对象全面保障,不让一个贫困群众在全面建成小康社会进程中掉队。
计算机网络与通信基础填空题
一.填空题:1. 计算机网络是计算机技术与通讯技术相联合的产物。
2. 从资源共享的角度来定义计算机网络,计算机网络指的是利用通讯线路将不一样地理地点的多个独立的自治计算机系统连结起来以实现资源共享的系统。
3. 在TCP/IP的应用层协议一般使用的是客户服务器方式,此中,客户是服务恳求方,服务器是服务供给方。
4. 在TCP/IP协议模型的运输层中,不面向连结的协议是UDP。
5. 在TCP/IP模型中,互联网层的上一层是运输层。
6. 通讯线路的_带宽_是指通讯线路上赞同经过的信号频带范围 (或通频带) ,单位是HZ。
但在计算机网络中,它又用来表示网络通讯线路所能传递数据的能力。
7. 数据通讯中的信道传输速率单位用b/s表示,b/s的含义是每秒比特。
8. 目前,“带宽”常用作描绘信道传递数据能力的物理量,其单位是 b/s(bit/s),比之大的单位有:Kb/S、Mb/S、Gb/s等。
9. 将计算机网络区分为局域网LAN、城域网MAN、广域网W AN是按网络的作用范围区分的。
10. 各节点都与中心节点连结,呈辐射状摆列在中心节点四周,这类拓扑结构称为星型拓扑结构。
11. 假定某用户经过电线部门的ADSL技术以2M(即2Mb/s)带宽接入Internet,在正常状况下其下载速度大概是244KB。
12. 发送数据时,数据块从结点进入到传输媒体所需要的时间称为传输延时;网络中电磁信号在信道中流传必定的距离而花销的时间称为_____流传延时____。
13. 在发送报文以前,先将较长的报文区分红为一个个更小的等长数据段,在每一个数据段前方,加上一些由必需的控制信息构成的首部(header)后,就构成了一个__分组__。
(备忘:在TCP/IP模型中,数据分组是在运输层和网络层中共同达成的。
先是把数据分为等长的数据段(约为1024bit),而后在每一个数据段前方加上首部,首部是由一些必需的控制信息构成的。
)14. 在计算机网络中,____各个子层_____及其__各子层的协议__的会合称为网络系统结构。
网桥
第十三次课现结合如图5-24所示的LAN介绍透明网桥的工作原理。
图中,●B1和B2是网桥,其旁边的数字是端口的编号。
●SYS1~SYS6是计算机,在表示每个计算机方框的旁边是其网卡的MAC地址。
图5-24 透明网桥的工作原理举例假设网桥B1和B2的自学习表均为空,同时假设在这个LAN中有下述计算机对,按下列次序进行通信:① SYS1 → SYS6② SYS4 → SYS1③ SYS2 → SYS1那么:第一步:这时,网桥B1不管帧的目的MAC地址是什么,它将从#1端口收下该帧。
由于B1的自学习表为空,这样它不知道这个帧应从哪个端口转发出去,所以,采用广播方式扩散到除入端口(这里是#1端口)外的所有其它端口(这里是#2端口)。
同时将源MAC地址MAC1写到网桥B1的中,如表1所示。
表1 网桥B1的自学习表②接着,网桥B2从它的#1端口收下网桥B1转发而来的帧。
由于B2的自学习表也为空,于是它采用广播方式扩散到除入端口(这里是#1端口)外的所有其它端口(这里是#2端口和#3端口)。
同时将源MAC地址MAC1写到网桥B2的中,如表2所示。
表2 网桥B2的自学习表第二步:时,网桥B2从#2端口收下该帧。
网桥B2查其自学习表可知,刚收下的帧应从#1端口转发出去。
同时将源MAC地址MAC4写到网桥B2的中,如表3所示。
表3 网桥B2的自学习表②接着,网桥B1从它的#2端口收下网桥B2转发而来的帧。
网桥B1查其自学习表可知,刚收下的帧应从#1端口转发出去。
同时将源MAC地址MAC4写到网桥B1的中,如表4所示。
表4 网桥B1的自学习表第三步:SYS2向SYS1发送数据帧,帧的目的MAC地址=MAC1,源MAC地址=MAC2。
这时,网桥B1从#1端口收下该帧。
网桥B1查其自学习表可知,刚收下的帧的目的计算机与发出帧的计算机都在#1端口,于是网桥B1丢弃转刚收下的帧。
但将源MAC 地址MAC2写到网桥B1的中,如表5所示。
透明网桥的自学习和转发帧算法
算法描述如下:自学习:当网桥收到一转发帧时,先查找自己的转发表中是否有源地址,若没有则添加此项。
转发帧:查找自己转发表中是否有目的地址,若没有则将此帧从其他端口转发出去。
若有,则将转发表中记录的目的地址端口和此帧进入网桥时通过的端口进行比较,若相等则丢弃此帧(因为目的主机已经收到此帧了),若不相等,则将此帧通过转发表记录的目的地址端口转发出去。
源码如下:(此代码在突出算法思想的情况下设计的尽量简单,有的情况没有考虑,或者简单处理了。
) 12#include<iostream>3using namespace std;4#define Max_Data 100//转发表数据项数量5struct Data//数据项结构6{7char Add;//地址8int port;//端口9};10struct SendTable//转发表结构11{12Data data[Max_Data];13int write;//写指针,指向下一个要写的位置14}sendTable;15void initSendTable()16{17for(int i=0;i<Max_Data;i++)18{19sendTable.data[i].Add='0';20sendTable.data[i].port=0;21}22sendTable.write=0;23}24int index;//记录匹配项25bool Find(Data data)//查找转发表,若找到返回ture,找不到返回false26{27for(int i=0;i<Max_Data;i++)28{29if(sendTable.data[i].Add==data.Add)30{31index=i;32return true;33}34}35return false;36}37void AddSendTable(Data data)//向转发表当前指针处添加数据项,若转发表满则循环覆盖38{39sendTable.data[sendTable.write].Add=data.Add;40sendTable.data[sendTable.write].port=data.port;41sendTable.write=(sendTable.write+1)%Max_Data;42}43void OutSendTable()44{45cout<<"********SendTable********"<<"\\n";46for(int i=0;i<sendTable.write;i++)//注意:要是写满在轮转回来的话这种方法就不行了。
透明网桥算法分析
会触发它们向每个指定的端 口发送生存 () 2 对于每一个接收到 的数据帧, 都会在缓 冲 置消息时, 区中记录源地址信息和该帧来 自的端口的信息 ( 逆 期为 0 的配置消息 . 分析 了生成树算法 , 没有提到如何处理链路或 向学 习法 ) .
() 3 对于收到的每一个数据 帧, 在缓冲区内查
设置拓扑结构变化的标志位, 明拓扑配置已经发 表 生 了变化 . 当指定网桥从根端 口收到这样的配置消
() 1 在端 口收到 的配置消息优于所存储 的配 置消息时 , 则用新 的配置信 息覆 盖原来 的配置 消
息. 然后重新计算根、 到根的费用以及根端 口.
息 以后 , 也在 自己作为指定 网桥的 I N上发送 的 . A
配置消息 中设置拓扑结构改变位 .
()当生存期达到阈值时 , 2 网桥抛弃原来存储
的配置消息 , 开始重新计算根、 到根的费用 以及根
端 口. 32 网络 拓扑结 构 发生 变化 .
4 结 束 语
在我们具体工作中, 使用 比较多的是二层交换 机. 二层交换机 的每个端 口相 当于一个 网桥 . 文 本
L N) A .
消息称为“ 配置网桥协议数据单元” 以下简称配置 ( 消息) .
3 生成树算法的改进
3 1 排 出故 障 .
透明网桥使用的策略如下 : () 1 混杂侦听, 接收所经过的每一个数据帧 .
在正常 的情况下 , 根网桥产 生一个配 置信息
时 。 的生存期为 0 当其他 网桥 收到根 网桥 的配 它 .
深入的分 析 了基 于 O I 型 中 的数据链 路层 的 S模
M C地址路由, A 即网桥的工作原理及算法和改进 . 为透彻地了解数据 的传送过程和理解相关网络设
透明网桥是怎样进行路径选择的
透明网桥自学习实现
透明网桥自学习实现输入源地址接受端口号目的地址更新1源地址在表中1端口号与原端口相同:不修改表2端口号与原端口不同:删除原地址,在端口号对应的标准中添加地址2源地址不在表中:在接收端口对应的表中添加地址输出1目的地址不在表中:除接受端口外全端口转发2 目的地址在表中,接收端口与目的端口相同:不转发3目的地址在表中,接收端口与目的地址不同:转发到指定端口Import java.util.*;Class BRIDGE{Arraylist a =new Arraylist();Arraylist b=new Arraylist();Arraylist c=new Arraylist();Arraylistm[] ={a,b,c};void Study(String a1 int a2){ //a1是源地址a2是输入端口For(inti=o.i<m.length,i++){If(m.[i].IndexOf(a1)==1){If i==a2returnElse {m.[i].remove(a1);m[a2].add(a1);return}}}m.[a2).add(a1);return}String share(int a2 string b1){ //b1 目的地址a2输入端口String out;If(b1==”000000000000”){// 广播,多播的地址是全0还是全1For(inti=0,i<m.length,i++){If(a1 != i)Out=out+I; //out中的序号表示转发的端口}Return out}For(inti=0,i<m.length,i++){If(m[i].IndexOf(b1)==1){Ifi==a2Return out=nullElseReturn out=”i”}Else {For(int I=0,i<m.length,i++){If(a1!=i)Out=out+I;Return out}}}}}首字母大写的word的问题!!Crc算法异或储存器示意图*1储存器中的数据储存在数组a[]中新数据储存在a1[]中异或运算Intxor (inta,int b){Int c=a+b;If(c==o or c==2)Return 0If(c==1)Return 1}移位1. 输入数据与a[15]异或,得出结果记为x2. a1[0]=x3. a1[1]=a[0]4. a1[2]=a[1]5. …..6. a1[4]=a[3] xor x7. …..8. a1[11]=a[10] xor x9. ….10. a1[15]=a[14]11. a[]=a1[]int[] move(int a ){for(int j=0;int x,j<a.length,j++){if(j==o){x=xor(a[15],a);a1[j]=x;}if(j==4 or j==11)a1[j]=xor(a[j-1],x);a1[j]=a[j-1];}}运算过程中的输入部分未实现。
透明网桥自学习
package com.tb.trsbrg;import java.util.Scanner;public class Trsbrg {private String form1[][];private String form2[][];private int num1;private int num2;public Trsbrg() {this.form1 = new String[5][2];this.form2 = new String[5][2];form1[0][0] = "";form1[1][0] = "";form1[2][0] = "";form1[3][0] = "";form1[4][0] = "";form2[0][0] = "";form2[1][0] = "";form2[2][0] = "";form2[3][0] = "";form2[4][0] = "";this.num1 = 0;this.num2 = 0;}public void transport(String a, String b) {if (a.equals("A") || a.equals("B") || a.equals("C")) {int i = 0;while (i < 5) {if (this.form1[i][0].equals(a))break;elsei++;}if (i < 5) {System.out.println(a + "在B1转发表中已存在,不存入");// 已存在a 输出a 和接口} else {form1[num1][0] = a;form1[num1][1] = "1";num1++;System.out.println(a + "在B1中不存在,存入表中");}i = 0;while (i < 5) {if (this.form1[i][0].equals(b))break;elsei++;}if (i < 5) {System.out.println(b + "在B1转发表中已存在,丢弃");// 已存在a 输出a 和接口} else {System.out.println(b + "在B1中不存在,从接口2发出");i = 0;while (i < 5) {if (this.form2[i][0].equals(a))break;elsei++;}if (i < 5) {System.out.println(a + "在B2转发表中已存在,不存入");// 已存在a 输出a 和接口} else {form2[num2][0] = a;form2[num2][1] = "3";num2++;System.out.println(a + "在B2中不存在,存入表中");i = 0;while (i < 5) {if (this.form2[i][0].equals(b))break;elsei++;}if (i < 5) {System.out.println(b + "在B2转发表中已存在,丢弃");// 已存在a 输出a 和接口} else {System.out.println(b + "在B2中不存在,从接口4发出");}}}}else if (a.equals("D") || a.equals("E")) {int i = 0;while (i < 5) {if (this.form1[i][0].equals(a))break;elsei++;}if (i < 5) {System.out.println(a + "在B1转发表中已存在,不存入");// 已存在a 输出a 和接口} else {form1[num1][0] = a;form1[num1][1] = "2";num1++;System.out.println(a + "在B1中不存在,存入表中");}i = 0;while (i < 5) {if (this.form1[i][0].equals(b))break;elsei++;}if (i < 5) {System.out.println(b + "在B1转发表中已存在,丢弃");// 已存在a 输出a 和接口} else {System.out.println(b + "在B1中不存在,从接口1发出");}i = 0;while (i < 5) {if (this.form2[i][0].equals(a))break;elsei++;}if (i < 5) {System.out.println(a + "在B2转发表中已存在,不存入");// 已存在a 输出a 和接口} else {form2[num2][0] = a;form2[num2][1] = "3";num2++;System.out.println(a + "在B2中不存在,存入表中");}i = 0;while (i < 5) {if (this.form2[i][0].equals(b))break;elsei++;}if (i < 5) {System.out.println(b + "在B2转发表中已存在,丢弃");// 已存在a 输出a 和接口} else {System.out.println(b + "在B2中不存在,从接口4发出");}} else {int i = 0;while (i < 5) {if (this.form1[i][0].equals(a))break;elsei++;}if (i < 5) {System.out.println(a + "在B2转发表中已存在,不存入");// 已存在a 输出a 和接口} else {form2[num2][0] = a;form2[num2][1] = "4";num2++;System.out.println(a + "在B2中不存在,存入表中");i = 0;while (i < 5) {if (this.form2[i][0].equals(b))break;elsei++;}if (i < 5) {System.out.println(b + "在B2转发表中已存在,丢弃");// 已存在a 输出a 和接口} else {System.out.println(b + "在B2中不存在,从接口3发出");i = 0;while (i < 5) {if (this.form1[i][0].equals(a))break;elsei++;}if (i < 5) {System.out.println(a + "在B1转发表中已存在,不存入");// 已存在a 输出a 和接口} else {form1[num1][0] = a;form1[num1][1] = "2";num1++;System.out.println(a + "在B1中不存在,存入表中");}i = 0;while (i < 5) {if (this.form1[i][0].equals(b))break;elsei++;}if (i < 5) {System.out.println(b + "在B1转发表中已存在,丢弃");// 已存在a 输出a 和接口} else {System.out.println(b + "在B1中不存在,从接口1发出");}}}}}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubTrsbrg tb = new Trsbrg();Scanner s = new Scanner(System.in);String a;String b;while (true) {System.out.println("\n请输入源地址:");a = s.next();System.out.println("请输入目的地址:");b = s.next();tb.transport(a, b);System.out.printf("网桥1:");for(int i = 0 ; i <5;i++){System.out.printf(tb.form1[i][0]+" "+tb.form1[i][1]+"\n");}System.out.printf("网桥2:");for(int i = 0 ; i <5;i++){System.out.printf(tb.form2[i][0]+" "+tb.form2[i][1]+"\n");}}}}。
透明网桥的自学习算法
透明网桥的自学习算法#include<stdio.h>void main(){char arr1[3]={'A','B','C'};char arr2[2]={'D','E'};char arr3[3]={'F','G','H'};int a[][2]={0,0,0,0,0,0,0,0,0,0,0,0};int b[][2]={0,0,0,0,0,0,0,0,0,0,0,0};int i,j,m,n,k1 = 0,k2 = 0,t;char s,d,k;while(1){printf("请输入源地址和目的地址:");scanf("%c%c",&s,&d);printf("\n");for(i=0;i<3;i++){if(arr1[i]==s)m=1;}for(i=0;i<2;i++){if(arr2[i]==s)m=2;}for(i=0;i<3;i++){if(arr3[i]==s)m=3;}switch(m){case 1:{for(i=0;i<k1;i++){if(a[i][0]==s){break;}}if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址{if(a[i][0]==d){n=a[i][1]; break;}}if(i==k1) printf("网桥1中没有目的记录%c,向右转发\n",d);//不含有,转发else{if(m==n){printf("网桥1丢弃\n");t=1;}//含有且在同在网段丢弃elseprintf("不在同一网段,网桥1向右转发\n");//含有不在同一网段转发}if(t!=1) //不在同一网段时{for(i=0;i<k1;i++)if(b[i][0]==s) {break;}if(i==k1) {b[k2][0]=s;b[k2][1]=m;k2++;}//没有记录,在网桥数组中插入源地址for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址{if(b[i][0]==d) {n=b[i][1]; break;}}if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发else{if(m==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发}}break;}case 2:{//向左转发for(i=0;i<k1;i++)if(a[i][0]==s) {break;}if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址{if(a[i][0]==d) {n=a[i][1]; break;}}if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发else{if(m==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发}//向右转发for(i=0;i<k2;i++)if(b[i][0]==s) {break;}if(i==k2) {b[k2][0]=s;b[k2][1]=m-1;k2++;}//没有记录,在网桥数组中插入源地址for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址{if(b[i][0]==d) {n=b[i][1]; break;}}if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发else{if(1==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发}break;}case 3:{for(i=0;i<k2;i++)if(b[i][0]==s) {break;}if(i==k2) {b[k2][0]=s;b[k2][1]=m-1;k2++;}//没有记录,在网桥数组中插入源地址for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址{if(b[i][0]==d) {n=b[i][1]; break;}}if(i==k2) printf("网桥2中没有目的记录,向左转发\n");//不含有,转发else{if(2==n) {printf("网桥2丢弃\n");t=1;}//含有且在同在网段丢弃else printf("不在同一网段,网桥2向左转发\n");//含有不在同一网段转发}if(t!=1)//不在同一网段时{for(i=0;i<k1;i++)if(a[i][0]==s) {break;}if(i==k1) {a[k1][0]=s;a[k1][1]=m-1;k1++;}//木有记录,在网桥数组中插入源地址for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址{if(a[i][0]==d) {n=a[i][1]; break;}}if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发else{if(2==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发}}break;}default: ;}putchar('\n');printf("网桥1\n");printf("--------\n");for(i=0;i<k1;i++){printf(" %c ",a[i][0]);printf("%d ",a[i][1]);putchar('\n');}printf("--------\n");printf("网桥2\n");printf("--------\n");for(i=0;i<k2;i++){printf(" %c ",b[i][0]);printf("%d ",b[i][1]);putchar('\n');}printf("-------\n");scanf("%c",&k);}}五、实验步骤及要求(一)对称矩阵1.建立一个n*n的对称矩阵A并初始化矩阵的元素。
透明网桥的实现范文
透明网桥的实现范文透明网桥是指在局域网中连接不同网络段的设备,它可以通过学习和转发数据帧的方式实现不同网络段之间的通信。
在本文中,将介绍透明网桥的实现方法。
一、透明网桥的基本工作原理透明网桥通过接收和分析数据帧的目的MAC地址,学习不同网络段的MAC地址与其所在端口的对应关系,并根据学习到的信息来转发数据帧。
具体工作流程如下:1.初始化:网桥启动时,需要对其端口进行初始化设置。
2.学习:当网桥接收到一个数据帧时,会提取其中的源MAC地址,并将源MAC地址与接收到数据帧的端口进行绑定。
3.转发:当网桥接收到目标MAC地址和源MAC地址不同的数据帧时,会根据学习到的源MAC地址与端口的对应关系,将数据帧转发到正确的目标端口。
二、透明网桥的实现方法1.基于软件的实现方法:透明网桥的实现可以使用计算机操作系统提供的网络桥接功能来实现。
在Linux系统中,可以使用brctl命令来配置和管理网桥。
在Windows操作系统中,可以使用网络和共享中心的“更改适配器设置”选项来创建和配置网桥。
2.基于硬件的实现方法:三、透明网桥的配置和管理在透明网桥的配置和管理过程中,需要考虑以下几个方面:1.网桥的命名和标识:为网桥设备设置一个适当的名称,可以根据网络拓扑和功能进行命名。
同时,还可以为网桥设备分配一个唯一的标识符,用于区分不同网桥设备。
2.网桥的端口配置:根据网络拓扑,需要将不同网络段的接口连接到透明网桥的不同端口上。
在配置时,需要指定每个端口所属的网络段,并设置相应的参数,如IP地址、子网掩码、默认网关等。
3.网桥的学习和转发表管理:透明网桥通过学习源MAC地址和端口的对应关系来建立学习表,并使用该表来转发数据帧。
在管理过程中,需要考虑表项的添加、删除和更新,以保持学习表与网络拓扑的一致性。
4.网桥的错误处理和日志记录:透明网桥在运行过程中可能会遇到各种错误和异常情况,如链路故障、网络拥塞等。
需要设置适当的错误处理策略,并记录日志以便进行故障诊断和排除。
计算机网络实验报告——网桥转发表的生成
实验报告项目名称:网桥转发表处理程序设计课程名称:计算机网络A班级:计132姓名:缴经纬、刘博爱、王子贤学号:5120130781、130791、130780教师:张晓明、杜天苍、赵国庆、张世博、杨飞信息工程学院计算机系目录一、实验分组、分工 (1)二、实验需求 (1)三、实验设计思路 (1)四、网桥拓扑结构图 (6)五、程序代码分析及算法解析 (6)六、程序运行结果 (11)七、感受 (11)八、实验日志 (13)1一、实验分组、分工:为了体现小组工作模式和团队协作精神,以小组方式,三人一组,由学生自行组队。
每组推选组长,负责本组的联络、分工。
各成员负责完成分配的任务。
我们组分组为:计132 缴经纬(组长)5120130781计132 刘博爱5120130791计132 王子贤5120130780小组分工:缴经纬:网桥转发表B2的程序设计编码,网桥B1、B2的图形界面显示刘博爱:网桥转发表B1的程序设计编码,转发记录的数据xml格式保存王子贤:程序主界面的设计,前端与后端数据的传送,程序测试二、实验需求:给定局域网络图和几个转发信息,能够按照你想学习算法,自动生成转发表并图形显示,此后的转发信息能够按照转发表正常工作。
输入输出内容能够保存。
三、设计思路:对于上面的实验要求我们通过如下设计思路图给编程一个完整的方案网桥的自学习算法我们这样定义在程序中:一.外层判断源地址属于哪个子网二.查找源地址是否在临近网桥中有登记,若没有则进行登记三.内层判断目的地址是否在临近网桥中,若没有则进行向邻网桥的转发2四.查找源地址是否在邻网桥中有登记,若没有则进行登记五.完成两个网桥的自学习算法答辩后改动:一.重新设计流程图。
二.在报告中详细分析算法在程序里的功能。
三.重新设计用户输入框体,从原本的用户输入判断异常改成,用下拉菜单来选择主机号。
四.更改了记录信息的完全性,现在可以详细的显示出从哪个网桥转发到哪个网桥了3456四、网络拓扑结构图:五、程序代码分析及算法解析(1)功能:定义数组记录子网中主机信息,定义B1,B2转发表数组并赋NULL char arr1[] = {'A','B'}; //LAN1站点信息char arr2[] = {'C','D'}; //LAN2站点信息char arr3[] = {'E','F'}; //LAN3站点信息char[][] FormB1 = { //转发表B1{' ',' '},{' ',' '},{' ',' '},{' ',' '},7{' ',' '},{' ',' '},};char[][] FormB2 = { //转发表B2{' ',' '},{' ',' '},5{' ',' '},{' ',' '},{' ',' '},{' ',' '},};解析:分别为子网1 2 3各定义一个数组,数组中存储各子网的主机信息,方便之后为判断子网做准备(2)功能:判断源地址在哪一个子网for(int i=0;i<2;i++){if(Sourceport == arr1[i]){mark = 1;port = '1';}else{}}for(int i =0;i<2;i++){if(Sourceport == arr2[i]){mark = 2;//System.out.println("2");}else{}}for(int i =0;i<2;i++){if(Sourceport == arr3[i]){mark = 3;8port = '2';}else{}}解析:将源地址不断的与3个子网数组中的主机信息进行比对,赋值标记位为之后登记算法做准备。
网络第四章
文档4.6.1 透明网桥•目前使用得最多的网桥是透明网桥(transparent bridge) ,其标准是IEEE 802.1D 。
•“透明”是指局域网上的站点并不知道所发送的帧将经过哪几个网桥,因为网桥对各站点来说是看不见的。
•透明网桥是一种即插即用设备,意思是只要把网桥接入局域网,不用人工配置转发表网桥就能工作。
网桥自学习、建立转发表和转发帧的方法•若从主机A 发出的帧从接口x 进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传送到主机A。
•网桥每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目。
•在建立转发表时是把帧首部中的源地址写在“地址”这一栏的下面。
•在转发帧时,根据收到的帧首部中的目的地址来转发。
这时把在“地址”栏下面已经记下的源地址当作目的地址,而把记下的进入接口当作转发接口。
网桥转发表的内容•在网桥的转发表中写入的信息除了地址和接口外,还有帧进入该网桥的时间。
•这是因为以太网的拓扑可能经常会发生变化,站点也可能会更换适配器(这就改变了站点的地址)。
•把每个帧到达网桥的时间登记下来,就可以在转发表中只保留网络拓扑的最新状态信息。
这样就使得网桥中的转发表能反映当前网络的最新拓扑状态。
网桥自学习和转发帧的过程•网桥收到一帧后先进行自学习。
查找转发表中与收到帧的源地址有无相匹配的项目。
如没有,就在转发表中增加一个项目(源地址、进入的接口和时间)。
如有,则把原有的项目进行更新。
•转发帧。
查找转发表中与收到帧的目的地址有无相匹配的项目。
–如没有,则通过所有其他接口(但进入网桥的接口除外)进行转发。
–如有,则按转发表中给出的接口进行转发。
但应注意若转发表中给出的接口就是该帧进入网桥的接口,则应丢弃这个帧(因为这时不需要经过网桥进行转发)。
.。
计算机网络知识点总结
2物理层基本概念物理层的主要任务——确定与传输媒体接口的一些特性四个特性:机械特性——指明接口所用接线器的形状和尺寸、引线的数目和排列、固定的所锁定装置等电气特性——指明接口电缆各条线上出现的电压范围功能特性——指明某条线上出现的某条电平的电压表示何种意义过程特性——指明对于不同功能的各种可能事件的出现顺序数据通信的基础知识数据通信系统的三大部分——源系统、传输系统、目的系统数据——运送消息的实体信号——数据的电气或电磁表现模拟的——表示消息的参数的取值是连续的数字的——表示消息的参数的取值是离散的码元——在使用时间域的波形表示数字信号时,代表不同离散数值表示的基本波形单工通信单向通信——只能有一个方向的通信不允许反方向的交互半双工通信双向交替通信——通信的双方都可以发送消息,不允许同时发送或接收全双工通信双向同时通信——通信双方可以同时发送接收消息基带信号——来自源的信号调制——基带信号含有信道不能传输的低频分量或直流分量,必须对基带信号进行调制基带调制编码——仅仅变换波形,变换后仍是基带信号带通调制——使用载波调制,把信号的频率范围搬到较高频段,并转换为模拟信号带通信号——经过载波调制后的信号仅在一段频率范围内能通过信道基本带通调制方法——调幅AM、调频FM、调相PM码间串扰——在接收端收到的信号波形失去了码元之间的清晰界限的现象奈式准则——在任何信道中,码元的传输速率是有上限的,传输速率超过此上限就会出现严重的码间串扰,使接收端对码元的判决成为不可能数据的传输速率比特率——每秒传输的比特数即二进制数字0或1,单位bit/s、b/s、bps码元传输率波特率——每秒信道传输的码元个数,单位B传信率比特率与传码率波特率的关系——N为码元的进制数比特率=n波特率n为每个码元的比特,二进制时带1比特,三进制时带2比特,八进制带3bit信噪比——信号的平均功率和噪声的平均功率之比,记为S/N,单位分贝dB 信噪比dB=10log10S/NdB 如当S/N为10时信噪比10,S/N为1000为30 香农公式——信道极限信息传输率C = W log21+S/N b/sW信道带宽单位Hz、S信道内所传信号的平均功率、N为高斯噪声功率奈氏准则公式——C=2WRb=2WRBlog2N即每赫带宽理想低通信道的最高码元传输率是每秒2个码元通道复用技术频分复用FDM——用户在分配到一定频带后,在通信过程中自始至终都占用这个频带频分复用的所有用户在同样的时间占用不同的频率带宽时分复用TDM——将时间划分为一段段等长的时分复用帧TDM帧,每一个时分复用用户在每一个TDM帧中占用固定序号的间隙;信道利用率不高统计时分复用STDM——前提是假定各用户都是间歇地工作,每个时隙要有用户地址信息波分复用WDM——光的频分复用,因光载波频率很高,习惯上用波长表示使用的光载波8路s光载波经光的调制,在一根光纤上的总速率为20Gb/s100根s光纤的光缆,采用16倍密集波分复用,得一根4Tb/s\ 码分复用CDM ——将每一个比特时间划分为m个短的码片码分地址CDMA 给每个站点分配码片序列,不同站点的码片序列正交当发送码片1时就发送该站点码片序列,比特0时发送反码当S站点向T站点发送数据时,T站点接收的是所有站点发送的序列和T站点用S站点的码片序列与接收的序列和做内积运算非S站点的序列得0,,S站发送的比特0得-1、比特1得1规格化内积公式——各项相乘之和除以项数量脉冲调制PCM体制——北美24路PCM标准T1速率为s欧洲30路PCM标准E1速率为s同步光纤网SONET—第一级同步传送信号STS-1传输速率s第一级光载波OC-1 同步数字系列SDH——基本速率第一级同步传递模块STM-1为sOC-33数据链路层数据链路层使用的信道主要有两种类型:点对点信道——使用一对一的点对点通信方式广播通信——使用一对多的广播通信方式链路——是从一个结点到相邻结点的一段物理线路,中间没有其他交换结点;链路只是一条路径的组成部分数据链路——除了这些物理线路,还必须有通信协议来控制数据的传输,如果把实现这些协议的硬件和软件加到链路上,就构成了数据链路帧——数据链路层协议数据单元IP数据报——网络层协议数据单元数据链路层三个基本问题:封装成帧、透明传输、差错检验封装成帧——在一段数据的前后分别添加首部和尾部,这样就构成了一个帧帧定界——首部和尾部的一个重要作用最大传送单元MTU——链路层协议规定的所能传送的帧的数据部分长度上限帧定界符——当数据是由可打印的ASCII码组成的文本文件时,帧定界可使用帧定界符SOH——帧开始符,十六进制编码01,二进制编码00000001,Start Of Header EOT——帧结束符,十六进制编码04,二进制编码00000100,End Of Transmission透明传输——无论什么样的比特组合的数据都能通过这个数据链路层字节填充——发送端的数据链路层在数据中出现控制字符前插入一个转义字符“ESC”在接收端的数据链路层把数据送往网络层之前删除插入的转义字符ESC——转义字符,十六进制编码1B,二进制编码00011011,Byte Stuffing差错检测:比特差错——比特在传输过程中可能会发生差错:1变成0,0变成1误码率BER——在一段时间内,传输错误的比特占所传输比特总数的比例,Bit Error Rate信噪比越大,误码率越小循环冗余检验CRC——把数据分为每组k个比特在待传送的一组数据M后添加n位冗余码冗余码的计算方法——在M后加上n个0得到2^nM除以事先选定好的n+1位除数P得到商Q和n位余数R用竖式做除法,商右移补0至位数与除数相等,相异得1,相同得0余数R作为冗余码接在M后发送出去循环冗余检验CRC——把收到的每一帧除以P,检查得到的余数R’若R’=0,则判定这个帧没有差错,就接受若R’=0,则判定有差错,就丢弃帧件检验序列FCS——在数据后面添加冗余码,Frame Check Sequence而CRC是一种常见的检错方法FCS可以用CRC这种方法得出,但CRC并非获得FCS的唯一方法在数据链路层使用CRC检验,能实现无比特差错传输,但这还不是可靠传输,只能做到无差错接收,要做到可靠传输,必须加上确认和重传机制;点对点协议PPP——用户计算机和ISP进行通信时使用的链路层协议只支持全双工链路PPP协议应满足的需求——简单——这是首要的要求封装成帧透明性多种网络层协议多种类型链路差错检测检测连接状态最大传送单元网络层地址协商数据压缩协商PPP协议不需要的功能——纠错流量控制序号多点线路半双工或单工链路PPP协议三个组成部分——一个将IP数据报封装到串行链路的方法链路控制协议LPCLink Control Protocol网络控制协议NPCNetwork Control ProtocolPPP用同步传输链路,采用硬件完成比特填充;异步传输时使用字符填充法P75 零比特填充——PPP协议在使用SONET/SDH链路时,是使用同步传输的,此时采用零比特填充实现透明传输;发送端:5个连续1填一个0,接收端删除; 媒体共享技术——静态划分信道:频分复用、时分复用、波分复用、码分复用动态媒体接入控制:随机接入、受控接入世界第一个局域网产品以太网规约——DIX Ethernet V2IEEE的标准——与DIX Ethernet V2差别很小,可以简称为“以太网”局域网数据链路层的两个子层——逻辑链路控制LLC子层媒体接入控制MAC子层局域网的主要优点——具有广播功能,从一个站点可很方便的访问全网便于系统的扩展和演变,各设备的位置可灵活调整和改变提高了系统的可靠性、可用性和生存性适配器——连接计算机与外部局域网,嵌在计算机主板上适配器的主要功能——进行串行/并行转换对数据进行缓存在计算机的操作系统安装设备驱动程序实现以太网协议计算机硬件地址在适配器的ROM中,计算机软件地址—IP地址在计算机的存储器中以太网采取的两种措施——无连接的工作方式,尽最大努力交付,即不可靠交付发送的数据都使用曼彻斯特编码的信号CSMA/CD协议——载波监听多点接入/碰撞检测只能进行半双工通信多点接入——总线型网络,许多计算机以多点接入方式连接在一根总线上载波监听——在发送数据前检测总线上是否有其他计算机子在发送数据碰撞检测——计算机边发送数据边检测信道电磁波在1km电缆的传播时延——5μs争用期2τ——以太网端到端往返时延,具体争用期时间为μs对于10Mb/s的以太网,在争用期可发送512bit,即64字节退避算法——确定基本退避时间,一般取争用期2τ定义重传次数k=Min已经重传的次数,10从0,1,...,2^k-1中随机抽取数r重传推后时间为r倍争用期重传达16次仍不成功,抛弃该帧最短有效帧长——争用期是512比特时间时,发生冲突一定在前64字节内以太网规定了最短有效帧长为64字节,小于64字节的都是无效帧强化碰撞——当发现碰撞时,停止发送数据,再继续发送若干比特人为干扰信号帧间最小间隔——μs,即96比特时间CSMA/CD——从网络层获得一个分组,加上首尾组成以太帧,放入适配器缓存准备发送检测到信道96比特时间内保持空闲,就发送这个帧若检测到碰撞,则中止数据的发送,并发送人为干扰信号发送完干扰信号后适配器执行退避算法,等待r倍512比特时间,返回步骤2CSMA/CD十六字方针:先听先发,边听边发,冲突停发,随机重发双绞线以太网采用星状拓补在星形的中心增加集线器星形网 10BASE-T 的标准是定义参数a=τ/To ——a的值越小信道利用率越高极限信道利用率Smax=To/To+τ=1/1+a——只有a远小于1才能得到尽可能高的SmaxI/G位——IEEE规定地址字段第一个字节最低位,0表示单个地址,1表示组地址G/L位——地址字段第一个字节最低第二位,0表示全球管理,1表示本地管理三种帧——单播,广播,多播常用以太网MAC帧格式两种标准——DIX Ethernet V2标准IEEE的标准左图数字的规定无效的帧——帧长度不是整数字节用收到的帧检验序列FCS查出有差错收到数据字段长度不在46到1500字节之间在物理层扩展局域网——主机使用光纤和一对光纤调制解调器连接到集线器用集线器扩展局域网的优点——使计算机能够跨碰撞域通信扩大了局域网覆盖的地理范围缺点——碰撞域增大了,吞吐量并未提高不同数据率的碰撞域无法互联网桥——在数据链路层扩展以太网;网桥依靠转发表来转发帧;网桥的好处——过滤通信量,增大吞吐量提高可靠性扩大物理范围可以连接不同物理层、不同MAC子层、不同数据率的局域网网桥的缺点——存储转发增加了时延MAC子层没有流量控制功能只适合用户不太多和通信量不太大的局域网网桥和集线器的不同——网桥是按存储转发方式工作的,一定是先把整个帧收下来子啊处理但集线器或转发器是逐比特转发;网桥丢弃CRC检验有差错以及无效的帧网桥在转发帧前必须执行CSMA/CD算法集线器在转发帧时,不对传输媒体进行检测、透明网桥是一种即插即用设备透明网桥——自学习和转发帧在网桥的转发表中记录地址、接口和时间生成树算法——为了避免转发帧在网络上不断的兜圈子源路由网桥——源路由网桥在发送帧时将详细的路由信息放在帧首部该网桥对主机是不透明的以太网交换机——实际上就是一个多接口网桥,工作在链路层每个接口都直接与主机相连,一般工作在全双工方式虚拟局域网VLAN——是一些由局域网网段构成的与物理位置无关的逻辑组它只是局域网给用户提供的一种服务,不是一种新型的局域网VLAN的优点——限制了接收广播信息的工作站数使网络不会因传播过多的广播信息而引起性能恶化虚拟局域网使用的以太网MAC帧格式最大帧长由1518变为1522字节:高速以太网——速率超过100Mb/s的以太网快速以太网——100BAST-T争用期是μs,帧最小间隔是μs,最短仍是64字节吉比特以太网标准的特点:允许在1Gb/s下全双工和半双工两种方式工作;在半双工方式下使用CSMA/CD协议;使用率协议规定的帧格式;与10BAST-T和100BASET-T技术向后兼容;吉比特以太网在半双工方式小采用“载波延伸”和发“分组突发”的方法,在全双工下不用;10吉比特以太网——与10Mb/s以太网帧格式完全相同,保留了规定的最大小帧长,只在全双工方式下工作,因此不存在争用问题,也使用CSMA/CD协议;以太网是——可扩展的、灵活的、易于安装、稳健性好补充PPP帧格式:网络层采用分组交换方式传输数据分组交换有两种形式——数据报、虚电路因特网的设计思路——网络层向上只提供灵活的、无连接的、尽最大努力交付的数据报服务传输的可靠性不是由网络而是由端系统完成的网络互连的层次及设备——物理层:使用中继站如HUB在不同电缆段之间复制位信号链路层:使用网桥或交换机在局域网之间存储转发数据帧网络层:使用路由器在不同网络间存储转发分组传输层及以上:使用协议转换器网关提供更高层次的接口虚拟互连网络IP网——逻辑互连网络互联网可以由很多异构网络组成主机协议五层,路由协议只有下三层网际协议IP——TCP/IP体系中两个最主要的协议之一解决因特网互连问题与IP协议配套使用的协议——地址解析协议ARP网际控制报文协议ICMP网际组管理协议IGMPIP地址——给因特网上的每个主机或路由器的每一个接口分配一个全网唯一的32bit的标识符;由因特网名字和数字分配机构ICANN进行分配采用点分十进制法表示IP地址的编址方法——分类的IP地址、子网的划分、无分类编址构成超网IP地址的组成——网络号:标志主机所连接到的网络整个因特网范围内唯一主机号:标志该主机或路友器在网络号指明的网络范围内唯一IP地址分级的好处——方便IP地址的管理、省路由空间并提高路由表查找速度IP 地址与硬件地址作用层次 IP地址与硬件地址理解ARP协议的用途——从网络层使用的IP地址解析出数据链路层使用的物理地址ARP高速缓存——含有最近使用过的IP地址和物理地址的映射列表本局域网上主机,路由APR请求和答应方都把对方的地址映射存储在APR高速缓存中ARP运行过程——当主机A向本局域网上主机B发送IP数据报时,没有在ARP高速缓存中找到主机B的IP项目,主机A就自动运行ARP(1)ARP进程在本局域网上广播一个ARP请求分组(2)该局域网上所有主机运行的APR进程都收到这个ARP请求分组(3)主机B的IP地址与ARP请求分组要查询的IP地址一致,就收下这个ARP请求分组,并向A发送ARP响应分组,其中写入自己的硬件地址, 并在自己的ARP高速缓存中写入主机A的IP地址到硬件地址的映射;(4)主机A收到B的ARP响应分组,就在自己的ARP高速缓存中写入主机B的IP地址到硬件地址的映射;生存时间——ARP把保存在高速缓存中的映射地址项目都设置生存时间凡超过这个生存时间的项目就从高速缓存中删除掉注意——ARP是解决同一个局域网上的主机或路由器IP地址和硬件地址映射问题的不同局域网则通过中间路由器不断重复这个过程从IP地址到硬件地址的解析是自动进行的,主机用户不知道这一过程IP数据报格式:IP首部检验:早期IP地址设计不合理——IP地址空间利用率有时很低给每个物理网络分配一个网络号使路由表变大网络性能变差两级IP地址不够灵活划分子网的原因——有效利用地址空间;便于管理;隔离广播和通信,减少网络阻塞;出于安全方面的考虑;划分子网的方法——将IP地址的主机号部分划分为两个部分,一部分用来标识子网,一部分仍作为主机号;IP地址结构由两级变为三级;划分子网增加了灵活性,却减少了能连接在网络上的主机数;不同的子网掩码可能得出相同的网络地址,但是不同的掩码效果是不同的;划分子网的缺点——浪费了一些IP地址;使路由表项目增长无分类编址CIDR使用二叉线索查找路由表网络控制报文协议ICMPICMP差错报告文:终点不可达、源点抑制、时间超过、参数问题、改变路由重定向不应发送ICMP差错报告文的情况:ICMP差错报告文、后续分片、多播数据报、特殊地址ICMP询问报告文:回送请求和回答、时间戳请求和回答路由协议——内部网关协议IGP如RIP和OSPF协议等外部网关协议EGP如BGP路由信息协议RIP——分布式的基于距离向量的路由选择协议,是因特网标准协议,简单最多包含15个路由器距离16,只适合小型互联网RIP协议特点——仅和相邻路由器交换信息;交换的是路由表即所有信息;按固定时间间隔交换路由信息;使用用户层数据报UDP传送路由表更新原则——找出到每个目的网络的最短距离距离向量算法——将原来没有的目的网络加入,下一跳改为R1,距离加1R1给R2 将原表中所有下一跳是R1的都按照收到的表更新,距离加1若目的网络相同,但但下一跳不是R1,比较它们的距离,选择短的留下RIP优缺点——RIP限制了网络规模;坏消息传播得慢;随着网络规模扩大,开销也增加;实现简单,开销较小;开放最短路径优先OSPF——使用分布式的链路状态协议用IP数据报传送OSPF特点——向本自治系统所有路由器发送信息范洪法发送的是与相邻所有路由器的链路状态部分信息:相邻的路由器及其度量只有当链路状态改变时才向所有路由器用范宏法发送此信息OSPF的五种分组类型—问候、数据库描述、链路状态请求、链路状态更新、链路状态确认OSPF协议对多点接入的局域网采用了制定指定的路由器的方法边界网关协议BGP——采用路径向量路由选择协议使用BGP的原因——因特网规模太大,使得AS之间的路由选择非常困难AS之间的路由选择必须考虑有关策略BGP-4的四种报文——OPEN、UPDATE、KEEPALIVE、NOTIFICATION路由器——是一种具有多个输入端口和多个输出端口的专用计算机其任务是转发分组路由器的两大部分——路由选择部分和分组转发部分分组转发的三个部分——交换结构、一组输入端口、一组输出端口交换结构的作用——根据转发表对分组进行处理将某个输入端口进入的分组从一个合适的输出端口转发出去交换结构常用的交换方法——通过存储器、通过总线、通过互连网络IP多播—网际组管理协议IGMP:使用IP数据报传递报文,是网际协议IP的一个组成部分IP多播—多播路由选择协议:找出以源主机为根节点的多播转发树多播路由选择协议在转发多播数据报的方法:泛洪与剪除、隧道技术、基于核心发现技术第五章:运输层端到端通信——应用进程间的通信运输层重要功能——复用和分用网络层为主机之间提供逻辑通信,运输层为应用进程之间提供端到端的逻辑通信运输层主要功能——为进程间提供端到端的逻辑通信对收到的报文进行差错检验需要两种运输协议:面向连接的TCP、无连接的UDP端口号的分类——服务器端使用的端口号:熟知端口号和登记端口号客户端使用端口号UDP在IP数据报服务之上增加的功能:复用分用功能和差错检测功能UDP特点——无连接、尽最大努力交付、面向报文、无拥塞控制、首部开销小支持一对一、一对多、多对一和多对多交互通信UDP——用户数据报协议TCP——传输控制协议TCP主要特点——TCP是面向连接的运输层协议每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的TCP提供可靠交付服务TCP提供全双工通信TCP是面向字节流的TCP连接的端点——套接字socketIP地址:端口号停止等待协议:自动重传请求ARQ优点简单、缺点信道利用率低连续ARQ协议:优点容易实现;缺点不能向发送方反映出接收方已经正确收到的所有分组信息UDP检验和计算:伪首部+首部+数据部分TCP首部——序号:本报文段所发送的数据的第一个字节的序号确认号:期望收到对方下一个报文的第一个数据字节序号确认ACK:ACK=1确认号字段有效,ACK=0无效同步SYN:SYN=1表示这是一个连接请求或连接接受报文窗口:允许对方发送的数据量以字节为单位终止FIN:用来释放一个连接,FIN=1表示此报文发送方数据发送完毕,要求释放运输连接检验和:伪首部+首部+数据选择确认SACK:指明一个边界要4个字节,最多指明4个字节块,另还需2字节RTT:报文段往返时间RTTs:加权平均往返时间新RRTs=1-a旧RTTs+a新RTT样本RTO:超时重传时间RTTD:RTT的偏差的加权平均值RTO=RTTs+4RTTD RTTD=1-b旧RTTD+b|RTTs-新RTT样本|流量控制——让发送方的发送速率不要太快,让接收方来得及接收利用滑动窗口实现流量控制拥塞——对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏拥塞控制与流量控制的区别:拥塞控制——防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载所前提要做的都有一个前提,就是网络能够承受现在所有的网络负荷是一个全局性过程流量控制——往往指点对点通信量控制,是个端到端的问题所要做的就是抑制发送端发送数据的速率,以便接收端来得及接收提供的负载——单位时间内输入给网络的分组数目输入负载、网络负载吞吐量——单位时间内网络输出的分组数目拥塞控制大方面分为两种方法:开环控制、闭环控制拥塞控制的具体四种算法:慢开始、拥塞避免、快重传、快恢复慢开始算法——由小到大逐渐增大发送窗口每经过一个往返时间RTT,发送方拥塞窗口cwnd就加倍慢开始门限——cwnd<ssthrest时,使用慢开始算法cwnd=ssthrest时,既可使用慢开始算法,也可用拥塞避免算法cwnd>ssthrest时,使用拥塞避免算法拥塞避免算法——没经过一个往返时间RTT,cwnd就加1无哪种阶段,只要发送方判断网络出现拥塞没有按时收到确认,就把慢开始门限ssthrest设置为出现拥塞时的发送方窗口值得一半,拥塞窗口cwnd重新设置为1,执行慢开始算法;AIMD算法——加法增大乘法减小快重传——接收方每收到一个失序的报文段后就立即发出重复确认发送方一连收到三个重复确认就应当立即重传对方尚未收到的报文段快恢复——当发送方连续收到三个重复确认时,执行乘法减小算法,把慢开始门限减半发送方不执行慢开始算法,而是把拥塞窗口cwnd设置为慢开始门限减半后的数值,进行拥塞避免算法;随机早期检验RED——为了避免发生网络中的全局同步现象,路由器采用的措施TCP运输连接三个阶段——连接建立、数据传送、连接释放TCP连接建立方式——客户服务器方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法描述如下:自学习:当网桥收到一转发帧时,先查找自己的转发表中是否有源地址,若没有则添加此项。
转发帧:查找自己转发表中是否有目的地址,若没有则将此帧从其他端口转发出去。
若有,则将转发表中记录的目的地址端口和此帧进入网桥时通过的端口进行比较,若相等则丢弃此帧(因为目的主机已经收到此帧了),若不相等,则将此帧通过转发表记录的目的地址端口转发出去。
源码如下:(此代码在突出算法思想的情况下设计的尽量简单,有的情况没有考虑,或者简单处理了。
) 12#include<iostream>3using namespace std;4#define Max_Data 100//转发表数据项数量5struct Data//数据项结构6{7char Add;//地址8int port;//端口9};10struct SendTable//转发表结构11{12Data data[Max_Data];13int write;//写指针,指向下一个要写的位置14}sendTable;15void initSendTable()16{17for(int i=0;i<Max_Data;i++)18{19sendTable.data[i].Add='0';20sendTable.data[i].port=0;21}22sendTable.write=0;23}24int index;//记录匹配项25bool Find(Data data)//查找转发表,若找到返回ture,找不到返回false26{27for(int i=0;i<Max_Data;i++)28{29if(sendTable.data[i].Add==data.Add)30{31index=i;32return true;33}34}35return false;36}37void AddSendTable(Data data)//向转发表当前指针处添加数据项,若转发表满则循环覆盖38{39sendTable.data[sendTable.write].Add=data.Add;40sendTable.data[sendTable.write].port=data.port;41sendTable.write=(sendTable.write+1)%Max_Data;42}43void OutSendTable()44{45cout<<"********SendTable********"<<"\\n";46for(int i=0;i<sendTable.write;i++)//注意:要是写满在轮转回来的话这种方法就不行了。
47{48cout<<sendTable.data[i].Add<<" "<<sendTable.data[i].port<<"\\n";49}50cout<<"*************************"<<"\\n";51}52void main()53{54Data sourceData,destinationData;55char source,destination;56int port;57initSendTable();//初始化转发表58while(true)59{60cout<<"Input Source Address and Prot:\\n";61cin>>source>>port;62sourceData.Add=source;63sourceData.port=port;64cout<<"Input destination Address:\\n";65cin>>destination;66destinationData.Add=destination;67destinationData.port=0;//由于目的地址不需要输入端口号,此处将其置068if(!Find(sourceData))//查找转发表,若找不到则将源地址添加如转发表69AddSendTable(sourceData);70if(!Find(destinationData))//查找转发表,若找不到则将此帧从所有其他端口发送给别的网桥71cout<<"Send this Data to other bridge through other port\\n";72else73{74if(sendTable.data[index].port==sourceData.port)//若收到此帧的端口和目的地址再转发表存储的端口相同,说明源地址和目的地址处在同一网段内,目的主机已经收到此帧,须将其丢弃75cout<<"This Data already received,so give it up.\\n";76else//若端口不同,则通过查找到的端口将此帧发出77cout<<"Send this Data through port "<<sendTable.data[index].port<<"\\n";78}79OutSendTable();//打印转发表80}81}1#include<stdio.h>2void main()3{4char arr1[3]={'A','B','C'};5char arr2[2]={'D','E'};6char arr3[3]={'F','G','H'};7int a[][2]={0,0,0,0,0,0,0,0,0,0,0,0};8int b[][2]={0,0,0,0,0,0,0,0,0,0,0,0};9int i,j,m,n,k1 = 0,k2 = 0,t;10char s,d,k;1112while(1)13 {14 printf("请输入源地址和目的地址:");15 scanf("%c%c",&s,&d);16 printf("\n");17for(i=0;i<3;i++){18if(arr1[i]==s)19 m=1;20 }21for(i=0;i<2;i++){22if(arr2[i]==s)23 m=2;24 }25for(i=0;i<3;i++){26if(arr3[i]==s)27 m=3;28 }29switch(m)30 {31case 1:32 {33for(i=0;i<k1;i++){34if(a[i][0]==s)35 {break;}36 }37if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址3839for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址40 {41if(a[i][0]==d)42 {43 n=a[i][1]; break;44 }45 }4647if(i==k1) printf("网桥1中没有目的记录%c,向右转发\n",d);//不含有,转发48else49 {50if(m==n){51 printf("网桥1丢弃\n");t=1;52 }//含有且在同在网段丢弃53else54 printf("不在同一网段,网桥1向右转发\n");//含有不在同一网段转发55 }5657if(t!=1) //不在同一网段时58 {59for(i=0;i<k1;i++)60if(b[i][0]==s) {break;}61if(i==k1) {b[k2][0]=s;b[k2][1]=m;k2++;}//没有记录,在网桥数组中插入源地址62for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址63 {if(b[i][0]==d) {n=b[i][1]; break;}}64if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发65else66 {67if(m==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃68else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发69 }70 }71break;72 }73case 2:74 {75//向左转发76for(i=0;i<k1;i++)77if(a[i][0]==s) {break;}78if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址7980for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址81 {if(a[i][0]==d) {n=a[i][1]; break;}}8283if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发84else85 {86if(m==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃87else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发88 }89//向右转发90for(i=0;i<k2;i++)91if(b[i][0]==s) {break;}92if(i==k2) {b[k2][0]=s;b[k2][1]=m-1;k2++;}//没有记录,在网桥数组中插入源地址9394for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址95 {if(b[i][0]==d) {n=b[i][1]; break;}}96if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发97else98 {99if(1==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃100else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发101 }102break;103 }104case 3:105 {106for(i=0;i<k2;i++)107if(b[i][0]==s) {break;}108if(i==k2) {b[k2][0]=s;b[k2][1]=m-1;k2++;}//没有记录,在网桥数组中插入源地址109for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址110 {if(b[i][0]==d) {n=b[i][1]; break;}}111if(i==k2) printf("网桥2中没有目的记录,向左转发\n");//不含有,转发112else113 {114if(2==n) {printf("网桥2丢弃\n");t=1;}//含有且在同在网段丢弃115else printf("不在同一网段,网桥2向左转发\n");//含有不在同一网段转发116 }117118if(t!=1)//不在同一网段时119 {120121for(i=0;i<k1;i++)122if(a[i][0]==s) {break;}123if(i==k1) {a[k1][0]=s;a[k1][1]=m-1;k1++;}//木有记录,在网桥数组中插入源地址124for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址125 {if(a[i][0]==d) {n=a[i][1]; break;}}126if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发127else128 {129if(2==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃130else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发131 }132 }133break;134135 }136default: ;137 }138139 putchar('\n');140 printf("网桥1\n");141 printf("--------\n");142for(i=0;i<k1;i++)143 {printf(" %c ",a[i][0]);144 printf("%d ",a[i][1]);145 putchar('\n');146 }147 printf("--------\n");148 printf("网桥2\n");149 printf("--------\n");150for(i=0;i<k2;i++)151 {printf(" %c ",b[i][0]);152 printf("%d ",b[i][1]);153 putchar('\n');154 }155 printf("-------\n");156 scanf("%c",&k);157 }158}。