IGMPv1v2v3的原理报文形式.docx
《IGMPv1v2v3的原理报文形式.docx》由会员分享,可在线阅读,更多相关《IGMPv1v2v3的原理报文形式.docx(34页珍藏版)》请在冰豆网上搜索。
IGMPv1v2v3的原理报文形式
1IGMP协议
IGMP用来动态的将各个主机注册到特定局域网中的一个组播组中。
主机向本地的组播路由器发送IGMP消息来表明自己所属的组播组。
在IGMP协议中,路由器侦听IGMP消息并周期的发出查询,以发现某个子网上哪些组是活动的,哪些是不活动的。
IGMP消息在IP数据报内发送,用IP协议号2来标识。
同时,将IP存活时间(TTL)字段值设定为1,因此IGMP信息处于本地范围本子网内传送并且不会被路由器转发。
1989年,IGMP版本1(RFClll2)第一次详细定义了IGMP规范。
后来施乐公司对最早的IGMP版本1进行了大幅更新,产生了IGMP版本2(RFC2236)。
到目前为止IGMP版本3规范己经称为IETF正式标准(RFC3376),通用的是IGMPv2。
IGMPvl实现简单,但是有离开延迟过大和选择查询路由器需要依赖组播路由协议的缺点,IGMPv2对此进行了改进。
IGMPv3协议的主要目的是支持源特定组播,并进一步对IGMPv2进行完善。
1.1IGMPv1协议
1.1.1IGMPv1的工作原理
在IGMPvl中定义了基本规则、组成员查询机制和报告机制。
当某接收主机希望接收到某个组播组的数据时,它会向本地链路上的查询路由器发送加入消息,通知查询路由器本机希望申请加入的组播组;查询路由器收到加入消息之后,把这条消息加入到查询路由器所维护的状态列表,同时向源发起建立组播分发树的请求;查询路由器在设定的周期内发起组成员查询消息;接收主机收到查询消息之后,会向查询路由器发送报告消息来应答查询,否则查询路由器会认为不存在接受主机;主机如果想离开某个组播组,就对路由器的查询保持沉默,经过一定时间,路由器便知道子网内没有组成员了。
1.1.2IGMPv1报文格式
IGMPvl报文格式如图2-4所示,
图2-4IGMPv1报文格式
其主要内容包括:
(1) 版本字段表示IGMP协议的版本号,在IGMP中置为1.
(2) 类型字段,在IGMPv1中,只有两个值:
取值为0x11,表示该报文为成员关系查询(MembershipQuery),主要是由路由器使用。
取值为0x12,表示该报文为成员关系报告(MembershipReport),主要是主机使用。
(3) 校验和字段用于数据报文的校验。
(4) 组地址字段。
当用于成员关系查询时,本字段置为0,并被主机忽略;当用于成员关系报告时,本字段包含组播组地址。
IGMPv1报文在网络中传输完整的报文格式如图2-5:
图2-5在网络中传输的IGMPv1报文
1.1.3IGMPv1工作过程
在IGMPv1中,路由器利用查询一响应过程来确定在本地子网中是否有加入某个组播组的主机存在,如果有,则这台路由器就要完成向本子网组播数据包的功能;如果没有,则这台路由器就不必向此子网转发组播包。
路由器周期性地向子网上的所有主机发送组播成员关系查询报文,希望加入某个组播组的主机就响应该查询,发送一个组播成员关系报告报文到子网上,在IGMP报文的组地址地段中加入想要加入的组播组的地址。
路由器接收到来自主机的成员关系报告报文后,就知道了在该子网上有主机要加入组播组,组播组地址在报文中可以获得,接下来,路由器就会根据所使用的路由协议建立起相应的转发状态。
当一个子网上有多台主机想加入同一个组播组时,就可以利用报告响应抑制功能,来减少子网中的重复信息传递。
处理流程如下:
主机接收到IGMP成员关系查询报文后,对加入的每个组播组启动一个倒数计时器。
当计时器的值为0时,主机发送IGMP成员关系报告报文,通知路由器子网内仍有处于活动状态的组播接收者。
当计时器到达0之前,若主机接收到来自其他主机发送的同一组成员关系报告报文,那么它就停止与该计时器得到的数,重新计时,这样,就避免了发送同一个成员关系报告报文给路由器。
如果在一个子网中有多个组播路由器,那么多个路由器都发送IGMP查询报文是一种浪费,所以应当确定一个路由器作为查询路由器就可以了。
但是在IGMPv1中,没有提供选举查询路由器的机制,而是把这一任务留给了组播路由协议。
由于不同的协议使用不同的选举机制,会造成在一个子网中出现多个查询路由器,这也是IGMPv1的缺点之一。
但是IGMPv1的另一个缺点是缺乏显式的离开方式。
当一台主机想要离开一个组播组时,并不显式地表示出来,而只是不再对路由器的查询报文进行响应。
当一个网段内某个组播组的最后一个成员退出后,路由器还会继续组播这个组的数据,直到一段时间内路由器接收不到任何来自该组的成员响应,才会知道该组已经没有接收者了,然后停止转发该组的组播数据报文。
因此,路由器中需要为子网中的每一个组维护一个计时器。
当路由器接收到某台主机发送的报告报文时,就会将该组的计时器清零;当某个组的计时器超时后,就说明在本网段上已经没有接收者,于是停止转发该组报文。
下面是工作过程图解:
1) 组成员加入
图2-6IGMPv1组成员加入
2) 查询与响应
图2-7IGMPv1组成员查询
3) 响应抑制机制
图2-8IGMPv1响应抑制机制
4) 组成员离开
图2-9IGMPv1组成员离开
1.2IGMPv2协议
1.2.1IGMPv2的工作原理
IGMPv1的主要缺点是离开延迟过大和选择查询路由器需要依赖组播路由协议进行。
针对这些缺点,IGMPv2做了相关的改进。
在IGMPv2中,增加了离开组的报文格式,当主机想要离开某个组播组时,不必等待路由器发出查询报文,而是可以直接向路由器发送成员关系报告报文,这样可以有效地缩短离开延迟。
另外在IGMPv2中,还明确了查询路由器的选举机制。
除此之外,IGMPv2的工作原理与IGMPv1基本一致
1.2.2IGMPv2的报文格式
IGMPv2的报文格式如图2-10所示:
图2-10IGMPv2报文格式
它在IGMPvl的基础上,进行了两处改动:
一个是将v1的版本字段和类型字段进行了合并;另一个是增加了最大响应时间字段 (MaxResponseTime)。
其主要内容如下:
(1)类型字段,在兼容IGMPv1的基础上,IGMPv2中新增了两种报文类型。
·0xll:
成员关系查询。
与IGMPv1不同,IGMPv2的查询分为两种类型:
①通用查询(GeneralQuery),组地址字段置为全0,对所有的组进行组成员查询;②特定组查询 (GrouPpecificQuery),针对特定组进行组成员查询,组地址字段置为特定组的地址。
·0x12:
IGMPv1成员关系报告(为了向后兼容IGMPv1)。
·0x16:
IGMPv2成员关系报告。
·0xl7:
离开组。
(2)最大响应时间字段,只有在成员关系查询报文中有效,主机必须在最大响应时间到达之前发出成员关系报告报文。
通过该值,路由器可以调节组成员的离开延迟。
(3)校验和字段,与IGMPv1中的一样。
(4)组地址地段,与IGMPv1中的基本一样,当采用特定组查询时,该字段存放要查询的组播组的地址。
IGMPv2报文在网络中传输完整的报文格式如图2-11:
图2-11在网络中传输的IGMPv2报文格式
1.2.3IGMPv2工作过程
查询一响应过程与IGMPv1基本相同,但是有两点改进:
①增加了特定组查询,特定组查询的目的是为了让路由器知道一个特定组在子网内是否还有组成员,以便判断是否还需要转发该组的数据报文;②IGMPv2的成员关系报告的类型代码不一样。
IGMPv2的组成员加入与IGMPv1中的完全一样。
IGMPv2离开过程与IGMPv1相比有了较大的改进。
主机离开一个组时,需要显式地发送一个离开报文给路由器。
其过程如下:
要离开的主机发送一个离开报文给子网上所有路由器(目的地址224.0.0.2)。
查询路由器接收到离开报文后,会立即发送一个特定组查询到子网上。
如果子网上还有该组的成员,则会发回一个响应报文;如果子网上己经没有该组的成员,则没有主机回应,于是路由器就知道己经没有该组成员了,就停止转发该组的数据。
在IGMPv1中,选择查询路由器依赖于组播路由协议。
而在IGMPv2中,明确了选择查询路由器的机制。
其过程如下:
开始时,子网上的每个路由器都假定自己就是查询路由器,发送一个通用查询报文给所有主机(目的地址224.0.0.1)。
每个路由器都可以接收到来自其他路由器的报文,然后进行IP地址的比较,具有最低IP地址的路由器就成为查询路由器;非查询路由器启动一个计时器,无论何时接收到来自当选的查询路由器的通用查询报文,就将计时器复位。
如果计时器超时,就认为当选的查询路由器发生故障,转向开始重新选择。
计时器的取值一般为查询间隔的2倍
图解工作过程如下:
1)组成员加入
图2-12IGMPv2组成员加入
2)查询与响应
图2-13IGMPv2组成员查询与响应
3)查询器选举
图2-14IGMPv2查询路由器选择
4)成员离开
图2-15IGMPv2组成员离开
1.3IGMPv3协议
1.3.1IGMPv3的工作原理
IGMPv3的提出,主要是为了配合源特定组播的实现,即组播组成员可以指定接收或指定不接收某些组播源的报文。
这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。
IGMPv3的这一特性,可以实现源特定组播SSM技术。
源特定组播(SourceSpecificMulticast,SSM)是一种区别于传统组播的新的业务模型,SSM保留了传统PIM-SM模式中的主机显式加入组播组的高效性,但是跳过了PIM-SM模式中的共享树和RP规程。
SSM直接建立由(S,G)标志的一个组播最短路径树。
SSM的一个(S,G)对也被称为一个频道(Channel)。
PIM-SSM是对传统PIM协议的扩展,使用SSM,用户能直接从组播源接收组播报文,需要汇聚点(RP)的帮助。
IGMPv3在IGMPvl/v2的基础上提供了额外的源过滤组播功能(SourceFilteredMulticast,SFM)。
在IGMPvl/v2中,主机只根据组地址来决定加入某个组,并从任何一个源接收发给该组地址的报文。
具有源过滤组播功能(SFM)的主机使用IGMPv3来表示主机所希望加入的组播组,同时还表示该主机所希望接收的组播源的地址。
主机可以使用一个包括列表(InclusionList)或一个排除列表(ExclusionList)来表示对源地址的限制。
即组播组成员可以指定接收或指定不接收某些组播源的报文。
这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。
1.3.2IGMPv3的报文格式
IGMPv3的报文类型有以下几种:
0xll:
成员关系查询报文(MembershipQeury)。
0x22:
版本3成员关系报告报文(version3MembershipReport)
0x12:
版本1成员关系报告报文(version1MembershipReport)
0x16:
版本2成员关系报告报文(version2MembershipReport)
0x17:
版本2离开报文(version2LeaveGroup)。
报文类型的值填写在报文中的类型字段。
在IGMPv3中,查询报文和报告报文格式有较大差异,需要分别描述。
图2-16为查询报文的格式
图2-16IGMPv3查询信息格式
(1)类型字段,设置为0xll,代表该报文为查询报文。
(2)最大响应时间字段,指明了主机发出响应的最长时间。
(3)组地址字段,功能与IGMPv2一样,可以用于通用查询和组特定查询。
(4)s字段,置为1时,其他路由器不对该报文进行处理。
(5)QRV字段,查询路由器的健壮值(Querier’sRobustnessVariable),该值影响计时器和重试次数的取值。
(6)QQIC字段,查询路由器的查询间隔码(Querier’sQueryIntervalCode),该值影响查询路由器的查询间隔时间,非查询路由器按照此值更新自己的缺省值。
(7)源地址数目字段,该值表在这个报文中包含了多少个源地址。
当进行通用查询(GeneraQuery)或者组特定查询(GroupSpecificQuery)时,该值置为0;当进行特定组和源查询(GroupSourcepecificQuery,用于PIM一SSM)时,该值为源特定地址的数目。
虽然该值最大可为65536,但是实际上受限于数据链路层的MTU,例如在以太网上,1P数据报最长为1500字节,除去IP报头的24字节和IGMP报头的12字节,剩余1464字节,所以最多包含366(1464/4)个源地址。
(8)源地址地段。
IGMPv3查询信息报文在网络中传输完整的报文格式如图2-17:
图2-17在网络中传输的IGMPv3查询报文格式
IGMPv3报告报文的格式较为复杂,如图2-18所示。
图2-18IGMPv3侦听者报告格式
(1)类型字段,置为0x22,表示该报文为IGMPv3报告报文。
(2)组记录数目字段,表示此报文中包含的组记录数目。
(3)组记录字段。
包含若干个组记录,每个组记录长度不固定,其内容如图2-19:
图2-19IGMPv3组记录格式
①组记录类型字段,表示该组记录中包含的数据的类型,目前定义了六种类
型,分别是:
·MODEISINCLUDE。
表示该主机的过滤模式为INCLUDE.也就是说,后面列出的地址都是主机想要接收的组播源地址。
·MODEISEXCLUDE。
表示该主机的过滤模式为EXCLUDE,也就是说,后面列
出的地址都是主机想要拒绝的组播源地址。
·CHANGETOINCLUDEMODE。
表示该主机的过滤模式从EXCLUDE切换为INCLUDE模式。
·CHANGETOEXCLUDEMODE。
表示该主机的过滤模式从INCLUDE切换为EXCLUDE模式。
·ALLOWNEWSOURCES。
表示该主机中新增的想要接收的源地址。
·BLOCKOLDSOURCES。
表示从该主机中删除的不想接收的源地址。
②辅助数据长度字段,在组记录的最后,可以增加以4字节为单位的辅助数据,如果没有辅助数据,则置为0。
③源地址数目字段,表示该记录中包含了多少个组播源地址。
④组地址字段,与源地址共同表示特定源组播。
⑤源地址字段,每个长度为32bits。
标志源地址,数目由源地址数目字段表示。
⑥辅助数据字段。
为将来的应用预留,在IGMPv3中并不需要。
一台主机在发送报告报文的时候,应当把自己的源IP地址包含在IP数据报中,当主机还没有获得IP地址的时候,可以使用0.0.0.0作为源IP地址,支持IGMPv3的路由器必须接收来自0.0.0.0的数据报。
主机的IGMP报文的目的地址标志为224.0.0.22,代表子网中所有支持IGMPv3的路由器。
1.3.3IGMPv3的主要改进
IGMPv3除了支持原特定组播外,其工作原理与IGMPv2相比,并没有本质的改变,只是在某些地方做了改进和优化。
以下列出了IGMPv3的主要特点和改进:
① 支持源特定组播SSM;
② 向后兼容IGMPvl和IGMPv2;
③ 主机可以定义要接收的组播源地址;
④ 非查询路由器可以与查询路由器保持参数值同步;
⑤ 最大响应时问从25.5s增加到53min,适合于较大的网络;
⑥ 辅助数据字段为将来的应用预留了空间;
⑦关系成员报告报文发送给目的地址224.0.0.22,可以帮助二层交换机更有效地实现IGMP监听(IGMPSnooping)功能;
⑧报告报文中可以包含多个组记录,可以有效地减少网络通信量;
⑨在IGMPv3中,取消了前面版本中的响应抑制功能,主要原因是:
第一,使用响应抑制时,路由器只知道子网上是否有组成员,而不知道有几个组成员,以及成员是哪些主机:
取消响应抑制,路由器就可以记录每一个组成员的信息,可以开发一记账等增值服务功能。
第二,许多网桥或者二层/三层交换机在实现IGMP监听功能时,为了避免响应抑制,一般不转发网段问的IGMP报文。
取消了响应抑制后,可以简化这些设备的设计。
第三,取消响应抑制后,主机不必处理来自其他主机的报文,简化了主机的实现。
在查询报文中,增加S标志位,可以提高系统的健壮性。
IGMPv3报告报文在网络中传输完整的报文格式如图2-20:
图2-20在网络中传输的IGMPv3报告报文
2MLD协议
IPv6的组管理协议被称为MLD(组播监听者发现)。
1999年,MLD版本l(RFC2710)被IETF发布。
2004年,MLD版本2(RFC3810)标准出台,后一个版本可以向前一个兼容。
MLD协议是专门针对基于IPv6的组播组管理协议。
因为MLD使用全新的ICMPv6的报文格式,所以MLD协议就是ICMPv6协议的一个子集。
MLD消息使用链路本地IPv6源地址发送,其跳数被限制为1。
MLD消息的封装格式如图2-21所示:
图2-21MLD消息封装格式
以下分别描述MLD协议的两个版本以及MLDSnooping,其中对于MLDSnooping的详细描述见第三章。
2.1MLDv1协议
2.1.1MLDv1的工作原理
MLDvl协议是从IGMPv2协议中派生出来的,其运行机制和IGMPv2协议相同,专门用于IPv6组播群组的管理,其主要是应用于ASM模式组播路由协议的组管理工作。
对于运行MLD协议的路由器,其接口要监听由IPv6组播地址产生的所有链路组播地址。
路由器为它所在的每一条链路维护一个列表。
表项有此链路中存在的组成员的组播地址,以及该地址相应的定时器。
路由器周期性地发送通用请求(generalquery),以查询该链路上是否存在某组播地址的组成员。
节点收到路由器发送的常规请求后,经过随机时延后发出组播监听报告。
这样是为了防止所有的节点都在同一时间发出报告分组,从而造成网络的突发性阻塞。
当路由器收到链路上的报告分组时,如果报告地址不在路由器的列表上,则加入该项,否则计时器重新置位。
如果某个地址的计时器过期,则从列表中删除。
当节点要加入一个组播组时,主动发送组播监听报告,向路由器报告组成员的存在。
节点退出组播组时,发送完成分组,删除有关路径。
当请求状态的路由器从链路上接收到一个完成消息,如果消息中的组播地址在路由器的列表上,路由器发送一个特定组播地址查询。
如果一段时延后没有报告分组,则认为该组播地址在此链路上没有组成员了。
2.1.2MLDv1报文格式
MLDv1的报文格式如图2-22所示:
图2-22MLDv1报文格式
(1)类型字段,MLDvl有如下三种报文类型:
·组播侦听查询消息(Type=130),分为两种类型:
①通用查询(GeneralQuery),组地址字段置为全0,对所有的组进行组成员查询;②特定组查询(Group PecificQuery),用于判断一个特定的组播地址在本地链路上是否有组播侦听者。
·组播侦听报告消息(Type=131)
·组播侦听完成消息(Type=132)
(2)编码字段,初始值为0。
(3)校验和字段。
(4)最大响应时间字段,只有在组播监听者查询报文中有效,主机必须在最大响应时间到达之前发出成员关系报告报文。
通过该值,路由器可以调节组成员的离开延迟。
(5)组地址字段,在通用组查询中,置为0;在特定组查询时,该字段存放要查询的组播组的地址。
在报告和完成报文中,分别用于存放主机要加入和离开的组地址。
MLDv1报文在网络中传输完整的报文格式如图2-23:
图2-23在网络中传输的MLDv1报文
以上这些查询消息和应答消息报文有三种不同的报文交互方式:
第一种交互方式是由路由器发起的。
路由器作为询问者向与其相连接的所有主机发送一个一般查询消息报文。
其目的地址是FF02:
:
1。
主机收到此消息后,应答一个包含当前组播地址状态记录的报文消息,此报文告诉路由器此主机希望接收哪个组播组或者哪些源发来的数据。
第二种交互方式是由主机发起的。
当一个主机离开一个组播组时,它就要向路由器发送组播侦听者完成消息,该消息包括一个状态改变一记录。
路由器收到此消息后,向其相连的链路上发送一个特定组播地址查询,询问是否还有主机加人了此特定的组。
第三种交互方式是由路由器发起的。
如果在路由器的组播地址表中某一个组播地址的相关定时器超时后,仍然没有收到主机发来的包含状态变化记录的组播侦听者报告消息,路由器则向所有主机发送一个特定组查询消息,确认该组播组是否还有组播侦听者。
2.1.3MLDv1工作流程
当一个网段内连接有多台路由器运行MLDvl协议时,必须选举一台路由器作为查询路由器,其余的自然成为非查询路由器。
选举的机制是:
地址最小的路由器当选。
非查询路由器中有一个其他查询路由器存在计时器,当该计时器到期仍没有收到来自查询路由器的报文,则认为该查询路由器失效,重新开始新的选举。
路由器定期向子网内所有的主机广播查询报文(目的地址为FF02:
:
1),目的是获得主机的报告报文。
在路由器刚开始工作时,会快速连续地发送查询报文,以便尽快搜集到子网内的组成员信息。
当主机接收到一个查询报文后,就为每一个要接收的组地址启动一个延迟定时器。
定时器的值在[0,最大响应时间]之间取一个随机数。
如果查询报文中的最大响应时间字段被置为0,则定时器立刻到期。
定时器到期后,主机会发送一个报告报文给路由器,通知路由器主机想接收的组播组地址。
如果一台主机在定时器还未到期时,就收到其它主机通告路由器的报告报文,则读取该报文的组地址,如果和自己需要通告的组地址相同,则立刻停止相应的定时器,并不再发送关于该组地址的报告报文,这样就可以避免多台主机发送相同内容的报告报文给路由器,这种机制称为“响应抑制”。
路由器收到来自主机的报告报文后,查看其中的组地址,如果该地址未在路由器的组地址列表中,则将其添加到组地址列表中,同时为其启动一个相应的定时器;如果该地址已经在路由器的组地址列表中,则将相应的定时器恢复最大值。
如果一个组地址的定时器到期了,则说明该组地址在子网内已经没有接收者了,路由器会将此组地址从列表中删除。
当一台主机想要加入某个组播组时,可以不必等待路由器的查询报文,而是直接向路由器发送报告报文。
为了保障该报文的可靠性,一般会进行重传。
当一台主机想要离开某个组播组时,必须发送一个离开报文给子网内的路由器。
路由器收到离开报文后,会首先查看该组地址是否在组地址列表中,如果在,则发送一个特定组地址查询给子网内的所有主机。
在一定的时间内,路由器收不到来自主机的应答,则会认为该组已经没有接收者,于是将该组地址从列表中删除。
非查询路由器会忽略所有的离开报文。
2.2MLDv2协议
MLDv2从IGMPv3中发展过来,和MLDvl相比,增加了IGMPv3所具有的源过滤功能,不仅能够支持ASM模式组播路由协议,而且还能够支持基于IPv6的SSM模式组播路由协议。
MLDv2在MLDv1的基础上添加了源组播(SourceSpecificMultieast)的概念,主机可以组播源报告(Group-SourceReport)报告感兴趣的源,路由器则只转发该链路上所有组成员感兴趣的源所发送的报文。
当主机想退出某组播源时,主机发送离开组播源报告(Group-SourceLeave),查询者在接收到该报告后可以发送指定组播源请求,确认是否仍有组成员关心该组播源。
MLDv2支持源