java代码实现网桥 java基于nio网络编程代码

怎样用Java实现网桥自学习算法网桥的自学习算法原理
珞辰
网桥:在数据链路层可以用网桥设备来扩展以太网 。网桥工作在数据链路层,它根据MAC 帧的目的地址对收到的帧进行存储转发和过滤 。当网桥收到一个数据帧时,并不是向所有的接口转发这个数据帧,而是会进行有条件的转发(网桥会丢弃CRC检验有差错的帧以及帧长过短和过长的无效?。┰俑荽酥〉哪康腗AC地址 , 然后查找转发表(网桥会自己维护转发表,转发表中每一条目都记录了到达某个目的MAC地址的数据帧可以从那个接口进行转发)根据转发表中的条目逐步匹配看该从那个接口转发或是否需要丢弃该数据帧 。最简单的网桥只有两个接口(这里所讲的网桥都是两个接口的网桥) 。
使用网桥设备的优点:
1 , 过滤通信量,增大吞吐量(网桥可以隔离碰撞域提高网络的吞吐量)
2,扩大了物理网络的范围(扩展以太网)
3,提供了可靠性(只影响单个网段)
4,可以互连不同的物理层 , 不同MAC子层和不同速率
使用网桥设备的缺点:
1 , 使用CMSA/CD算法增加了时延
2,不能进行流量控制,缓存存储空间可能会发生溢出
3,会产生广播风暴
网桥自学习和转发帧的一般步骤:
1,网桥收到一帧后先进行自学习 。查找转发表中与收到数据帧的源地址有无匹配的项目 。如果没有,就在转发表中增加一个项目(记录数据帧的源地址,进入网桥的接口和时间) 。如果有,则把原来的项目进行更新 。
2,转发帧 。查找转发表中与收到数据帧的目的地址有无相匹配的项目 。如果没有,则通过其他的接口(但进入网桥的接口除外)进行转发 。如果有,则按转发表中给出的接口进行转发 。但应当注意,若转发表中给出的接口就是该帧进入网桥的接口,则应该丢弃这个数据?。ㄒ蛭庵智榭霾恍枰沤凶ⅲ?。
3 , 使用生成树算法,即互连载一起的网桥在进行彼此通信后,就能找出原来的网络拓扑的一个子集 。在这个子集里,整个连通的网络中不存在回路,即在任何两个站点之间只有一条路径 。
for example: 如图所示,6个站点通过透明网桥B1和B2连接到一个扩展的局域网上 。初始时网桥B1和B2的转发表都为空 。假设需要传输的帧序列如下:H2传输给H1;H5传输给H4;H3传输给H5;H1传输给H2;H6传输给H5 。请给出这些帧传输完后网桥B1和网桥B2的转发表 。假设转发表表项的格式为:[ 站点,端口 ] 。
发送的帧B1转发表B1的处理B2转发表B2的处理
H2---H1H2 , 1登记,转发H2,1登记 , 转发
H5---H4H5,2登记 , 转发H5,2登记,转发
H3---H5H3 , 2登记,丢弃H3,1登记,转发
H1---H2H1,1登记,丢弃
H6---H5H6,2登记,丢弃
解释说明:
1,H2主机向H1主机发送帧 。连接在同一个局域网上的主机H1和网桥B1都能收到H2主机发送的数据帧 。网桥B1收到这个数据帧后 , 先按源地址H2查找转发表 。这时因为网桥B1的转发表为空,于是就把地址H2和收到此帧的接口1 写入到转发表中 。这就表示,以后若收到要发给H2的帧,应当从网桥B1的这个接口1 转发出去 。接着再按目的地址H1查找转发表 。转发表中没有H1的地址 , 于是通过除收到此帧的接口1 以外的所有接口转发此帧 。网桥B2 从其接口1 收到这个转发过来的帧 。网桥B2按同样的方式处理收到的帧 。网桥B2的转发表中没有H2的地址 , 因此在网桥B2的转发表中写入地址H2 和接口1。网桥B2的转发表中没有H1的地址,因此网桥B2会通过除接收此帧的接口1 以外的所有接口转发这个帧 。(H1本来就可以直接收到H2发送的数据帧,为什么还要让网桥B1和B2盲目地转发这个帧呢??? 答案是:这两个网桥当时并不知道网络的拓扑结构,因此要通过自学习过程才能逐步弄清所连接的网络拓扑,建立起自己的转发表)

推荐阅读