IGMP协议

组播IP地址

组播地址是分类编址的IPv4地址中的D类地址,又叫多播地址,他的前四位必须是1110,所以网络地址的取值范围是224~239。

组播地址范围

地址 说明
224.0.0.0-224.0.0.255 为路由协议预留的永久组地址
224.0.1.0-231.255.255.255 /233.0.0.0-238.255.255.255 用户可用的asm临时组地址,全网范围有效
232.0.0.0-232.255.255.255 用户可用ssm临时组地址,全网范围内有效
239.0.0.0-239.255.255.255 用户可用的asm临时组地址,尽在特定的本地管理域内有效,陈伟本地管理组播地址

组播模型分类

根据接收者对组播源处理方式的不同,组播模型分为以下三类:

(1) ASM 模型:Any-Source Multicast,任意信源组播

  • 在ASM 模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。
  • 在ASM 模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。

(2) SFM 模型:Source-Filtered Multicast,信源过滤组播

  • 该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。
  • 在SFM 模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。
  • 因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。

(3)SSM 模型:Source-Specific Multicast,指定信源组播

  • 在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。
  • SSM 模型与ASM 模型的根本区别在于:SSM 模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM 模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。

组播MAC地址

IANA规定,IPv4组播MAC地址的前(高)24位为0x01005e,第25位固定为0,后(低)23位为组播IP地址与组播MAC地址一一映射;因为组播IP地址后23位需要一一映射为组播MAC地址,前4位固定为1110,且组播IP地址前9位对应前24位组播MAC地址固定为01005e,且组播MAC地址第25位固定为0,此时组播IP地址仍有5位无法进行精确匹配,即1个组播MAC地址对应32个组播IP地址;IETF认为两个或多个组播IP地址对应一个组播MAC地址的概率忽略不计;

什么是IGMP

IGMP(Internet Group Management Protocol)因特网组管理协议,是TCP/IP协议族中负责IP组播成员管理的协议,用来在接收者和与其直接相邻的组播路由器之间建立、维护组播组成员关系。参与IP组播的主机可以在任意位置、任意时间加入或退出组播组。IP组播通常应用在视频点播、网络会议等场合。

IGMP协议版本

IGMPv1:允许主机加入组播组,但没有离开信息。路由器基于超时机制去发现其成员离开
IGMPv2:包含了离开信息,允许迅速向路由协议报告组成员终止情况
IGMPv3:允许主机指定它要接收或组织的通信流量的主机对象(一个用户可能同时要接收好几个组播源给它发数据,这个用户可以指定它什么时间接收或者暂不接收等)

IGMP类型

类型=1,说明是由多播路由器发出的查询报文
类型=2,是由主机发出的报告报文

IGMP报文结构
正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议,IGMP有固定的报文长度,没有可选数据。

IGMPv1 工作机制

IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP 成员关系报告报文(Membership Report Message)。因此,只需其中一台路由器发送IGMP 查询报文(Query Message)就足够了。这时就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP查询器。对于IGMPv1 来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器。
IGMP 查询相应示意图

如上图所示,假设Host B与Host C想要收到发往组播组G1 的组播数据,而Host A想要收到发往组播组G2 的组播数据,那么主机加入组播组以及IGMP查询器(Router B)维护组播组成员关系的基本过程如下:

  1. 主机将主动发送IGMP 成员关系报告报文到其要加入的组播组,以声明加入,而不必等待IGMP查询器发来的IGMP 查询报文。
  2. IGMP 查询器周期性地以组播方式,向本地网段内的所有主机与路由器发送IGMP 查询报文(目的地址为224.0.0.1)。
  3. 在收到该查询报文后,关注G1 的Host B 与Host C 其中之一(这取决于谁的延迟定时器先超时),譬如Host B会首先以组播方式向G1 发送IGMP 成员关系报告报文,以宣告其属于G1。由于本地网段中的所有主机和路由器都能收到Host B 发往G1的报告报文,因此当Host C 收到该报告报文后,将不再发送同样针对G1的报告报文,因为IGMP 路由器(Router A和Router B)已知道本地网段中有对G1 感兴趣的主机了。这个机制称为主机上的IGMP 成员关系报告抑制机制,该机制有助于减少本地网段的信息流量。
  4. 与此同时,由于Host A 关注的是G2,所以它仍将以组播方式向G2 发送报告报文,以宣告其属于G2。
  5. 经过以上的查询和响应过程,IGMP 路由器了解到本地网段中有G1 和G2 的成员,于是由组播路由协议(如PIM)生成(,G1)和(,G2)组播转发项作为组播数据的转发依据,其中的“*”代表任意组播源。
  6. 当由组播源发往G1 或G2 的组播数据经过组播路由到达IGMP 路由器时,由于IGMP路由器上存在(,G1)和(,G2)组播转发项,于是将该组播数据转发到本地网段,接收者主机便能收到该组播数据了。

IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1 的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP 路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。

IGMPv2 工作机制

与IGMPv1 相比,IGMPv2 增加了查询器选举机制和离开组机制。

查询器选举机制

在IGMPv1 中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。
在IGMPv2 中,增加了独立的查询器选举机制,其选举过程如下:
1所有IGMPv2 路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP 普遍组查询(General Query)报文(目的地址为224.0.0.1)。
2本地网段中的其它IGMPv2 路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较, IP 地址最小的路由器将成为查询器, 其它路由器成为非查询器(Non-Querier)。
3所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的IGMP 查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。

离开组机制

在IGMPv1 中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。
而在IGMPv2 中,当一个主机离开某组播组时:
1该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文; 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址)。
2如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的响应时间(Max Response Time)内发送成员关系报告报文。
3如果在响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。

IGMPv3 工作机制

IGMPv3 在兼容和继承IGMPv1 和IGMPv2 的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。

主机控制能力的增强

IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。当主机加入组播组时:

若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);
若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。

查询和报告报文功能的增强

携带源地址的查询报文

IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:

普遍组查询报文中,既不携带组地址,也不携带源地址;
特定组查询报文中,携带组地址,但不携带源地址;
特定源组查询报文中,既携带组地址,还携带一个或多个源地址。

包含多组记录的报告报文

IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:

IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。
IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。
TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。
TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。
ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