【问题标题】:LAN multicast enabled or not?局域网组播是否启用?
【发布时间】:2013-08-08 15:53:43
【问题描述】:

我正在尝试在 OSX 上用 c 编写代码(如果更容易,也可以使用 Objective-c)来确定当前机器(机器连接到的路由器)上是否启用了多播。为此,我正在尝试以下步骤:

  1. 打开一个端口并通过多播发送数据。
  2. 监听所有活动适配器的响应。
  3. 过滤掉“环回”适配器。
  4. 如果没有回复,多播可能被禁用。

作为网络编程的新手,我不明白如何通过发送随机数据从任何活动适配器获得响应,除非我在正在侦听的机器上安装了软件。是否有特定的多播 IP 保留总是会引起响应,或者有更好的方法来执行此操作?

【问题讨论】:

    标签: objective-c c networking network-programming


    【解决方案1】:

    要确定一台机器是否有 IP 多播地址处于活动状态(我认为您的意思是“启用多播”),请查看路由表并查看是否在 224.0.0 范围内找到一个或多个 IP v4 地址。 0.0 到 239.255.255.255。

    【讨论】:

    • 这个想法是确定机器连接的路由器是否启用了多播。一个想法是打开一个套接字来发送一些数据,并在同一台机器上打开一个套接字来监听同一个多播地址,看看它是否接收到发出的消息。也许有一种方法可以查看可以达到相同结果的路由表?
    • 确定路由器是否在冲突域之间传递多播数据报是一个非常不同的问题。在一般情况下,我不知道如何做到这一点。你可能会问这是一个新问题。我可以告诉你的是,路由器不会在它来自的网段上重复多播数据报;否则其他机器会收到两份数据报。我确定本地 IP 堆栈会处理本地交付。
    【解决方案2】:

    组播由 DHCP 实现,它不是您的本地计算机。 DHCP 分配的地址对应于连接到该 DHCP 服务器的多个客户端。当您制作多播消息时,您将其发送到此 DHCP 服务器,然后该服务器获取数据包,找到映射到该多播地址的客户端,然后将其发送到路由器自动复制的特殊数据包中(因此,如果您有 2组的一部分人连接到 1 个路由器,并且该路由器连接到另一个路由器(称为路由器 2),路由器 2 不会发送两个数据包,它会发送一个,然后路由器 1 将发送两个副本给它的客户端。这样做的目的是加快交付时间并且不发送重复数据)。就客户端而言,客户端不是“设置”为允许多播,而是路由器设置它们,其余部分对客户端是透明的。您必须找出客户端是否连接到多播组的方法是查看 DHCP 服务器是否已创建多播组,然后从映射到多播组的 IP 地址中查找计算机名称。

    通过侦听所有活动的适配器,除了数据包,您不会得到任何东西,这些数据包不会告诉您它是否是多播网络的一部分,因为它们看起来像所有其他数据包(因为路由器会在您看到数据包之前将多播地址更改为您的 IP 地址)。这就是多播的美妙之处。

    【讨论】:

    • IP 多播与 DHCP 正交。
    • 您确定多播使用 DHCP 服务器吗?我在en.wikipedia.org/wiki/IP_multicast 中找不到任何提及 DHCP。还是您在谈论 "Multicast DHCP",这似乎是 Windows 分配和配置多播地址的东西?
    • IP 多播是一种通过网络中的 IP 基础设施进行一对多和多对多实时通信的技术。 IP 基础设施包括 DHCP。如果没有 DHCP,我们就无法保留 IP 地址,包括多播地址(在 IP 范围内)。此外,如果没有 DHCP,我们将如何存储将多播组映射到接口(IP 地址)的文件?每个路由器都有一个表,但需要有一个网络基础设施来促进这一点。也许有一些不使用 DHCP,但是每个路由器只是与它的邻居通信以获取此列表。
    • 组播是由IGMP实现的。答案完全不正确。您的评论也是 100% 不相关的。不需要使用 DHCP 进行多播。 -1
    猜你喜欢
    • 2012-12-30
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多