组播中的环回

2023-12-20

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

即使经过几个小时的谷歌搜索,我仍然无法弄清楚多播数据报是如何在同一主机内路由的......!

下面是问题的详细描述:

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

在Linux盒子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:

sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo

但现在,如果我想在另一个 Linux 机器(例如“B”)中同时使用 UDP 数据报,它们就无法到达那里。

因此,理想情况下,(1) A 中消耗的数据报永远不会离开 A(即没有往返 A --> R --> A),而 (2) B 中消耗的数据报应该正常作为 A --> R -- > B. 我想同时实现这两件事。

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

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

SO_REUSEADDR
SO_REUSEPORT

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

IP_MULTICAST_LOOP

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

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

您是否在所有进程中正确加入了多播组? IP_ADD_MEMBERSHIP?如果没有这个,你就会得到各种虚假的行为。

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

sudo ip route show table local

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

netstat -g

输出和引用计数对您的情况有意义吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组播中的环回 的相关文章

  • 如何在socket.io Nodejs服务器上列出房间

    在问题取得进展后如何创建socket io多播组 https stackoverflow com questions 6616922 how to create socket io multicast groups 6624604 6624
  • 立即检测客户端与服务器套接字的断开连接

    如何检测客户端已与服务器断开连接 我的代码中有以下代码AcceptCallBack method static Socket handler null public static void AcceptCallback IAsyncResu
  • Listen() 忽略积压值

    我认为 backlog决定了的大小连接队列 届时任何大于此大小的额外请求都将被丢弃 这个说法对吗 现在我有非常简单的程序server c socket bind listen 5 while 1 accept read write slee
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • Python:监听两个端口

    import socket backlog 1 Number of queues sk 1 socket socket socket AF INET socket SOCK STREAM sk 2 socket socket socket
  • 以 C 语言编程设置 MTU

    客户端请求 MTU 限制为 1492 有没有办法在源代码 C 程序 中做到这一点 一般情况下还有其他方法吗 如果配置 为什么有人需要将 MTU 修改到一定的限制 有什么好处 而最 重要提示 更改 MTU 是否存在破解代码的风险 使用C编程方
  • 用 C 语言进行非阻塞 udp 套接字编程:我能得到什么?

    我在理解从非阻塞 UDP 套接字返回什么recv recvfrom 时遇到问题 与 TCP 相比更具体一点 如果我错了 请纠正我 阻塞套接字 TCP 或 UDP 在缓冲区中有一些数据之前不会从 recv 返回 这可以是一定数量的字节 TCP
  • socketcan如何处理仲裁?

    我非常了解 CAN 协议的工作原理 当两个节点尝试同时使用网络时 较低 id 的 CAN 帧会获得优先级 而另一个节点会检测到这一点并停止 当使用 socketcan 时 这似乎被抽象化了 我们只需像任何文件描述符一样写入和读取 我可能误解
  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • Python - 将整数或字符串发送到 Spark-Streaming

    我可以通过 CSV 文件发送我的数据 首先 将我的随机数写入CSV文件然后发送 但是可以直接发送吗 我的套接字代码 import socket host localhost port 8080 s socket socket socket
  • 无法连接到非阻塞套接字

    这让我抓狂 我必须在 php 5 3 中创建一个非常简单的非阻塞套接字脚本 其中客户端连接到服务器 两者都使用非阻塞套接字 我试过了phpsocket守护进程 http code google com p phpsocketdaemon 和
  • C++ boost asio超时用于阻止连接

    我有一个 C boost 客户端 它执行阻塞连接并在收到响应后处理消息 我面临一个奇怪的问题 tcp resolver query query tcp v6 this gt host port tcp resolver query v4 m
  • Node.js Socket.IO 无法完全工作

    我运行一个侦听端口 5000 的独立服务器 当我通过 Netcat 或 Telnet 连接到它时 该应用程序不会在终端上打印任何内容 但在 Netcat Telnet 应用程序屏幕上 它显示连接已建立 var io require sock
  • 从 Docker 容器发送多播数据包(到多播组)

    我有一个通过 UDP 多播发送消息的应用程序 我一直试图将其放在 docker 下 我在尝试从 Docker 容器发送多播数据包时遇到了很大的阻力 我已经能够通过 net host运行 docker 容器的选项 然而 我想坚持使用桥接配置
  • 当我退出应用程序时,如何删除 UNIX 域套接字文件?

    我有一个服务器应用程序 它在特定路径中创建一个 UNIX 域套接字 其名称和bind 到它 仅当我有意从应用程序代码中关闭 停止应用程序时 我才需要删除套接字 否则需要打开 我该怎么做呢 Thanks Edit 考虑一下我从终端内部启动并运
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • RTSP 设置后接收 RTP 数据包

    我正在尝试使用 Python 从 IP 摄像机流式传输 RTP 数据包 我能够使用 RTSP 协议发送描述 设置和播放命令 但是 我无法开始使用 RTP 传输实际视频流 这是代码 import socket def printrec rec
  • UDP SocketException - 通常只允许每个套接字地址使用一次

    尽管这里有很多非常相似的问题 但提供的答案都没有帮助我 这让我很难过 我有一个非常大的管理系统 我的任务是为其编写一些 UDP 数据包发送 接收 我已经编写了一个原型 一切都很好 所以我开始将我的代码合并到所述系统中 然而 我现在弹出了一个

