IGMPv1,v2,v3的原理报文形式 - 图文 下载本文

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

旧状态 包含(A) 排除(A) 包含(A) 排除(A)

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

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

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

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

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

如果链路上存在处于“排除模式”的侦听者,则接口处于该组播的“排除模式”。收到第一个“排除模式”侦听者的报文时起,路由器就设定该组播的“过滤时钟”。每当“排除模式”侦听者通过“当前状态报告”证实自己的侦听状态时,“过滤时钟”被更新。当一个“包含模式”侦听者,通过“状态变化报告”声明自

己变为“排除模式”时,该“过滤时钟”也会被更新。如果“过滤时钟”过期,路由器便将侦听者状态切换成“包含模式”。处于“排除模式”的路由器接口。侦听者状态由符号Exclude(X,Y)表示,其中X表示“请求列表”,Y表示“排除列表”。除了“排除列表”之外所有的源地址发出的组播分组,都会被路由器转发。虽然“请求列表”对于转发分组没有任何影响,但是路由器必须保持“请求列表”。原因如下: (1)为了标明“包含模式”侦听者所侦听的源地址。当链路中没有“排除模式”侦听者时,能及时将路由器转换成“包含模式”。这种转换不应该中断向该组播“包含模式”侦听者传输的数据流。当路由器切换成“包含模式”时。“请求列表”中的源地址被转移到“包含列表”中,“排除列表”被删除。

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