如何知道是否启用了 IP 多播

Thi*_*his 21 networking scripting ip multicast

我有运行 IP 多播测试的脚本;但是,我的脚本在特定的 linux 机器上失败了。

我知道我可以查看CONFIG_IP_MULTICAST内核配置文件来确定内核是否是用这个编译的。但是,如果我可以查看/procsysctl得到答案,在我的脚本中标记缺失的需求会更容易。

有没有办法不用查看就知道 IP 多播是否被编译到内核中CONFIG_IP_MULTICAST

小智 24

在您的 linux 机器上: ip maddr show 提供:

@4Gtest ~]$ ip maddr show
1:      lo
        inet  224.0.0.1
        inet6 ff02::1
2:      p3p1
        link  01:00:5e:00:00:01
        link  33:33:00:00:00:01
        link  33:33:ff:bd:7e:0f
        link  01:00:5e:00:00:fb
        link  01:00:5e:7f:ff:05
        inet  224.127.255.5
        inet  224.0.0.251
        inet  224.0.0.1
        inet6 ff02::1:ffbd:7e0f
        inet6 ff02::1
Run Code Online (Sandbox Code Playgroud)

  • 如何将多播组添加到接口? (2认同)

Nik*_*ley 18

似乎大多数内核(post v1)默认支持多播或在编译时启用 CONFIG_IP_MULTICAST。要检查编译和运行的内核是否订阅了任何多播组,我将使用netstat -g.

似乎大多数内核(post v1)默认支持多播。

[root@centos module]# grep CONFIG_IP_MULTICAST /usr/src/kernels/2.6.18-274.7.1.el5-i686/.config 
CONFIG_IP_MULTICAST=y
[root@centos module]# netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      224.0.0.251
eth0            1      all-systems.mcast.net
Run Code Online (Sandbox Code Playgroud)

我看到主机上的 eth0 接口认为它订阅了 224.0.0.251 basic mcast group 。或者,如果我 ping 组或网络,然后所有已知的启用多播的主机网络都返回给我,我会说多播正在主机上工作。您可以尝试netstat -gcat /proc/net/igmp查看它是否在您的主机上返回任何组吗?

  • 如果是,则路由器需要支持组播。但是,对于发送方/接收方,它在 IGMP 上工作,对于路由器,它的协议无关多播 (PIM)。支持 PIM(通常启用)和多播组的路由器 -- 224.0.0.0/4。尝试在另一端组播另一台电脑并将数据发送到组播组并检查另一端的接收器是否接收到数据。如果是,路由器网络确实支持组播。在线工具很少:http://imj.ucsb.edu/mcast_detective (视窗) (3认同)

小智 8

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:FF:EA  
inet addr:78.46.74.27  Bcast:78.46.74.31  Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB)  TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000
Run Code Online (Sandbox Code Playgroud)

禁用多播:

ifconfig eth0 -multicast
Run Code Online (Sandbox Code Playgroud)

结果:

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:FF:EA  
inet addr:78.46.74.27  Bcast:78.46.74.31  Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST MTU:1500  Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB)  TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000
Run Code Online (Sandbox Code Playgroud)

接口中不存在多播

启用组播:

ifconfig eth0 multicast
Run Code Online (Sandbox Code Playgroud)

  • 应该提到的是,`ifconfig` 现在[在 linux 中已弃用](http://en.wikipedia.org/wiki/Ifconfig#Current_status)...我们应该使用 `iproute2` 实用程序。 (8认同)
  • 已经 2 年了,我们仍在使用 `ifconfig` (7认同)

Pie*_*erz 7

使用ip命令可以通过以下方式检查接口是否支持多播:

ip link show eth0 | grep MULTICAST
Run Code Online (Sandbox Code Playgroud)

要启用或禁用多播,您可以使用:

sudo ip link set dev eth0 multicast [on|off] 
Run Code Online (Sandbox Code Playgroud)