随机推荐

  • 在 Swift 3 上运行后台线程

    我有一个这样的函数 fileprivate func setupImageViewWithURL url URL var image UIImage nil do try image UIImage data Data contentsOf
  • 为什么我不能对通用 IEnumerable 对象调用 ToArray? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 public static T ToArray
  • 如何在部分视图中获取与父操作关联的 RouteData?

    在 PartialView 的操作中 我想知道与父操作关联的 RouteData 该部分视图是我的母版页模板的一部分 我希望它知道作为页面渲染的一部分调用的控制器和操作 在我的 PartialView 操作中 我检查RouteData Va
  • Oracle 11g - 插入多行的最有效方法

    我有一个应用程序在 WAN 上运行缓慢 我们认为原因是对表进行多次插入 我目前正在研究同时插入多行的更有效方法 我找到了这个方法 INSERT ALL INTO MULTI INSERT VAL 1 VAL 2 VALUES 100 20
  • 从 Windows 服务执行 Process.Start 时访问被拒绝

    我正在尝试以另一个用户的身份从服务运行一个进程 Process Start applicationPath params account SecureStringPassword 服务正在 本地系统 帐户下运行 The account参数是
  • SharedArrayBuffer 未定义

    我正在使用一个名为react canvas 从几天前开始 一直输出一条错误消息 p 标签应在网络浏览器 包括 Chrome 中显示画布的区域中 我在用nextjs 我附上package json below SharedArrayBuffe
  • 用于 Android 的 Google Place API 来查找城市

    我看过教程 tutorial https developers google com academy apis maps places autocomplete android 在 android i 中使用自动完成文本视图查找城市 我已经
  • 从requirements.txt安装PyTorch

    火炬文档说使用 pip install torch 1 4 0 cpu torchvision 0 5 0 cpu f https download pytorch org whl torch stable html 安装最新版本的 PyT
  • 流星会话替换?

    在最新的 Meteor 版本 版本 0 5 8 中 Session已从服务器端代码中删除 以前我用过Session储藏客户特定的服务器的变量 该功能的替代品是什么 案例示例 User One打开浏览器 User Two打开浏览器 一个调用服
  • 如何在odoo中弹出成功消息?

    我通过单击按钮发送邀请 在单击按钮并成功发送邀请后 会弹出邀请发送成功的消息 但问题是弹出消息的主标题是Odoo Server Error 那是因为我正在使用 raise osv except osv Success Invitation
  • SCNScene 和 SceneKit 编辑器的子类化

    我有带有相机设置的 SCNScene 子类 我想在所有子类中使用它 let scene01 TheSubclassScene let scene02 TheSubclassScene named art scnassets testScen
  • 点击交换课程

    我有一个包含 6 个项目的列表 这些项目位于全局 div navigationaence 中 现在我可以在单击时添加一个类 但现在它们会加起来 这意味着一旦我的六个项目被单击 它们最终都会成为当前代理类 我希望能够删除向单击的项目添加一个类
  • 在 Typescript 中使用 async/await 时未定义 __awaiter

    我在 Typescript 中有以下代码片段 nsp on connection async function socket await this emitInitialPackage nsp currentLine currentCell
  • 当 url 导致临时重定向 (http 302) 时,什么会被索引?

    我正在努力使我们的 很大程度上基于 AJAX 的 网站对搜索引擎更加友好 我们有一个系统 在设置会话变量以更改主页的行为后 某些网址会重定向到主页 这是使用 Controller Redirect 方法创建 ActionResult 来实现
  • 通过 Gremlin 计算大图中的节点/边数?

    通过 Gremlin 计算大图中的节点 边数的最简单且最有效的方法是什么 我发现最好的方法是使用 V 迭代器 gremlin gt g V gather it size 然而 对于大图来说 这不是一个可行的选择V 的文档 http grem
  • numpy 中的加权协方差矩阵

    我想计算协方差C of n的测量p数量 其中每个单独的数量测量都有自己的权重 也就是我的权重数组W与我的数量数组具有相同的形状Q n by p 当地人np cov 函数仅支持赋予各个测量值的权重 即长度向量n 我可以初始化一个p by p矩
  • EF core、Any 无法翻译,将在本地评估

    我有一个程序可以返回我需要的实体 ID 我决定创建此过程 因为应返回给最终用户的实体由相关实体过滤 但 EF Core 不支持相关实体过滤 然后我想使用这个 id 来获取我需要的实体及其相关实体 我正在使用Any operator In m
  • Cleave.js 电话 CA

    我正在尝试使用格式化电话号码字段Cleave js https nosir github io cleave js 它不起作用 但我似乎不明白为什么 我是这样开始的 import Cleave from cleave js var clea
  • 如何在android中的string.xml中添加多段落的长文本

    当我在之间添加许多段落时
  • 组播中的环回

    这个问题是关于在同一主机内发送和接收多播 同时将其发送到其他主机 即使经过几个小时的谷歌搜索 我仍然无法弄清楚多播数据报是如何在同一主机内路由的 下面是问题的详细描述 Linux 盒子 A 通过电缆连接到交换机 路由器 我们将交换机 路由器