组播(二)

2018年8月4日16:51:22
组播
<转发方式>
 1.基于流(一定是快速转发,但第一个包是基于进程转发的)

<转发方式>
 1.基于流(一定是快速转发,但第一个包是基于进程转发的)
 2.基于数据包
 3.基于源
 4.基于源和目的

<处理机制>
 1.进程转发(通过CPU处理)
 2.快速转发(基于芯片,直接从某个端口扔出去)

Multicast is UDP based 组播是基于UDP的

<RTP>
实时传输协议
<RTCP>
       
<Multicast>

·一个发送方同时将信息传输给一组接收方:
 1.将公司信息发送给所有雇员
 2.广播视频和音频,包括用于远程学习和交互式视频
 3.从中央数据仓库将数据传输给多个部门
 4.将股票报价传递给经纪人 (保证同时收到,不能一个先收到一个后收到)

·路由器不转发广播包,
 如果目的是发往非本子网的其他主机,广播做不到。

应用流量:服务器-客户端
         互动流量

一个人说给多个人听。

Unicast (A/B/C 类)

Broadcast (路由器不转发广播包)
ip Directed-Broadcast (默认disable)
show ip int e0
应用:不支持组播的设备。组播转换成广播

R2--R1--R3

R2:ping 13.1.1.255,正常R1给予回应。
在R1 S1口开启ip directed-broadcast
R1会将此广播包转发给R3

Multicast
Source -> Server
Destination -> Group
分散到其他广播域

多播路由器的2个基本功能:路由发现&包的前转。

最简单的包前转方法:向除了上游端口外的所有端口转发,称为“反向路径广播”。
                   RPB(Reverse Path Broadcast)

隐式加入:发送者发起的。(Dense密集模式-Push模式)
  路由器收到多播流,用IGMP来判断它直连子网是否有组员,如果没有,就向上游路由器发Prune,
  上游路由器就停止向这个Prune的路由器前转多播流量。
显式加入(Explicit):接收者发起的。

<Multicast Address>

           ?

224.0.0.0 - 239.255.255.255 保留给路由协议和其他网络维护功能。路由器不会把目标地址是这一范围的包前转。

保留的链路本地地址:224.0.0.0 - 224.0.0.255
   保留给本地网段上的网络协议使用。路由器不转发目标地址为这段地址的数据包。
   TTL=1 (FR Hub & Spoke 中。Spoke端不能建邻居)

全局范围地址:      224.0.1.0 - 238.255.255.255
   公司可以使用这段地址在组织之间和通过Internet以组播方式传输数据。
   指定源多播地址:  232.0.0.0 - 232.255.255.255
   此段地址被保留给SSM使用。SSM是PIM的一种扩展。
   GLOP地址:        233.0.0.0 - 233.255.255.255
   这段地址和AS号对应。
   例:AS62010的16进制表示为F23A,F2的十进制242,3A的十进制58,
       所以子网233.242.58.0/24被全局保留,供AS62010使用。

有限范围地址:      239.0.0.0 - 239.255.255.255这段地址不能在公网上路由
   使用这些地址的组播被限定在本地或组织内。公司、大学和其他组织使用有限范围地址来进行本地组播。
   与Internet相连的边缘路由器不会将这段多播地址帧转发到外网。

R1(config)#access-list 100 deny ip any 224.0.0.0 15.255.255.255

224.0.0.1   子网中的所有主机和路由器
224.0.0.2   子网中的所有路由器(HSRP)
224.0.0.4   DVMRP路由器
224.0.0.5   所有ospf路由器
224.0.0.6   ospf DR
224.0.0.9   RIP路由器
224.0.0.10  EIGRP路由器
224.0.0.13  PIM路由器
224.0.0.18  VRRP
224.0.1.1   NTP
224.0.1.39  RP-Announce
224.0.1.40  RP-Discovery

<IP和MAC的对应>

IP地址的最后23位被映射到MAC地址的最后23位

0000,0001 0000,0000 0101,1110 0000,0000 0000,0000 0000,1010
         24位                            23位

  01        00        5E        00        00        0A

