igmp和pim介绍
igmp
igmp是终端与路由之间的一套协议
igmp v1
查询器每间隔60s发一次普遍组查询(General Query)报文,报文:224.0.0.1,最大响应时长10s
组成员开启定时器准备回复Report报文(目标组ip),若收到组内其它成员的Report报文,自己就不发(抑制机制)
组成员主动加入组播组时,不需等待普遍组查询(General Query)报文,直接发Report报文。
组成员是默默离开的,等查询器发起2次普遍组查询(General Query)报文均无收到响应,130秒(60+60+10s报文最大响应时长),就停掉该组
igmp v2
v1无查询器选举,依靠上行的组播路由协议来确定查询器
v2有查询器选举,基于普遍组查询(General Query)报文选举,接口IP小的路由被选为查询器。非查询器会监听普遍组查询(General Query)报文,时刻准备取代掉线的查询器。
v2加了组成员离开(Leave)报文。Leave from Group2。查询器收到后会发2次特定组查询(Group Specific Query for Group2)报文:Group2 IP,最大响应时长1秒。所以2秒就能确定无成员并停掉该组播组。
igmp v3
增加源过滤,Report报文有In(只想要该源)和Ex(不想要该源)。
组内不同成员对源的需求不一样,所以取消掉了Report报文抑制机制。
一个Report报文可指定加入到多个组播组内。
igmp 模型
- ASM 模型:Any-Source Multicast,任意信源组播
- SFM 模型:Source-Filtered Multicast,信源过滤组播
- SSM 模型:Source-Specific Multicast,指定信源组播
igmp snooping
用于交换机,让交换机的cpu去维护一个二层组播转发表,减少对组播报文的广播。
pim
组播路由协议是网络中路由器与路由器之间维护的组播路由转发表的协议。组播路由协议有很多,pim(Protocol Independent Multicast)是其一,它可以直接利用单播路由表的路由信息进行组播报文RPF检查和转发组播报文。
pim dm
Dense Mode 采用“推(Push)模式”转发组播报文
PIM-DM的关键任务
建立SPT(Shortest Path Tree,最短路径树,源与成员之间路径是最优的) [RPT,共享路径树,源与成员之间路径不一定是最优的]
组播路由器将数据发送到需要该组路由数据的网络分支上,那么,组播流量转发路径该如何确定?如何确保流量被转发到正确的路径上?如何防止环路?这些问题都是组播路由器需要解决的问题,因此,组播路由协议需要判断报文出接口的合法性,及通过RPF(Reverse Path Forwarding,反向路径转发)来进行判断,然后在网络中建立一棵组播分发树,从而转发组播流量,在每台路由器上建立组播转发表项((*,G),(S,G)),记录该组播分发树。当受到组播数据包,取包内的源地址匹配单播路由表,匹配到表条目记录的出接口就是数据包进来的端口就表示通过RPF检查。通过RPF检查后,数据包会被复制从所有端口扩散出去。
工作机制
- 邻居发现:相互发hello报文(30秒/次),105秒收不到就代表邻居断开。选举查询器DR(igmpv1不能选举)
- 扩散与剪枝:路由A收到源发来的包扩散Flooding发给所有接口,若接口下游路由B底下没有接收者就发送剪枝Prune报文给上游路由A,路由A后面就不再发该组播包给路由B。
- 状态刷新:定时器,周期性地把组播包(State Refresh小协议包)发给已剪枝的路由,重新剪枝。
- 嫁接:路由B下有新组成员通过IGMP加入组播组,路由B会向上发送Graft(带有目标组播ip)给路由A(依此上发),路由A回复GraftAck给路由B
- 断言:同一网段内有3台路由器A,B,C,都从上游接收到组播包转发到本网段,A,B,C受到对方转发的组播包,就发出断言Assert报文,通过断言报文比较(通往源的单播路由协议优先级小者胜,去往组播源开销小者胜,本网段内接口ip大者胜)选出代表来转发发组播数据。最终只有1台路由能转发组播包到本网段。
配置
适用/局限
适用于组播成员分布较为密集的园区网络。在组成员分布较为稀疏的网络中,组播流量的周期性扩散会给网络带来较大负担。
pim sm
Sparse Mode 采用“拉(Pull)模式”转发组播报文
PIM-SM的关键任务
- 建立RPT(Rendezvous Point Tree,汇聚点树也称共享树,接收者到汇聚点RP的树)
- 建立SPT(Shortest Path Tree,最短路径树,组播源与汇聚点RP的树)
适用
组播成员分布较为稀疏的网络环境
汇聚点RP(Rendezvous Point)
- 充当RPT树的根节点
- 共享树中的所有组播流量都经过RP转发给接收者
- 所有PIM路由器都要知道RP的位置
可以在各路由上逐台手动配置汇聚点RP,也可动态配置
思考答案:IGMP会选举查询器,由查询器来向上游发送Join消息。
接收者侧DR详见IGMP的查询器选举。组播源侧DR选举跟PIM-DM的断言一样。
SPT的建立过程
- 组播源发送组播包给源端DR
- 源端DR会把组播包封装成单播Register报文(目的RP的IP,源地址本机)
- RP收到Register报文后解封装,转发组播报文,向源端DR发送Join(S,G)途经路由可建立组播路由表
- 源端DR有2条路径发组播包给RP,a.封装单播Register(消耗带宽,RP的解包延时),b.直接发组播包
- RP收到组播源发来的数据后,向源端DR发送RegisterStop报文
缺点:从源到成员不是最短的路径;所有数据都经过RP会使得RP压力过大(用Switchover机制解决)
pim sm Switchover
- 成员端DR收到组播报文,向上游发起Join(S,G)消息
- RP下游路由发起剪枝报文给RP,RP也发剪枝报文给上游路由
- 新的SPT建立成功
组播综合实验
参考: