组播浅谈

 

 组播架构

 

 

组播IP地址范围:

D类:1110 0000 0000 0000    224.0.0.0239.255.255.255

 

1.被保留的链路本地地址(发往到这些组播组地址的报文TTL=1): 224.0.0.0224.0.0.255

  224.0.0.1(一个广播域内所有三层设备都监听);224.0.0.2(一个广播域内只有路由器监听);224.0.0.5(OSPF发送报文常用的地址)224.0.0.6DRother把报文发送给DRBDR时使用);224.0.0.9RIPv2发送路由更新的组播地址);224.0.0.10EIGRP发送路由更新的组播地址);224.0.0.13PIM发送HELLO的组播地址)。

 

2.全球可聚合的组播地址: 224.0.1.0238.255.255.255

  Source specific multicastSSM: 232.0.0.0232.255.255.255

  GLOP addresses(买AS号送的组播地址) : 233.0.0.0233.255.255.255

 

3.私有的组播地址:239.0.0.0239.255.255.255

 

 

IGMP(用来管理谁加组谁离组)

IGMPInternet Group Management Protocol)属于4层协议,协议号为2。(让最后一跳路由器知道下游有哪些PC要加入一个组播组,让组播组接收成员得知当我需要接收组播流量时我把“我想要接收”这个信息告诉给谁)

 

IGMPv2:有四种报文:

1.Membership Queries(路由器每60秒周期性发送);

2.Membership Reports(组播组成员发);

3.Group-specific query(指定组查询报文。当路由器接收到一个离组报文后会发送一个指定组查询报文,看看这个组播组还有没有其他成员在线);

4.Leave Group message(离组报文);

 

 

 

计时器:1.Holdtime180s

               2.查询者存活计时器:120s

 

查询者选举机制(在有多个组播路由器时解决了重复报文问题,在多个路由器中选举一个查询者来转发组播报文):比较最后一跳路由器连接下游网段的接口IP地址,谁的地址小,谁就充当查询者。

 

 疑问?

1、当最后一跳路由器向下游交换机转发报文时需要添加二层帧头,那么应该添加什么目的MAC地址呢?

答:组播地址对应组播MAC地址,但是由于组播MAC不够用所以组播IP对应组播IP32:1,所以目的MAC为组播IP对应的MAC地址01:00:5e:xx:xx:xx32IP对应一个MAC)。

 

2、当交换机收到一个目的MAC地址为01:00:5e:xx:xx:xx的帧,由于MAC表中不存在这样的MAC,所以交换机会泛洪,导致所有客户端都收到该组播报文。怎样解决这个问题?

答:在交换机上运行IGMP Snooping。交换机开启IGMP Snooping后,当收到客户端的report报文,会提取客户端的源目IP地址,然后把目的IP地址和接收该报文的接口做一个绑定。由于需要交换机CPU拆三层包头,所以会导致交换机转发报文变慢。

 

 

 

路由器接收到单播路由更加关心去往目的地址的可达性,而接收到组播路由更关心来自哪个接口,目的是防止重复报文。一台路由器对于一个组播组信源有且只有一个接口可以接收组播流量,只有这个接口接收到组播流量后路由器才可以帮助转发组播流量。(通过RPF校验来选出这个接口)

 

 

 

RPF 校验

 

 

当单播路由表对发送组播源地址出现负载均衡的情况下,出站接口IP地址大的成为RPF接口。

 

要实现针对不同的组播源走不同的RPF接口,可以使用组播静态路由实现。

组播静态路由:ip mroute x.x.x.x mask interface x.x.x.x为组播组信源地址)

(个人认为这里用单播静态路由也能实现。不同的是用单播静态路由的话往组播信源发送单播流量不能负载均衡了,而用组播静态路由不会影响单播负载均衡)

 

 

 

PIM

PIM分两种模式(Dense modeSparse mode),分别对应两种“树”(“源树(SPT)”和“共享树(RP)”)

 

 

 

组播路由协议建立完邻居之后不会传递路由,此时路由表为空,只有在数据层面接收到组播组的数据流量时才会生成路由。

 

源树特点:1.一个源一棵树

                  2.从源到目的地的这个最短路径树距离肯定最短

                  3.源树伴随网络环境越来越大,路由器越来越多,信源服务器越来越多每台路由器组播路由表也会越来越大,由于路由表占用路由器内存,所以会造成资源的浪费。

 

 

