精华内容
下载资源
问答
  • 老板找某个高层谈话,这是一对一形式。当老板叫来所有高层谈话,...TCP是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口确定)间存在一条连接。 网卡经过配置都能接收目的...

      老板找某个高层谈话,这是一对一形式。当老板叫来所有高层谈话,那么就变为了一对多。计算机网络中也是如此,当一个主机需要和更多机器对话时,就有了广播和多播这种形式。

    广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口号确定)间存在一条连接。

    网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制可表示为01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff可看作是以太网多播地址的特例)。

    广播的类型:
    1. 受限的广播
      受限的广播地址是255.255.255.255。路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
    2. 指向网络的广播
      指向网络的广播地址是主机号为全1的地址。根据子网掩码判断主机号。
    3. 指向子网的广播
      指向子网的广播地址为主机号为全1且有特定子网号的地址。同样依赖子网掩码。
    4. 指向所有子网的广播
      指向所有子网的广播地址的子网号及主机号为全1。

     

    比如局域网内有50台机器,我只想发送到其中的30台监听着5000端口的UDP协议程序,利用了广播:
    当各个机器的网卡收到满足自己网卡地址或者是广播多播地址时,网卡要传给设备驱动程序,驱动程序再根据协议传给IP层或者ARP等,比如到了IP层,IP层还要根据协议再传给UDP层等,到了UDP层,此时UDP根据端口号发现我这台机器没监听这个端口,那么我就给它返回端口不可达的ICMP报文。
    这样,那20台机器就分担了额外的压力,直到我的UDP层,我才知道哦这不是给我的。这就引出了多播的概念哈哈~我可以指定一些机器。

    多播组地址: 互联网D类地址就是多播组地址:
    如图:

     

     

    多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。
    一些多播组地址被IANA(互联网数字分配机构)确定为知名地址。例如:224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。
    多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP-2,224.0.1.2用作SGI公司的dogfight应用。

     

    -- 多播组地址到以太网地址的转换:
    如图:

    IANA拥有一个以太网地址块,即高位24bit为00:00:5e(十六进制表示),这意味着该地址块所拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中的一半(高位的第四个字节的高四位分成0~7和8~f两半,这样是分成了整体的一半)分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff(7f这个就是一半)。

    由于7的二进制是0111,所以高位0是确定的了,因此以太网地址的前三个字节01:00:5e和下一位0确定了25bit。剩下的23bit和IP地址的低23bit相同。这样D类地址中高9bit中的低5bit就被忽略了。 --这样带来一个问题,5bit被忽略,那么表示会有32(2的5次方)个不同的多播号映射成了相同的以太网地址...比如:224.128.64.32和224.0.64.32都映射为同一以太网地址01:00:5e:00:40:20。
    既然地址映射是不唯一的,那么设备驱动程序或IP层就必须对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。另外,如果网卡不提供足够的多播数据帧过滤功能,设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤。

     

    - IGMP:Internet组管理协议

    IGMP协议让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。
    正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议,IGMP有固定的报文长度,没有可选数据。
    如图:

    这是版本为1的IGMP。IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文(多播路由器发出的是查询类型的报文,网络上的主机发送的是报告类型的报文)。检验和的计算和IGMP协议相同,同样覆盖首部和数据部分。组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。

    多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如
    下:
    1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
    2) 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
    3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
    4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

    使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组(多播路由只关心是不是至少有一个,有一个就得转发)。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

    如图:查询和报告的报文。显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组

     

     

    值得注意的是:1. 在主机发送报告报文的时候,目的IP地址是组地址(表示报告发送的时候,网络上其它同一个组地址的主机也可以接收到,这意味着如果一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了,因为多播路由只要知道至少有一个多播组存在就OK了。);2. 多播路由发送的目的IP地址是224.0.0.1(这表示该子网内的所有系统组)。3. 一个初始TTL为0的多播数据报将被限制在同一主机。默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送。

    实现IGMP的几个细节:
    1). 当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是IP交付服务)。下一个报告将在间隔一段时间后发送。这个时间间隔由主机在 0 ~ 1 0秒的范围内随机选择。
    2). 当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应s(一个主机可能不止一个多播组,有几个就要发送几个响应)。

     

     

     

    -

    转载于:https://www.cnblogs.com/firstForEver/p/5358680.html

    展开全文
  • IGMP/MLD协议详解

    千次阅读 2016-12-06 15:34:18
    IGMP协议中,路由器侦听IGMP消息并周期的发出查询,以发现某个子网上哪些组是活动的,哪些是不活动的。  IGMP消息在IP数据报内发送,用IP协议号2来标识。同时,将IP存活时间(TTL)字段值设定为1,因此IGMP信息处于

    此文已经重新编辑:组播及igmp/mld协议详解(二)

    1 IGMP 协议

          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.1 IGMPv1协议

    1.1.1 IGMPv1的工作原理

    在IGMPvl中定义了基本规则、组成员查询机制和报告机制。当某接收主机希望接收到某个组播组的数据时,它会向本地链路上的查询路由器发送加入消息,通知查询路由器本机希望申请加入的组播组;查询路由器收到加入消息之后,把这条消息加入到查询路由器所维护的状态列表,同时向源发起建立组播分发树的请求;查询路由器在设定的周期内发起组成员查询消息;接收主机收到查询消息之后,会向查询路由器发送报告消息来应答查询,否则查询路由器会认为不存在接受主机;主机如果想离开某个组播组,就对路由器的查询保持沉默,经过一定时间,路由器便知道子网内没有组成员了。

    1.1.2 IGMPv1报文格式

    IGMPvl报文格式如图2-4所示,

    2-4 IGMPv1报文格式

          其主要内容包括:

    (1)    版本字段表示IGMP协议的版本号,在IGMP中置为1.

    (2)    类型字段,在IGMPv1中,只有两个值:

    取值为0x11,表示该报文为成员关系查询(Membership Query),主要是由路由器使用。

    取值为0x12,表示该报文为成员关系报告(Membership Report),主要是主机使用。

    (3)    校验和字段用于数据报文的校验。

    (4)    组地址字段。当用于成员关系查询时,本字段置为0,并被主机忽略;当用于成员关系报告时,本字段包含组播组地址。

    IGMPv1报文在网络中传输完整的报文格式如图2-5:


    2-5在网络中传输的IGMPv1报文

    1.1.3 IGMPv1工作过程

    在IGMPv1中,路由器利用查询一响应过程来确定在本地子网中是否有加入某个组播组的主机存在,如果有,则这台路由器就要完成向本子网组播数据包的功能;如果没有,则这台路由器就不必向此子网转发组播包。路由器周期性地向子网上的所有主机发送组播成员关系查询报文,希望加入某个组播组的主机就响应该查询,发送一个组播成员关系报告报文到子网上,在IGMP报文的组地址地段中加入想要加入的组播组的地址。路由器接收到来自主机的成员关系报告报文后,就知道了在该子网上有主机要加入组播组,组播组地址在报文中可以获得,接下来,路由器就会根据所使用的路由协议建立起相应的转发状态。

    当一个子网上有多台主机想加入同一个组播组时,就可以利用报告响应抑制功能,来减少子网中的重复信息传递。处理流程如下:主机接收到IGMP成员关系查询报文后,对加入的每个组播组启动一个倒数计时器。当计时器的值为0时,主机发送IGMP成员关系报告报文,通知路由器子网内仍有处于活动状态的组播接收者。当计时器到达0之前,若主机接收到来自其他主机发送的同一组成员关系报告报文,那么它就停止与该计时器得到的数,重新计时,这样,就避免了发送同一个成员关系报告报文给路由器。

    如果在一个子网中有多个组播路由器,那么多个路由器都发送IGMP查询报文是一种浪费,所以应当确定一个路由器作为查询路由器就可以了。但是在IGMPv1中,没有提供选举查询路由器的机制,而是把这一任务留给了组播路由协议。由于不同的协议使用不同的选举机制,会造成在一个子网中出现多个查询路由器,这也是IGMPv1的缺点之一。

    但是IGMPv1的另一个缺点是缺乏显式的离开方式。当一台主机想要离开一个组播组时,并不显式地表示出来,而只是不再对路由器的查询报文进行响应。当一个网段内某个组播组的最后一个成员退出后,路由器还会继续组播这个组的数据,直到一段时间内路由器接收不到任何来自该组的成员响应,才会知道该组已经没有接收者了,然后停止转发该组的组播数据报文。因此,路由器中需要为子网中的每一个组维护一个计时器。当路由器接收到某台主机发送的报告报文时,就会将该组的计时器清零;当某个组的计时器超时后,就说明在本网段上已经没有接收者,于是停止转发该组报文。

    下面是工作过程图解:

    1)     组成员加入


    图2-6 IGMPv1组成员加入

    2)     查询与响应


    图2-7 IGMPv1组成员查询

    3)     响应抑制机制


    图2-8 IGMPv1响应抑制机制

     

    4)     组成员离开


    图2-9 IGMPv1组成员离开

    1.2 IGMPv2协议

    1.2.1 IGMPv2的工作原理

    IGMPv1的主要缺点是离开延迟过大和选择查询路由器需要依赖组播路由协议进行。针对这些缺点,IGMPv2做了相关的改进。在IGMPv2中,增加了离开组的报文格式,当主机想要离开某个组播组时,不必等待路由器发出查询报文,而是可以直接向路由器发送成员关系报告报文,这样可以有效地缩短离开延迟。另外在IGMPv2中,还明确了查询路由器的选举机制。除此之外,IGMPv2的工作原理与IGMPv1基本一致

    1.2.2 IGMPv2的报文格式

    IGMPv2的报文格式如图2-10所示:


    图2-10 IGMPv2报文格式

    它在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.3 IGMPv2工作过程

    查询一响应过程与IGMPv1基本相同,但是有两点改进:①增加了特定组查询,特定组查询的目的是为了让路由器知道一个特定组在子网内是否还有组成员,以便判断是否还需要转发该组的数据报文;②IGMPv2的成员关系报告的类型代码不一样。

    IGMPv2的组成员加入与 IGMPv1中的完全一样。IGMPv2离开过程与IGMPv1相比有了较大的改进。主机离开一个组时,需要显式地发送一个离开报文给路由器。其过程如下:要离开的主机发送一个离开报文给子网上所有路由器(目的地址224.0.0.2)。查询路由器接收到离开报文后,会立即发送一个特定组查询到子网上。如果子网上还有该组的成员,则会发回一个响应报文;如果子网上己经没有该组的成员,则没有主机回应,于是路由器就知道己经没有该组成员了,就停止转发该组的数据。

    在IGMPv1中,选择查询路由器依赖于组播路由协议。而在IGMPv2中,明确了选择查询路由器的机制。其过程如下:开始时,子网上的每个路由器都假定自己就是查询路由器,发送一个通用查询报文给所有主机(目的地址224.0.0.1)。每个路由器都可以接收到来自其他路由器的报文,然后进行IP地址的比较,具有最低IP地址的路由器就成为查询路由器;非查询路由器启动一个计时器,无论何时接收到来自当选的查询路由器的通用查询报文,就将计时器复位。如果计时器超时,就认为当选的查询路由器发生故障,转向开始重新选择。计时器的取值一般为查询间隔的2倍

    图解工作过程如下:

    1)组成员加入


    图2-12 IGMPv2组成员加入

    2)查询与响应


    图2-13 IGMPv2组成员查询与响应

    3)查询器选举


    图2-14 IGMPv2查询路由器选择

    4)成员离开


    图2-15 IGMPv2组成员离开

    1.3 IGMPv3协议

    1.3.1 IGMPv3的工作原理

    IGMPv3的提出,主要是为了配合源特定组播的实现,即组播组成员可以指定接收或指定不接收某些组播源的报文。这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。IGMPv3的这一特性,可以实现源特定组播SSM技术。源特定组播(Source Specific Multicast,SSM)是一种区别于传统组播的新的业务模型,SSM保留了传统PIM-SM模式中的主机显式加入组播组的高效性,但是跳过了PIM-SM模式中的共享树和RP规程。SSM直接建立由(S,G)标志的一个组播最短路径树。SSM的一个(S,G)对也被称为一个频道(Channel)。PIM-SSM是对传统PIM协议的扩展,使用SSM,用户能直接从组播源接收组播报文,需要汇聚点(RP)的帮助。

    IGMPv3在IGMPvl/v2的基础上提供了额外的源过滤组播功能(Source FilteredMulticast,SFM)。在IGMPvl/v2中,主机只根据组地址来决定加入某个组,并从任何一个源接收发给该组地址的报文。具有源过滤组播功能(SFM)的主机使用IGMPv3来表示主机所希望加入的组播组,同时还表示该主机所希望接收的组播源的地址。主机可以使用一个包括列表(Inclusion List)或一个排除列表 (Exclusion List)来表示对源地址的限制。即组播组成员可以指定接收或指定不接收某些组播源的报文。这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。

    1.3.2 IGMPv3的报文格式

    IGMPv3的报文类型有以下几种:

    0xll:成员关系查询报文 (MembershipQeury)。

    0x22:版本3成员关系报告报文(version 3 Membership Report)

    0x12:版本1成员关系报告报文(version 1 Membership Report)

    0x16:版本2成员关系报告报文 (version 2 Membership Report)

    0x17:版本2离开报文 (version 2 LeaveGroup)。

    报文类型的值填写在报文中的类型字段。在IGMPv3中,查询报文和报告报文格式有较大差异,需要分别描述。图2-16为查询报文的格式


    图2-16 IGMPv3查询信息格式

    (1)类型字段,设置为0xll,代表该报文为查询报文。

    (2)最大响应时间字段,指明了主机发出响应的最长时间。

    (3)组地址字段,功能与IGMPv2一样,可以用于通用查询和组特定查询。

    (4)s字段,置为1时,其他路由器不对该报文进行处理。

    (5)QRV字段,查询路由器的健壮值(Querier’s RobustnessVariable),该值影响计时器和重试次数的取值。

    (6)QQIC字段,查询路由器的查询间隔码(Querier’s QueryIntervalCode),该值影响查询路由器的查询间隔时间,非查询路由器按照此值更新自己的缺省值。

    (7)源地址数目字段,该值表在这个报文中包含了多少个源地址。当进行通用查询(GeneraQuery)或者组特定查询 (GroupSpecific Query)时,该值置为0;当进行特定组和源查询 (Group Source pecific Query,用于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-18 IGMPv3侦听者报告格式

    (1)类型字段,置为0x22,表示该报文为IGMPv3报告报文。

    (2)组记录数目字段,表示此报文中包含的组记录数目。

    (3)组记录字段。包含若干个组记录,每个组记录长度不固定,其内容如图2-19:


    图2-19 IGMPv3组记录格式

    ①组记录类型字段,表示该组记录中包含的数据的类型,目前定义了六种类

    型,分别是:

    ·MODE IS INCLUDE。表示该主机的过滤模式为INCLUDE.也就是说,后面列出的地址都是主机想要接收的组播源地址。

    ·MODE IS EXCLUDE。表示该主机的过滤模式为EXCLUDE,也就是说,后面列

    出的地址都是主机想要拒绝的组播源地址。

    ·CHANGE TO INCLUDEMODE。表示该主机的过滤模式从EXCLUDE切换为INCLUDE模式。

    ·CHANGE TO EXCLUDEMODE。表示该主机的过滤模式从INCLUDE切换为EXCLUDE模式。

    ·ALLOW NEW SOURCES。表示该主机中新增的想要接收的源地址。

    ·BLOCK OLD SOURCES。表示从该主机中删除的不想接收的源地址。

    ②辅助数据长度字段,在组记录的最后,可以增加以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.3 IGMPv3的主要改进

    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报告报文


     

     


    2 MLD协议

    IPv6的组管理协议被称为MLD(组播监听者发现)。1999年,MLD版本l(RFC2710)被IETF发布。2004年,MLD版本2(RFC3810)标准出台,后一个版本可以向前一个兼容。MLD协议是专门针对基于IPv6的组播组管理协议。因为MLD使用全新的ICMPv6的报文格式,所以MLD协议就是ICMPv6协议的一个子集。MLD消息使用链路本地IPv6源地址发送,其跳数被限制为1。MLD消息的封装格式如图2-21所示:

    图2-21 MLD消息封装格式

    以下分别描述MLD协议的两个版本以及MLDSnooping,其中对于MLDSnooping的详细描述见第三章。

    2.1 MLDv1协议

    2.1.1 MLDv1的工作原理

    MLDvl协议是从IGMPv2协议中派生出来的,其运行机制和IGMPv2协议相同,专门用于IPv6组播群组的管理,其主要是应用于ASM模式组播路由协议的组管理工作。

    对于运行MLD协议的路由器,其接口要监听由IPv6组播地址产生的所有链路组播地址。路由器为它所在的每一条链路维护一个列表。表项有此链路中存在的组成员的组播地址,以及该地址相应的定时器。路由器周期性地发送通用请求 (general query),以查询该链路上是否存在某组播地址的组成员。节点收到路由器发送的常规请求后,经过随机时延后发出组播监听报告。这样是为了防止所有的节点都在同一时间发出报告分组,从而造成网络的突发性阻塞。当路由器收到链路上的报告分组时,如果报告地址不在路由器的列表上,则加入该项,否则计时器重新置位。如果某个地址的计时器过期,则从列表中删除。当节点要加入一个组播组时,主动发送组播监听报告,向路由器报告组成员的存在。节点退出组播组时,发送完成分组,删除有关路径。当请求状态的路由器从链路上接收到一个完成消息,如果消息中的组播地址在路由器的列表上,路由器发送一个特定组播地址查询。如果一段时延后没有报告分组,则认为该组播地址在此链路上没有组成员了。

    2.1.2 MLDv1报文格式

    MLDv1的报文格式如图2-22所示:

    图2-22 MLDv1报文格式

    (1)类型字段,MLDvl有如下三种报文类型:

    ·组播侦听查询消息(Type=130),分为两种类型:①通用查询(GeneralQuery),组地址字段置为全0,对所有的组进行组成员查询;②特定组查询(Group Pecific Query),用于判断一个特定的组播地址在本地链路上是否有组播侦听者。

    ·组播侦听报告消息(Type = 131)

    ·组播侦听完成消息(Type = 132)

    (2)编码字段,初始值为0。

    (3)校验和字段。

    (4)最大响应时间字段,只有在组播监听者查询报文中有效,主机必须在最大响应时间到达之前发出成员关系报告报文。通过该值,路由器可以调节组成员的离开延迟。

    (5)组地址字段,在通用组查询中,置为0;在特定组查询时,该字段存放要查询的组播组的地址。在报告和完成报文中,分别用于存放主机要加入和离开的组地址。

    MLDv1报文在网络中传输完整的报文格式如图2-23:

    图2-23 在网络中传输的MLDv1报文

    以上这些查询消息和应答消息报文有三种不同的报文交互方式:

    第一种交互方式是由路由器发起的。路由器作为询问者向与其相连接的所有主机发送一个一般查询消息报文。其目的地址是FF02::1。主机收到此消息后,应答一个包含当前组播地址状态记录的报文消息,此报文告诉路由器此主机希望接收哪个组播组或者哪些源发来的数据。

    第二种交互方式是由主机发起的。当一个主机离开一个组播组时,它就要向路由器发送组播侦听者完成消息,该消息包括一个状态改变一记录。路由器收到此消息后,向其相连的链路上发送一个特定组播地址查询,询问是否还有主机加人了此特定的组。

    第三种交互方式是由路由器发起的。如果在路由器的组播地址表中某一个组播地址的相关定时器超时后,仍然没有收到主机发来的包含状态变化记录的组播侦听者报告消息,路由器则向所有主机发送一个特定组查询消息,确认该组播组是否还有组播侦听者。

    2.1.3 MLDv1工作流程

    当一个网段内连接有多台路由器运行MLDvl协议时,必须选举一台路由器作为查询路由器,其余的自然成为非查询路由器。选举的机制是:地址最小的路由器当选。非查询路由器中有一个其他查询路由器存在计时器,当该计时器到期仍没有收到来自查询路由器的报文,则认为该查询路由器失效,重新开始新的选举。

    路由器定期向子网内所有的主机广播查询报文(目的地址为FF02::1),目的是获得主机的报告报文。在路由器刚开始工作时,会快速连续地发送查询报文,以便尽快搜集到子网内的组成员信息。

    当主机接收到一个查询报文后,就为每一个要接收的组地址启动一个延迟定时器。定时器的值在[0,最大响应时间]之间取一个随机数。如果查询报文中的最大响应时间字段被置为0,则定时器立刻到期。定时器到期后,主机会发送一个报告报文给路由器,通知路由器主机想接收的组播组地址。

    如果一台主机在定时器还未到期时,就收到其它主机通告路由器的报告报文,则读取该报文的组地址,如果和自己需要通告的组地址相同,则立刻停止相应的定时器,并不再发送关于该组地址的报告报文,这样就可以避免多台主机发送相同内容的报告报文给路由器,这种机制称为“响应抑制”。路由器收到来自主机的报告报文后,查看其中的组地址,如果该地址未在路由器的组地址列表中,则将其添加到组地址列表中,同时为其启动一个相应的定时器;如果该地址已经在路由器的组地址列表中,则将相应的定时器恢复最大值。如果一个组地址的定时器到期了,则说明该组地址在子网内已经没有接收者了,路由器会将此组地址从列表中删除。

    当一台主机想要加入某个组播组时,可以不必等待路由器的查询报文,而是直接向路由器发送报告报文。为了保障该报文的可靠性,一般会进行重传。当一台主机想要离开某个组播组时,必须发送一个离开报文给子网内的路由器。路由器收到离开报文后,会首先查看该组地址是否在组地址列表中,如果在,则发送一个特定组地址查询给子网内的所有主机。在一定的时间内,路由器收不到来自主机的应答,则会认为该组已经没有接收者,于是将该组地址从列表中删除。非查询路由器会忽略所有的离开报文。

    2.2 MLDv2协议

    MLDv2从IGMPv3中发展过来,和MLDvl相比,增加了IGMPv3所具有的源过滤功能,不仅能够支持ASM模式组播路由协议,而且还能够支持基于IPv6的SSM模式组播路由协议。

    MLDv2在MLDv1的基础上添加了源组播 (Source Specific Multieast)的概念,主机可以组播源报告(Group-Source Report)报告感兴趣的源,路由器则只转发该链路上所有组成员感兴趣的源所发送的报文。当主机想退出某组播源时,主机发送离开组播源报告(Group-Source Leave),查询者在接收到该报告后可以发送指定组播源请求,确认是否仍有组成员关心该组播源。MLDv2支持源过滤 (SourceFiltering),因此比MLDvl具备更高的可管理性和安全性。此外MLDv2还可以与MLDvl兼容。

    2.2.1 工作原理

    MLD协议的目的是使每一个组播路由器知道在本地链路上监听者对哪些组播地址和源地址感兴趣。被MLD收集到的信息提供给在路由器上运行的任何组播路由协议,来保证组播数据包被传递到组播组成员。组播路由器只需要知道在一个链路上,至少有一个节点正在监听从一个特定的源发给一个特定组播地址的数据包,它不需要知道有多少个这样的节点。

    MLDv2是一个不对称的协议,它包括分离的两部分:针对组播地址侦听者部分(监听组播数据包的主机或者路由器)和组播路由器部分。它为组播地址侦听者和组播路由器定义了不同的行为。当执行“组播路由器”功能时,收集组播路由协议所需要的组播侦听者信息;当执行“组播地址侦听者”功能时,通知本身和其他邻居组播路由器他的侦听状态。需要注意的是,一个组播路由器可以本身是一个或者多个组播地址的侦听者,执行“组播路由器”和“组播地址侦听者”双重功能。

    组播地址监听者在所有的支持组播的接口上执行MLDv2协议的“组播地址监听者”功能。

    组播路由器在它的每一个接口上执行MLDv2协议的“组播路由器”功能。如果在同一个子网上具有不止一个组播路由器,组播路由器将运行查询者选举机制来选择一个组播路由器来充当查询路由器。在这个子网上的所有的组播路由器都在监听由组播地址监听者发送的消息,并且维护相同的组播监听信息状态,以便于当目前的查询路由器不能工作时,接替查询路由器的工作,但是只有查询路由器在子网上能够发送周期的消息和被触发的查询消息。

    2.2.2 MLDv2报文格式

    为了支持以上的功能,MLDv2除了兼容支持MLDvl所有的三种报文:组播侦听查询(MLD消息类型值为130),包括一般查询和特定组播地址查询:组播侦听报告(MLD消息类型值为131);组播侦听完成(MLD消息类型值为 132)外,还增加了MLDv2查询消息(一般的查询、特定组播地址查询,特定组播地址和源查询)和“侦听者报告”报文。“侦听者报告”报文是向邻居路由器报告当前的组播侦听状态,或者声明侦听状态变化情况。

    综上,MLDv2消息中的所有消息如下:

    n  两种类型的MLDv2消息:

    l  组播侦听查询(类型值=130)

    l  Version 2组播侦听报告(类型值=143)

    n  为保证和MLDvl的兼容,MLDv2还要支持以下两种消息:

    l  Versionl组播侦听报告(类型值=131)[RFC2710]

    l  versionl组播侦听完成(类型值=132)[RFC2710]

    以下详细介绍两种类型的MLDv2消息内容。

    a)       MLDv2侦听查询消息

    组播侦听查询消息是在请求状态的路由器发出来的,它用来查询邻居接口的侦听状态。它的消息格式如图2-24所示:

    图2-24 MLDv2侦听查询消息

    (1)编码

    被发送者初始化为0,接收者被忽略。

    (2)校验和

    标准的ICMPv6校验和;算它,它需要计算整个消息,包括IPv6的伪造报头。为了计算它,首先把它设置为0。收到包后,要先验证后处理。

    (3)最大响应延迟

    最大响应延迟编码域指定了在发送响应报告的允许的最大延迟。实际时间叫做最大响应延迟,单位为毫秒。它们之间编码方式如下:

    l  如果最大响应延迟编码<32768,则最大响应延迟=最大响应延迟编码。

    l  如果最大响应延迟编码>=32768,则最大响应延迟编码构成如图2-25所示:

    图2-25 最大响应延迟编码构成图

    而且最大响应延迟=(mant| 0x1000) << (exp+3)。

    值比较小的最大响应延迟允许MLDv2路由器调整“离开潜伏期”(链路上最后一个节点停止侦听某个特定的组播地址到路由协议认为对于这个地址没有侦听者的时间)。值比较大的最大响应延迟,尤其是编码的那些,是用来调整在链路上的爆炸性的MLD消息的传输。

    (4)预留

    被发送者初始化为0,被接收者忽略。

    (5)组播地址

    对于一般的查询消息,组播地址为0。对于特定组地址或者特定组地址和源的查询消息来说,组播地址被设置成需要查询的地址。

         (6)S Flag(抑制路由器端的处理)

    如果设置成1,则表示对于所有接收在收到查询消息时抑制计时器更新。不过,并不抑制选举查询者和主机端对一类查询消息的处理,这类查询是路由器请求实现组播侦听者的功能。

    (7)QRV(查询者活跃变量)

    如果非0,那么查询者活跃变量域包含查询者使用的活跃变量值。如果活跃变量大于7(查询者活跃变量域的最大值),查询者活跃变量域被设置为0。

    路由器把近期收到的查询消息中的查询者活跃变量值设置为自己的活跃变量值,除非近期收到的查询消息中多数的查询者活跃变量值都为0。在多数的查询者活跃变量值都为0的清况时,就使用缺省值,或者静态配置特定的值。

    (8)QQIC(查询者查询间隔编码)

    查询者查询间隔编码域指定了查询者使用的查询间隔。实际间隔被叫作查询者查询间隔(QQI),它是以秒为单位的。它们之间的转换如下:

    l  如果QQIC<128,那么QQI=QQIC。

    l  如果QQIC>=128,则查询者查询间隔编码构成如图2-26所示:

    图2-26 查询者查询间隔编码构成图

          而且QQI = (mant | 0x10) << (exp+ 3)。

    不是当前查询者的组播路由器把最新收到的查询消息中的QQI值作为自己的查询间隔时间,除非近期收到的查询消息中多数的QQI值都为0。在都为0情况时,就使用缺省值

    (9)源个数(N)

    源个数(N)指出在当前处在查询的源地址的个数。在一般查询消息或者特定组播地址的查询消息中源个数都为0,在特定源和组地址的查询消息中不为0。源个数的大小由链路上可传输的最大报文决定。例如,在Ethernet上,可传输的最大报文是1500字节,携带路由警报选项的8字节的Hop-By-Hop扩展头和40字节的IPv6头一共48字节;源个数域前的MLD头共28字节,这样留给源个数域的有1424字节,所以源个数最大为89(1424/16)。

    (10)源地址[i]

    源地址[i]域是指向n的单播地址,n既是源个数域中的值。

    (11)附加数据区

    如果收到的查询消息中的IPv6头的负载长度域指定了需要有附加数据存在时,执行MLDv2时必须包含附加字节,用来确认收到MLD消息的校验和,否则就忽略附加字节。当发送查询消息时,一定不含附加消息。

    (12)查询变量

    查询消息中有三类查询变量:

    l  “一般查询消息”是查询路由器发出的,用来查询相连的链路上哪个组播地址有侦听者。组播地址和源个数都为0。

    l  “特定组地址查询消息”是查询路由器发出的,用来查询相连的链路上某个特定的组播地址是否有侦听者。在特定组地址查询消息中,包括希望查询的组地址,源个数为0。

    l  “特定组地址和源查询消息”是查询路由器发出的,用来查询相连的链路上某个特定的组播地址并且是来自特定的源的消息是否有侦听者。在特定组地址和源查询消息中,包括希望查询的组地址,源地址列表包含关注的源地址。

    (13)查询消息源地址

    所有MLDv2的查询消息的源地址为可用的IPv6链路本地地址。如果节点(路由器或主机)收到的来自不明的地址的查询消息,或者不是可用的IPv6链路本地地址时,它就丢弃这个消息,同时记录警报。

    (14)查询消息目的地址

    在MLDv2协议中,一般查询消息是发给链路内所有节点的地址的(FF02::1)。特定组地址查询消息和特定组地址和源查询消息都发给希望查询的组地址。同时节点必须接收和处理所有的IP目的地址是任意的单播或组播地址的查询消息,这样有利于调试。

    MLDv2侦听查询报文在网络中传输完整的报文格式如图2-27:

    图2-27 在网络中传输的MLDv2侦听查询报文

     

    b)       MLDv2组播侦听报告

    MLDv2组播侦听报告是IP节点发送的,它可以用来向邻居报告当前的侦听状态和以身改变接口上的组播侦听状态。消息格式如图2-28所示:

    图2-28MLDv2组播侦听报告报文

          组地址记录的消息格式如图2-29所示:

    图2-29 组地址记录的消息格式

    (1)   类型字段,在MLDv2侦听报告置为143。

    (2)   预留,被发送者初始化为0,被接收者忽略。

    (3)   校验和

    标准的ICMPv6校验和;它需要计算整个消息,包括IPv6的伪造报头。为了计算它,首先把它设置为0。收到包后,要先验证后处理。

    (4)   组播地址记录个数(M)

    组播地址记录个数(M)指出在当前侦听报告中的组播地址一记录的个数。

    (5)   组播地址记录

    组播地址记录是由来自报告发送的接口的发送者侦听每个组播地址的信息组成。具体记录如下:

    ①   记录类型

    当前状态报告是用来在收到查询消息的接口上节点发出的消息。它报告接口对于每一个组地址的当前的侦听状态。以下两类,如表2-2所示

     

    表2-2 当前状态报告类型

    名字

    作用

    1

    包括模式

    指明在当前的接口上对于特定的组地址的过滤模式是包括模式的。相应的源地址域是对于特定的组地址的列表必须为非空。

    2

    排除模式

    指明在当前的接口上对于特定的组地址的过滤模式是排除模式的。如果组地址列表为非空,则组地址域包含接口的对于特定组地址的源列表。

             

    过滤模式变化报告是接点在本地的接口层对于特殊的组地址状态变化时引起的IPv6 Multicast Listen请求而发出的报告,这种报告无论源地址是否发生变化都要发送。只有状态变化的接口才发送这类的报告。以下两类,如表2-3所示:

    表2-3 过滤模式变化报告

    名字

    作用

    3

    变为包括模式

    指明在当前的接口上对于特定的组地址的过滤模式转变为包括模式的。如果组地址列表为非空,则组地址域包含接口的对于特定组地址的新的源列表。

    4

    变为排除模式

      指明在当前的接口上对于特定的组地址的过滤模式转变为排除模式的。如果组地址列表为非空,则组地址域包含接口的对于特定组地址的新的源列表。


    源列表改变报告是节点发出的,当源列表改变,过滤模式和组地址不改变时会触发发送此消息。以下两类,如表2-4示

    表2-4 源列表改变报告

     

    名字

    作用

    5

    允许新的源

     指明在当前组地址记录中的源地址域需要增加新的源。若是在包含模式下,则把这些源加入到列表中。若是在排除模式下,则把这些源从列表中删除。

    6

    阻止旧的源

    指明在当前组地址记录中的源地址域需要删除旧的源。若是在包含模式下,则把这些源删除到列表中。若是在排除模式下,则把这些源从列表中删除加入。

       

    ②   附加数据长度

    附加数据长度域包含在当前在侦听报告中的附加数据长度,单位是字(32bits)。如果为0,则表示没有附加数据。

    ③   源个数(N)

    源个数(N)指出在当前在侦听报告中的源地址记录的个数。

    ④   组播地址

    组播地址域包含组播侦听报告中有的组播地址。

    ⑤   源地址[i]

    源地址[i]域是指向n的单播地址,n既是源个数域中的值。

    ⑥   辅助数据区

    如果存在辅助数据区,那么它是用来补充说明组播地址报告的。在MLDv2协议中没有定义间接寻址数据,所以不需要包括辅助数据区。因此设置辅助数据区为0,收到时也忽略。留出这样一部分辅助数据区是为了以后能够扩展MLD。

    MLDv2组播侦听报告报文在网络中传输完整的报文格式如图2-30:

    图2-30 在网络中传输的MLDv2组播侦听报告报文

    2.2.3 MLDv2工作过程

    MLDv2的工作过程可以分成三部分:一是侦听者端建立“组播侦听状态”;二是侦听者端和路由器端之间交换各种报文;三是路由器端建立侦听者状态列表。

    a)       建立侦听状态

    侦听者根据自身的需要指定它所感兴趣的组播组和组的源地址,建立自身的侦听状态,即加入列表或排除列表,然后主动或被动通知邻居组播路由器它的侦听状态。

    侦听者执行MLDv2协议的“侦听部分”的功能。无论节点上的接口是否在同一链路上.每个接口上都会执行侦听者功能。运行在侦听节点上层的协议或者应用通过“套接字组播状态”函数IPv6 Multicast Listen告知接口启用或禁用组播功能。

    IPv6MuhieastListen的格式如下:

    IPv6MulticastListen(套接口,接口,IPv6组播地址,过滤模式,源列表)

    套接口:用来区分节点内不同的组播请求实体(如进程用程序等)。

    接口:表示一个本地网络接口.通过该接口可以启用或禁用组播功能。

    IPv6组播地址:表示请求加入的组播地址。如果一个接口接收多于一个组播的分组,IPv6Multicast Listen就会被每个组播单独调用。

    过滤模式:过滤模式分为“INCLUDEMODE”(包含模式)和“EXCLUDEMODE”(排除模式)两种。

    源列表:一个无序的地址列表,可以为空。

    除了“套接字组播状态”之外,节点必须维护或计算出每个接口的组播侦听状态,称为“接口组播状态”,表示为(IPv6组播地址,过滤模式,源列表)。“接口组播状态”从“套接字组播状态”推导出来。从“套接字组播状态”导出“接口组播状态”的一般规律如下:根据具有相同接口(IPv6组播地址)的“套接字组播状态”记录,推导出一个“接口组播状态”。

    (1)若有“套接字组播状态”记录处于排除模式,那么“接口组播状态”的过滤模式就是“排除模式”,且“源地址列表”等于所有“排除模式”“套接字组播状态”记录中的源地址列表的交集,减去所有“包含模式”“套接字组播状态”记录中的源地址列表。

    (2)若所有“套接字组播状态”记录都是“包含模式”,那么“接口组播状态”就是“包含模式”,且“源地址列表”等于所有“套接字组播状态”记录中源地址列表的并集。

    侦听者通过上述算法可以建立起自己的“接口组播状态”。当接口收到组播分组之后,就会根据应用或者进程的“套接字组播状态”判断是否将数据分组传给上层。MLDv2报文不受源地址过滤影响,能够被所有的主机或路由器处理。

    b)       交换各种报文

    侦听者端和路由器端之间交换各种报文是协议的重要部分,在此过程中计时器会保持各个功能实体的可用性,若计时器到期会重新选举新的侦听者和查询器。

    同一子网内的运行MLDv2协议的路由器首先通过1P地址最小的接口为查询接口的“查询器选举机制”选举出一台“查询器”(Querierrouter),其余的路由自然成为非查询路由器(Non-Querier router)。被当选为“查询器”的接口周期性的在子网内发布一般查询报文,触发性地发布特定组播地址查询报文和特定组播地址和源查询报文,查询邻居接口的组播侦听者发出的组播侦听状态路由器周期性地发送一般查询报文,以查询该链路上是否存在某组播地址的组成员。

    在接收到收到路由器发送的一般查询报文后,节点经过[0,最大响应时间〕之间的随机时延后发出组播侦听报告,通过“当前状态报告”报告自己的“接口组播状态”。经过随机时延是为了防止所有的节点都在同一时间发出报告分组,从而避免网络的突发性阻塞。当侦听者端改变自己的接口组播状态时,如想要加入某个组播组时或改变对某个源的接收状态,就可以不必等待路由器的查询报文,而是直接向路由器发送报告报文。如果节点状态发生变化,会立刻发送并重传“状态变化报告”。在旧的“状态变化报告”重传过程中.如果又有新的状态变化发生,这个新的状态变化就会和原来的状态变化合并,然后组成新的“状态变化报告”重新发送,同时重置“重传次数”。节点新旧状态的变化引起的状态变化报告算法表如表2-5所示:

    表2-5状态变化报告算法表

    旧状态

    新状态

    状态改变报告

    包含(A)

    包含(B)

    允许(B-A),阻止(A-B)

    排除(A)

    排除(B)

    允许(A-B),阻止(B-A)

    包含(A)

    排除(B)

    变成排除(B)

    排除(A)

    包含(B)

    变成包含(B)



    在表中A和B为源地址列表,“包含”和“排除”指的是接口过滤模式,“允许”的意思是希望侦听的新增的源地址列表,“阻止”的意思是希望不再侦听的旧的源地址列表。

    路由器收到侦听者针对某组播的“状态变化报告”后,查询器会发送“组播地址指定查询”或者“组播地址和源地址指定查询”,以确定链路上是否还有其他侦听者,如果在“查询超时时钟”超时之前,收到其他侦听者的“当前状态报告”,则重置计时器。否则将修改相应的“组播侦听者状态”。

    c)       建立侦听状态列表

    通过侦听来自侦听者的报告报文,子网内所有路由器维持相同的“组播侦听状态”。当路由器收到链路上的报告分组时,如果报告地址不在路由器的列表上,则加入该项,否则计时器重新置位。路由器为它所在的每一条链路维护一个列表,除了组播地址列表外,还维护着每个组播地址相关的过滤模式、源地址列表、该地址相应的源计时器等信息。如果某个计时器过期,则把相应的表项从列表中删除。

    通过收到的侦听者报告,路由器(包括查询器和非查询器)可以在其接口上建立自己的“组播侦听者状态”信息表。与侦听者不同,如果路由器有多个接口处于同一子网内,则只在其中一个接口建立“侦听者状态”信息。“侦听者状态”由过滤模式、过滤时钟和源地址列表三部分组成。如果链路上某一组播的所有侦听者都是“包含模式”。则接口处于该组播的“包含模式”,用INCLUDE(A)表示。其中A表示源地址列表,INCLUDE(A)称为“包含列表”。如果“包含模式”侦听者发送了包含特定源地址的“当前状态报告”或者“状态变化报告”,该源地址就会被加入到“包含列表”中。“包含列表”中每一个源地址都有“源地址时钟”,一旦“包含模式”侦听者发送报告证实自己在侦听着某一特定源地址.“源地址时钟”就会被更新。如果“包含列表”中的“源地址时钟”由于长时间得不到更新而到期,该源地址就会从“包含列表”中删除。这称为“软离开”机制。

    除了“软离开”之外,还有一种“快速离开”机制。当“包含模式”侦听者通过“状态变化报告”声明不再侦听特定源地址时,链路上所有的路由器就会降低该源地址的“源地址时钟”。随后查询器会发出“组播地址和源地址指定查询”,用以验证该链路是否还有该源地址的侦听者。如果“源地址时钟”到期,该源地址就会从“包含列表”中删除。

    如果链路上存在处于“排除模式”的侦听者,则接口处于该组播的“排除模式”。收到第一个“排除模式”侦听者的报文时起,路由器就设定该组播的“过滤时钟”。每当“排除模式”侦听者通过“当前状态报告”证实自己的侦听状态时,“过滤时钟”被更新。当一个“包含模式”侦听者,通过“状态变化报告”声明自己变为“排除模式”时,该“过滤时钟”也会被更新。如果“过滤时钟”过期,路由器便将侦听者状态切换成“包含模式”。处于“排除模式”的路由器接口。侦听者状态由符号Exclude(X,Y)表示,其中X表示“请求列表”,Y表示“排除列表”。除了“排除列表”之外所有的源地址发出的组播分组,都会被路由器转发。虽然“请求列表”对于转发分组没有任何影响,但是路由器必须保持“请求列表”。原因如下:

    (1)为了标明“包含模式”侦听者所侦听的源地址。当链路中没有“排除模式”侦听者时,能及时将路由器转换成“包含模式”。这种转换不应该中断向该组播“包含模式”侦听者传输的数据流。当路由器切换成“包含模式”时。“请求列表”中的源地址被转移到“包含列表”中,“排除列表”被删除。

    (2)用来对原来没有“排除”的源地址进行快速的“排除”。如果路由器接收到一个特定源地址请求的报告。源地址就会被加入到“请求列表”,源地址时钟被赋值.随后查询器发出“组播地址和源地址指定查询”。用以检测该链路上是否还有对这些源地址感兴趣的节点。如果源地址的时钟就会到期时。仍没有侦听者响应。这时,这些源地址就会从“请求列表”移到“排除列表”。从这时起,该源地址就会被路由器阻断[15]。

     

    展开全文
  • 广播 老板找某个高层谈话,这是一对一形式。...TCP是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口确定)间存在一条连接。 网卡经过配置都能接收目的地址为...

    广播

    老板找某个高层谈话,这是一对一形式。当老板叫来所有高层谈话,那么就变为了一对多。计算机网络中也是如此,当一个主机需要和更多机器对话时,就有了广播和多播这种形式。

    广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口号确定)间存在一条连接。

    网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制可表示为01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff可看作是以太网多播地址的特例)。

    广播的类型:
    1. 受限的广播
      受限的广播地址是255.255.255.255。路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
    2. 指向网络的广播
      指向网络的广播地址是主机号为全1的地址。根据子网掩码判断主机号。
    3. 指向子网的广播
      指向子网的广播地址为主机号为全1且有特定子网号的地址。同样依赖子网掩码。
    4. 指向所有子网的广播
      指向所有子网的广播地址的子网号及主机号为全1。

    多播

    比如局域网内有50台机器,我只想发送到其中的30台监听着5000端口的UDP协议程序,利用了广播:
    当各个机器的网卡收到满足自己网卡地址或者是广播多播地址时,网卡要传给设备驱动程序,驱动程序再根据协议传给IP层或者ARP等,比如到了IP层,IP层还要根据协议再传给UDP层等,到了UDP层,此时UDP根据端口号发现我这台机器没监听这个端口,那么我就给它返回端口不可达的ICMP报文。
    这样,那20台机器就分担了额外的压力,直到我的UDP层,我才知道哦这不是给我的。这就引出了多播的概念哈哈~我可以指定一些机器。

    多播组地址: 互联网D类地址就是多播组地址:
    如图:

     

     

    多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。
    一些多播组地址被IANA(互联网数字分配机构)确定为知名地址。例如:224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。
    多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP-2,224.0.1.2用作SGI公司的dogfight应用。

     

    -- 多播组地址到以太网地址的转换:
    如图:

    IANA拥有一个以太网地址块,即高位24bit为00:00:5e(十六进制表示),这意味着该地址块所拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中的一半(高位的第四个字节的高四位分成0~7和8~f两半,这样是分成了整体的一半)分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff(7f这个就是一半)。

    由于7的二进制是0111,所以高位0是确定的了,因此以太网地址的前三个字节01:00:5e和下一位0确定了25bit。剩下的23bit和IP地址的低23bit相同。这样D类地址中高9bit中的低5bit就被忽略了。 --这样带来一个问题,5bit被忽略,那么表示会有32(2的5次方)个不同的多播号映射成了相同的以太网地址...比如:224.128.64.32和224.0.64.32都映射为同一以太网地址01:00:5e:00:40:20。
    既然地址映射是不唯一的,那么设备驱动程序或IP层就必须对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。另外,如果网卡不提供足够的多播数据帧过滤功能,设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤。

    - IGMP:Internet组管理协议

    IGMP协议让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。 
    正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议,IGMP有固定的报文长度,没有可选数据。
    如图:

    这是版本为1的IGMP。IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文(多播路由器发出的是查询类型的报文,网络上的主机发送的是报告类型的报文)。检验和的计算和IGMP协议相同,同样覆盖首部和数据部分。组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。

    多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如
    下:
    1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
    2) 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
    3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
    4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

    使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组(多播路由只关心是不是至少有一个,有一个就得转发)。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

    如图:查询和报告的报文。显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组

     

     

    值得注意的是:1. 在主机发送报告报文的时候,目的IP地址是组地址(表示报告发送的时候,网络上其它同一个组地址的主机也可以接收到,这意味着如果一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了,因为多播路由只要知道至少有一个多播组存在就OK了。);2. 多播路由发送的目的IP地址是224.0.0.1(这表示该子网内的所有系统组)。3. 一个初始TTL为0的多播数据报将被限制在同一主机。默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送。

    实现IGMP的几个细节:
    1). 当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是IP交付服务)。下一个报告将在间隔一段时间后发送。这个时间间隔由主机在 0 ~ 1 0秒的范围内随机选择。 
    2). 当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应s(一个主机可能不止一个多播组,有几个就要发送几个响应)。

     

    展开全文
  • 组播及igmp/mld协议详解(二)

    万次阅读 2018-05-10 09:59:01
    IGMP协议中,路由器侦听IGMP消息并周期的发出查询,以发现某个子网上哪些组是活动的,哪些是不活动的。 IGMP消息在IP数据报内发送,用IP协议号2来标识。同时,将IP存活时间(TTL)字段值设定为1,因此IGMP信息处于...

    1 IGMP 协议

          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),通用的是IGMPv2IGMPvl实现简单,但是有离开延迟过大和选择查询路由器需要依赖组播路由协议的缺点,IGMPv2对此进行了改进。IGMPv3协议的主要目的是支持源特定组播,并进一步对IGMPv2进行完善。

    1.1 IGMPv1协议

    1.1.1 IGMPv1的工作原理

    IGMPvl中定义了基本规则、组成员查询机制和报告机制。当某接收主机希望接收到某个组播组的数据时,它会向本地链路上的查询路由器发送加入消息,通知查询路由器本机希望申请加入的组播组;查询路由器收到加入消息之后,把这条消息加入到查询路由器所维护的状态列表,同时向源发起建立组播分发树的请求;查询路由器在设定的周期内发起组成员查询消息;接收主机收到查询消息之后,会向查询路由器发送报告消息来应答查询,否则查询路由器会认为不存在接受主机;主机如果想离开某个组播组,就对路由器的查询保持沉默,经过一定时间,路由器便知道子网内没有组成员了。

    1.1.2 IGMPv1报文格式

    IGMPvl报文格式如图2-4所示,


    2-4 IGMPv1报文格式

          其主要内容包括:

    1    版本字段表示IGMP协议的版本号,在IGMP中置为1.

    2    类型字段,在IGMPv1中,只有两个值:

    取值为0x11,表示该报文为成员关系查询(Membership Query),主要是由路由器使用。

    取值为0x12,表示该报文为成员关系报告(Membership Report),主要是主机使用。

    3    校验和字段用于数据报文的校验。

    4    组地址字段。当用于成员关系查询时,本字段置为0,并被主机忽略;当用于成员关系报告时,本字段包含组播组地址。

    IGMPv1报文在网络中传输完整的报文格式如图2-5


    2-5 在网络中传输的IGMPv1报文

    1.1.3 IGMPv1工作过程

    IGMPv1中,路由器利用查询一响应过程来确定在本地子网中是否有加入某个组播组的主机存在,如果有,则这台路由器就要完成向本子网组播数据包的功能;如果没有,则这台路由器就不必向此子网转发组播包。路由器周期性地向子网上的所有主机发送组播成员关系查询报文,希望加入某个组播组的主机就响应该查询,发送一个组播成员关系报告报文到子网上,在IGMP报文的组地址地段中加入想要加入的组播组的地址。路由器接收到来自主机的成员关系报告报文后,就知道了在该子网上有主机要加入组播组,组播组地址在报文中可以获得,接下来,路由器就会根据所使用的路由协议建立起相应的转发状态。

    当一个子网上有多台主机想加入同一个组播组时,就可以利用报告响应抑制功能,来减少子网中的重复信息传递。处理流程如下:

    主机接收到IGMP成员关系查询报文后,对加入的每个组播组启动一个倒数计时器。当计时器的值为0时,主机发送IGMP成员关系报告报文,通知路由器子网内仍有处于活动状态的组播接收者。当计时器到达0之前,若主机接收到来自其他主机发送的同一组成员关系报告报文,那么它就停止与该计时器得到的数,重新计时,这样,就避免了发送同一个成员关系报告报文给路由器。

    如果在一个子网中有多个组播路由器,那么多个路由器都发送IGMP查询报文是一种浪费,所以应当确定一个路由器作为查询路由器就可以了。但是在IGMPv1中,没有提供选举查询路由器的机制,而是把这一任务留给了组播路由协议。由于不同的协议使用不同的选举机制,会造成在一个子网中出现多个查询路由器,这也是IGMPv1的缺点之一。

    但是IGMPv1的另一个缺点是缺乏显式的离开方式。当一台主机想要离开一个组播组时,并不显式地表示出来,而只是不再对路由器的查询报文进行响应。当一个网段内某个组播组的最后一个成员退出后,路由器还会继续组播这个组的数据,直到一段时间内路由器接收不到任何来自该组的成员响应,才会知道该组已经没有接收者了,然后停止转发该组的组播数据报文。因此,路由器中需要为子网中的每一个组维护一个计时器。当路由器接收到某台主机发送的报告报文时,就会将该组的计时器清零;当某个组的计时器超时后,就说明在本网段上已经没有接收者,于是停止转发该组报文。

    下面是工作过程图解:

    1)     组成员加入


    2-6 IGMPv1组成员加入

    2)     查询与响应


    2-7 IGMPv1组成员查询

    3)     响应抑制机制


    2-8 IGMPv1响应抑制机制

    4)     组成员离开


    2-9 IGMPv1组成员离开

    1.2 IGMPv2协议

    1.2.1 IGMPv2的工作原理

    IGMPv1的主要缺点是离开延迟过大和选择查询路由器需要依赖组播路由协议进行。针对这些缺点,IGMPv2做了相关的改进。在IGMPv2中,增加了离开组的报文格式,当主机想要离开某个组播组时,不必等待路由器发出查询报文,而是可以直接向路由器发送成员关系报告报文,这样可以有效地缩短离开延迟。另外在IGMPv2中,还明确了查询路由器的选举机制。除此之外,IGMPv2的工作原理与IGMPv1基本一致

    1.2.2 IGMPv2的报文格式

    IGMPv2的报文格式如图2-10所示:


    2-10 IGMPv2报文格式

    它在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.3 IGMPv2工作过程

    查询一响应过程与IGMPv1基本相同,但是有两点改进:增加了特定组查询,特定组查询的目的是为了让路由器知道一个特定组在子网内是否还有组成员,以便判断是否还需要转发该组的数据报文;IGMPv2的成员关系报告的类型代码不一样。

    IGMPv2的组成员加入与 IGMPv1中的完全一样。IGMPv2离开过程与IGMPv1相比有了较大的改进。主机离开一个组时,需要显式地发送一个离开报文给路由器。其过程如下:

    要离开的主机发送一个离开报文给子网上所有路由器(目的地址224.0.0.2),查询路由器接收到离开报文后,会立即发送一个特定组查询到子网上。如果子网上还有该组的成员,则会发回一个响应报文;如果子网上己经没有该组的成员,则没有主机回应,于是路由器就知道己经没有该组成员了,就停止转发该组的数据。

    IGMPv1中,选择查询路由器依赖于组播路由协议;而在IGMPv2中,明确了选择查询路由器的机制。其过程如下:

    开始时,子网上的每个路由器都假定自己就是查询路由器,发送一个通用查询报文给所有主机(目的地址224.0.0.1)。每个路由器都可以接收到来自其他路由器的报文,然后进行IP地址的比较,具有最低IP地址的路由器就成为查询路由器;非查询路由器启动一个计时器,无论何时接收到来自当选的查询路由器的通用查询报文,就将计时器复位。如果计时器超时,就认为当选的查询路由器发生故障,转向开始重新选择。计时器的取值一般为查询间隔的2

    图解工作过程如下:

    1)组成员加入


    2-12 IGMPv2组成员加入

    2)查询与响应


    2-13 IGMPv2组成员查询与响应

    3)查询器选举


    2-14 IGMPv2查询路由器选择

    4)成员离开


    2-15 IGMPv2组成员离开

    1.3 IGMPv3协议

    1.3.1 IGMPv3的工作原理

    IGMPv3的提出,主要是为了配合源特定组播的实现,即组播组成员可以指定接收或指定不接收某些组播源的报文。这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。IGMPv3的这一特性,可以实现源特定组播SSM技术。源特定组播(Source Specific MulticastSSM)是一种区别于传统组播的新的业务模型,SSM保留了传统PIM-SM模式中的主机显式加入组播组的高效性,但是跳过了PIM-SM模式中的共享树和RP规程。SSM直接建立由(SG)标志的一个组播最短路径树。SSM的一个(SG)对也被称为一个频道(Channel)PIM-SSM是对传统PIM协议的扩展,使用SSM,用户能直接从组播源接收组播报文,需要汇聚点(RP)的帮助。

    IGMPv3IGMPvl/v2的基础上提供了额外的源过滤组播功能(Source FilteredMulticastSFM)。在IGMPvl/v2中,主机只根据组地址来决定加入某个组,并从任何一个源接收发给该组地址的报文。具有源过滤组播功能(SFM)的主机使用IGMPv3来表示主机所希望加入的组播组,同时还表示该主机所希望接收的组播源的地址。主机可以使用一个包括列表(Inclusion List)或一个排除列表 (Exclusion List)来表示对源地址的限制。即组播组成员可以指定接收或指定不接收某些组播源的报文。这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。

    1.3.2 IGMPv3的报文格式

    IGMPv3的报文类型有以下几种:

    0xll:成员关系查询报文 (MembershipQeury)

    0x22:版本3成员关系报告报文(version 3 Membership Report)

    0x12:版本1成员关系报告报文(version 1 Membership Report)

    0x16:版本2成员关系报告报文 (version 2 Membership Report)

    0x17:版本2离开报文 (version 2 LeaveGroup)

    报文类型的值填写在报文中的类型字段。在IGMPv3中,查询报文和报告报文格式有较大差异,需要分别描述。图2-16为查询报文的格式


    2-16 IGMPv3查询信息格式

    (1)类型字段,设置为0xll,代表该报文为查询报文。

    (2)最大响应时间字段,指明了主机发出响应的最长时间。

    (3)组地址字段,功能与IGMPv2一样,可以用于通用查询和组特定查询。

    (4)s字段,置为1时,其他路由器不对该报文进行处理。

    (5)QRV字段,查询路由器的健壮值(Querier’s RobustnessVariable),该值影响计时器和重试次数的取值。

    (6)QQIC字段,查询路由器的查询间隔码(Querier’s QueryIntervalCode),该值影响查询路由器的查询间隔时间,非查询路由器按照此值更新自己的缺省值。

    (7)源地址数目字段,该值表在这个报文中包含了多少个源地址。当进行通用查询(GeneraQuery)或者组特定查询 (GroupSpecific Query)时,该值置为0;当进行特定组和源查询 (Group Source pecific Query,用于PIMSSM)时,该值为源特定地址的数目。虽然该值最大可为65536,但是实际上受限于数据链路层的MTU,例如在以太网上,1P数据报最长为1500字节,除去IP报头的24字节和IGMP报头的12字节,剩余1464字节,所以最多包含366(1464/4)个源地址。

    (8)源地址地段。

    IGMPv3查询信息报文在网络中传输完整的报文格式如图2-17


    2-17 在网络中传输的IGMPv3查询报文格式

    IGMPv3报告报文的格式较为复杂,如图2-18所示。


    2-18 IGMPv3侦听者报告格式

    (1)类型字段,置为0x22,表示该报文为IGMPv3报告报文。

    (2)组记录数目字段,表示此报文中包含的组记录数目。

    (3)组记录字段。包含若干个组记录,每个组记录长度不固定,其内容如图2-19


    2-19 IGMPv3组记录格式

    组记录类型字段,表示该组记录中包含的数据的类型,目前定义了六种类

    型,分别是:

    ·MODE IS INCLUDE。表示该主机的过滤模式为INCLUDE.也就是说,后面列出的地址都是主机想要接收的组播源地址。

    ·MODE IS EXCLUDE。表示该主机的过滤模式为EXCLUDE,也就是说,后面列

    出的地址都是主机想要拒绝的组播源地址。

    ·CHANGE TO INCLUDEMODE。表示该主机的过滤模式从EXCLUDE切换为INCLUDE模式。

    ·CHANGE TO EXCLUDEMODE。表示该主机的过滤模式从INCLUDE切换为EXCLUDE模式。

    ·ALLOW NEW SOURCES。表示该主机中新增的想要接收的源地址。

    ·BLOCK OLD SOURCES。表示从该主机中删除的不想接收的源地址。

    辅助数据长度字段,在组记录的最后,可以增加以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.3 IGMPv3的主要改进

    IGMPv3除了支持原特定组播外,其工作原理与IGMPv2相比,并没有本质的改变,只是在某些地方做了改进和优化。以下列出了IGMPv3的主要特点和改进:

    支持源特定组播SSM;

    向后兼容IGMPvlIGMPv2;

    主机可以定义要接收的组播源地址;

    非查询路由器可以与查询路由器保持参数值同步;

    最大响应时问从25.5s增加到53min,适合于较大的网络;

    辅助数据字段为将来的应用预留了空间;

    关系成员报告报文发送给目的地址224.0.0.22,可以帮助二层交换机更有效地实现IGMP监听 (IGMPSnooping)功能;

    报告报文中可以包含多个组记录,可以有效地减少网络通信量;

    IGMPv3中,取消了前面版本中的响应抑制功能,主要原因是:

    第一,使用响应抑制时,路由器只知道子网上是否有组成员,而不知道有几个组成员,以及成员是哪些主机:取消响应抑制,路由器就可以记录每一个组成员的信息,可以开发一记账等增值服务功能。

    第二,许多网桥或者二层/三层交换机在实现IGMP监听功能时,为了避免响应抑制,一般不转发网段问的IGMP报文。取消了响应抑制后,可以简化这些设备的设计。

    第三,取消响应抑制后,主机不必处理来自其他主机的报文,简化了主机的实现。在查询报文中,增加S标志位,可以提高系统的健壮性。

    IGMPv3报告报文在网络中传输完整的报文格式如图2-20


    2-20 在网络中传输的IGMPv3报告报文

    2 MLD协议

    IPv6的组管理协议被称为MLD(组播监听者发现)1999年,MLD版本l(RFC2710)IETF发布。2004年,MLD版本2(RFC3810)标准出台,后一个版本可以向前一个兼容。MLD协议是专门针对基于IPv6的组播组管理协议。因为MLD使用全新的ICMPv6的报文格式,所以MLD协议就是ICMPv6协议的一个子集。MLD消息使用链路本地IPv6源地址发送,其跳数被限制为1MLD消息的封装格式如图2-21所示:


    2-21 MLD消息封装格式

    以下分别描述MLD协议的两个版本以及MLDSnooping,其中对于MLDSnooping的详细描述见第三章。

    2.1 MLDv1协议

    2.1.1 MLDv1的工作原理

    MLDvl协议是从IGMPv2协议中派生出来的,其运行机制和IGMPv2协议相同,专门用于IPv6组播群组的管理,其主要是应用于ASM模式组播路由协议的组管理工作。

    对于运行MLD协议的路由器,其接口要监听由IPv6组播地址产生的所有链路组播地址。路由器为它所在的每一条链路维护一个列表。表项有此链路中存在的组成员的组播地址,以及该地址相应的定时器。路由器周期性地发送通用请求 (general query),以查询该链路上是否存在某组播地址的组成员。节点收到路由器发送的常规请求后,经过随机时延后发出组播监听报告。这样是为了防止所有的节点都在同一时间发出报告分组,从而造成网络的突发性阻塞。当路由器收到链路上的报告分组时,如果报告地址不在路由器的列表上,则加入该项,否则计时器重新置位。如果某个地址的计时器过期,则从列表中删除。当节点要加入一个组播组时,主动发送组播监听报告,向路由器报告组成员的存在。节点退出组播组时,发送完成分组,删除有关路径。当请求状态的路由器从链路上接收到一个完成消息,如果消息中的组播地址在路由器的列表上,路由器发送一个特定组播地址查询。如果一段时延后没有报告分组,则认为该组播地址在此链路上没有组成员了。

    2.1.2 MLDv1报文格式

    MLDv1的报文格式如图2-22所示:


    2-22 MLDv1报文格式

    (1)类型字段,MLDvl有如下三种报文类型:

    ·组播侦听查询消息(Type=130),分为两种类型:通用查询(GeneralQuery),组地址字段置为全0,对所有的组进行组成员查询;特定组查询(Group Pecific Query),用于判断一个特定的组播地址在本地链路上是否有组播侦听者。

    ·组播侦听报告消息(Type = 131)

    ·组播侦听完成消息(Type = 132)

    (2)编码字段,初始值为0

    (3)校验和字段。

    (4)最大响应时间字段,只有在组播监听者查询报文中有效,主机必须在最大响应时间到达之前发出成员关系报告报文。通过该值,路由器可以调节组成员的离开延迟。

    (5)组地址字段,在通用组查询中,置为0;在特定组查询时,该字段存放要查询的组播组的地址。在报告和完成报文中,分别用于存放主机要加入和离开的组地址。

    MLDv1报文在网络中传输完整的报文格式如图2-23


    2-23 在网络中传输的MLDv1报文

    以上这些查询消息和应答消息报文有三种不同的报文交互方式:

    第一种交互方式是由路由器发起的。路由器作为询问者向与其相连接的所有主机发送一个一般查询消息报文。其目的地址是FF02::1。主机收到此消息后,应答一个包含当前组播地址状态记录的报文消息,此报文告诉路由器此主机希望接收哪个组播组或者哪些源发来的数据。

    第二种交互方式是由主机发起的。当一个主机离开一个组播组时,它就要向路由器发送组播侦听者完成消息,该消息包括一个状态改变一记录。路由器收到此消息后,向其相连的链路上发送一个特定组播地址查询,询问是否还有主机加人了此特定的组。

    第三种交互方式是由路由器发起的。如果在路由器的组播地址表中某一个组播地址的相关定时器超时后,仍然没有收到主机发来的包含状态变化记录的组播侦听者报告消息,路由器则向所有主机发送一个特定组查询消息,确认该组播组是否还有组播侦听者。

    2.1.3 MLDv1工作流程

    当一个网段内连接有多台路由器运行MLDvl协议时,必须选举一台路由器作为查询路由器,其余的自然成为非查询路由器。选举的机制是:地址最小的路由器当选。非查询路由器中有一个其他查询路由器存在计时器,当该计时器到期仍没有收到来自查询路由器的报文,则认为该查询路由器失效,重新开始新的选举。

    路由器定期向子网内所有的主机广播查询报文(目的地址为FF02::1),目的是获得主机的报告报文。在路由器刚开始工作时,会快速连续地发送查询报文,以便尽快搜集到子网内的组成员信息。

    当主机接收到一个查询报文后,就为每一个要接收的组地址启动一个延迟定时器。定时器的值在[0,最大响应时间]之间取一个随机数。如果查询报文中的最大响应时间字段被置为0,则定时器立刻到期。定时器到期后,主机会发送一个报告报文给路由器,通知路由器主机想接收的组播组地址。

    如果一台主机在定时器还未到期时,就收到其它主机通告路由器的报告报文,则读取该报文的组地址,如果和自己需要通告的组地址相同,则立刻停止相应的定时器,并不再发送关于该组地址的报告报文,这样就可以避免多台主机发送相同内容的报告报文给路由器,这种机制称为响应抑制。路由器收到来自主机的报告报文后,查看其中的组地址,如果该地址未在路由器的组地址列表中,则将其添加到组地址列表中,同时为其启动一个相应的定时器;如果该地址已经在路由器的组地址列表中,则将相应的定时器恢复最大值。如果一个组地址的定时器到期了,则说明该组地址在子网内已经没有接收者了,路由器会将此组地址从列表中删除。

    当一台主机想要加入某个组播组时,可以不必等待路由器的查询报文,而是直接向路由器发送报告报文。为了保障该报文的可靠性,一般会进行重传。当一台主机想要离开某个组播组时,必须发送一个离开报文给子网内的路由器。路由器收到离开报文后,会首先查看该组地址是否在组地址列表中,如果在,则发送一个特定组地址查询给子网内的所有主机。在一定的时间内,路由器收不到来自主机的应答,则会认为该组已经没有接收者,于是将该组地址从列表中删除。非查询路由器会忽略所有的离开报文。

    2.2 MLDv2协议

    MLDv2IGMPv3中发展过来,和MLDvl相比,增加了IGMPv3所具有的源过滤功能,不仅能够支持ASM模式组播路由协议,而且还能够支持基于IPv6SSM模式组播路由协议。

    MLDv2MLDv1的基础上添加了源组播 (Source Specific Multieast)的概念,主机可以组播源报告(Group-Source Report)报告感兴趣的源,路由器则只转发该链路上所有组成员感兴趣的源所发送的报文。当主机想退出某组播源时,主机发送离开组播源报告(Group-Source Leave),查询者在接收到该报告后可以发送指定组播源请求,确认是否仍有组成员关心该组播源。MLDv2支持源过滤 (SourceFiltering),因此比MLDvl具备更高的可管理性和安全性。此外MLDv2还可以与MLDvl兼容。

    2.2.1 工作原理

    MLD协议的目的是使每一个组播路由器知道在本地链路上监听者对哪些组播地址和源地址感兴趣。被MLD收集到的信息提供给在路由器上运行的任何组播路由协议,来保证组播数据包被传递到组播组成员。组播路由器只需要知道在一个链路上,至少有一个节点正在监听从一个特定的源发给一个特定组播地址的数据包,它不需要知道有多少个这样的节点。

    MLDv2是一个不对称的协议,它包括分离的两部分:针对组播地址侦听者部分(监听组播数据包的主机或者路由器)和组播路由器部分。它为组播地址侦听者和组播路由器定义了不同的行为。当执行组播路由器功能时,收集组播路由协议所需要的组播侦听者信息;当执行组播地址侦听者功能时,通知本身和其他邻居组播路由器他的侦听状态。需要注意的是,一个组播路由器可以本身是一个或者多个组播地址的侦听者,执行组播路由器组播地址侦听者双重功能。

    组播地址监听者在所有的支持组播的接口上执行MLDv2协议的组播地址监听者功能。

    组播路由器在它的每一个接口上执行MLDv2协议的组播路由器功能。如果在同一个子网上具有不止一个组播路由器,组播路由器将运行查询者选举机制来选择一个组播路由器来充当查询路由器。在这个子网上的所有的组播路由器都在监听由组播地址监听者发送的消息,并且维护相同的组播监听信息状态,以便于当目前的查询路由器不能工作时,接替查询路由器的工作,但是只有查询路由器在子网上能够发送周期的消息和被触发的查询消息。

    2.2.2 MLDv2报文格式

    为了支持以上的功能,MLDv2除了兼容支持MLDvl所有的三种报文:组播侦听查询(MLD消息类型值为130),包括一般查询和特定组播地址查询:组播侦听报告(MLD消息类型值为131);组播侦听完成(MLD消息类型值为 132)外,还增加了MLDv2查询消息(一般的查询、特定组播地址查询,特定组播地址和源查询)侦听者报告报文。侦听者报告报文是向邻居路由器报告当前的组播侦听状态,或者声明侦听状态变化情况。

    综上,MLDv2消息中的所有消息如下:

    两种类型的MLDv2消息:

    组播侦听查询(类型值=130)

    l  Version 2组播侦听报告(类型值=143)

    为保证和MLDvl的兼容,MLDv2还要支持以下两种消息:

    l  Versionl组播侦听报告(类型值=131)[RFC2710]

    l  versionl组播侦听完成(类型值=132)[RFC2710]

    以下详细介绍两种类型的MLDv2消息内容。

    a)       MLDv2侦听查询消息

    组播侦听查询消息是在请求状态的路由器发出来的,它用来查询邻居接口的侦听状态。它的消息格式如图2-24所示:


    2-24 MLDv2侦听查询消息

    (1)编码

    被发送者初始化为0,接收者被忽略。

    (2)校验和

    标准的ICMPv6校验和;算它,它需要计算整个消息,包括IPv6的伪造报头。为了计算它,首先把它设置为0。收到包后,要先验证后处理。

    (3)最大响应延迟

    最大响应延迟编码域指定了在发送响应报告的允许的最大延迟。实际时间叫做最大响应延迟,单位为毫秒。它们之间编码方式如下:

    如果最大响应延迟编码<32768,则最大响应延迟=最大响应延迟编码。

    如果最大响应延迟编码>=32768,则最大响应延迟编码构成如图2-25所示:


    2-25 最大响应延迟编码构成图

    而且最大响应延迟=(mant| 0x1000) << (exp+3)

    值比较小的最大响应延迟允许MLDv2路由器调整离开潜伏期”(链路上最后一个节点停止侦听某个特定的组播地址到路由协议认为对于这个地址没有侦听者的时间)。值比较大的最大响应延迟,尤其是编码的那些,是用来调整在链路上的爆炸性的MLD消息的传输。

    (4)预留

    被发送者初始化为0,被接收者忽略。

    (5)组播地址

    对于一般的查询消息,组播地址为0。对于特定组地址或者特定组地址和源的查询消息来说,组播地址被设置成需要查询的地址。

         (6)S Flag(抑制路由器端的处理)

    如果设置成1,则表示对于所有接收在收到查询消息时抑制计时器更新。不过,并不抑制选举查询者和主机端对一类查询消息的处理,这类查询是路由器请求实现组播侦听者的功能。

    (7)QRV(查询者活跃变量)

    如果非0,那么查询者活跃变量域包含查询者使用的活跃变量值。如果活跃变量大于7(查询者活跃变量域的最大值),查询者活跃变量域被设置为0

    路由器把近期收到的查询消息中的查询者活跃变量值设置为自己的活跃变量值,除非近期收到的查询消息中多数的查询者活跃变量值都为0。在多数的查询者活跃变量值都为0的清况时,就使用缺省值,或者静态配置特定的值。

    (8)QQIC(查询者查询间隔编码)

    查询者查询间隔编码域指定了查询者使用的查询间隔。实际间隔被叫作查询者查询间隔(QQI),它是以秒为单位的。它们之间的转换如下:

    如果QQIC<128,那么QQI=QQIC

    如果QQIC>=128,则查询者查询间隔编码构成如图2-26所示:


    2-26 查询者查询间隔编码构成图

          而且QQI = (mant | 0x10) << (exp+ 3)

    不是当前查询者的组播路由器把最新收到的查询消息中的QQI值作为自己的查询间隔时间,除非近期收到的查询消息中多数的QQI值都为0。在都为0情况时,就使用缺省值

    (9)源个数(N)

    源个数(N)指出在当前处在查询的源地址的个数。在一般查询消息或者特定组播地址的查询消息中源个数都为0,在特定源和组地址的查询消息中不为0。源个数的大小由链路上可传输的最大报文决定。例如,在Ethernet上,可传输的最大报文是1500字节,携带路由警报选项的8字节的Hop-By-Hop扩展头和40字节的IPv6头一共48字节;源个数域前的MLD头共28字节,这样留给源个数域的有1424字节,所以源个数最大为89(1424/16)

    (10)源地址[i]

    源地址[i]域是指向n的单播地址,n既是源个数域中的值。

    (11)附加数据区

    如果收到的查询消息中的IPv6头的负载长度域指定了需要有附加数据存在时,执行MLDv2时必须包含附加字节,用来确认收到MLD消息的校验和,否则就忽略附加字节。当发送查询消息时,一定不含附加消息。

    (12)查询变量

    查询消息中有三类查询变量:

    l  “一般查询消息是查询路由器发出的,用来查询相连的链路上哪个组播地址有侦听者。组播地址和源个数都为0

    l  “特定组地址查询消息是查询路由器发出的,用来查询相连的链路上某个特定的组播地址是否有侦听者。在特定组地址查询消息中,包括希望查询的组地址,源个数为0

    l  “特定组地址和源查询消息是查询路由器发出的,用来查询相连的链路上某个特定的组播地址并且是来自特定的源的消息是否有侦听者。在特定组地址和源查询消息中,包括希望查询的组地址,源地址列表包含关注的源地址。

    (13)查询消息源地址

    所有MLDv2的查询消息的源地址为可用的IPv6链路本地地址。如果节点(路由器或主机)收到的来自不明的地址的查询消息,或者不是可用的IPv6链路本地地址时,它就丢弃这个消息,同时记录警报。

    (14)查询消息目的地址

    MLDv2协议中,一般查询消息是发给链路内所有节点的地址的(FF02::1)。特定组地址查询消息和特定组地址和源查询消息都发给希望查询的组地址。同时节点必须接收和处理所有的IP目的地址是任意的单播或组播地址的查询消息,这样有利于调试。

    MLDv2侦听查询报文在网络中传输完整的报文格式如图2-27


    2-27 在网络中传输的MLDv2侦听查询报文

     

    b)       MLDv2组播侦听报告

    MLDv2组播侦听报告是IP节点发送的,它可以用来向邻居报告当前的侦听状态和以身改变接口上的组播侦听状态。消息格式如图2-28所示:


    2-28MLDv2组播侦听报告报文

          组地址记录的消息格式如图2-29所示:


    2-29 组地址记录的消息格式

    (1)   类型字段,在MLDv2侦听报告置为143

    (2)   预留,被发送者初始化为0,被接收者忽略。

    (3)   校验和

    标准的ICMPv6校验和;它需要计算整个消息,包括IPv6的伪造报头。为了计算它,首先把它设置为0。收到包后,要先验证后处理。

    (4)   组播地址记录个数(M)

    组播地址记录个数(M)指出在当前侦听报告中的组播地址一记录的个数。

    (5)   组播地址记录

    组播地址记录是由来自报告发送的接口的发送者侦听每个组播地址的信息组成。具体记录如下:

       记录类型

    当前状态报告是用来在收到查询消息的接口上节点发出的消息。它报告接口对于每一个组地址的当前的侦听状态。以下两类,如表2-2所示

     

    2-2 当前状态报告类型

    名字

    作用

    1

    包括模式

    指明在当前的接口上对于特定的组地址的过滤模式是包括模式的。相应的源地址域是对于特定的组地址的列表必须为非空。

    2

    排除模式

    指明在当前的接口上对于特定的组地址的过滤模式是排除模式的。如果组地址列表为非空,则组地址域包含接口的对于特定组地址的源列表。

    过滤模式变化报告是接点在本地的接口层对于特殊的组地址状态变化时引起的IPv6 Multicast Listen请求而发出的报告,这种报告无论源地址是否发生变化都要发送。只有状态变化的接口才发送这类的报告。以下两类,如表2-3所示:

    2-3 过滤模式变化报告

    名字

    作用

    3

    变为包括模式

    指明在当前的接口上对于特定的组地址的过滤模式转变为包括模式的。如果组地址列表为非空,则组地址域包含接口的对于特定组地址的新的源列表。

    4

    变为排除模式

      指明在当前的接口上对于特定的组地址的过滤模式转变为排除模式的。如果组地址列表为非空,则组地址域包含接口的对于特定组地址的新的源列表。

    源列表改变报告是节点发出的,当源列表改变,过滤模式和组地址不改变时会触发发送此消息。以下两类,如表2-4

    2-4 源列表改变报告

     

    名字

    作用

    5

    允许新的源

     指明在当前组地址记录中的源地址域需要增加新的源。若是在包含模式下,则把这些源加入到列表中。若是在排除模式下,则把这些源从列表中删除。

    6

    阻止旧的源

    指明在当前组地址记录中的源地址域需要删除旧的源。若是在包含模式下,则把这些源删除到列表中。若是在排除模式下,则把这些源从列表中删除加入。

       附加数据长度

    附加数据长度域包含在当前在侦听报告中的附加数据长度,单位是字(32bits)。如果为0,则表示没有附加数据。

       源个数(N)

    源个数(N)指出在当前在侦听报告中的源地址记录的个数。

       组播地址

    组播地址域包含组播侦听报告中有的组播地址。

       源地址[i]

    源地址[i]域是指向n的单播地址,n既是源个数域中的值。

       辅助数据区

    如果存在辅助数据区,那么它是用来补充说明组播地址报告的。在MLDv2协议中没有定义间接寻址数据,所以不需要包括辅助数据区。因此设置辅助数据区为0,收到时也忽略。留出这样一部分辅助数据区是为了以后能够扩展MLD

    MLDv2组播侦听报告报文在网络中传输完整的报文格式如图2-30


    2-30 在网络中传输的MLDv2组播侦听报告报文

    2.2.3 MLDv2工作过程

    MLDv2的工作过程可以分成三部分:一是侦听者端建立组播侦听状态;二是侦听者端和路由器端之间交换各种报文;三是路由器端建立侦听者状态列表。

    a)       建立侦听状态

    侦听者根据自身的需要指定它所感兴趣的组播组和组的源地址,建立自身的侦听状态,即加入列表或排除列表,然后主动或被动通知邻居组播路由器它的侦听状态。

    侦听者执行MLDv2协议的侦听部分的功能。无论节点上的接口是否在同一链路上.每个接口上都会执行侦听者功能。运行在侦听节点上层的协议或者应用通过套接字组播状态函数IPv6 Multicast Listen告知接口启用或禁用组播功能。

    IPv6MuhieastListen的格式如下:

    IPv6MulticastListen(套接口,接口,IPv6组播地址,过滤模式,源列表)

    套接口:用来区分节点内不同的组播请求实体(如进程用程序等)

    接口:表示一个本地网络接口.通过该接口可以启用或禁用组播功能。

    IPv6组播地址:表示请求加入的组播地址。如果一个接口接收多于一个组播的分组,IPv6Multicast Listen就会被每个组播单独调用。

    过滤模式:过滤模式分为“INCLUDEMODE”(包含模式)“EXCLUDEMODE”(排除模式)两种。

    源列表:一个无序的地址列表,可以为空。

    除了套接字组播状态之外,节点必须维护或计算出每个接口的组播侦听状态,称为接口组播状态,表示为(IPv6组播地址,过滤模式,源列表)接口组播状态套接字组播状态推导出来。从套接字组播状态导出接口组播状态的一般规律如下:根据具有相同接口(IPv6组播地址)套接字组播状态记录,推导出一个接口组播状态

    (1)若有套接字组播状态记录处于排除模式,那么接口组播状态的过滤模式就是排除模式,且源地址列表等于所有排除模式”“套接字组播状态记录中的源地址列表的交集,减去所有包含模式”“套接字组播状态记录中的源地址列表。

    (2)若所有套接字组播状态记录都是包含模式,那么接口组播状态就是包含模式,且源地址列表等于所有套接字组播状态记录中源地址列表的并集。

    侦听者通过上述算法可以建立起自己的接口组播状态。当接口收到组播分组之后,就会根据应用或者进程的套接字组播状态判断是否将数据分组传给上层。MLDv2报文不受源地址过滤影响,能够被所有的主机或路由器处理。

    b)       交换各种报文

    侦听者端和路由器端之间交换各种报文是协议的重要部分,在此过程中计时器会保持各个功能实体的可用性,若计时器到期会重新选举新的侦听者和查询器。

    同一子网内的运行MLDv2协议的路由器首先通过1P地址最小的接口为查询接口的查询器选举机制选举出一台查询器”(Querierrouter),其余的路由自然成为非查询路由器(Non-Querier router)。被当选为查询器的接口周期性的在子网内发布一般查询报文,触发性地发布特定组播地址查询报文和特定组播地址和源查询报文,查询邻居接口的组播侦听者发出的组播侦听状态路由器周期性地发送一般查询报文,以查询该链路上是否存在某组播地址的组成员。

    在接收到收到路由器发送的一般查询报文后,节点经过[0,最大响应时间〕之间的随机时延后发出组播侦听报告,通过当前状态报告报告自己的接口组播状态。经过随机时延是为了防止所有的节点都在同一时间发出报告分组,从而避免网络的突发性阻塞。当侦听者端改变自己的接口组播状态时,如想要加入某个组播组时或改变对某个源的接收状态,就可以不必等待路由器的查询报文,而是直接向路由器发送报告报文。如果节点状态发生变化,会立刻发送并重传状态变化报告。在旧的状态变化报告重传过程中.如果又有新的状态变化发生,这个新的状态变化就会和原来的状态变化合并,然后组成新的状态变化报告重新发送,同时重置重传次数。节点新旧状态的变化引起的状态变化报告算法表如表2-5所示:

    2-5状态变化报告算法表

    旧状态

    新状态

    状态改变报告

    包含(A)

    包含(B)

    允许(B-A),阻止(A-B)

    排除(A)

    排除(B)

    允许(A-B),阻止(B-A)

    包含(A)

    排除(B)

    变成排除(B)

    排除(A)

    包含(B)

    变成包含(B)

    在表中AB为源地址列表,包含排除指的是接口过滤模式,允许的意思是希望侦听的新增的源地址列表,阻止的意思是希望不再侦听的旧的源地址列表。

    路由器收到侦听者针对某组播的状态变化报告后,查询器会发送组播地址指定查询或者组播地址和源地址指定查询,以确定链路上是否还有其他侦听者,如果在查询超时时钟超时之前,收到其他侦听者的当前状态报告,则重置计时器。否则将修改相应的组播侦听者状态

    c)       建立侦听状态列表

    通过侦听来自侦听者的报告报文,子网内所有路由器维持相同的组播侦听状态。当路由器收到链路上的报告分组时,如果报告地址不在路由器的列表上,则加入该项,否则计时器重新置位。路由器为它所在的每一条链路维护一个列表,除了组播地址列表外,还维护着每个组播地址相关的过滤模式、源地址列表、该地址相应的源计时器等信息。如果某个计时器过期,则把相应的表项从列表中删除。

    通过收到的侦听者报告,路由器(包括查询器和非查询器)可以在其接口上建立自己的组播侦听者状态信息表。与侦听者不同,如果路由器有多个接口处于同一子网内,则只在其中一个接口建立侦听者状态信息。侦听者状态由过滤模式、过滤时钟和源地址列表三部分组成。如果链路上某一组播的所有侦听者都是包含模式。则接口处于该组播的包含模式,用INCLUDE(A)表示。其中A表示源地址列表,INCLUDE(A)称为包含列表。如果包含模式侦听者发送了包含特定源地址的当前状态报告或者状态变化报告,该源地址就会被加入到包含列表中。包含列表中每一个源地址都有源地址时钟,一旦包含模式侦听者发送报告证实自己在侦听着某一特定源地址.“源地址时钟就会被更新。如果包含列表中的源地址时钟由于长时间得不到更新而到期,该源地址就会从包含列表中删除。这称为软离开机制。

    除了软离开之外,还有一种快速离开机制。当包含模式侦听者通过状态变化报告声明不再侦听特定源地址时,链路上所有的路由器就会降低该源地址的源地址时钟。随后查询器会发出组播地址和源地址指定查询,用以验证该链路是否还有该源地址的侦听者。如果源地址时钟到期,该源地址就会从包含列表中删除。

    如果链路上存在处于排除模式的侦听者,则接口处于该组播的排除模式。收到第一个排除模式侦听者的报文时起,路由器就设定该组播的过滤时钟。每当排除模式侦听者通过当前状态报告证实自己的侦听状态时,过滤时钟被更新。当一个包含模式侦听者,通过状态变化报告声明自己变为排除模式时,该过滤时钟也会被更新。如果过滤时钟过期,路由器便将侦听者状态切换成包含模式。处于排除模式的路由器接口。侦听者状态由符号Exclude(XY)表示,其中X表示请求列表Y表示排除列表。除了排除列表之外所有的源地址发出的组播分组,都会被路由器转发。虽然请求列表对于转发分组没有任何影响,但是路由器必须保持请求列表。原因如下:

    (1)为了标明包含模式侦听者所侦听的源地址。当链路中没有排除模式侦听者时,能及时将路由器转换成包含模式。这种转换不应该中断向该组播包含模式侦听者传输的数据流。当路由器切换成包含模式时。请求列表中的源地址被转移到包含列表中,排除列表被删除。

    (2)用来对原来没有排除的源地址进行快速的排除。如果路由器接收到一个特定源地址请求的报告。源地址就会被加入到请求列表,源地址时钟被赋值.随后查询器发出组播地址和源地址指定查询。用以检测该链路上是否还有对这些源地址感兴趣的节点。如果源地址的时钟就会到期时。仍没有侦听者响应。这时,这些源地址就会从请求列表移到排除列表。从这时起,该源地址就会被路由器阻断[15]

     

    展开全文
  • IGMP协议分为3个版本,V1 V2(默认版本) V3 作用:最后一跳路由器获取主机想加入那个组播组 IGMP使用范围:在PC于最后一跳路由器之间 IGMP封装:基于IP协议,协议号:2,使用周期更新 IGMP V1: 数据报类型: 所有...
  • 1.1 IGMP v1 主机可以加入组播组,没有离开信息(leave messages),路由器使用基于超时的机制去发现其成员不关注的组。 1.1.2 配置 1)全局打开组播 xNet#con t xNet(config)#ip multicast-routing xNet...
  • Internet 组管理协议(IGMP)是因特网协议家族中...IGMP 信息封装在 IP报文中,其 IP 的协议号为 2。 它用来在ip主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。igmp不包括组播路由器之间的组成员...
  • 目录 IP协议首部格式 地址解析协议 ARP 逆向地址解析协议 RARP 网际控制报文协议 ICMP ...网际组管理协议IGMP ...占 4 位,指 IP 协议的版本目前的 IP 协议版本为 4 (即 IPv4) 首部长度: 占4位
  • IGMP:Internet组管理协议

    千次阅读 2013-05-28 21:16:06
     TCP是一个面向连接的协议,它意味着分别运行于两主机内的两进程(由端口确定)存在一条连接。所以广播和多播只适用于UDP。   为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程。图12-1说明了这一...
  • 协议号大全

    万次阅读 2017-01-17 11:41:49
    最近接触到很多协议,对端口号比较熟悉,却对协议号不是很理解, 搜索了一下。 协议号大全 常用协议号 icmp 1 igmp 2 tcp 6 udp 17Decimal Keyword Protocol References ——- ——- ——–
  • 协议号 协议 说明 0 HOPOPT IPv6逐跳选项 1 ICMP Internet控制消息 2 IGMP Internet组管理 3 GGP 网关对网关 4 IP IP中的IP(封装) 5 ST 流 6 TCP 传输控制 7 CBT CBT 8 EGP 外部网关协议 9 IGP 任何专用内部网关...
  • 网络层 IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)   目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ...占 4 位,指 IP 协议的版本目前的 IP 协议版本为 4 (即...
  • igmp

    2012-05-10 00:59:08
    协议号/2,ttl/1,) igmpv1定义了基本的查询(目的组,0)和成员报告过程(哪个组,哪个组) igmpv2在此基础上添加了组成员快速离开机制(224.0.0.2,哪个组) 查询器选举机制(选路由ip地址最小的,非查询器...
  • IP协议号

    2018-11-20 15:45:59
    IP协议号 IP首部中有8位协议号,用于指明IP的上层协议。 0 HOPOPT IPv6 逐跳选项1 ICMP Internet 控制消息2 IGMP Internet 组管理3 GGP 网关对网关4 IP IP 中的 IP(封装)5 ST 流6 TCP 传输控制7 CBT CBT8 EGP ...
  • 目录 IP协议首部格式 地址解析协议 ARP 逆向地址解析协议 RARP 网际控制报文协议 ICMP ...网际组管理协议IGMP ...占 4 位,指 IP 协议的版本目前的 IP 协议版本为 4 (即 IPv4) 首部长度: 占
  • IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit;最低位在右边,记为31 bit 版本: 占 4 位,指 ...
  • IP 协议首部格式以及(ARP,RARP,ICMP,IGMP)

    千次阅读 2018-04-15 11:13:35
    目录 IP协议首部格式 地址解析协议 ARP 逆向地址解析协议 RARP ...占 4 位,指 IP 协议的版本目前的 IP 协议版本为 4 (即 IPv4) 首部长度: 占4位,可表示的最大数值是15个单位(一个单位为 4 字节)因此I...
  • IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网关对网关 4 IP IP 中的 IP(封装) 5 ST 流 6 TCP 传输...
  • IGMP Introduction

    2011-11-15 08:05:08
    IGMP信息封装在IP报文中,其IP的协议号为2,IGMP的版本目前有v1/v2/v3三种。 v1:定义了基本的组成员查询和报告过程 v2:添加了组成员的快速离开机制和查询器选举机制 v3:添加了“源过滤”机制,允许主机选择想...
  • IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit;最低位在右边,记为31 bit 版本: 占 4 位,指 IP ...
  • IP协议号大全

    2020-10-25 14:53:12
    IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网关对网关 4 IP IP 中的 IP(封装) 5 ST 流 6 TCP 传输控制 7 CBT CBT 8...
  • 目录 IP协议首部格式 地址解析协议 ARP 逆向地址解析协议 RARP 网际控制报文协议 ICMP ...网际组管理协议IGMP ...占 4 位,指 IP 协议的版本目前的 IP 协议版本为 4 (即 IPv4) 首部长度: 占
  • IP协议号列表

    2020-08-05 10:26:15
    因为外网打开得太慢了,故搬运到这来 十进制 十六进制 关键字 协议 ... 因特网组管理协议IGMP) RFC 1112 3 0x03 GGP 网关对网关协议 RFC 823 4 0x04 I.

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 253
精华内容 101
关键字:

igmp协议号