本文要介绍的是局域网组播,不考虑跨网段的组播实现,因此组播路由协议与本文要介绍的内容无关。局域网组播环境,也就是一个最小的组播环境涉及到的要素有三个,分别是组播源、支持组播的交换机以及接收组播数据的终端。首先介绍组播协议,组播地址,然后对组播源,交换机和终端在组播环境中的功能进行介绍,最后给出一个实际的局域网组播环境。
组播协议 - IGMP
下图所示是IGMPv2协议的数据包格式。其中Type的取值有三种可能,分别是组成员查询(0x11),组成员报告(0x16)和离开组(0x17)。其中查询又有两种子类型,分别是GeneralQuery和Group-Specific Query,二者的区别是,前者的GroupAddress是224.0.0.1,而后者的Group Address是特定的组播地址。
组播地址
D类IP地址是组播IP地址,D类组播地址范围是224.0.0.0~239.255.255.255。其中224.0.0.0~224.0.0.255地址段中预留的组播地址,地址224.0.0.0保留不做分配,其它地址供路由协议使用。224.0.0.1指的是所有主机,224.0.0.2指的是所有路由器。
224.0.1.0~231.255.255.255和233.0.0.0~238.255.255.255地址段是ASM(Any-SourceMulticast,任意源组播模型)组播地址。
232.0.0.0~232.255.255.255地址段是SSM(Source-SpecificMulticast,指定源组播模型)组播组地址。
239.0.0.0~239.255.255.255地址段是本地管理组播地址,仅在特定的本地范围内有效。
IANA规定,组播MAC地址的高24bit为0x01005e,MAC地址的低23bit为组播IP地址的低23bit,映射关系如下图:
组播源
顾名思义,就是组播数据的源头。与普通的UDP推送相比,区别在于组播IP地址和组播MAC地址的特殊性。
组播交换机
并非随便一个交换机就能用于组播环境的搭建,条件是交换机要支持IGMP Snooping。对于支持IGMPSnooping的交换机来说,配置组播环境通常需要做两件事,第一就是对IGMPSnooping的支持进行配置,第二就是启动查询器。
IGMP snooping运行在二层交换设备上,管理组播组与端口的映射关系。IGMPsnooping根据收到的IGMP报文的内容维护组播组与端口的映射,比如从某个端口收到IGMP加入一个组播组的报文的时候,则添加向该端口发送目的为相应组播组的表项。
查询器用来发送IGMP查询,并根据对于查询的响应来维护组播组与端口的映射表。下图是一个普遍组查询的抓包:
具体的内容应该参见交换机的文档。
有的交换机不支持查询器,可以实现一个软件的查询器,下面就是一个python代码,功能是发送一个普遍组查询:
importsocket
import struct
def IGMP_general_query_send ():
igmp_general_query_packet = struct.pack("bbBBbbbb", 0x11, 0x64,0xee, 0x9b, 0, 0, 0, 0)
sock =socket.socket(socket.AF_INET, socket.SOCK_RAW,socket.IPPROTO_IGMP)
sock.sendto(igmp_general_query_packet, ("224.0.0.1", 0))
IGMP_general_query_send()
组播接收终端
就是IGMP协议的支持。我们采用IGMP v2,因此先来介绍一下IGMPv2协议。有三种类型的IGMP查询消息,分别是成员查询,成员报告,离开组播组。
局域网组播实践
局域网组播是小型IPTV解决方案中直播的较好选择。经过一番研究发现,采用可管理的二层交换机实现局域网组播是可行的。下面就描述一下采用H3CS5100-24P-SI二层交换机如何搭建这样的环境。
涉及到的设备有:
- 支持组播的实时编码器,就采用本人的Rainbow好了。
- 支持IGMP Snooping的可管理交换机,采用H3C S5100-24P-SI。
- 终端播放器,采用VLC播放器。
实现步骤有三部,分别是配置交换机、配置实时编码器以及用VLC接收组播,并通过Wireshark抓包验证组播实现的正确性。
配置交换机需要通过Console来完成,通过Web界面是实现不了的。怎么登陆终端这里就不再赘述了。登陆到终端以后运行如下命令使能IGMPSnooping:
system-view
igmp-snooping enable
vlan vlan-id
igmp-snooping enable
然后使能查询器,命令如下:
igmp-snooping querier
配置Rainbow,推送组播流到239.1.1.1:12345
配置WindowXP的IGMP版本为2,因为我的VLC是安装在WindowsXP下的,而且我采用IGMPV2,因为中兴的V600V4A盒子是IGMPV2。做法就是修改注册表,增加或者修改[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]下的表项"IGMPVersion"并设置值为dword:00000003,然后重新启动。
用vlc打开udp://239.1.1.1:12345,然后点播放和停止按钮,并用wireshark抓包证实正确性。
参考资料
- H3C S5100-SI/EI 系列以太网交换机操作手册
- RFC 2236 - Internet Group Management Protocol, Version2