一.组播

--------------------------------------------------------------------------------------------------

>三种报文转发形式

 单播 组播 广播

--------------------------------------------------------------------------------------------------

>组播的特点(产生的原因):

  》适用环境:--当需要把相同的一份流量发送给多个接收者;

              --当接收者未知时;---视频共享;

  》优点:--提高带宽利用率; 

          --降低了转发数据对CPU的消耗;

  》同步:数据被同时被发送给多个接收者;----股票信息;

>组播和单播或广播的对比:

   带宽利用率;

   适合接收者未知的应用;

   设备CPU消耗;

   接收者的接收控制;

------------------------------------------------------------------

>组播是运行在UDP上

  (为什么不运行在TCP 当接收者未知时,无法建立起握手;就算接收者是已知的,也需要

建立太多的连接)

  》UDP的缺点 

     --不可靠 尽力而为

     --没有拥塞避免机制

     --无序

     --重复的包 

  既然所依靠的传输协议有诸多缺点,因此,这些缺点就必须依靠组播自身的机制来解决;就

像寄快递,也许快递公司只能保证物品能到达,不能保证在路途中是否受损,此时,我们可以

寄送物品前,给与物品安全的包装,通过自己的措施来提高物品在传输途中的安全性;

--------------------------------------------------------------------

>组播的应用环境

 ---一对多  视频会议、语音广播;

 ---多对多  讨论组、多人仿真游戏;

 ---多对一  数据收集、网络竞拍; 此时此时已经和单播很相似;

--------------------------------------------------------------------------

>IP组播地址范围:

  224.0.0.0-239.255.255.255------前四位为1110

???怎样用访问控制列表来表示组播流量:

   access-list 1 permit 224.0.0.0 15.255.255.255 即组播地址的前四位是固定的1110;

  224.0.0.0-224.0.0.255 是给局部连接使用,无论其TTL值是多少,路由器不会转发这样的组播流

  239.0.0.0-239.255.255.255 是私有组播地址

  224.0.1.0-238.255.255.255 是全球组播地址

常用组播地址:

   224.0.0.1  同一子网的所有节点;

   224.0.0.2  同一子网的所有路由器;

   224.0.0.4  所有DVMRP路由器;

   224.0.0.13 所有PIMV2路由器;

   224.0.0.5 224.0.0.6 224.0.0.9 224.0.0.10 用于单播路由协议中;

其他保留地址:

   224.0.1.1 NTP

   224.0.1.39 AUTO-AP竞争

   224.0.1.40 AUTO-AP发现通告

==>往组播IP地址发包时,二层封装时,目的MAC地址怎么填写呢? 

>组播IP地址与组播MAC地址的映射关系:

  因为IP组播地址的前四位是固定的,即1110,所以还剩28位可变的,如果为了实现一个组播IP地址对应

一个组播MAC地址,就需要申请28位MAC地址位,当时的组播开发者,因为费用的原因,只购买了24位可变

MAC地址,而且把其中一位另作他用,所以只剩23位可变MAC地址,也就是说32个IP组播地址对应一个组播

MAC地址;

  把IP地址最后面的23比特加在组播地址的最后面,而前面的25比特是01005E 0;

  e.g.:

      224.135.1.5 ----->  10000111 00000001 00000101

      00000111 00000001 00000101=070105      

      ==》01005E 070105

-----------------------------------------------------------------------------------------

>组播的组成

---组播的源 发送组播信息的终端;

---源段 由组播源和第一跳路由器组成,组播源通过软件等方式将组播流量发送给第一跳路由器;

   组播的源和源段之间不需要运行任何的组播信令或协议;

---组播的接收者 加进组播组,接收组播流量的终端;

---接收者段  接收者和最后一跳路由器组播组成的接收者段  

   接收者和最后一跳路由器之间是有运行协议的,这个协议是IGMP(因特网组管理协议 其协议号是2);

---组播网络;

-----------------------------------------------------------------------------------------

>IGMPV1 

  》报头结构(8字节):

   |<4bit版本>|<4bit类型>|<8bit保留位>|<16bit校验> |

   |--------------4字节组播组ID-------------------|

    ---版本:版本1---0001

    ---类型:查询--0001,报告---0010

  》有两种报文

    ---主机成员关系查询:路由器周期性地向224.0.0.1发送查询包(每隔一分钟 当三分钟没有接收到      

主机成员报告,则把相应组播流量修剪);并没有查询具体的组播,此时组播组地址为0.0.0.0;

    ---主机成员关系报告:当多个主机需要加入同一个组播组时,没必要每个主机都要做出回应;所以当

       主机收到关系查询时,并不是立马回应成员关系报告,而是等待一个时间才回应成员关系报告(这

       个时间是系统随机产生的,为1S-10S),是向所要加组的组播地址发送的;

     当一个主机要推出该组时,是静悄悄的离开的,这是路由器是不知道的,直到路由器发送三次查询,

    没有主机回应时,路由器才意识到该组被修剪;

--------------------------------------------------------------------------------------------

