- 单播
- 在单播通信中每一个数据包都有确切的目的IP地址
- 对于同一份数据,如果存在多个接收者,服务器需发送与接收者数目相同的单播数据包
- 组播
- 组播适合一对多模型,只有加入到特定组播组的成员,才会收到组播数据,当存在多个组播成员时,源无需发送多个数据拷贝,仅需发送一份即可,组播网络设备会根据实际需要转发或拷贝数据
- 数据流值发送给加入该组播组的接收者,而不需要该数据的设备不会接收到该组播流量
- 相同的组播报文,在一段链路上仅有一份数据,提高了利用率
- 优点
- 提高效率,降低网络流量
- 优化性能,减少冗余流量,节约网络带宽,降低网络负载
- 分布式应用,使多节点应用成为可能
- 缺点
- 基于UDP,尽力而为的传输
- 没有拥塞避免机制
- 可能出现报文重复
- 可能出现报文失序
- 适用场景
- IPTV
- 培训
- 直播
- 单对多通信
服务模型
- 组播源向特定组播组发送组播数据,他并不关心组成员的所在
- 组播路由器把数据拷贝并转发给需要该数据或存在组播接收者的网络分支
- 主机加入自己感兴趣的组播组,以便收到发往这些组播组的数据包
概念
名称 | 英文 | 说明 |
---|---|---|
组播源 | Source | 组播流量的发送者 |
组播接收者 | Receiver | 组播组成员,是期望收到特定组播组流量的设备 |
组播组 | Multicast Group | 一个使用组播IP地址标识的群组,该地址标识了一组接收者,组播源可以往这个地址发送组播数据 |
组播路由器 | Multicast Router | 支持组播,运行组播协议的网络设备,实际上不仅仅路由器能够支持组播,交换机,防火墙也能够支持组播 |
第一跳路由器 | First-Hop Router | 直连Source的组播路由器,该路由器负责将Source发送出来的组播报文转发到组播网络中 |
最后一跳路由器 | Last-Hop Router | 直连组播组成员的组播路由器,该路由器负责将组播流量转发到直连网络,也负责管理及维护直连网段中的组播组成员关系 |
- 组播分发树:由组播路由协议构建组成,是组播流量的转发路径
- 组播IP地址:
224.0.0.0/4
224.0.0.0 - 224.0.0.255
:用户组地址,全局有效224.0.0.1
:所有组播主机224.0.0.2
:所有组播路由器224.0.0.5
:OSPF所有路由器224.0.0.6
:OSPF DR224.0.0.9
:RIPv2路由器
224.0.1.0 - 238.255.255.255
:用户组地址,全局有效232.0.1.0 - 232.255.255.255
:SSM组地址
239.0.1.0 - 239.255.255.255
:私有组播地址
- 组播MAC地址:
01:00:5E
,后23位映射IP后23位0100
:0000 0001 0000 0000
1
:第一个8位组的最后一位位1
为组播MAC地址0
:第一个8位组的最后一位位0
为单播MAC地址
组播协议
- 在接受组播报文时,判断该报文是否在正确的接口上到达,从而确保组播数据转发的无环化
- 在网络中建立一颗组播分发树
- 组播分发树体现在每一台组播路由器上便是
(S, G)
或(*, G)
的组播转发表项
组播路由表象
- PIM路由表项即通过PIM协议组件的组播路由表项。PIM网络中存在两种路由表项
S
表示组播源G
表示组播组*
:表示任意(S, G)
:路由表项知道源组播S的位置,主要用于在PIM路由器上建立SPT,对于PIM-DM网络和PIM-SM网络适用(*, G)
:路由表项由于只知道组播组G的存在,主要用于在PIM路由器上建立RPT,对于PIM-SM网络和双向PIM网络适用
- PIM路由器上可能同时存在两种路由表项,当收到源地址位S,组播地址位G的组播报文,且通过RPF检查的情况下,按照如下的规则转发
- 如果存在
(S, G)
路由表项,则由(S, G)
路由表项指导报文转发 - 如果不存在
(S, G)
路由表项,只存在(*, G)
路由表项,则先依照(*, G)
路由表项创建(S, G)
路由表项,再由(S, G)
路由表项指导报文转发
- 如果存在
组播分发树分类
- SPT:最短路径树
- 最短路径树是以组播源为树根的组播分发树
- 最短路径树的分支形成了通过网络到达接收者所在分支的分布树,因为最短路径树使用最短的,从源起始贯穿网络到达组播接收者的路径,所以又叫最短路径树
- SPT同时适用于PIM-DM网络和PIM-SM网络
- RPT:共享树
- 与最短路径树使用组播源作为根不同,RPT使用RP(Rendezvous Point)作为汇聚点
- 多个组播组可以共用一个RP,期望接收组播流量的路由器通过组播协议在自己与RP之间建立一条RPT的分支,组播流量首先需要从源发送到RP,然后再由RP将组播流量转发下来,组播流量顺着RPT最终达到各个接收者所在的终端网络
- RPT适用于PIM-SM网络和双向PIM网络
SPT | RPT |
---|---|
RPF
在组播网络中,如果组播流量出现了转发环路,危害比单播要大得多,路由器在转发一个组播报文时,除了会关注报文的目的地址,还会特别关系该报文的源地址,组播路由器通过一个被称为RPF(反向路径转发)的机制来实现组播数据转发的无环化
RPF机制确保组播数据从正确的接口被收到,只有通过RPF检查的组播数据包才会被路由器沿着组播树进行转发,如果数据包从错误的接口被收到,路由器将丢弃这些报文,这里所谓的正确的接口,其实就是RPF接口,也就是我们经常说的上游接口,一种常见的情况时,设备借助其单播路由表来实现RPF检查
- R1在其GE0/0/0及GE0/0/1两个接口上都收到了Source发送过来的组播流量
- R1在其单播路由表中查询达到Source(11.6.3.2)的路由,根据该路由的出接口判断组播报文的合法性
- 由于R1到达Source的本地出接口为GE0/0/0,因此在这个接口上达到的组播流量通过RPF检查,反之在GE0/0/1接口上到达的组播流量则不能通过RPF检查,从而被R1丢弃
查询单播路由的出接口,被认为是RPF接口,朝向源的上游接口
RPF检测的顺序
- 优先级优先(默认)
- 如果同时存在单播和组播路由(用于RPF检查的组播路由条目),比较优先级,优先级越小越优。
- 如果优先级一样,组播静态>MBGP>单播(默认情况下组播静态优先级为1,MBGP优先级为255,单播路由需要视协议而定。)
- 如果都是单播路由,比较路由的掩码长度,掩码查毒越长越优。
- 如果掩码长度一样,比较下一跳的IP地址,IP地址越大越优。
- 掩码长度优先
- 如果同时存在单播和组播路由,比较掩码长度,掩码长度越长越优。
- 如有掩码长度一样,比较路由协议优先级,优先级越小越优。
- 如果优先级一样,组播静态>MBGP>单播。
- 如果都是单播路由,比较下一跳的IP地址,IP地址越大越优。
PIM
Protocol Independent Multicast称为协议无关组播,这里的协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息,作为组播路由解决档案,它直接利用单播路由表的路由信息,对组播报文执行RPF(逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文
- PIM-DM
- PIM-SM
- PIM-BFD
PIM-DM
密集模式协议:PIM-DM
PIM-DM使用Push模式转发组播报文,一般应用于组播成员规模相对较小,相对密集的网络,Push方式假设网络中每个子网至少有一个5G组播组的接收者,因此组播数据被推送到网络的各个角落,然后再进行剪枝操作,不需要组播流量的路由器将自己从组播分发树上修剪掉
扩展 | 剪枝 | 收敛 | 嫁接 |
---|---|---|---|
- 扩散
- 初始时,组播流量会被扩散到全网各个角落。即使不存在组播组成员的分支也会收到组播流量
- 每一台组播路由器都会在其组播路由表中创建
(S, G)
表项,还会创建上游接口和下游接口列表
- 剪枝
- 不需要组播流量的分支,使用
PIM Prune
报文将自己从组播分发树上剪枝 - 上游的路由器接收到下游设备发送过来的Prune报文,则将接受该报文的接口从组播表项的出接口流量中移除
- 不需要组播流量的分支,使用
- 剪枝否决
- 可能一台组播路由器下面连接了2台路由器,其中一台不需要组播了,进行了剪枝,但另外一台还需要组播
- 当路由器收到剪枝报文,不会立刻将接口置为修建状态,而是启动剪枝延迟计时器(3s),在这个时间内,如果收到了Join报文,则会忽略此前接收的剪枝报文
- 收敛
- 不需要该组播流量的路由器需要周期性的向上游发送
PIM Prune
报文 - 如果超过计时器,就又会发送组播流量
- 不需要该组播流量的路由器需要周期性的向上游发送
- 嫁接(Graft)
- 当原先不在SPT上的网络分支出现了接收者,则最后一跳路由器向其上游邻居发送
PIM Graft
报文,试图将自己嫁接到SPT
- 当原先不在SPT上的网络分支出现了接收者,则最后一跳路由器向其上游邻居发送
- 断言
- 当一个网段内有多个相连的PIM路由器RPF检查通过向该网段转发组播报文时,则需要通过断言机制来保证只有一个PIM路由器向该网段转发组播报文,PIM路由器在接受到邻居发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送PIM Assert报文,报文的目的地址为
224.0.0.13
,其他PIM路由器在接收到Assert报文后,将自身参数与对方报文中携带的参数做比较,进行Assert竞选 - 如果下游接口接受到自己发送的组播流,就会触发assert选举
- 选举规则
- 到达组播源的单播路由协议优先级较高者获胜
- 如果优先级相同,则到组播源的单播路由的开销较小这获胜
- 如果都相同,则接口IP地址较大者获胜
- 当一个网段内有多个相连的PIM路由器RPF检查通过向该网段转发组播报文时,则需要通过断言机制来保证只有一个PIM路由器向该网段转发组播报文,PIM路由器在接受到邻居发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送PIM Assert报文,报文的目的地址为
- 状态刷新
- PIM路由表
- 组播路由表
PIM-DM报文
报文 | 功能 |
---|---|
Hello | 用于建立及维护PIM邻居关系 |
Join/Prune | 加入/剪枝报文,加入报文用于加入组播分发树,剪枝则用于修建组播分发树 |
Graft | 嫁接报文,用于将设备嫁接到组播分发树 |
Graft-ACK | 嫁接确认报文,用于对邻居发送的Graft报文进行确认 |
Assert | 用于断言机制 |
PIM-DM邻居关系
- 在PIM路由器每个使能了PIM协议的接口上,都会对外发送Hello报文,封装Hello报文的组播报文的目的地址是
224.0.0.13
(表示同一网段所有PIM路由器),源地址为接口IP地址,TTL为1 - Hello报文作用:发现PIM邻居,协调各项PIM协议报文参数,维持邻居关系
- 只有邻居关系建立成功后,PIM路由器才能接受其他PIM协议报文,从而创建组播路由表项
- Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制。具体如下:
- DR_Priority:表示各路由器接口竞选DR的优先级,优先级越高越容易获胜。
- Holdtime:表示保持邻居为可达状态的超时时间。如果在超时时间内没有收到PIM邻居发送的Hello报文,路由器则认为邻居不可达。
- LAN_Delay:表示共享网段内传输Prune报文的延迟时间。
- Neighbor-Tracking:表示邻居跟踪功能。
- Override-Interval:表示Hello报文中携带的否决剪枝的时间间隔。
- Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制。具体如下:
PIM-SM
稀疏模式协议:PIM-SM
稀疏模式协议使用Pull模式的方式,而不是强推,这种方式假定网络中不存在接收者,除非有设备用显示的加入机制来申请
- 网络中有一台重要的PIM路由器,汇聚点RP,可以为随时出现的组成员或组播源服务
- 网络中所有PIM路由器都必须知道RP的位置
- 一个RP可以同时为多个组播组服务,但一个组播只能对应一个RP
- 当网络中出现组成员时,最后一跳路由器向RP发送
Join
报文,逐条创建(*, G)
表项,生成一颗以RP为跟的RPT - 当网络中出现活跃的组播源(源向某组播组G发送第一个组播数据)时,第一跳路由器将组播数据封装在Register报文中单播发往RP,在RP上创建
(S, G)
表项,注册源信息 - 在ASM模型中,PIM-SM的关键机制包括邻居发现,DR竞选,RP发现,RPT构建,组播源注册,SPT切换,断言。同时也可以通过配置BSR(Bootstrap Router)管理域来实现单个PIM-SM域的精细化管理
RP发现机制
- 静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置
- 动态RP:在PIM域内选择几台PIM路由器,配置C-RP(候选RP)来动态竞选RP,同时,还需要通过配置C-BSR(候选BSR),来收集C-RP的通告信息,向PIM-SM域内的所有PIM路由器发布。然后根据汇总信息来计算出RP
C-BSR在竞选的时候,开始时每个C-BSR都认为自己是BSR,向全网发送Bootstrap报文。Bootstrap报文中携带C-BSR地址、C-BSR的优先级。每一台PIM路由器都收到所有C-BSR发出的Bootstrap报文,通过比较这些C-BSR信息,竞选产生BSR。竞选规则如下:
- 优先级较高者获胜(优先级数值越大优先级越高)。
- 如果优先级相同,IP地址较大者获胜。
C-RP的竞选过程
- C-RP向BSR发送Advertisement报文,报文中携带C-RP地址、服务的组范围和C-RP优先级
- BSR将这些信息汇总为RP-Set,封装在Bootstrap报文中,发布给全网的每一台PIM-SM路由器
- 各PIM路由器根据RP-Set,使用相同的规则进行计算和比较,从多个针对特定组的C-RP中竞选出该组RP。规则如下
- 与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。
- 如果以上比较结果相同,则C-RP优先级较高者获胜(优先级数值越小优先级越高)。
- 如果以上比较结果都相同,则执行Hash函数,计算结果较大者获胜。
- 如果以上比较结果都相同,则C-RP的IP地址较大者获胜
由于所有PIM路由器使用相同的RP-Set和竞选规则,所以得到的组播组与RP之间的对应关系也相同。PIM路由器将“组播组—RP”对应关系保存下来,指导后续的组播操作。
PIM-SM DR
DR主要作用如下:
- 在连接组播源的共享网段,由DR负责向RP发送Register注册报文。与组播源相连的DR称为源端DR。
- 在连接组成员的共享网段,由DR负责向RP发送Join加入报文。与组成员相连的DR称为组成员端DR。
在组播源或组成员所在的网段,通常同时连接着多台PIM路由器。这些PIM路由器之间通过交互Hello报文成为PIM邻居,Hello报文中携带DR优先级和该网段接口地址。PIM路由器将自身条件与对方报文中携带的信息进行比较,选举出DR来负责源端或组成员端组播报文的收发。竞选规则如下:
- DR优先级较高者获胜(网段中所有PIM路由器都支持DR优先级)。
- 如果DR优先级相同或该网段存在至少一台PIM路由器不支持在Hello报文中携带DR优先级,则IP地址较大者获胜。
如果当前DR出现故障,将导致PIM邻居关系超时,其他PIM邻居之间会触发新一轮的DR竞选
PIM-SM报文
报文 | 功能 |
---|---|
Hello | 用于建立及维护PIM邻居关系 |
Register | 注册报文,用于组播源向RP的注册过程 |
Register-Stop | 注册停止报文,RP使用该报文通知第一跳路由器停止在注册报文中发送组播流量 |
Join/Prune | 加入/剪枝报文,加入报文用于加入组播分发树,剪枝则用于修建组播分发树 |
Bootstrap | 自举报文,用于BSR选举和发送C-RP汇总信息 |
Assert | 断言报文,用于断言机制 |
Candidate-RP-Advertisement | C-RP通告报文,C-RP使用该报文向BSR发送通告 |
RPT构建
PIM-SM RPT是一棵以RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树。
在RPT构建过程中,PIM路由器在发送Join报文时,会进行RPF检测查找到达RP的单播路由,单播路由的出接口为上游接口,下一跳为RPF邻居。Join报文从组成员端DR开始逐跳发送,直至到RP。
组播源注册
在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员。具体过程如下:
- 组播源将组播报文发给源端DR。
- 源端DR接收到组播报文后,将其封装在PIM Register报文中,单播发送给RP。
- RP接收到Register报文,将其解封装,建立(S,G)表项,
- 同时有本地关于G发组播表项的下游接口列表,并将组播数据沿接口发送到达组成员。
- RP朝着源的方向发送
(S, R)
的Join报文,试图在自己与源之间构建一颗SPT,以便直接从SPT接受组播流量- RP发送的
(S, G)
的Join报文一路达到R1,一颗SPT建立起来了,选择(S, G)
的组播流量将直接通过SPT从R1转发给RP - 由于RP已经能够从S1收到组播报文了,因此不再需要单播的Register,于是向DR发送Register-Stop报文
- DR收到Register-Stop报文后,停止在Register报文中封装组播数据
- RP发送的
此时网络里存在2种树,DR-RP是SPT,和组播的RPT
SPT切换过程
在PIM-SM网络中,一个组播组只对应一个RP,只构建一棵RPT。在未进行SPT切换的情况下,所有发往该组的组播报文都必须先封装在注册报文中发往RP,RP解封装后,再沿RPT分发。RP是所有组播报文必经的中转站,当组播报文速率逐渐变大时,对RP形成巨大的负担。为了解决此问题,PIM-SM允许RP或组成员端DR通过触发SPT切换来减轻RP的负担。
- RP触发SPT切换
- RP收到源端DR的注册报文后,将封装在Register报文中的组播报文沿RPT转发给组成员,同时RP会向源端DR逐跳发送Join报文。发送过程中在PIM路由器创建(S,G)表项,从而建立了RP到源的SPT。
- SPT树建立成功后,源端DR直接将组播报文转发到RP,使源端DR和RP免除了频繁的封装与解封装。
STP切换机制:组成员端DR周期性检测组播报文的转发速率,一旦发现(S,G)报文的转发速率超过阈值,则触发SPT切换
- 组成员端DR触发SPT切换
- 组成员端DR逐跳向源端DR逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。
- SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(*,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。
- 如果SPT不经过RP(下游接口列表空了),RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。
BSR管理域
为了实现网络管理精细化,可以选择将一个PIM-SM网络划分为多个BSR管理域和一个Global域。这样一方面可以有效地分担单一BSR的管理压力,另一方面可以使用私有组地址为特定区域的用户提供专门服务。每个BSR管理域中维护一个BSR,为某一特定地址范围的组播组服务。Global域中维护一个BSR,为所有剩余的组播组服务。
如上图所示,对于有相同组地址的不同管理域,各BSR管理域所包含的PIM路由器互不相同,同一PIM路由器不能同时属于多个BSR管理域。各BSR管理域在地域上相互独立,且相互隔离。BSR管理域是针对特定地址范围的组播组的管理区域,属于此范围的组播报文只能在本管理域内传播,无法通过BSR管理域边界。
Global域包含PIM-SM网络内的全部PIM路由器。不属于任意BSR管理域的组播报文,可以在整个PIM网络范围内传播。
Global域和每个BSR管理域都包含针对自己域的C-RP和BSR设备,这些设备在行使相应功能时,仅在本域内有效。即BSR机制和RP竞选在各管理域之间是隔离的。
每个BSR管理域都有自己的边界,该管理域的组播信息(C-RP宣告报文、BSR自举报文等)不能跨越域传播。同时Global域的组播信息可以在整个Global域内传递,可以穿越任意BSR管理域。
组地址范围
每个BSR管理域为特定地址范围的组播组提供服务,不同的BSR管理域服务的组播组范围可以重叠。该组播地址只在本BSR管理域内有效,相当于私有组地址。如上图所示,BSR1域和BSR3域对应的组地址范围出现重叠。
不属于任何BSR管理域的组播组,一律属于Global域的服务范围。如上图所示,Global域组地址范围是除G1、G2之外的G-G1-G2。
PIM-BFD
为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要快速检测到与相邻设备间的通信故障,以便及时采取措施,保证业务继续进行。
BFD(Bidirectional Forwarding Detection)检测机制可提供毫秒级的快速检测,并采用单一机制对所有类型的介质、协议层进行检测,实现全网统一的检测机制。其检测原理是在两个系统间建立BFD会话,并沿它们之间的路径周期性发送BFD检测报文,如果一方在检测周期内没有收到BFD检测报文,则认为该路径发生了故障。
在PIM中的应用
在组播的应用中,如果共享网段上的当前DR或Assert winner发生故障,其他PIM邻居会等到邻居关系超时或Assert timer超时才触发新一轮的DR竞选或Assert竞选过程,导致组播数据传输中断,中断的时间将不小于邻居关系的超时时间或Assert timer超时时间,通常是秒级。
PIM BFD能够在毫秒级内检测共享网段内的链路状态,快速响应PIM邻居故障。如果配置了PIM BFD功能的接口在检测周期内没有收到当前DR或Assert winner发送的BFD检测报文,则认为当前DR或Assert winner发生故障,BFD快速把会话状态通告给RM,再由RM通告给PIM。PIM模块触发新一轮的DR竞选或Assert竞选过程,而不是等到邻居关系超时或Assert timer超时,从而缩小组播数据传输的中断时间,提高组播数据传输的可靠性。
PIM GR
滑重启GR(Graceful Restart)属于高可靠性HA(High Availability)技术的一种,实现协议重启时业务的不间断转发(Multicast Non-Stop Forwarding)能力。PIM GR是一种组播协议GR。在具有双主控板的设备上,PIM GR可以在设备进行主备倒换时实现用户组播流量的正常转发。
目前,仅PIM-SM(ASM模型)与PIM-SM(SSM模型)支持PIM GR,PIM-DM不支持PIM GR。
PIM GR原理
PIM GR依赖于单播GR。设备进行主备倒换期间,新主控板的PIM协议需要从下游邻居重新学习PIM加入状态,同时还需要从IGMP成员主机学习加入的组成员。新主控板的PIM协议通过以上过程完成如下动作:
- 重新计算PIM组播路由表项。
- 维持下游邻居的加入状态。
- 更新转发平面的组播路由表项。
通过PIM GR,设备可以达到主备倒换后快速恢复新的主用主控板的PIM路由表项及刷新接口板组播转发表项的目的,从而最大限度地减少主备倒换对用户组播流量转发的影响。
PIM GR工作机制
PIM GR建立在单播GR的基础上,整个PIM GR的过程分为三个阶段:开始阶段(GR_START)、同步阶段(GR_SYNC)和完成阶段(GR_END)。
- GR_START
- RouterA发生主备倒换,PIM协议启动GR定时器,PIM GR进入开始阶段,同时单播开始进行GR。
- PIM协议向所有使能PIM-SM的接口发送携带新的Generation ID的Hello报文。
- RouterA的下游邻居RouterB、RouterD发现RPF邻居的Generation ID改变,向RouterA重新发送Join/Prune报文。
- 若网络中使用动态RP,当网络中的邻居收到Generation ID改变的Hello报文后,向RouterA单播发送BSR报文,恢复RouterA的BSR及RP信息。
- RouterA通过接收下游RouterB、RouterD发送的Join/Prune报文,在空的入接口表中创建PIM路由表项,记录下游的加入信息。在此期间,转发模块转发表项保持不变,维持组播业务数据的转发。
- GR_SYNC
- 单播GR结束,PIM GR进入同步阶段,根据单播路由信息建立组播分发树,恢复PIM路由表项的入接口,更新到源或到RP的加入队列,并通知组播转发模块更新转发表。
- GR_END
- GR定时器超时,PIM协议完成GR,并通知组播转发模块。组播转发模块老化GR期间未更新的转发表项。
IGMP
Internet Group Manage Protocol
注意这个和IBGP不同,那个是BGP的AS内的动态路由协议
- IGMP用于主机和最后一跳路由器之间
- 主机使用IGMP报文向路由器申请加入和退出组播组,默认时路由器是不会向接口下转发组播数据流的,除非该接口上存在组成员
- 路由器通过IGMP查询网段上是否有组播组成员
IGMP报文采取IP封装,协议号为2,而且TTL字段通常是1,现在有3个版本
- IGMPv1
- IGMPv2
- IGMPv3
IGMPv2
报文名称 | 英文 | 说明 |
---|---|---|
普遍组查询 | General Query | IGMP查询器周期性地发送常规查询报文,对网络中的所有组播组进行查询 |
特定组查询 | Group-Specific Query | 该查询报文面向特定的组播组,用于查询该组播组内是否还存在成员 |
成员关系报告 | Membership Report | 主机向IGMP路由器发送的报文,用于申请加入某一个组播组或者对查询报文进行应答 |
成员离开报文 | Leave | 成员离开组播组时主动向IGMP路由器发送的报文,用于宣告自己离开了某个组播组 |
版本1成员关系报告 | Version 1 Menbership Report | 用于兼容IGMPv1 |
- 类型:提示该报文的类型
- 最大相应时间
- 只在查询报文中设置,是主机用"成员关系报告报文"来响应该查询包的最大等待时间
- 默认10s,可用
igmp max-response-time
修改 - 其他报文中为
0x00
- 组播组地址
- 再普遍组查询报文中,该字段全为0
- 在特定组查询报文中,该字段设置为该组的组播地址
- 在成员关系报文或离组报文中,该字段设置为目标组播组地址
普遍组查询
普遍组查询(查询) -> 成员关系报告(回应)
- 路由器使用IGMP常规查询报文向网段中所有主机查询,报文目的地址为
224.0.0.1
,该查询面向所有的组播组,报文中的组地址字段设置为0.0.0.0
。网段中的组成员收到查询报文后,需回应IGMP成员关系报告 - 如果一台组播路由器在Multicast Listener Interval超时(默认2*60+10=130s)前仍没有收到一个特定子网的Membership Report消息,那么这个路由器将宣布这个子网中没有组员,不再向这个子网发送组播数据
- 常规查询默认每隔60s发送一次,可使用
igmp timer query
命令修改 - 查询报文中包含最大响应时间,这个值告诉主机用IGMP成员关系报告回应这个查询的最长等待时间,默认10s,可使用igmp max-response-time命令修改
特定组查询
成员离开报文(宣称) -> 特定组查询(还没有剩余成员)
- 当IGMP查询器收到某组播组的成员发出的IGMP离组报文,路由器便会发送IGMP特定组查询报文以便确认该组播组内是否还有其他成员存在
- 特定组查询报文的目的地址为该发出IGMP离组报文的主机所在组的组地址
- 为了避免特定组查询报文被意外丢弃或被损坏导致路由器误以为组内没有成员,查询路由器将缺省间隔1s连续发送特定组查询报文,一共会发送2个报文,如果依然没有成员响应,则路由器将认为该组没有其他成员,他将删除相关IGMP组表项
成员关系报告
- 主机通过IGMP成员关系报告报文宣布自己成为组播组的成员
- 报文的目的IP地址为主机期望加入的组播组地址
- IGMP路由器通过该报文发现直连网段内的组成员
- IGMP成员关系报告报文也用于确认IGMP查询器所发送的查询报文
成员离开报文
- IGMPv1并没有定义组成员的离组方式,组成员"默默的"立刻组播组,IGMPv2增加了离组机制
- 当组成员离开组播组时,需向网络中泛洪IGMP离组报文,该报文的目的IP地址为
224.0.0.2
- 当IGMP查询器收到一个离组报文的时候,会向这个组播发送IGMP特定组查询报文,用于确认该组播组内是否存在其他组成员,如果组内还有其他成员,则这些主机需使用IGMP成员关系报告进行回应,如果一段时间后依然没有任何成员回应,则IGMP查询器认为该网段内不存在这个组播组的任何成员,于是将相关IGMP组表项删除
IGMPv2查询器
- 如果一个网段中有多台IGMP路由器,这些路由器都发送IGMP查询的话那就显得非常多余且抵消
- IGMP会在这些路由器的接口中选举出一个IGMP查询器
- IGMPv2定义了查询器的选举方法:IP地址最小的路由器充当该网段的IGMP查询器,由它来发送查询报文
- 再上图中,R1的GE0/0/0接口地址比R2的GE0/0/0接口地址更小,因此它(的接口)成为该网段的IGMP查询器
- 若非查询器(本例R2的GE0/0/0接口)在
Other Querier Present Timer
计时器(默认125s)超时后,依然没有收到查询器发送的IGMP查询报文,那么它会认为查询器已经故障,新一轮的查询器选举将会被触发
IGMPv2常规查询
- 查询器周期性地向网段中发送IGMP常规查询,以便了解网段中组成员的在线情况
- 收到的主机会启动报告延迟计时器,这个计时器随机0-10s,在计时器超时之前,如果收到了同一个组其他PC的成员关系报告,则自己不再发送,可减少报文数量
离组
- 主机要离开组
244.1.1.1
,发送IGMPv2离组报文,报文的目的地址是224.0.0.2
- 路由器收到该报文后,以1s为间隔连续发送IGMP特定组查询报文2个,以便确认该网段中是否还有
244.1.1.1
组的其他成员 - 如果还有组成员,则它会立刻响应特定组查询,路由器也就会继续转发
244.1.1.1
的组播流量 - 如果没有了,路由器就不会继续转发组播流量了
IGMPv2计时器
Name | Default | Description | Command |
---|---|---|---|
Query interval | 60s | 发送常规查询的时间间隔 | igmp timer query |
Max. query response time | 10s | 组播成员在收到IGMP常规查询后的最大响应时间 | igmp max-response-time |
Lastmember query interval | 1s | 在收到组成员发出的离组消息后,IGMP查询器发送特定组查询的时间间隔 | igmp lastmember-queryinterval |
Multicast Listener Interval | 2*60 + 10s = 130s | 组播侦听这间隔是在链路上一个路由器判断不再有对应组播地址的侦听这存在必须经过的时间 | - |
Other Querier Present | 2*60 + 10/2 = 125s | 认为链路上IGMP查询器故障的计时器 | - |
健壮系数
Robustness Variable
- Robustness Variable,健壮性变量,默认值为2
- 健壮系数越大,IGMP路由器就越健壮,但是组超时的时间也就越长
- 执行命令
robust-count robust-value
,配置IGMP健壮系数 - 当路由器启动时发送健壮系数次的普遍组查询消息,发送间隔为IGMP普遍组查询消息的发送间隔的1/4
- 当路由器收到离开消息后
- 对于IGMPv2,路由器发送健壮系数次的特定组查询消息,间隔为:IGMP特定组查询消息的发送间隔
- 对于IGMPv3,路由器发送健壮系数次的特定组、源查询消息,间隔为:IGMP特定组/源查询消息的发送间隔
IGMP组和路由表
IGMP组表项是由用户主机发送的IGMP加入报文触发创建的,用于维护加入信息并通知组播路由协议(一般PIM)创建相应(*, G)
表项,只要设备接口使能了IGMP并收到组加入的报文就会为每个接口维护一个组加入信息表项。
每个组只需要维护一个最后上报成员即可
IGMP路由表也是由IGMP协议维护的,但它只有在接口没有使能PIM才会存在,作用为用来扩展组播路由表项的出接口
IGMPv3
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
// TODO
IGMP配置
// TODO
1 | # 激活路由器的组播路由功能 |