首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组播中的环回

组播中的环回
EN

Stack Overflow用户
提问于 2015-10-14 17:12:34
回答 2查看 11.6K关注 0票数 6

此问题是关于在同一主机内发送和接收组播,同时将其发送到其他主机。

即使经过几个小时的谷歌搜索,我也无法理清多播数据报是如何在同一主机内路由的。

下面是问题的详细描述:

Linux机器"A“通过电缆连接到交换机/路由器(让我们将交换机/路由器称为"R")。

在linux box A中,我有一个进程(A0),它将UDP包发送到多播地址"224.0.0.0",端口5000。

同样,在同一个机器A中,我有两个进程(A1和A2),这两个进程都连接到224.0.0.0端口5000并使用UDP数据包。

现在,A盒中的内核如何管理路由?

因此,A0发送一个由A1和A2使用的数据报。这样的数据报做往返A --> R --> A吗?

。。还是"A“中的内核路由足够智能,可以避免这种不必要的往返?(即数据报由A0发送,并由A1和A2立即使用,从不离开A)。

当然,通过创建和执行用于组播的环回设备,可以确保组播数据报永远不会离开A:

代码语言:javascript
运行
复制
sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo

但是现在,如果我想在另一个linux机器上同时使用UDP数据报,比如"B",它们就不可能到达那里。

因此,理想情况下,(1)在A中使用的数据报不应该离开A(即没有往返A --> R --> A),而(2)在B中使用的数据报应该以A --> R --> B的形式正常运行。我希望同时实现这两件事。

有什么方法可以实现这一点吗,例如,使用"route“命令?

套接字is进程A1和A2设置了以下标志:

代码语言:javascript
运行
复制
SO_REUSEADDR
SO_REUSEPORT

虽然我已经检查到进程A0 (发送多播数据报的进程)具有以下标志on:

代码语言:javascript
运行
复制
IP_MULTICAST_LOOP
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-22 07:02:27

返回到本地进程(本地套接字)的循环应该可以工作,而不需要向lo添加多播路由。只需确保设置了到某个外部接口的有用路由即可。数据包仍将在内部路由。(Linux在幕后执行大量路由。)

你需要IP_MULTICAST_LOOP,这看起来不错。

您是否在所有进程中都正确地加入了组播组?IP_ADD_MEMBERSHIP?没有这一点,你会得到各种虚假的行为。

您可以查看本地路由表,了解Linux在本地对数据包执行的操作。这通常不是微不足道的:

sudo ip route show table local

您还可以查看当前的组播组成员身份:

netstat -g

在您的例子中,输出和ref计数有意义吗?

票数 3
EN

Stack Overflow用户

发布于 2019-01-08 21:42:31

Firs配置您的网络适配器:

代码语言:javascript
运行
复制
ifconfig lo 127.0.0.1 netmask 224.0.0.0 up

然后遵循以下代码: /send/

代码语言:javascript
运行
复制
gst-launch-1.0 -v imxv4l2videosrc device=/dev/video0 ! imxvpuenc_h264 bitrate=10000 ! rtph264pay ! udpsink host=224.0.0.0 port=5000 auto-multicast=true multicast-iface=lo force-ipv4=true sync=false &

/接收/

代码语言:javascript
运行
复制
gst-launch-1.0 udpsrc multicast-group=224.0.0.0 port=5000 auto-multicast=true multicast-iface=lo ! application/x-rtp ! rtph264depay ! h264parse ! imxvpudec ! imxipuvideosink framebuffer=/dev/fb0 sync=false &
gst-launch-1.0 udpsrc multicast-group=224.0.0.0 port=5000 auto-multicast=true multicast-iface=lo ! application/x-rtp ! rtph264depay ! h264parse ! imxvpudec ! imxipuvideosink framebuffer=/dev/fb2 sync=false &
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33121208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档