bcm交换芯片组播泛洪问题处理
泛洪:
泛洪(Flooding)是交换机和网桥使用的一种数据流传递技术,将从某个接口收到的数据流向除该接口之外的所有接口发送出去。
泛洪的过程
交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写 入MAC地址表中。交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。
问题描述:
交换芯片bcm53134上挂ARM1和ARM2两个平台。Port口连接对应上图。
发送端 Arm1通过组播发包,接收端arm1发现丢包情况。
细节请参考udp包箭头指向
Bcm53134端口状态:与arm2连接的是100M ,其他端口都协商为1000M
网络中udp组播包最大32k
通过监控port1 的 TxBroadcastPkts arm2也发了udp组播包。
将发送端arm2接上笔记本抓包发现port1也能收到udp组播包,初步判断是flooding导致的,而且该port1端口协商后为100M的网络带宽,由于udp数据包较大较多超过了带宽,该端口处理异常导致交换芯片内部拥塞。
解决方式一
建立mac映射表,单个mac地址验证:
相关寄存器如下:
组播端口控制寄存器,我们将[11:10] 写入 2‘b10 ,即只比对MPORT_ADD5的地址,frame的mac地址相符则转发到MPORT_ETYPE5所置位的端口。
MULTIPORT_ADDR5的[47:0] 写入组播mac地址0x01005E010101 (224.1.1.1)
MPORTVEC5 [8:0]置1的位为符合mac地址的帧会转发到该端口。
代码如下:
设置单个组播地址,证实有用ulData = 0x0800;BCM53134SpiWrite(byPort, 0x04,0x0e,(unsigned char *)&ulData,2);ullData = 0x01005E010101; BCM53134SpiWrite(byPort, 0x04,0x60,(unsigned char *)&ullData,8);ulData = 0x04;BCM53134SpiWrite(byPort, 0x04,0x68,(unsigned char *)&ulData,2);
上述方式只针对单个组播地址有效。ADDR5寄存器对应的是port5,正是连接arm1的端口。
解决方式二
建立arl 组的方式,这种方式可以容纳多个mac地址
arl写mac控制寄存器。rwctl的0位写0,bit7写1
arla_fwd_entry0的[8:0]写要转发该mac包的端口置1.
ullData = 0x01005E010101; //224-239.1(7bit 0-127).1(8bit 0-255).1(8bit 0-255)for(i = 0; i < 512; i++){ BCM53134SpiWrite(byPort, 0x05,0x10,(unsigned char *)&ullData,8);ullData += 1;}ulData = 0x1c004;BCM53134SpiWrite(byPort, 0x05,0x18,(unsigned char *)&ulData,4);ullData = 0x01005E010101; ulData = 0x80;for(i = 0; i < 512; i++){ BCM53134SpiWrite(byPort, 0x05,0x02,(unsigned char *)&ullData,8);BCM53134SpiWrite(byPort, 0x05,0x00,(unsigned char *)&ulData,2);ullData += 1;}
忘entry0写入了512个组播地址,当查找到对应mac的帧会转发到page0x05 offset 0x18设定的端口。
补充,关于组播地址:
算法:
(224-239,1-128(7bit),0-255(8bit),0-255(8bit))
最笨的方法,也是最安全的方法,就是把IP地址,换成二进制数。再把二进制换成16进制,第1个8位(从左往右看)不用,因为有组播MAC的限制已经规定是0100.5E开头,
第2个8位中的第1位规定为0(从左往右看).所以当不为0时,要改成0来换算。
Example:
源IP 224.1.1.1
换算成二进制 11100000.00000001.00000001.00000001
再换成16进制 01 .01 .01
加上组播MAC头 0100.5E
最后形成: 0100.5E01.01.01
可用的其它31个组播IP地址:
224.129.1.1
225.1.1.1 225.129.1.1
226.1.1.1 226.129.1.1
227.1.1.1 227.129.1.1
228.1.1.1 228.129.1.1
229.1.1.1 229.129.1.1
230.1.1.1 230.129.1.1
231.1.1.1 231.129.1.1
232.1.1.1 232.129.1.1
233.1.1.1 233.129.1.1
234.1.1.1 234.129.1.1
235.1.1.1 235.129.1.1
236.1.1.1 236.129.1.1
237.1.1.1 237.129.1.1
238.1.1.1 238.129.1.1
239.1.1.1 239.129.1.1
加上:224.1.1.1 刚好32个。
源IP 224.132.1.1
换算成二进制 11100000.10000100.00000001.00000001
第24位为0 11100000.00000100.00000001.00000001
再换成16进制 04 .01 .01
加上组播MAC头 0100.5E
最后形成: 0100.5e04.01.01
可用的其它31个组播IP地址:
224.4.1.1
225.4.1.1 225.132.1.1
226.4.1.1 226.132.1.1
227.4.1.1 227.132.1.1
228.4.1.1 228.132.1.1
229.4.1.1 229.132.1.1
230.4.1.1 230.132.1.1
231.4.1.1 231.132.1.1
232.4.1.1 232.132.1.1
233.4.1.1 233.132.1.1
234.4.1.1 234.132.1.1
235.4.1.1 235.132.1.1
236.4.1.1 236.132.1.1
237.4.1.1 237.132.1.1
238.4.1.1 238.132.1.1
239.4.1.1 239.132.1.1
加上224.132.1.1,刚好32个。
bcm交换芯片组播泛洪问题处理相关推荐
- Aruba无线网络广播和组播泛洪控制
问题:两台连接了Aruba的无线网络的计算机,其中一台发送组播泛洪包,另一台无法收到 参考:Optimizing VLAN Broadcast and Multicast Traffic 如图:勾选后 ...
- 广播泛洪_这三种类型的报文,交换机会进行泛洪:广播、组播、未知单播
随着互联网的发展,各种应用层出不穷,日新月异,对网络设备的要求也越来越高,对广大设备厂商也提出更多的要求.不过这些事情都与二层交换机没有关系:) ,因为各种应用的数据到达二层交换机时,都只会变成一个一 ...
- 交换机组播风暴_cisco交换机风暴控制
理解风暴控制 大量的广播, 单播或组播数据包, 当端口收到一个数据包风暴发生时, 转发 这些数据包可能会导致网络变慢或超时. 风暴控制配置交换机作为一个整体, 但 都是基于每个端口的上运作.默认情况下 ...
- 交换机组播风暴_【交换机】交换机如何配置storm-contro风暴控制
功能简介 当内网的突发流量后或流量很大时,交换机会对流量进行控制,降低流量保证内网的数据通信流畅. 但是在无盘环境里,无盘服务器之间的数据传输量很大,所以在无盘环境里建议关闭风暴控制,保证无盘系统的正 ...
- 交换机组播协议-二层组播/三层组播总结
一.组播介绍: 组播技术解决的是以最小的网络开销实现单点发送,多点接收的问题.就实现点对多点数据传输问题,比广播/单播传输更高效,更能节省网络带宽,降低网络负载. 当ip网络中某Rx主机需要接收信息时 ...
- BCM交换芯片之L4分析
1 ContentAware processor 1.1 各厂家的L4功能 交换芯片ACL功能在不同的厂家中有不同的叫法,BCM称为ContentAware processor,Marvell称为Po ...
- 交换机组播风暴_广播风暴的成因以及解决办法有哪些?
广播风暴就是因为以太网中出现了明环或暗环,引起广播包被指数涨速递增,整个网络流量被广播包占据,其他的转发业务不能进行. 以太交换机对广播包的处理,是不管从哪个端口收到广播包,都完整地复制一份转发到其他 ...
- 交换机组播风暴_用思科交换机杜绝局域网广播风暴
网络广播可以为公司的网络带来巨大的流量.当一个设备发出了一个单独 的广播的时间,子网的所有设备甚至虚拟局域网都可以收到广播的内容. 怎么对广播进行管理,以保证网络的安全有效性 ? 一种方法是采用思科提 ...
- 组播基本概念、IGMP、IGMP监听学习笔记
前言 一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作.这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识.组播占了计算机网络的一大部分,特别 ...
最新文章
- DB2load遇到SQL3508N错误
- 一次想不到的Spring事务失效问题跟踪(事务不会滚)
- notepad++ 换行技巧 log换行
- execve系统调用_《操作系统》知识结构
- python变量进阶(可变不可变,局部变量和全局变量)
- HDU - 4547 CD操作(LCA模板)
- 计算机应用考试其一级属于中级,计算机软件水平考试可以直接考中级吗?
- Sublime text 2按Ctrl+`无法调出console的可能问题
- Docker的主要作用
- 只读的泛型集合(IList(Of T))
- linux nvme 驱动 版本,Linux 上的 NVMe
- 动手动脑(Java)
- Android小项目--2048小游戏
- eclipse svn插件安装总失败 每次打开eclipse总提示 subversive svn connectors
- 安卓仿苹果键盘输入法_仿ios输入法
- java贪吃蛇程序v1
- Android 平台 Native 代码的崩溃捕获机制及实现
- latex 参考文献没有显示_LaTeX 中的参考文献
- springboot+英语在线学习系统 毕业设计-附源码211714
- python基础训练—数字