< RPF (Reverse Path Forwarding)>
收到数据包的方向也必须是本路由器用来转发数据包源地址的方向,否则扔掉数据包
upstream ( 前往信源的方向)
downstream ( 前往接收方的方向)
show ip mroute static 查看静态多播路由
写多播静态路由
ip mroute 1.1.1.0 255.255.255.0 12.1.1.2 写去到源从哪个接口发出,1.1.1.0是源,12.1.1.2是下一跳
show ip mroute static  注意多播静态路由的AD是0

RPF选接口的比较原则
1、lower AD     同样的路同,选最小AD值的路由所用的接口为RPF接口
2、longest match    同样的路由,比最长掩码
3、lower metric    同样的路由,掩码一样长,比metric
4、higher ip      以上都一样,比接口IP地址

 "RPF check fails"-----先查多播路由表,再查单播路由表
RPF接口默认每5秒检测一次

       ?
  
<TTL>
接口的TTL阀值必须<=数据包的ttl值,接口才会转发
    ?
       入向接口的TTL值大于或等于出向接口的TTL值时,才转发.
注意TTL值在入向不减,出方向才减,减过之后才做这一比较

使用ACL过滤多播组
R1(config-if)#ip multicast boundary 1   只有列表1中被允许才能通过,不分in,out方向
R1(config)#access-list 1 permit 239.129.0.0 0.0.255.255

Show ip pim int s0 detail
Show ip igmp int s0 ?
R1(config-if)#Ip multicast ttl-threshold 2   设置TTL值,必须在接口下
< Tree >

·Shortest-Path / Source Distribution Tree
 SPT(Shortest Path Tree)
 (S,G)  (192.168.1.1,224.1.1.1)
 源树的优点:在信源和接收方之间创建一条最优的路径,可以最大限度的降低转发多播流的网络延迟。
 同时也增加了开销,路由器要针对每个信源存储路径信息,在包含数千个信源的网络中,这种开销是庞大的。
 一个源一棵树.适用于比较多接收者时使用.每3分钟修剪一次.推模型.一般运行在DENSE模式下.

·Shared Distribution Tree
 RP(Rendezvous Point)
 (*,G)  (*,224.1.1.1)
 共享树的优点:每台路由器存储的信息较少,降低内存消耗。
 缺点:选择信源到接收方的路径不是最优的。所以要慎重考虑RP的位置。
 拉模型.RP可以手工指定.receiver端向RP端发出register包.一般运行在SPARSE模式下.

<IGMP(Internet Group Management Protocol)>

·IGMP报文封装在IP包中,Protocol NO.=2  / TTL=1

IGMPv1(hold time :180second):
只有两种报文--
 1.Query包   每60秒发一次 由路由器发向224.0.0.1(所有节点)DIP:224.0.0.1 GROUP:0.0.0.0
 2.Report包  主机回应Queries或主动发           DIP:224.1.1.1  GROUP: 224.1.1.1

IGMP没有离组消息,称之为静悄悄的离开,路由器连续发三次query包,都没人回应就停止发该组的消息,也即180S之后holdtime 到时,才从组中去掉
IGMP-V1没有查询者机制,要靠上层的PIM选出DR

在MA网络上只要有一个组回应report包就可以了,它在回应的同时也抑制了其它组员的report包,因为没必要大家都发,只要有一个组员。路由器就会将多播发下来。

查询的间隔响应时间--默认10S,以S为单位

IGMPv2: 多了一个查询者的概念和以下两种消息
1.指定组查询消息Group-specific query  DIP: 224.1.1.1 GROUP:224.1.1.1
2.离组消息Leaving a Group  DIP: 224.0.0.2 GROUP:224.1.1.1
当有多个路由器在同一个网段时,要先比出查询者(比最小IP地址),查询者老化时间默认是120S

查询的间隔响应时间--默认10S,以0.1S为单位

IGMP有离组消息Leaving a group 发向所有路由器
路由器由到离组消息后,会马上发出指定组查询消息group-specific query看本组还有没有组员

IGMPv3-----可选择接收某些源

R1-----------PC2

R1(config)#ip multicast-routing       开启多播路由协议
R1(config-if)#ip pim dense-mode

R1/R2#debug ip igmp

R2(config-if)#ip igmp join-group 224.1.1.1        使R2加入"224.1.1.1"的组

