组播组(g):接收同一个组播地址的设备。
如何区分不同的组播组?根据组播地址来区分。
组播源(s):组播数据包的发送者
组播成员:所有加入某组播组的主机
组播路由器:运行组播协议的设备
组播服务模型
依据接收者接收流量是否针对源进行区分,可分为:
ASM模型(组成员无法对组播源做出选择时,应该部署ASM服务模型)
SSM模型(组成员可以对组播源做出选择时,可以部署SSM服务模型)
ASM :只通过组播地址来唯一的区分不同的组播业务,即不同的组播业务需要分配不同的组播地址,会造成组播地址浪费,但对组成员的能力要求不高,容易部署和维护。接收者只需要事先知道自己要加入的组播地址即可。
SSM:通过组播地址和组播源的地址来唯一的区分不同的组播业务,那么可以实现组播地址重复利用。即同一个组播地址可以使用不同的组播源来提供不同的组播业务。组成员需要事先知道源和组的对应关系。
组播地址-IP地址:
224.0.0.0~224.0.0.255 永久组地址
224.0.1.0~231.255.255.255
233.0.0.0~238.255.255.255
---ASM组播地址,全网范围内有效
232.0.0.0~232.255.255.255 缺省为SSM组播地址,全网范围内有效
239.0.0.0~239.255.255.255 本地管理组地址,仅在本地管理域内有效
组播地址-MAC地址
TCP/IP模型 决定所有IP报文都必须封装成帧才能在链路上转发。
单播以太网数据帧:
SMAC:发送该数据帧的三层接口的MAC地址
DMAC:根据目的IP地址通过ARP解析而来
第8bit为1—组播MAC
01-00-5E-0{组播ip地址的后23bit}
组播协议:
IGMP
PIM
IGMP
一个网段内主机与组播路由器之间维护组成员关系的协议
版本:IGMPv1、IGMPv2、IGMPv3
IGMPv1基本原理
报文:
普遍组查询(通用组查询报文)
成员报告报文
报文格式:
Version:IGMP的版本
Type:报文类型,1为普遍组查询、2为成员报告
Group address:组地址
1、 通用组查询报文General Query
由路由器周期性发送,默认每隔60s发送一次,通过IP报文封装,SIP为路由器接口地址,DIP为224.0.0.1(链路上所有路由器和主机)。
通用组查询报文group address 为0.0.0.0,代表针对所有组播组发起组成员查询。
当组成员接收到通用组查询报文后,随机延时一个0~10s的时间后,发送成员报告报文,SIP为主机自身接口IP,DIP为该主机所属的组播组地址。Group address为该主机所属的组播组地址。
随机延迟时间为0~10s之间一个值,10s称为最大响应时间,实现组成员报告抑制机制,IGMPv1无法修改该时间值。
为什么要设计最大响应时间呢?避免同组的成员重复发送成员报告报文,减少路由器负担。由于组成员报告延迟时间不一致,谁先超时谁先报告。
路由器接收到成员报告之后,将创建(,G)表项,并将收到该成员报告的接口做该(,G)表项的下游接口,未来路由器收到发现该组的组播报文就向该下游接口复制一份,从而发给成员主机所在的网段。
IGMPv1没有设计离组机制,成员离开不会发送任何通知,静默离开,如果该组最后一个成员离开,路由器在130s内接收不到该组的报告报文,则认为该组不存在成员,将(*,G)表项的下游接口删除,停止向该组网段发送该组的组播报文。
IGMPv1没有查询者选举机制。
什么是IGMP查询者呢?当一个网段存在多台路由器时,负责向该网段发送普遍组查询的路由器。
IGMPv1需要PIM协议的DR选举机制来协助查询者的选举,因此启用IGMPv1的接口还需启用PIM协议。由PIM协议选举出该网段上的DR,由DR充当IGMPv1的查询器。
PIM DR的选举规则:
- 根据PIM协议中hello中携带的优先级选举DR,优先级越大,优先成为DR。优先级默认为1。 pim hello-option dr-priority 10
PIM DR具有抢夺性,DR失效后会重新选举DR,充当IGMPv1的查询器
- 优先级相同,则比较接口IP地址的大小,地址大的优先成为DR。
igmp timer query 10,修改IGMP普遍组查询报文的发送间隔。
IGMPv2
在IGMPv1的基础之上新增2种报文:
- 特定组查询报文
- 离组报文
在IGMPv1的基础之上新增3种机制:
- 离组机制
1) 当主机要离开某个组时,会发送离组报文。SIP为自身网卡IP,DIP为224.0.0.2(代表链路上的路由器),Group address 为离组的组播地址。
2) 路由器收到离组报文后,会发送指定组查询报文,SIP 路由器接口地址,DIP 为主机离组的组地址,Group address为离组的组播地址。
3) 指定组查询默认连续以1s为间隔,连续发2次,在“发送间隔发送次数”时间内,如果没有收到该组成员的报告,则认为该组不再存在成员,删除相应的(,G)表项,停止该组播流量转发。
离组报文有2种发送机制 :
(1) 只要主机离组,就会发送离组报文。eNSP有离开按钮,会发离组报文。
(2) 只有本轮查询的报告者离组时,由报告者发送离组报文,本轮的非报告者离组不发送离组报文,静默离开。
- 查询器选举机制
1) IGMPv2设计了自身的查询器选举机制,接口地址小的成为查询器,具有抢夺性。
2) 非查询器会维护一个“其它查询器失效时间”默认为125s。
3) 非查询器根据自身的“健壮系数 × IGMP普遍组查询报文发送间隔 + (1/2) × 最大查询响应时间”来计算“其它查询器失效时间”
- 最大响应时间控制机制
IGMPv2、IGMPv3适用的命令:
igmp max-response-time 5 修改通用组查询报文的最大响应时间;
igmp lastmember-queryinterval 3 修改特定组查询报文的最大响应时间,默认1s;
igmp robust-count 3 修改指定组查询报文发送次数IGMPv2、IGMPv3适用,即健壮系数。默认2s;
IGMPv3:
一、IGMPv3的报文类型:
1.通用组查询报文
2.指定组查询报文
3.特定源组查询报文
4.成员报告报文,没有离组报文
二、取消了成员报告抑制报文
报告中的include为空
二层组播转发的机制:
1) IGMP监听
2) CGMP,思科
3) 静态组播表项
PIM协议
PIMv2 与协议无关的组播路由协议
网络使用静态、RIP、ISIS、MP-BGP都可以运行PIM协议。
DVMRP 距离矢量组播路由协议
MOSPF 组播OSPF协议
---但是对单播网络有要求,比如DVMRP要求IGP使用RIP,MOSPF要求IGP使用OSPF。“协议相关路由协议”
PIMv2有3种工作模式:
1、 密集模式 DM
2、 稀疏模式 SM
DM、SM用于支持ASM的组播网络
3、 指定源组播模式 SSM
SSM用于支持SSM的组播模式
PIM的作用:
构建、维护组播路由转发表项
运行在路由器和路由器之间
第一跳路由器:和组播源相连的PIM路由器
最后一跳路由器:和组成员源相连的PIM路由器
叶子路由器:与用户主机相连的PIM路由器,连接的用户主机不一定为组成员
源树(SPT树):
组播在网络中传输经过的路由器和路径组成的树
特点:以组播源为根,到组成员的最短路径树
PIM路由表使用(S,G)描述SPT树。S代表组播源地址,G代表组播组的地址
(S,G)表项:
1)有且只有一个上游接口,也称为 RPF 接口(反向路径检测接口),用于接收该(S,G)的组播流量。
2)可以有一个或多个或没有下游接口,用于发送该(S,G)的组播流量。
3)下游接口不可能成为向上游接口。
共享树(RPT树):
以RP(汇聚点)为根一棵组播分发树
优点:只需要维护(*,G)表项,节省设备资源
(*,G)表项:
1)有且只有一个上游接口,也称为 RPF 接口(反向路径检测接口),用于接收该(*,G)的组播流量。
2)可以有一个或多个或没有下游接口,用于发送该(*,G)的组播流量。
3)下游接口不可能成为向上游接口。
对比:
(S,G)组播转发路径最优,需要维护所有已知的(S,G)表项,比较占用设备资源,流量路径比较多,不利于运维和故障定位以及排除。
(*,G)组播转发路由非最优,但无需维护所有的(S,G)表项,设备开销较小,组播流量路径明确,有控制点,方便故障定位和排错。
PIM-DM(密集模式)
“推(Push)”的模式转发组播报文
周期性的扩散和剪枝构建和维护单向无环的SPT树
适用于小型的组播网络
1.邻居发现
Hello消息
目的地址为224.0.0.13、源地址为接口的IP地址、TTL值为1
周期性时间:30s
失效时间:105s
PIM-DR作用:
1、 用于充当IGMPv1的查询器
2、 PIM-DM模式下,DR没有实际用途。
接口开启PIM,邻居关系就会建立起来。
2.扩散机制
将组播源发送的组播报文扩散到全网
沿途每台PIM-DM路由器创建(S,G)表项
DM模式扩散机制:
1) 路由器接收到组播流量后,对接收该流量的接口进行RPF检测。
如果RPF检测成功,则创建(S,G)表项,RPF检测成功的接收成为上游接口,检测失败丢弃该组播流量。
RPF检测机制:根据组播的源地址查找单播路由表,如果接收组播流量的接口是去往组播源地址的单播路由出口,则RPF检测通过,接收该组播流量,并创建(S,G)表项。
如果去往组播源存在多条等价出口,则下一跳地址大的出口,作为RPF接口。RPF接口上的PIM邻居称为RPF邻居。
RPF检测举例:
2) 从上游接口接收到的(S,G)流量,从除了RPF接口之外的存在PIM邻居的接口以及存在直连组成员进行扩散。
3.剪枝机制
1) 当路由器发现自身不存在任何下游接口时,将发起剪枝机制,向RPF接口上发送剪枝报文,目的地址为224.0.0.13,即该接口上的所有PIM邻居。
上游路由器收到剪枝报文后,如果剪枝报文中携带的RPF邻居地址是自身接口IP,则将自身接收剪枝报文的接口从(S,G)下游接口中删除
① 如果剪枝后,下游接口不为空,剪枝结束;
② 如果剪枝后,下游接口为空,继续向(S,G)表项RPF的接口发送剪枝报文,向上游继续剪枝。
出现等价出口,三个出接口,谁的地址大,谁就是我的RPF邻居
PIM DM--SPT树的形成
1) 经过扩散-剪枝过程,形成组播源与接收者之间SPT树
2) 扩散-剪枝周期进行,210s重复一次
DM模式周期性扩散的意义:
1)向全网路由器表明组播源是活跃的。
2)能够维护(S,G)表项不被老化。
4.嫁接(graft)
作用:剪枝的路径上如果存在新组成员的加入,快速获得组播流量
路由器根据组地址查找对应的(S,G)表项;
1)如果没有对应的(S,G)表项则无法完成嫁接。
2)如果有对应的(S,G)表项,那么根据组播源地址查RPF接口,朝RPF接口的RPF邻居发送单播嫁接报文,SIP地址为自身路由器的接口地址,DIP为RPF邻居的地址。
上游RPF邻居接收到嫁接报文,将接收该报文的接口接入到自身(S,G)表项的下游接口中,并单播回复嫁接确认报文。如果这个被嫁接的接口是(S,G)表项唯一的下游接口,则继续向上游发起嫁接;如果这个被嫁接的接口不是(S,G)表项唯一的下游接口,则嫁接结束。
总结:即以前剪枝到哪,就嫁接到哪
5.状态刷新机制
是PIM-DM默认的优化机制,避免了周期性扩散-剪枝行为的发送,导致组播流量占用网络带宽,节省网络资源。
1)第一跳路由器会周期性的发送PIM的状态刷新报文,目的地址为224.0.0.13,即发给所有的PIM邻居,该报文还携带(S,G)的信息。
2)下游路由器收到状态刷新报文后,会重置(S,G)表项的老化时间以及重置剪枝接口的剪枝超时定时器。当组播源不再向网络发送组播流量时,第一跳路由器停止状态刷新报文的发送,全网(S,G)表项超时后被删除。
周期性时间:60s
配置在第一跳路由器连接组播源的接口,默认开启
6.断言机制(assert)
接收到重复的组播流量:
断言:保证只有一个PIM路由器向该网段转发组播报文,实现无重复组播流量
断言报文发给该网段上的所有PIM路由器,即224.0.0.13。
断言报文中携带:1)路由器到达组播源路由的协议优先级;
2)路由器到达组播源路由的开销值
3)路由器自身在该网段的接口地址
断言选举机制:1)协议优先级优的成为断言的winner
2)优先级相同,比较开销值小的成为断言的winner
3)开销值相同,接口地址大的成为断言的winner
断言的优胜者负责在该网段扩散组播流量,失败者将失败的接口从(S,G)表项删除。
断言的优胜者被下游路由器认为是自己的RPF邻居,比下游路由器自身判断RPF邻居的机制优先。
断言的失败者会在该网段发送剪枝报文,企图将断言优胜者也剪枝掉,断言优胜者如果在3s内收到join报文,则否决剪枝报文,如果3s后没有收到join报文,也将接口从(S,G)表项中删除。剪枝否决机制。
PIM-SM(稀疏模式)
使用“拉”的模式转发组播报文---按需
适用于大型组播网络
以RP为根构建RPT
1.邻居发现和DR竞选
1)邻居发现和PIM-DM一致
2)广播网络中必须进行DR选举
PIM-SM的DR分为两种:
1) 源端DR:负责发送reg注册报文或者reg-stop报文,构建SPT树。
2) 成员端DR:负责发送join报文构建RPT树。
RPT树的创建:
以RP为根,成员端DR发送join报文构建
PIM-SM模式:
PIM网络的路由器
(S,G)一定要事先知道S的地址,以及存在S的路由
(*,G)一定要事先知道RP的地址,以及存在RP的路由
(,G)表项是由收到成员报告报文或者收到(,G)的join报文而被创建的。
(*,G)表项的上行接口是根据RP的地址进行RPF检测得到的。
(,G)表项的下游接口是存在直连组成员或者收到正确的(,G) join报文而被创建出来的。
(,G)表项的下游接口收到(,G)的剪枝报文或者最后组成员leave报文而被删除。当(,G)表项下游接口为NULL时,朝RP的RPF接口发送(,G)剪枝报文。
PIM-SM—RP发现
发现方式:
1)静态RP
2)动态RP
RP的特点:
1.同一个时刻一个组只能有一个RP
2.不同的组可以有相同的RP
一、静态RP
静态RP需要在每台路由器上配置
static-rp 1.1.1.1 ,将1.1.1.1设置为所有组的RP
static-rp 2.2.2.2 2000,将2.2.2.2设置为acl 2000组地址范围的RP
1)如果某个组地址同时满足多条ACL,则掩码长度大的优先,即越精确越优先
3) 默认情况下,动态RP优先使用。Preferred:设置静态RP优先。
二、动态RP协议
BSR 自举协议,开放标准的协议。
BSR的工作机制:
1) 首先管理员需要手动配置C-BSR路由器,可以是一台或者多台。
2) 在所有C-BSR中选举出BSR路由器。
3) 如果BSR路由器失效,在其他的C-BSR中重新选举新的BSR路由器。
4) 如果只有一台C-BSR,则它成为BSR
选举过程:
1、C-BSR 初始认为自身就是BSR,在所有存在PIM邻居的接口上周期性发送Bootstrap报文,源地址为物理机接口IP,目的地址为224.0.0.13,TTL=1。
2、携带C-BSR的地址、C-BSR的优先级,逐跳在泛洪到整个PIM网络。
选举规则:
1)比较C-BSR的优先级,值越大优先成为BSR
2)优先级相同,C-BSR地址大的成为BSR。
3、竞选失败的C-BSR将不会周期性发送Bootstrap报文,即此刻网络中只有BSR周期性发送Bootstrap报文。周期性时间60s。
4、C-BSR维护一个BSR失效计时器,默认在130s超时,如果没有收到Bootstrap报文,则认为BSR失效,重新进行BSR的选举。
为了防止Bootstrap的泛洪环路,引入BSR RPF检测机制,路由器收到Bootstrap报文,根据BSR的地址进行RPF检测。
只有同时满足以下2个条件时才接收Bootstrap报文,并向其他接口继续泛洪:
1、 收到Bootstrap报文的接口为去往BSR的出口。
2、 收到的Bootstrap报文的源地址为RPF邻居的地址。
pim
c-bsr loopback0
RP的选举机制:
1、 首先管理员需要手动配置C-RP路由器,可以是一台或者多台,C-BSR也可以是C-RP
2、 C-RP向BSR的地址发送单播的advertisement报文,源地址为C-RP的竞选地址,目的地址为BSR的地址。
3、 Advertisement报文中携带RP的竞选参数,包括C-RP地址、C-RP的优先级、服务的地址组范围
RP选举机制:
1)服务组范围掩码长的优先
2)C-RP优先级值小的优先,默认为0。
3)根据bootstrap报文设置的hash掩码长度计算hash,值大的优先。
4)C-RP地址大的优先。
PIM-SM的SPT切换
1、 SPT切换由最后一跳路由器发起
2、 当最后一跳路由器接收到从RPT树的组播流量后,可以通过组播流量得知组播源的地址,则默认发起SPT切换,希望构建一棵源到最后一跳路由器的SPT树,实现路由优化。
SPT切换的流程:
1、 最后一跳路由器根据组播源的地址进行RPF检测,并向指向组播源的RPF接口上RPF邻居发送(S,G)的join报文,逐跳构建SPT树。
2、 当去往组播源地址和去往RP的地址的RPF接口不一致时,路由器沿着去往组播源RPF发送(S,G) (S)join,沿着去往RP的RPF接口发送(S,G) (SR)prune。
沿着RP方向上的路由器将自身(S,G)表项的下游口剪枝掉,实现SPT切换,通过SPT树接收组播流量。
配置命令:
spt-switch-threshold 1000 //检测到组播流量速率达到1000kb时进行SPT切换,阈值默认为0,即收到组播流量就进行切换。阈值为infiity(无限大)时不进行切换(关闭SPT切换)。