RFC3376IGMPv31.简介1.1.IPv41.1.1.IGMPv1RFC1112定义QueryReport1.1.2.IGMPv2RFC2236增加Leave1.1.3.IGMPv3RFC3376定义v3Report,支持SSM(废弃Leave,统一采用Report)1.2.IPv6MLDv1(功能与IGMPv2相同)MLDv2(功能与IGMPv3相同)2.用于请求IP组播接收的服务接口系统服务接口操作要求IPMulticastListen(socket,interface,multicast-address,filter-mode,source-list)SocketInterface接收指定组播报文的网络接口ID。接口可以是物理的(以太网接口)或者虚拟的(FR虚连续或IP-in-IP隧道)。实现也许允许“未指定”值作为接口参数,此时,该请求应用在系统的第一个或者缺省接口(或者配置)。如果在多个接口接收相同多播地址,每个接口调用IPMulticastListenMulticast-addressIP多播地址或组。如果给定接口要接收多个组播地址,每个组播地址调用IPMulticastListen。Filter-modeINCLUDE或者EXCLUDE。在INCLUDE模式,仅接收IP源地址在source-list参数的报文。在EXCLUDE模式,仅接收IP源地址不在source-list参数的报文。source-list未排序的零或者多个IP单播地址。实现也许会限制IP地址个数,但不能小于64个。当IP地址个数超过限制时,服务接口必须返回错误。对于给定的socket、interface、multicast-address,每次仅能配置一种过滤模式和源列表。但,后续的配置请求可以更改模式和列表。以前版本的IGMP并不支持源过滤,仅支持加入和离开操作。加入操作等效于IPMulticastListen(socket,interface,multicast-address,EXCLUDE,{})离开操作等效于IPMulticastListen(socket,interface,multicast-address,INCLUDE,{}){}表示空列表。3.系统维护的多播接收状态3.1.socket状态(interface,multicast-address,filter-mode,source-list)如果请求过滤模式等于INCLUDE并且请求源列表等于空,则该接口和多播地址对应表项被删除。如果表现不存在,则该请求被忽略。如果请求过滤模式等于EXCLUDE或者请求源列表等于非空,则请求接口和多播地址对应的表项更改成包含该请求模式和源列表。如果表现不存在,则创建新表现并更新参数,3.2.interface状态(multicast-address,filter-mode,source-list)如果任意记录的过滤模式等于EXCLUDE,则该接口的过滤模式等于EXCLUDE,源列表等于所有EXCLUDE模式记录的交集减去INCLUDE模式的源列表。例如在接口i多播地址m的socketsockets1:(i,m,EXCLUDE,{a,b,c,d})sockets2:(i,m,EXCLUDE,{b,c,d,e})sockets3:(i,m,INCLUDE,{d,e,f})则接口i的记录(m,EXCLUDE,{b,c})如果第四个socketsockets4:(i,m,EXCLUDE,{})则接口记录变更为(m,EXCLUDE,{})如果所有记录的过滤模式都等于INCLUDE,则接口的过滤模式为INCLUDE,源列表等于所有记录的联合。例如在接口i多播地址m的socketsockets1:(i,m,INCLUDE,{a,b,c})sockets2:(i,m,INCLUDE,{b,c,d})sockets3:(i,m,INCLUDE,{e,f})则接口i的记录(m,INCLUDE,{a,b,c,d,e,f})实现不能使用一个EXCLUDE接口记录来代表一个组,该组所有socket处于INCLUDE状态。如果系统资源限制到达,则给应用层返回一个错误。当增加、删除、修改记录调用IPMulticastListen是,接口状态重新计算。注意:socket状态的改变并不一定导致接口状态改变。4.消息格式IGMP消息封装在IPv4报文,IP协议等于2,TTL等于1,IP优先级(0xC0),IP路由器警告选项。IGMPv3消息类型TypeNumber(hex)MessageName-----------------------------0x11MembershipQuery0x22Version3MembershipReport实现必须兼容以前版本的消息类型0x12Version1MembershipReport[RFC-1112]0x16Version2MembershipReport[RFC-2236]0x17Version2LeaveGroup[RFC-2236]不可识别消息类型安静丢弃。4.1.成员关系查询消息(MembershipQuery)012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type=0x11|MaxRespCode|Checksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|GroupAddress|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Resv|S|QRV|QQIC|NumberofSources(N)|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|SourceAddress[1]|+--+|SourceAddress[2]|+-.-+......+--+|SourceAddress[N]|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+4.1.1.MaxRespCode在发送相应报告前的最大允许时间。实际允许时间,称作最大响应时间(MaxRespTime),采用1/10秒为单位表示。如果MaxRespcode128,则MaxRespTime=MaxRespCode如果MaxRespcode〉=128,则MaxRespTime采用浮点格式表示01234567+-+-+-+-+-+-+-+-+|1|exp|mant|+-+-+-+-+-+-+-+-+MaxRespTime=(mant|0x10)(exp+3)较小的MaxRespTime值允许IGMPv3路由器调节“LeaveLatency”,较大的值允许调节网络大规模的IGMP流量。4.1.2.Checksum16比特IGMP报文(整个IP负荷)校验和。接收侧必须校验该值。4.1.3.GroupAddress发送通用查询(GeneralQuery)时组地址设置成0,发送特定组查询(Group-specificQuery)或者特定源地址组(Group-and-Source-SpecificQuery)查询时设置成IP组播地址。4.1.4.Resv4.1.5.SFlag(抑制路由器侧处理)当设置成1,S标记指示任意接收组播路由器抑制通用定时器更新,4.1.6.QRV(Queriery’sRobustnessVariable)如果非0,QRV域包含查询者的RobustnessVariable的值。如果查询者的RobustnessVariable值大于7,QRV域的最大值,QRV域设置成0。路由器采用最近一次接收的查询的QRV值作为自己的RobustnessVariable值。如果最近一次接收的QRV值等于0,接收者采用缺省RobustnessVariable值。4.1.7.QQIC(Querier'sQueryIntervalCode)QQIC指定查询者的QueryInterval。实际间隔,称作Querier’sInterval(QQI),以秒为单位,从QQIC获得方法如下:如果QQIC128,则QQI=QQIC如果QQIC=128,则QQIC采用浮点格式表示01234567+-+-+-+-+-+-+-+-+|1|exp|mant|+-+-+-+-+-+-+-+-+QQI=(mant|0x10)(exp+3)不是当前查询者的组播路由器采用最近一次接收的QQI作为查询间隔。如果最近一次接收的QQI等于0,则采用缺省值。4.1.8.NumberOfSources(N)指定查询中源地址个数。零表示通用查询或特定组查询,非零表示Group-and-Source-SpecificQuery。最大个数366。4.1.9.SourceAddress[i]IP单播地址表4.1.10.AdditionalData如果接收查询报文的IP包头的报文长度域指示存在额外的数据,则IGMPv3实现必须包含该数据与来计算IGMP校验和,但可以忽略这些额外字节。4.1.11.查询查询消息包含三种类型GeneralQuery组播路由器发送通用查询来学习邻居接口的组播状态。在通用查询报文,组地址和源地址数等于0。Group-SpecificQuery组播路由器发送特定组查询来学习邻居路由器单个组播地址的状态。在特定组查询报文,组播地址域包含组播地址,源地址个数等于0。Group-and-Source-SpecificQuery组播路由器发送该报文学习邻居接口需要特定源地址列表的特定组播地址。在Group-and-Source-Specific报文中,组播地址域包含组播地址,源地址域包含源地址列表。4.1.12.查询IP目的地址同用查询采用224.0.0.1作为IP目的地址。特定组查询和Group-and-Source-Specific采用组播地址作为IP目的地址。然而,系统必须能够接收并处理IP目的地址包含接收接口的任意地址(单播或者组播)。4.2.成员关系报告(MembershipReport)012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type=0x22|Reserved|Checksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Reserved|NumberofGroupRecords(M)|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+||...GroupRecord[1]...||+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+||...GroupRecord[2]...||+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|.|...|.|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+||...GroupRecord[M]...||+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+组记录格式+-+-+