>IGMPV2

 报头结构:

   |8bit类型|8bit最大响应时间| 16bit校验|

   |-----------32bit组播组地址----------|

   ---类型:0x11--查询报文,0x16--应答报文(版本1的是0x12) ,0x17--离组消息,

   ---最大响应时间:单位是0.1秒;默认是100;

  增加了两种报文

   ---离组消息(LEAVE GROUP MESSAGE):那台回应主机成员关系报告的主机,离组时会发送离组消息 0X17

(目标 224.0.0.2);

   ---组特殊查询:当路由器接收到离组消息,会发送组特殊查询(收到所要离组的组地址),比如说,有   

      主机发送离开224.1.1.1组播的离组消息,路由器收到后,会发送组特殊查询,询问还有主机在组

      224.1.1.1中么;此时最大响应时间为10,即如果在1秒内没有收到主机的回应,路由器就认为没有

      组成员了;组特殊查询包发两次,防止丢包;

  ***注意:课本上说,只有最后一台成员主机才发离组消息;上面的“最后一台成员主机”是指发送组成     

员关系报告的主机;

--------------------------------------------------------------------------------------------

>IGMPV3

  可以指定组播源;

example:

R1 R2 R3 R4 都和SW相连,R1作为网管路由器,R2 R3 R4作为PC;

 R1:

  ip multicast-routing

  int f0/0

    ip pim dense-mode

 R2、R3、R4:

  int f0/0

    ip igmp join-group 224.1.1.1

==》R2 R3 R4:

   show ip igmp interface f0/0   ---可以看到,默认情况下,IGMP是版本2的;

==》R1:

   show ip igmp groups  ---可以看到,对于224.1.1.1这个组,路由器只收到一台路由器                           

的成员关系报告;所以,只有这台路由器离组时才会发离组消息;

   debug ip mpacket ---路由器发送组成员关系查询后,回复组成员关系报告的PC是不固定;

                       由系统自动产生的随机时间而定;

==》R1:

   debug ip igmp 224.1.1.1

   show ip igmp groups  此时看到224.1.1.1这个组,回复成员关系报告的是R2,那么在R3或R4

    的f0/0接口下,取消加组no ip igmp join-group 224.1.1.1时,R1上是看不到离组消息的;

  只有当R2离组时,R1上才可以看到debug显示的离组消息;

--------------------------------------------------------------------------------------------

报文总结:

报文类型                    源IP地址               目的IP地址                    GID

主机成员关系查询         路由器IP地址          224.0.0.1(所有主机)            0.0.0.0

主机成员关系报告         主机IP地址            所加组播组的IP地址            所要加组播组

离组消息                  主机IP地址            224.0.0.2(所有路由器)     所在组播组

组特殊查询               路由器IP地址          相应组播组的IP地址             相应组播组

--------------------------------------------------------------------------------------------

>组播网络 

  在第一跳路由器和最后一跳路由器之间的网络,与单播相同,组播的流量在这个网络传播需要组播的协议;

 ---早期有运行RIP上DVMRP,它要求是运行在RIP单播路由协议之上;

 ---运行在OSPF上的MOSPF (六类LSA)

 ---CBT 

 ==》以上几种CISCO都不支持

 ---当今最流行的组播协议是PIM(协议无关组播),对于运行的单播路由协议没有要求;

--------------------------------------------------------------------------------------------

>PIM

  ---使用的组播地址是224.0.0.13; 

  ---组播的分发树:所谓分发指的是组播的流量从源到接收者;  

      1 源树,也叫最短路径树SPT;

         ---以组播的源为根;

         ---每个源对应一个SPT,用(S,G)来表示;

      2 共享树,选举出一台路由器,组播的源将组播发给这台路由器(RP 聚合点),由这台路由器        

再将组播流量转发给接收者;

         ---公用的根,RP;

         ---(*,G)来表示;

  源树相当于厂家直销,也就是自己的产品直接以最优方式给客户;

  共享树相当于代理销售,像神码是很多厂家的代理,厂家将自己的产品通过神码给各个客户;

  ---共享树又分为双向共享树和单向共享树,双向共享树的源发送的组播信息不一定要经过RP,而单向共享树

的组播信息必须经过RP再转发给各个客户端;单向共享树中,源的信息到达RP的方式有两种,一种是由第一条

路由器以单播形式讲组播信息发给RP,另外一种是源和RP之间运行SPT,来实现组播信息到达RP,这是PIM的做法;

---------------------------------------------------------------------------------

>组播的模式

  ---密集模式:采用源树,假设网络有很多组播的接收者,是一种PUSH的思想,每隔三分钟进行FLOOD及     

PRUNE;当成员密集,流量大时;

   消息类型:

            --HELLO,来维持PIM邻居关系,每30s发一次,105s(3.5倍)为保持时间,发往组播地址224.0.0.13;

            --JOIN/PRUNE   发往224.0.0.13

            --GRAFT 嫁接报文;

            --GRAFT-ACK;

            --ASSERT(S,G);

    JOIN消息可以覆盖PURE消息;

  ---稀疏模式:采用共享树也可以采用源树,是PULL的思想,是显式加入;

   消息类型:

             --HELLO

             --JOIN/PRUNE

             --ASSERT

             --REGISTER

             --REGISTER-STOP

