odl-l2switch是否存在数据包广播行为?基于Mininet胖树拓扑的问询
关于ODL L2Switch转发行为的解答
嗨,我来帮你理清这个问题~你观察到的现象其实是ODL L2Switch在MAC地址学习阶段的正常行为,下面详细解释:
1. 先明确流表项的真实动作
你贴出的流表项里actions=CONTROLLER:65535,这个动作是把数据包上传到OpenDaylight控制器,而不是直接在交换机本地广播到所有端口。但控制器收到数据包后,会执行泛洪操作,这才是你看到“转发至所有其他端口”的原因。
2. MAC地址学习的工作流程
ODL L2Switch核心依赖MAC地址学习来实现精准转发,当两台主机第一次执行ping操作时:
- 发起ping的主机发送的ARP请求(或ICMP包)到达边缘交换机,此时交换机的MAC地址表里还没有目标主机的MAC与端口对应关系,所以会触发数据包上传到控制器。
- 控制器收到数据包后,首先记录下源MAC地址对应的交换机端口(完成学习),然后会把这个数据包泛洪到同一广播域内的所有其他端口——这样才能确保目标主机能收到请求,完成第一次通信。
- 当目标主机回复时,交换机同样会把数据包上传到控制器,控制器再次学习目标MAC的端口,之后就会生成精确匹配源MAC、目标MAC的流表项,后续流量就会直接通过特定端口转发,不再泛洪。
3. 你看到的LLDP流表项是正常的
你提到的priority=100,dl_type=0x88cc这条流表,0x88cc是LLDP(链路层发现协议)的以太网类型,L2Switch依赖LLDP来进行拓扑发现,所以这类数据包会被固定转发到控制器,这属于正常的拓扑维护行为,和ping的转发逻辑无关。
4. 胖树拓扑的影响
胖树拓扑包含多级交换机(边缘、汇聚、核心),L2Switch默认会把整个拓扑当作一个大的广播域,所以在MAC学习未完成时,控制器的泛洪范围会覆盖整个广播域内的所有端口,这也会让你觉得是在“广播数据包”。
你可以等ping稳定几轮后,再查看边缘交换机的流表,应该能看到优先级更高、匹配具体MAC地址的流表项,此时流量就不会再泛洪啦。
内容的提问来源于stack exchange,提问作者Haitham
相关产品推荐
相关产品推荐