ip igmp query-interval 30   修改查询间隔时间,改了后holdown时间也会自动变化
ip igmp last-member-query-count 3   路由器修改发送指定查询消息的次数
ip igmp last-member-query0interval 2000  修改发送指定查询消息的间隔,这个值乘上次数就得到路由器等待的最大时间
比如本例3*2000=6000ms 也就是说在6S内没人回应,路由器就去掉这个组

R1#show ip igmp groups [detail]             查看谁加入了哪个组
IGMP Connected Group Membership
Group Address    Interface                Uptime    Expires   Last Reporter
224.0.1.40       Ethernet0                00:03:10  00:02:58  10.1.1.1
224.1.1.1        Ethernet0                00:03:10  00:02:58  10.1.1.2

R1#show ip igmp interface ethernet 0
Ethernet0 is up, line protocol is up
 Internet address is 10.1.1.1/24
 IGMP is enabled on interface
 Current IGMP host version is 2
 Current IGMP router version is 2
 IGMP query interval is 60 seconds     
   (#ip igmp query-interval 60)每60S发送Query。"query-interval"乘以2等于"querier-timeout"
 IGMP querier timeout is 120 seconds    
   (#ip igmp querier-timeout 120)  非查询者在120S内没有收到查询者的包,自己充当这个角色。
 IGMP max query response time is 10 seconds  
  (#ip igmp query-max-response-time 20) 查询包中的字段,告诉主机回应Report的最大响应时间.
 Last member query count is 2
 Last member query response interval is 1000 ms
 Inbound IGMP access group is not set
 IGMP activity: 5 joins, 4 leaves
 Multicast routing is enabled on interface
 Multicast TTL threshold is 0
 Multicast designated router (DR) is 10.1.1.1 (this system)
 IGMP querying router is 10.1.1.1 (this system)
    网络中如果有多个路由器发Query,选举IP地址小的作为发送查询者。
 Multicast groups joined by this system (number of users):
     224.0.1.40(1)
interface e 0
    ip igmp 修改间隔时间
Show ip mroute    查看多播路由表
<多播IP地址相对应的MAC地址>

                   ?
              ?
     
          ?

<CGMP(Cisco Group Management Protocol)>   在路由器和交换机上都要配,用于控制二层交换机如何转发多播流量,CISCO私有的

for 2900支持

R3(config-if)#ip cgmp              在R3的某个接口起CGMP
SW3#show cgmp                      2900交换机默认已起用CGMP,3550和2950不支持
SW3(config)#cgmp                   在交换机上起cgmp

Group Destination Address (GDA) 组MAC地址
Unicast Source Address (USA)  单播源地址
Debug ip cgmp

<IGMP Snooping>  只要配置交换机,业界标准
交换机通过截获主机发出的report包和离组包,就可以知道哪个接口加入了组或离开了组

Show mac-address-table multicast  查看交换机多播MAC表
Sw1(config)#ip igmp snooping
Sw1(config)#ip igmp snooping vlan 1          基于VLAN 1 起用IGMP的SNOOPING
SW1#show ip igmp snooping
SW1#show ip igmp snooping groups

<PIM(Protocol independent Multicast)>
 PIM的在IP中的协议号是103
·PIM-DM ( Dense Mode )

·不管是何种单播路由协议,PIM都可以使用他们实现组播转发。
 并使用现在有单播路由表实现RPF校验。
 由于不必发送组播路由更新,所以PIM比其他组播协议开销降低了很多。
在Dense模式中Flood&prune 每三分钟就要做一次

组播路由器之间也要建邻居:
Hello:30S    发向224.0.0.13
Hold :30*3.5= 1分45秒

R1#debug ip packet detail
*Mar  1 00:15:44.207: IP: s=12.1.1.2 (Serial0), d=224.0.0.13, len 54, rcvd 0, proto=103

·MA网络PIM通过Hello包来选择DR,主要用于IGMPv1,DR将成为Querier。
 DR选举方式:1.Priority大的(默认=1)R1(config-if)#ip pim dr-priority 3
             2.IP地址大的
  
如果运行的是IGMPv2,IGMPV2自已会选查询者,DR只担负数据转发任务
DR的作用:1、充当IGMPV1的Querier
         2、在Dense无用
         3、sparse中 send&receive join®ister message

R1(config-if)#ip pim dr-priority 2        在接口下改优先级
R1#show ip pim neighbor
PIM Neighbor Table
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
10.1.1.2          Ethernet0                00:31:45/00:01:30 v2    3 / DR S
                                                              10.1.1.2的优先级为3,且为DR

R2#show ip igmp int e0
 Multicast designated router (DR) is 10.1.1.2 (this system)
 IGMP querying router is 10.1.1.2 (this system)

R3(config-if)#
*Mar  1 00:24:35.290: PIM(0): Send v2 Assert on Ethernet0/0 for 224.1.1.1, source 14.1.1.4, metric [120/1]
*Mar  1 00:24:35.290: PIM(0): Assert metric to source 14.1.1.4 is [120/1]
*Mar  1 00:24:35.290: PIM(0): We win, our metric [120/1]
*Mar  1 00:24:35.290: PIM(0): (14.1.1.4/32, 224.1.1.1) oif Ethernet0/0 in Forward state

R2#
*Mar  1 00:24:47.870: PIM(0): Received v2 Assert on Ethernet0/0 from 23.1.1.3
*Mar  1 00:24:47.870: PIM(0): Assert metric to source 14.1.1.4 is [120/1]
*Mar  1 00:24:47.870: PIM(0): We lose, our metric [120/1]
*Mar  1 00:24:47.870: PIM(0): (14.1.1.4/32, 224.1.1.1) oif Ethernet0/0 in Prune state

  Graft
  Graft-Ack

D:表示组播组是一个密集模式,仅在(*,G)出现.
C:有直接的组成员,会在(*,G)和(S,G)都出现.
L:表示自己就是组成员,会在(*,G)和(S,G)都出现.
P:输出接口为空/输出接口都处于Prune状态,结果Prune会从此(S,G)送至上游RPF邻居.会在(*,G)和(S,G)都出现.
T:信息经(S,G)转发,只要收到第一个(S,G)包,就设置该标志.因此,T始终都会出现,仅在(S,G)出现.
J:........................

(*, 224.1.1.1), 00:14:14/stopped, RP 0.0.0.0, flags: D
 Incoming interface: Null, RPF nbr 0.0.0.0
 Outgoing interface list:
   Serial1, Forward/Dense, 00:13:54/00:00:00

(14.1.1.4, 224.1.1.1), 00:14:14/00:00:00, flags: T
 Incoming interface: Ethernet0, RPF nbr 0.0.0.0
 Outgoing interface list:
   Serial1, Forward/Dense, 00:13:54/00:00:00
--------------------------------------------------------------------------
(*, 224.1.1.1), 00:14:16/00:02:58, RP 0.0.0.0, flags: D
 Incoming interface: Null, RPF nbr 0.0.0.0
 Outgoing interface list:
   Serial1, Forward/Dense, 00:13:56/00:00:00

如果没有组播流,(*,G)等到(S,G)消失后,从3分钟倒计时.

*Mar  1 01:05:36.191: PIM(0): Received v2 Join/Prune on Serial0 from 12.1.1.2, to us
*Mar  1 01:05:36.195: PIM(0): Prune-list: (14.1.1.4/32, 224.1.1.1)  
*Mar  1 01:05:36.199: PIM(0): Prune Serial0/224.1.1.1 from (14.1.1.4/32, 224.1.1.1)

*Mar  1 01:08:38.467: PIM(0): Received v2 Join/Prune on Serial0 from 12.1.1.2, to us
*Mar  1 01:08:38.471: PIM(0): Prune-list: (14.1.1.4/32, 224.1.1.1)  
*Mar  1 01:08:38.475: PIM(0): Prune Serial0/224.1.1.1 from (14.1.1.4/32, 224.1.1.1)

3分钟周期发送Prune.

无论在什么时候,只要出现了(S,G),就会出现它的父项(*,G),但(*,G)不作转发选择。

·PIM-SM ( Sparse Mode )
指定RP的方式
1、        Static  指定RP(一般用环回口),并通告进IGP
2、        auto RP
3、        BSR
DR的作用:
1、充当IGMPV1的Querier
2、在Dense无用     
3、sparse中 send&receive join包®ister包 message
Register包由信源发向RP,查询本组中有无组员,它是一个单播包。如果本组中有组员,则RP向信源发出一个(S,G)JOIN包和register stop包(停止单播),则后续数据以多播包下发,并形成spt树,

IP        PIM        UDP        RTP        VOIDE        

R3(config)#ip pim rp-address 2.2.2.2  在RP上也要打入这一命令,指明谁是RP

*Mar  1 01:51:22.647: PIM(0): Building Periodic Join/Prune message for 224.1.1.1
*Mar  1 01:51:22.651: PIM(0): Insert (*,224.1.1.1) join in nbr 13.1.1.1's queue
*Mar  1 01:51:22.655: PIM(0): Building Join/Prune packet for nbr 13.1.1.1
*Mar  1 01:51:22.659: PIM(0): Adding v2 (2.2.2.2/32, 224.1.1.1), WC-bit, RPT-bit, S-bit Join
*Mar  1 01:51:22.663: PIM(0): Send v2 join/prune to 13.1.1.1 (Serial1)

*Mar  1 01:52:21.823: PIM(0): Building Periodic Join/Prune message for 224.1.1.1
*Mar  1 01:52:21.827: PIM(0): Insert (*,224.1.1.1) join in nbr 13.1.1.1's queue
*Mar  1 01:52:21.831: PIM(0): Building Join/Prune packet for nbr 13.1.1.1
*Mar  1 01:52:21.835: PIM(0): Adding v2 (2.2.2.2/32, 224.1.1.1), WC-bit, RPT-bit, S-bit Join
*Mar  1 01:52:21.839: PIM(0): Send v2 join/prune to 13.1.1.1 (Serial1)

WC-bit  :表示这个加入地址是一个RP地址,不是源
RPT-bit :表示这个消息顺着共享树传送RP
S-bit   :标识是Sparse-mode

R2#show ip mroute
(*, 224.1.1.1), 00:00:17/00:03:13, RP 2.2.2.2, flags: S
 Incoming interface: Null, RPF nbr 0.0.0.0  (自己是RP,所以是Null,0.0.0.0)
 Outgoing interface list:
   Serial0, Forward/Sparse, 00:00:17/00:03:13

R4 ping 224.1.1.1
R2 debug ip pim
*Mar  1 02:06:08.487: PIM(0): Check RP 1.1.1.1 into the (*, 224.1.1.1) entry
*Mar  1 02:06:08.495: PIM(0): Send v2 Register to 1.1.1.1 for 24.1.1.4, group 224.1.1.1
*Mar  1 02:06:08.579: PIM(0): Received v2 Join/Prune on Serial0 from 12.1.1.1, to us
*Mar  1 02:06:08.583: PIM(0): Join-list: (24.1.1.4/32, 224.1.1.1), S-bit set
*Mar  1 02:06:08.591: PIM(0): Add Serial0/12.1.1.1 to (24.1.1.4/32, 224.1.1.1), Forward state

<Auto RP>  必须运行在sparse-dense模式下
C-RP-- 候选RP 也就是想成为RP的路由器(采用的是源树的模型)
MA-- 映射代理,MA的多播地址:224.0.1.39,一旦指定MA,它的每一个组播借口都会加入224.0.1.39
224.0.1.40-- 所有支持auto rp的路由器
选举规则:IP地址大的成为RP
注意:c-rp/ma 的用来参选的loopback口一定要宣告进IGP
R1(config)#ip pim send-rp-announce loopback 0 scope 5
配置为候选RP,向224.0.1.39每60秒发送一个RP-Announce,且只能传5跳

R1(config-if)#ip pim send-rp-discovery loopback 0 scope 5  在MA上配,也规定了只能传5跳

R1(config)#int lo0
R1(config-if)#ip pim sparse-mode(要确保loopback口也运行PIM)

映射代理收听RP-Announce消息,并选择RP(IP地址大的优选),它在RP-Disconvery消息中向PIM域中的其他路由器通告RP的地址。

R1(config)#ip pim rp-address 1.1.1.1 override  默认情况下,Auto-RP优于静态RP,如果想静态优先,打上这一命令
R3#show ip pim rp mapping (in-use )


  • 更新时间:2018年8月4日16:51:22 ,共 11391 字。