共享树特点:会选择一个RP路由器,然后所有信源第一次都会用源树将组播报文发给RP,然后RP再用共享树把来自所有信源的组播报文转发给客户端。这样会造成次优路径,但是信源第二次发送组播报文时就将产用最优路径(跟ICMP重定向还挺像,但不是→_→)

 

 

PIM是一个4层协议,通过周期性发送组播hello包来建立邻居关系,组播地址为224.0.0.13PIMOSPF一样,在MA网段需要选举DRPIM中没有BDR,并且DR是可以被抢占的),选举规则为:1、比较优先级;2、接口IP地址,越高越好。在IGMPv1中由于没有查询者机制,所以就由DR来代替查询者。在IGMPv2中,查询者和DR优先级为 查询者优先于DR

PIM DRIGMPv1中充当查询者角色,在IGMPv2中无用。

 

不同接口启用PIM后的表现

1、对于第一跳路由器的接收组播流量接口,如果该接口没有启用PIM,则无论收到什么组播报文,都会本地拆包然后将报文丢弃。

2、对于最后一跳路由器连接接受者所在网段的接口,如果该接口没有启用PIM则路由器不会周期性的发送IGMP Query报文。

3、对于中间路由器彼此互连的物理接口,如果没有启用PIM,这些路由器不会通过任何接口转发任何组播报文。

 

Dense modeSparse mode的一些细节:

1、Dense mode(整个路由选择域内95%以上PC都是组播组流量接受者时使用),

   DMpush(不管下游有没有接收者都一股脑的把流量泼下去)—SPT(源树)

Push模型

 

 

运行PIM的路由器收到泛洪后发现自己下游没有监听该组播的客户端时会发送prune(裁剪)报文,180s后裁剪失效,再次收到泛洪后如果下游依然没有监听该组播的客户端则路由器将再次发送prune报文(可以理解为DM是每3分钟一次的泛洪和裁剪的过程)。

 

 

注意:单播想要通信,源目必须互通。而组播(用的UDP)想要通信,只要信源可以通接收者就可以了,接收者是否同信源没有任何关系,故ping组播不通并不代表组播没有部署成功。

 

 

Sparse mode(适用于该环境只有5%不到的PC是组播组流量的接收者)

SMpullPush是尽可能把组播流量推出去,而pull是尽量不把流量发出去,从而更好节省性能)—SPT(源树)+RPT(共享树)

Sparse mode通信流程:

   1、首先,在组播组信源发送组播流量之前,只要域内有pc要加入组播组,它就会发送report报文给最后一跳路由器,最后一跳路由器生成(*GJoin发给RP,告知RP域内拥有该组播组的接收者。

   

2、信源开始发送流量,信源发送流量到达第一跳路由器,第一跳路由器会把第一个组播报文封装成一个单播的注册报文,把这个报文以单播的形式发送给RP,就是问RP下游有没有组播组流量接受者。如果有,RP会把这个注册报文解封装成组播报文,沿着RPT(共享树)往下发,并且给信源第一跳路由器返回一个(SGjoin的报文来告诉它可以使用SPT(源树)来以最短的路径把组播流量发给我,并且RP会给信源第一跳路由器返回一个报文说不要给我发送该组播的单播注册包。

 

3、报文到达接收者最后一跳路由器,最后一跳路由器有一个源树切换阈值,这个阈值是0kbps,这就代表只要收到一份组播报文,它会立即把RPT(共享树)切换成SPT(源树)。切换的方法就是组播接收者最后一跳路由器根据SPT(源树)一跳一跳的给发送组播流量第一跳路由器发送一个(S,GJoin的报文。而到达切换路径的这台路由器会给RP发送一个prune(裁剪)报文,这个报文发送完毕后我们最终的路径就是发送组播流量第一跳路由器到接收者第一跳路由器的SPT(源树)的最短路径。

 

SM最终选择的路径和DM选择的一样,那么为什么要用SMSM的好处在哪里?

答:SM只有知道有接收者的时候才会把正确的组播流量按照正确的路径发给正确的接收者,而DM不管有没有接收者直接就发组播流量。故SM可以节约性能,节约带宽,所以建议选择SM

posted @ 2019-02-20 17:41  白桦林_HK  阅读(3260)  评论(0编辑  收藏  举报