--------------------------------------------------------------------------------------------

example:

 R1(source)----R2----R3----R4----R5(receiver)

   基本连通性配置;

   起单播路由协议EIGRP;

  》接收者加组:

   R5:

     int f0/0

      ip igmp join-groups 224.1.1.1

      no shut

  》在组播网络上开启组播路由:

   R2 R3 R4:

      ip multicast-routing

      int f0/0

        ip pim dense-mode

      int f0/1

        ip pim dense-mode

  》查看debug信息:

    R2 R3 R4:

    首先关闭缓存:no ip mroute-cache

     debug ip mpacket

     debug ip pim 224.1.1.1

--------------------------------------------------------------------------------------------

>稀疏模式RP 

   稀疏模式需要RP(聚合点),当叶路由器收到主机成员关系报告,一跳跳往RP请求加进组播组(*,G),

一定是收到了对方的请求,才可以将组播的流量以组播方式出去!

 ---整个网络都需要知道RP的存在,RP的配置可以是静态配置,在每一台路由器上进行配置,也可以是

AUTO-RP(CISCO专有的)

 ---RP的侯选者向组播地址224.0.1.39发送侯选,发现者监听这个组播地址,并从中选出RP向组播地址    

224.0.1.40公告RP的信息;

-------------------------------------------------------------------

>源注册:

 源将组播流量发往第一跳路由路由器,此时,第一跳跑由器没有收到任何请求加进组播的信息,只能将

组播流量封装在单播报文中发往RP 这叫源的注册包 RP收到注册报文。识别到源是谁。则一跳跳往源发送

请求加进(S,G) 第一跳路由器收到RP的请求后。构建起组播流的分发树。可以将组播流量以组播方式发给

RP 当RP同时通过单播及组播方式收到组播流量。往第一跳发注册停止!  

--------------------------------------------------------------------

 配置:

      int f0/0

        ip pim sparse-mode

      int f0/1

        ip pim sparse-mode

  稀疏模式一定要有RP的存在,否则无法转发组播流量;

  ---静态配置RP:

    int loop0

      ip pim spare-mode

      exit

    ip pim rp-address 3.3.3.3  ---每天组播路由器上都要配;后面可以跟访问列表号,来

                                                 给特定组播当RP;

  ---动态RP配置:

    R2:

      ip pim send-rp-announce loopback 0 scope 10 access-group 1  

                                           ------以自己的还回口来竞争RP;IP地址大的优先;

    R3:

      ip pim send-rp-discovery loopback 0 scope 10  --loopback 0 作为通告的源地址; 

   如果动态的和静态的都配了,则动态的优先;

===>思考:既然autoRP是通过候选者想组播地址224.0.1.39发送候选信息,再有发现者选出RP,向组播组   

224.0.1.40发送,通告其它所有组播路由器的;也就是说,在发送候选请求时,224.0.1.39

这个组播是没有RP的,那它的流量是怎么转发的呢? 

    解决办法:

      ---ip pim autorp listener ---全局模式下;

      ---ip pim sparse-dense-mode ---cisco私有的,选出RP工作在密集模式,选出之后再工作在

        稀疏模式;

     show ip pim rp mapping ---查看RP信息;

     发现者每60秒钟通告一次RP的信息,如果3分钟不通告,则认为失效;

公有的bsr:

      ---ip pim rp-candidate loop0 priority 10  ---优先级小的为rp;

      ---ip pim bsr-candidate loo0 

--------------------------------------------------------------------------------------------

>二层的组播问题

 --交换机对组播包的处理方法:默认情况下,交换机处理组播包的方法和处理广播包的方法相同,    

   向相同vlan和trunk口转发;这样使得许多没加组的主机也收到组播流量;

 》解决方案:

   ---IGMP SNOOPING  交换机监听主机和路由器之间的成员关系查询及成员关系报告;

      这时交换机会把相应的组播MAC地址,和有所连主机加组的接口关联起来;

   ---CGMP 路由器会将主机和组的关联信息通过CGMP报文通告给交换机;

   配置:

         ip igmp snooping ---开启igmp监听,默认是开启的;

         ip igmp snooping vlan 10

--------------------------------------------------------------------------------------------

>组播的转发原理: 

 单播路由表是基于目标IP地址进行转发。而组播的转发是基于组播源的 当从多个接口收到同一个源发送的组播流量,

只有离源最近的接口的组播流量被转发,其它接口被丢弃;这叫RPF(反向路径转发);

show ip rpf 12.12.12.1 查看前往源12.12.12.1的RPF接口;

单播的相似功能---源反向路径检测:

if)#ip verify unicast reverse-patch

>RPF接口的选举:

1 管理距离 在不同的组播路由协议之间首先比较管理距离

2 最长的前缀 

3 度量值(小)

4 IP地址(大)

--------------------------------------------------------------------------------------------