我怎么知道是否启用了IP组播


19

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

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

有没有一种方法可以查找IP组播是否被编译到内核中而无需查看CONFIG_IP_MULTICAST

Answers:


18

似乎大多数内核(版本v1)默认情况下确实支持多播,或者在编译时启用了CONFIG_IP_MULTICAST。要检查已编译并正在运行的内核是否订阅了任何多播组,我将使用netstat -g

似乎大多数内核(后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

我看到主机上的eth0接口认为其已订阅224.0.0.251基本mcast组。另外,或者,如果我对组或网络执行ping操作,然后将所有已知的启用多播的主机网络返回给我,我会说多播正在主机上运行。您可以尝试netstat -g还是cat /proc/net/igmp查看它是否在您的主机上返回任何组?


1
但是,如何确定该盒所连接的路由器是否支持多播?
尼尔斯

1
多播-发送方将单个数据报从其单播地址发送到多播组地址,中间路由器负责制作副本并将其发送给已加入相应多播组的所有接收方。
Nikhil Mulley

3
如果是,则路由器需要支持多播。但是,对于发送者/接收者,它可以在IGMP上运行,对于路由器,可以使用其协议无关多播(PIM)。支持PIM(通常启用)和多播组的路由器-224.0.0.0/4。尝试另一端与发送数据搭另一台PC监听组组播组&如果接收器在接收otherend检查data.Ify,路由器网络不支持multicasting.Few在线工具:imj.ucsb.edu/mcast_detective(窗口)
Nikhil Mulley

20

在您的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

1
如何在接口中添加muticast组?
AR

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

禁用多播:

ifconfig eth0 -multicast

结果:

# 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

接口中没有组播

启用多播:

ifconfig eth0 multicast

8
应该提到的ifconfig是,现在Linux中弃用 ...我们应该使用iproute2实用程序。
Mike Pennington

7
已经2年了,我们仍在使用ifconfig
Askar,2015年

1
@oscar,但这并不意味着这样做很好,因为iproute2中的ip其他实用程序反映了Linux内核网络代码中的最新变化(与不同)。ifconfig
pevik '16

6

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

ip link show eth0 | grep MULTICAST

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

sudo ip link set dev eth0 multicast [on|off] 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.