linux-收到不需要的多播流量的应用程序
作者:互联网
我有以下情况;主机HostRec:
1)主机的NIC bond0已加入多播组multicast1和multicast2 –因为应用程序已请求这样做.
2)我在同一主机HostRec上启动一个多播侦听应用程序,该主机侦听多播3和UDP端口3上的流量.
3)我在另一个主机HostSend上启动多播发送应用程序.
此时,我有以下3种情况:
a)如果步骤3的发送应用程序正在多播地址多播3和udp端口3上发布,则消息已由上述步骤2中启动的侦听应用程序正确接收.这是预期的行为.
b)如果多播发送应用程序在多播2和端口3上发布消息,则这些消息仍由在步骤2开始的侦听应用程序接收.如果多播发送应用程序在多播1和端口3上发布消息,则行为相同.此行为是错误的.
c)如果发送应用程序(步骤3)开始在多播地址多播4和udp端口3上发布(HostRec上的NIC bond0尚未加入该多播组),则在步骤2启动的侦听应用程序无法正确接收消息.这又是预期的行为.
您能否建议主机的多播内核配置中是否有任何问题?
优名
Linux HostRec 2.6.18-164.2.1.el5#1 SMP 9月21日星期一04:37:42 EDT 2009 x86_64 x86_64 x86_64 GNU / Linux
谢谢,
索马里奥
解决方法:
尽管起初看起来确实有些奇怪,但这是预期的行为.尽管您认为自己绑定到多播组/端口,但实际上是:
>绑定到接口上的UDP端口.
>将此接口预订到给定的多播组.
这两个动作是非常独立的.第一个结果是您的进程将接收所有发往端口/接口的UDP数据包(无论是否为多播).第二个结果是确保寻址到给定多播地址的数据包(由网络路由器)发送到您的接口.
大多数人不希望这样做,实际上,他们只想接收单个多播组的数据,而不想担心网络上还会发生什么.实现此目的的最佳方法是确保一个端口仅用于一个多播组.一种常见的做法是将多播组的最后一个八位位组用作端口的最低有效八位位组.例如224.0.0.22/端口19022和224.0.0.150/19150.这样,您将永远不会得到错误的数据(只要没有人将UDP单播数据发送到那些端口).
标签:kernel,linux,multicast 来源: https://codeday.me/bug/20191101/1980853.html