linux - linux会丢弃不在同一个子网中的多播数据包吗?
问题描述
想通过VXLAN组播搭建overlay网络,实现虚拟机之间的通信,但是发现组播包只能在同一个子网上传输。为了允许不在同一子网上的主机上的虚拟机进行通信,我正在考虑“捕获和转发数据包”是否可行。即在network1的hostA上抓取一个目的地址为239.1.1.1、端口为4789的UDP包,发给network2上的hostB,让hostB发送组播包。然后发现network2上的hosts都可以用wireshark抓到这个包,但是没有host对应。我想知道Linux是否有一种机制可以丢弃假的多播数据包?如果是这种情况,应该如何防止这种机制?
解决方案
未经处理,多播本质上是广播。对于 IPv4 多播,可以使用 IGMP 减轻广播效果。在具有半智能交换机的交换网络上,可能存在 IGMP 侦听功能以进一步帮助实现这一点。如果存在这种情况,终端设备必须通过为给定组发送 IGMP 加入来订阅多播组,以“取消过滤”向自身发送的流量。子网之间的路由多播可以通过 PIM 或 DVRMP 实现,甚至静态多播路由守护进程来完成。
此过滤的唯一例外是 224.0.0.x 范围,它保留用于链路本地通信,通常是 IETF 协议。绝不能以任何方式过滤到这些组的流量。
因此,为了防止过滤,终端设备要么加入组(推荐!),要么将流量发送到保留范围内的组,例如在 224.0.0.1 上的所有主机组。(这很丑陋,您可能会在 LAN 中的设备上触发丑陋的错误,但它确实有效。)
推荐阅读
- c# - 通过使用反射的循环向 IServiceCollection 添加多个服务
- filter - 角度数组过滤器不适用于字符串列表
- c# - 通过从响应中删除数据类型将 API 响应转换为 C# 中的类对象
- python - Python ctypes MessageBox 中的自定义按钮
- reactjs - 为什么带有array.sort的reducer不会触发重新渲染?
- search - 如何从我的自定义搜索对话框触发 codemirror 搜索
- pandas - Excel二进制日期字段转换为numpy int64
- java - 提高 Springboot 中同步 SOAP API 的性能
- swift - 如何在注释下添加标题?
- python - TypeError:无法对切片索引
使用这些索引器 [2]