什么是IGMP?
IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。
IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。
IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。
但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。
要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。
IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。IGMP在组播网络中的部署位置如图所示。
该协议运行在主机和组播路由器之间。IGMP协议共有三个版本,即IGMPv1、v2 和v3。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml23368/wps2.jpg
V1 消息格式:file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml23368/wps3.jpg
1、版本:1
2、类型:只有两种,组成员查询和组成员报告
3、未用:为0
4、校验和:用于校验包的完整性
5、组地址:在组成员查询消息中为0,在组成员报告消息中为要报告的组播组地址。
IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。
当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP 成员关系报告报文(Membership Report Message),因此只需要其中一台路由器发送IGMP查询报文(Query Message)就足够了。
这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP 查询器。对于IGMPv1 来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器。
IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1 的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。
当网段中不再存在该组播组的成员后,IGMP路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml23368/wps4.jpg
V2
v2版本兼容V1版本,增加离开组的消息,成员查询的功能也扩展了,共有4种消息。file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml23368/wps5.jpg
1、类型:
0x11——成员查询消息 0x12——V1的成员报告消息 0x16——V2的成员报告消息 0x17——离开组的消息
2、最长响应时间:针对成员查询才有意义,主机多长时间必须响应查询,单位为0.1s ,默认值为10 。
3、校验和:校验包的完整性
4、组地址:当进行常规成员查询时为0;当进行特定组成员查询时为特定组的IP;当进行成员报告时为要报告的组播组地址。
在IGMPv2 中,当一个主机离开某组播组时:
(1) 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;
(2) 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址);
(3) 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Max Response Time)内发送成员关系报告报文;
(4) 如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。
V3
允许主机指定组播源,只接收特定组播源发出的组播数据。进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
主机控制能力增强:
IGMPv3 增加了针对组播源的过滤模式,使主机在加入某组播组G 的同时,能够明确要求接收或拒绝来自某特定组播源S 的组播信息。
查询和报告报文功能的增强:
(1) 携带源地址的查询报文
IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持
(2) 包含多组记录的报告报文
IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。
IGMP组成员查询:
IGMP的组成员查询利用报文中类型字段0x11来标识。
IGMP的组成员查询包含了两种子类型:
一般组成员查询(General Query)和特定组成员查询(Group-Specific Query)。
子类型利用报文中的组播组地址(Group Address)字段来区分:
组地址段等于0,表示一般组成员查询;
组地址地段不等于0,则表示特定组成员查询,用于查询本地网络中的每个指定组播组的成员,其中组播组的地址由组地址(Group Address)字段来指定被查询的组播组。
在IGMPv1中只支持一般组成员查询,IGMPv2支持特定组成员查询。
一般组成员查询
IGMP约定,本地路由器利用一般组成员查询方式来周期性地向本网络内的所有主机发送IGMP组成员查询报文;本地网络中的主机在接收到IGMP查询报文时,将会对该报文作出相应,返回一个组成员报告报文,通知路由器本主机所在的组播组的地址。
特定组成员查询
正常情况下,IGMP采用一般组播组成员查询来轮询本地网络中的组成员信息。
这种查询并非针对某一个组播组,而是针对本地网络中所有组进行查询。
在某些特定环境中,路由器也需要查询在本地网络中是否存在某个特定组播组的成员。这时可使用特定组成员查询。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml23368/wps6.jpg
IGMP典型应用
IGMP运行在成员主机和与其直接相邻的组播路由器上,负责组播组成员关系的管理和维护。
同时,为了将组播源的数据顺利转发到接收者,组播路由器之间需要运行组播路由协议PIM来建立转发路径。
下图所示为IGMP的典型应用组网图。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml23368/wps7.jpg 文章来源:本篇文章综合网络,因觉优质,特此分享,侵删。
每天通过一位IE,每两位IE,一位在思博
进入全国网络工程师交流群 ,请扫描下方二维码↓↓↓
群里有行业大咖、实战分享、技术交流、技术咨询、企业内推等机会
若群满,请添加老杨微信(spotoa),邀你进群
|