PIM-DM 组播路由协议仿真
目的
- 理解PIM-DM 的应用场景
- 掌握PIM-DM 的基本配置
- 理解PIM-DM 中剪枝和嫁接的原理
- 理解PIM-DM 中的Assert 机制
原理
Source-Specific Multicast 即指定信源组播模型,是指接收者已经通过其它手段预先知道了组播源的具体位置,直接在接收者与其制定的组播源之间通过 Tree 等结构建立专用的组播转发路径的行为。
树 (Tree)和图 (Graph)是计算机科学领域中两个常用的概念,前者具有层次化结构,而后者没有。从组播的角度来看,网络可以抽象为 Tree,也称为组播树 (Multicast Tree):从单播的角度来看,网络可以抽象为 Graph。组播树又可以分为两大类,一类称为 SourceBased Tree,另一类称为 Group-Shared Tree。
PIM-DM (Protocol Independent Multicast Dense Mode) 和 PIM-SM (Protocol Independent Multicast Sparse Mode)是两个常见的组播路由协议,前者基于 Source-Based Tree,后者基于 Group-Shared Tree。
PIM-DM 主要采用扩散-剪枝的方式来转发组播数据流。对于组播组成员稀少的网络,PIM-DM 会产生大量的剪枝报文,而如果网络规模较大,则扩散-剪枝的周期就会比较长,因此 PIM-DM 一般适合于规模较小、组播组成员比较密集的网络,使用“推(Push) 模式”传送组播数据。
PIM-DM 假设网络中的每个子网都存在至少一个组播成员,因此组播数据将被扩散 (Flooding)到网络中所有节点。然后 PIM-DM 对没有组播组的网络节点进行剪枝 (Prune),只保留包含接收者的分支。所谓“剪枝”,就是路由器向上游节点发剪枝消息, 通知上游节点不再转发组播消息到该分支。“扩散”“剪枝”现象会周期性的发生,被剪枝的分支节点可以周期性的恢复成转发状态(在检测到没有出接口的时候会再次剪枝)。 当剪枝节点出现新的组播成员时,为了减少该节点恢复成转发状态的时间,PIM-DM 使用嫁接(Graft)机制主动恢复其对组播成员数据的转发。
在 PIM-DM 网络中,路由器需要周期性地发送 Hello 消息来发现邻居并维护 PIM 邻居关系。此外,Hello 消息还有一个重要的作用:路由器会通过比较 Hello 消息中携带的优先级和 IP 地址,为多路由器网段选举出DR (Designated Router),并以它作为 IGMPv1 中的查询器。
平台
自带计算机,安装 VLC 视频播放器、eNSP 及相关仿真工具包
内容
本次仿真模拟了一个园区内的小型网络场景,包含了 5 台路由器、一台交换机、一台组播服务器 Source-1 和 3 台终端电脑。所有的路由器都运行 OSPF,并且都位于区域 0。管理员需要在网络中部署 PIM-DM,从而实现以组播的方式向员工播放培训视频。
实验拓扑如图所示:
基本配置
配置路由器的基本配置,以R1为例:
sys
sysname R1
int g0/0/3
ip add 172.16.1.10 24
int g0/0/0
ip add 10.0.12.1 24
int g0/0/1
ip add 20.0.13.1 24
int g0/0/2
ip add 30.0.14.1 24
q
配置IGP
在每台路由器上配置OSPF 路由协议,并通告直连网段。
[R1]ospf 1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]network 20.0.13.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]network 30.0.14.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255
[R2]ospf 1
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 10.0.2.0 0.0.0.255
[R3]ospf 1
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 10.0.13.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]network 20.0.2.0 0.0.0.255
[R4]ospf 1
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]network 20.0.2.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]network 30.0.14.0 0.0.0.255
[R5]ospf 1
[R5-ospf-1]area 0
[R5-ospf-1-area-0.0.0.0]network 20.0.2.0 0.0.0.255
[R5-ospf-1-area-0.0.0.0]network 30.0.2.0 0.0.0.255
查看R1邻居建立情况
display ospf peer brief
在路由器上查看路由表。
配置PIM-DM
在所有路由器上开启组播功能,并在每台路由器的每个接口下配置命令pim dm
。
[R1]multicast routing-table
[R1]interface GigabitEthernet 0/0/0
[R1- GigabitEthernet0/0/0]pim dm …… //重复配置到每个接口
[R5-GigabitEthernet0/0/0] interface GigabitEthernet 0/0/1
[R5-GigabitEthernet0/0/1]pim dm
配置完成后,在路由器上查看 PIM 邻居关系的建立情况,以 R1 为例
<R1>display pim neighbor
在 R2-R5 的用户侧接口下使能 IGMP。
[R2]interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1]igmp enable
[R3]interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0]igmp enable
[R4]interface GigabitEthernet 0/0/0
[R4-GigabitEthernet0/0/0]igmp enable
[R5]interface GigabitEthernet 0/0/1
[R5- GigabitEthernet0/0/1]igmp enable
查看各个路由器的 IGMP 接口信息,以 R2 为例
<R2>display igmp interface
组播服务器配置
组播服务器 Source-1 需要使用 VLC 播放视频的方式来发送组播。首先,在网上下载并安装一个 VLC 软件,然后,在 eNSP 软件的主界面中点击右上方工具栏的设置按钮。在“工具设置”页面中设置 VLC 软件路径。
打开组播服务器 Source-1 的配置界面,在“基础配置”页面中配置 IP 地址、子网掩码等,并应用。然后在“组播源”页面中配置组播组 IP 地址 224.1.1.1 和组播组 MAC 地址 01-00-5E-01-01-01 。
在组播服务器 Source-1 上使用组播地址 224.1.1.1 播放视频,当路由器接收到组播 源发送的组播数据后便会自动生成组播路由。查看 R1 的组播路由表的示例指令:
<R1>display pim routing-table
Source-1 使用组播地址 224.1.1.1 播放视频后,由于 PC-1 并没有在第一时间加入该 组播组观看视频,所以 R2 没有收到 IGMP 加入消息,于是 R2 会认为自己没有连接任 何组成员。因此,R2 在收到 R1 发送的组播数据包后,会向 R1 发送剪枝消息。R1 收到剪枝消息后,会立即停止向 R2 发送组播数据包。使用 wireshark 在 R2 的 GE 0/0/0 接口捕获并查看剪枝消息的数据包,并进行解析。
从下图可以看出,,R2的的GE0/0/0接口捕获的数据报中,Join字段为0,Prune字段为1,地址为172.16.1.1/32。R2收到R1发送的组播数据报后,向R1发送了剪枝消息。
PC1离开时,可以看到剪枝包。
在R2的GE0/0/0接口捕获的数据包中,Join字段为0,Prune字段为1表示,路由器R2收到R1发送的组播数据包后,向R1发送剪枝消息。
接下来,让 PC-1 使用 IGMPv2 加入组播组 224.1.1.1,R2 收到 PC-1 的加入消息后, 会立即发送 Graft 消息给 R1,R1 收到后会立即开始重新转发组播数据包给 R2,R2 再 转发给 PC-1。在 PC-1 上启动 VLC,便可观看视频了。 设置 PC-1 并让其使用 IGMPv2 加入组播组 224.1.1.1。
启动 PC-1 上的 VLC,可看到其播放源地址为 127.0.0.1: 15608,并与服务器端同步 播放视频。
使用 wireshark 捕获上述环节的数据并解析,看到 R2 发送了 Graft 消息后,R1 立回应了一个 Graft-Ack 消息。然后就开始向 R2 转发 UDP 的组播数据流。
观察PIM-DM中DR的选举
为了便于观察 PIM-DM 中的 DR 选举,假定 PC-2 将使用 IGMPv1 加入组播组224.1.1.1,为此,在 R3 和 R4 上修改 IGMP 为版本 1。
[R3]interface GigabitEthernet 0/0/0
[R3- GigabitEthernet0/0/0]igmp version 1
[R4]interface GigabitEthernet 0/0/0
[R4- GigabitEthernet0/0/0]igmp version 1
查看端口情况:
<R3>display pim interface
<R4>display pim interface
查看端口情况
可以看出,PIM-DM选举了R4作为IGMPv1的查询器,首先比较路径的开销,会选择路径开销小者,由于此时R3和R4的开销相同,则选择IP大的路由器为转发者。
接下来,验证一下 IGMPv1 的查询路由器是否就是 PIM-DM 选举出来的 DR。在 R3 和 R4 上查看关于查询器 (Querier)的情况。
<R3>display igmp interface
<R4>display igmp interface
可以看出,R4也是PIM-DM的DR。
观察PIM-DM中的Assert机制
由于 R3 和 R4 从上游接收到组播报文后,都会向下游网络转发该组播报文,这样就会导致下游节点 R5 收到两份完全相同的组播报文。为了避免这种情况的发生、PIM-DM 采用了 Assert 机制来选定一个唯一的转发者,即:对于一个特定的组播组,如果同一网段上存在多个上游路由器,则这些上游路由器中到组播源的路径开销最小者将被选举为转发者;若开销相同,则 IP 地址最大的路由器将被选举为转发者。只有转发者才能向该网段转发相应的组播数据报文,其他落选路由器应裁剪掉对应的接口,禁止向该网段转发相应的组播数据报文。在 PC-3 上使用 IGMPv2 加入组播组 224.1.1.1,使用 wireshark 在 R5 的 GE 0/0/0 接口查看报文情况,捕获并解析其收到的 R3 和 R4 的 Assert 报文。
在R3和R4中,由于路径开销相同,选择IP大的为转发者。查看 R5 端口数据,查看并找出 R4 转发给 R5 的组播视频流。
查看 R5 的多播路由列表并给出结果,R5 的上游节点是哪个设备?为什么?
<R5>display pim routing-table
R5上游节点是R4,因为R5到R3和R4的路径开销一致,则选择ip地址更大的R4。
思考
1.PIM-DM 中 Assert 机制的作用是什么?
- 比较路由优先级,优先级高的获胜
- 比较到组播源的开销,开销小的获胜
- 比较端口IP,大的获胜
2.IGMP 是一个路由协议吗?
IGMP协议Internet Group Management Protocol,顾名思义,是用于网际组管理的协议。多播通信中由一个发送者给一组接受者发送报文,这些接受者都是同一个组成员,由于发送者只需要发送报文的一个副本,路由器就需要对这个报文进行复制和转发,所以多播路由器必须掌握一张多播组的列表,这些组中至少有一个成员与其某个接口相关,即多播路由器需要收集组成员的相关信息并且与其他多播路由器共享。连接着某一个网络的多播路由器负责在本地收集信息,收集到的信息传播到全球的其他路由器。前者由IGMP完成,后一个任务由多播路由选择协议完成,因此,IGMP并不是一个路由选择协议。
3.给出两层 IGMP Snooping 与三层组播协议的区别和关联点。
我们把工作在网络层的IP组播成为“三层组播”,相应的组播协议称为“三层组播协议”,包括IGMP, PIM等,我们把工作在数据链路层的IP组播成为“二层组播”,相应的组播协议称为“二层组播协议”,包括IGMP Snooping。
组播路由器不需要也不可能保存所有主机的成员关系,它只需要通过IGMP协议了解自己的每个接口连接的网段上是否存在某个组播组的接受者,即组成员。而主机方只需要保存自己加入了哪些组播组。IGMP在主机和路由器之间是不对称的:主机需要响应组播路由器的IGMP查询报文,即以IGMP membership report报文响应;路由器周期性地发送成员资格查询报文,然后根据收到的响应报文确定某个特定组在自己所在的子网上是否有主机加入,并且收到主机的退出组报文时,发出特定的查询报文,确定某个特定的组是否已无成员存在。
IGMP Snooping和IGMP协议一样,两者都用于组播组的管理和控制,都是用IGMP报文。IGMP协议在网络层,而IGMP Snooping在链路层。二层设备通过对收到的IGMP报文进行分析,为端口和MAC组播地址建立起映射关系,并且分局这样的映射关系转发组播数据。当二层设备没有运行IGMP Snooping时,组播数据在二层被广播,只有当运行了IGMP Snooping时,组播数据才会给指定的接收者。
当二层以太网交换机收到主机和路由器之间传送的IGMP报文时,IGMP Snooping分析IGMP报文所带的信息,在二层建立和维护MAC表,以后从路由器下发的组播报文就根据MAC表进行转发。IGMP Snooping只有在收到某一端口的IGMP离开报文或者某一端口的老化时间定时器超过的时候才会主动向端口发送IGMP特定组查询报文,除此之外不会向端口发送任何IGMP报文。