做防伪查询网站,wordpress怎么部署到虚拟linux服务器,美容店网站建设,微信开发者平台api个人认为#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息#xff0c;更加便于理解协议。
因此本文将在PIMv2协议报文的基础上进行介绍#xff0c;以详细介绍组播协议PIM。 这里需要说明的是#xff0c;以下内容都针对的是ASM理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息更加便于理解协议。
因此本文将在PIMv2协议报文的基础上进行介绍以详细介绍组播协议PIM。 这里需要说明的是以下内容都针对的是ASMAny Source Multicast任意组播源模型下的PIM协议。SSMSource-Specific Multicast特定组播源模型下的PIM协议类似于PIM-SM但不做说明。
关于PIMv2-DM相关内容可参考2005年发布的RFC3973-Protocol Independent Multicast - Dense ModeProtocol Specification关于PIMv2-SM相关内容可参考2006年发布的RFC4601-Protocol Independent Multicast - Sparse ModeProtocol Specification。 关于建立组播的SSM模型可参考2006年发布的RFC4607-Source-Specific Multicast for IP。关于建立双向组播的BIDIR可参考2007年发布的RFC5015-Bidirectional Protocol Independent Multicast。关于PIM-SM的BSR基本原理可参考2008年发布的RFC5059-Bootstrap Router Mechanism for Protocol Independent Multicast。关于主机组播路由协议的基本原理可参考博客-组播IGMP-原理介绍报文分析配置示例。关于域间组播路由协议的基本原理可参考博客-组播MSDP-原理介绍报文分析配置示例-RFC3618。关于PIM协议报文的相关字段可参考IANA发布的Protocol Independent Multicast (PIM) Parameters。关于 IPv4 组播地址空间分类可参考IANA发布的IPv4 Multicast Address Space Registry。关于 IPv6 组播地址空间分类可参考IANA发布的IPv6 Multicast Address Space Registry。 … 组播还存在大量其他相关RFC感兴趣者可查阅相关资料。 组播PIM协议(Protocol Independent Multicast协议无关组播协议)主要是相比于其他组播路由协议DVMRP(Distance Vector Multicast Routing Protocol距离矢量组播路由协议)和MOPSF(Multicast OSPF组播OSPF)协议而言。
协议无关主要体现于DVMRP依靠于RIP协议实现MOPSF依靠OSPF协议实现。而PIM协议仅依靠路由转发表即可而无需关注实现路由的协议。相同的这3种协议都是域内组播路由协议。 域外组播路由协议可学习MSDP协议(Multicast Source Discovery Protocol组播源发现协议)。
第2章节基本述了PIM概念的相关内容第3和4章节描述了PIM协议报文的相关内容。可直接阅读相关内容。
目录 PIM协议 目录1.组播基础内容1.1.组播IP1.2.组播MAC 2.PIM基本概念2.1.RPF检查2.2.SPT源树和RPT共享树2.3.DM工作模式和SM工作模式2.4.PIM协议报文类型2.4.1.PIM-Hello报文 3.PIM-DM工作原理-RFC39733.1.PIM-DM模型3.2.PIM-DM的加组Join/剪枝Prune3.3.PIM-DM的嫁接Graft/Graft-Ack3.4.PIM-DM的状态刷新State Refresh3.5.PIM-DM/SM的断言Assert 4.PIM-SM4.1.PIM-SM模型4.2.PIM-SM的注册register/register-stop4.3.PIM-SM的Bootstrap/Candidate-RP-Advertisement4.4.PIM-SM的RPT树向SPT树的切换 5.PIM行为配置5.1.PIM-DM组播处理5.2.PIM-SM组播处理5.3.PIM配置5.3.1.常用检查命令 更新 1.组播基础内容
1.1.组播IP
传统网络进行地址分配时将IPv4网络分为5类
A类1.0.0.0 - 126.0.0.0 B类128.0.0.0 - 191.254.0.0 C类192.0.0.0 - 223.255.255.0 D类224.0.0.0 - 239.255.255.255 2进制的前4个bit固定为1110 Note224(十进制)1110 0000(2进制)239(十进制)1110 1111(2进制) E类240.0.0.0-239.255.255.255保留地址
其中 D 类地址称为组播 IP。虽然目前 CIDR(Classless Inter-Domain Routing无类域间路由) 和 VLSM(Variable Length Subnet Mask可变长子网掩码) 的出现淡化了 IP 分类但组播 IP 范围并未发生变化。
其中组播IP又可进行如下划分 224.0.0.0-224.0.0.255预留永久组播地址通常为协议所使用。
224.0.1.0-231.255.255.255 和 233.0.0.0-238.255.255.255ASM(Any Source Multicast) 模型使用。
232.0.0.0-232.255.255.255SSM(Source-Specific Multicast) 模型使用。
239.0.0.0-239.255.255.255本地管理组地址也即私网组播IP。
需要说明的是上述仅是 IPv4 组播地址的一个大致分类。其中还包含了保留组播地址、网络间控制组播地址等。感兴趣者可查阅相关资料。 常用协议组播地址 组播地址使用者224.0.0.1所有主机及路由器监听地址224.0.0.2所有路由器监听地址224.0.0.4DVMRP协议使用224.0.0.5224.0.0.6OSPFv2协议使用224.0.0.9RIPv2协议使用224.0.0.12DHCP协议特定场景使用224.0.0.13PIM协议使用224.0.0.14RSVP协议特定场景使用224.0.0.18VRRPv2协议使用224.0.0.22IGMPv3协议使用224.0.0.251mDNS协议使用224.0.0.252Link-local Multicast Name Resolution协议使用 关于其他 IPv4 组播地址的使用感兴趣者可查阅 IANA 发布的《IPv4 Multicast Address Space Registry》等相关资料。 1.2.组播MAC
通常的 MAC 地址为 48bits6 字节。 1第一个字节的最后 1 个 bit 1表明该MAC为组播MAC否则为单播MAC。 2MAC 地址的前三个字节 24bits 称为 OUI (Organizationally unique identifier厂商标识)需要向 IEEE 购买分配。后 24bits由厂家自行分配。 3组播 MAC 由于没有明确的目的主机因此规定 组播MAC由组播IP映射 而来。 映射规则如下 1IPv4 Multicast MAC 的高 24 bit 01‑00‑5E已分配给 IANA 规划使用。 2IPv4 Multicast MAC 的后 23 bit 由组播 IPv4 的后 23bit 直接映射而来。也即实际取值为 01‑00‑5E‑00‑00‑00 至 01‑00‑5E‑7F‑FF‑FF。 3IPv4 Multicast MAC 的第 25 位 bit 固定为0。 4组播 IPv4 实际上有 32 - 4 28bits (固定前缀 1110)因此存在 5bits 数据无法进行对应。 因此实际上每 2^5 32 个组播 IPv4 对应一个组播 MAC。而且由于错配的 bit 位是高 bit 位的 IP所以通常对应同一个组播 MAC 的 32 个 IP 是不连续的。需要进行 2 进制转换。 例如224.1.0.1、224.129.0.1、225.1.0.1、225.129.0.1、226.1.0.1、226.129.0.1、…、239.1.0.1、239.129.0.1 具有相同的组播 MAC 01-00-5e-01-00-01。 关于 IANA 分配使用的其他 MAC 情况可查看《IANA OUI Ethernet Numbers》等相关资料。 自动换行 IPv6 的组播 IP 和组播 MAC情况稍有变化 IPv6 组播 MAC 地址的高16位为 0x3333低 32 位为 IPv6 组播地址的低 32 位。常用的 IPv6 组播地址为 ff00::/8。感兴趣者可查阅 IANA 发布的《IPv6 Multicast Address Space Registry》等相关资料。 4此外还有协议规定组播 MAC。 例如某些协议组播 MAC 以 01-80-C2 开头01-80-C2-00-00-00 用于 STP BPDU01-80-C2-00-00-14 和 01-80-C2-00-00-15 用于集成 ISIS 等。
点击此处回到目录
2.PIM基本概念
2.1.RPF检查
RPF(reverse path forwarding逆向路径转发) 指的是组播路由器接收到组播流量时进行检查。
这一过程是指 首先记录收到组播流量的端口(上游端口)和组播流量的源地址。 随后检查到达发送该组播流量的组播源的路由表(单播路由表)。如果路由转发表中记录到达该组播源的端口为接收该组播流量的端口时允许接收该流量。
RPF的目的在于利用单播路由表实现流量无环并且实现组播最短路径。目前进行RPF检查的原则有两种。
RPF检查原则1优先级优先(默认) 1比较协议优先级。越小越优。 这里的协议不仅指的是单播路由表还指的是组播路由表。例如上图建立组播静态路由以及其他组播路由协议都可以生成组播路由表。 2组播静态MBGP单播。 同样的组播路由协议也可以指定协议的优先级。(组播静态优先级默认1)。当以上协议优先级一致时按本原则进行选择。 单播路由协议优先级点击此处查看。 3有多条到组播源 S 的单播路由采取掩码最长匹配原则。 4否则优选路由下一跳 IP 地址大的路由。 通过以上原则可唯一确定组播路由器的上游RPF邻居。 自动换行 NoteCisco还在第3个原则后额外进行比较到S的Metirc此时优选开销小的。 RPF检查原则2最长掩码优先 display multicast rpf-info 可发现 RPF 检查方式为最长掩码优先的。 此时先比较路由表包括单播和组播的掩码。随后比较协议优先级。最后决胜规则为优选下一跳IP地址大的路由。 multicast longest-match 用于更改 RPF 检查原则。 自动换行rpf disable 用来配置禁止对特定 (SG) 组播表项进行 RPFReverse Path Forwarding检查。 2.2.SPT源树和RPT共享树
组播中以 (SG) 描述相关的组播内容。S 指特定组播源也即组播服务器的地址。G 指组播组也即组播服务器提供组播服务的组播地址。相应的(*G) 表示任意组播源。在组播路由协议中仅允许一个(上游)接口接收来自 S 的 G 地址的组播流量也即 RPF 检查。而向组播组成员的端口转发则不受影响。但是不可能存在一个端口既为上游端口又为下游接口。源树 SPT(Source-specific Shortest-Path Tree) 的概念是指组播源 S 会以自己为根计算到达组播组成员的路径树。这一行为类似于 OSPF 的最短路径树计算。RPT树(Rendezvous Point Tree因由该组播组的所有源共享也称为 Shared Tree共享树) 与源树相同都需进行生成树计算不同点在于。共享树 RPT 以 RP 为根计算到达组播组成员的路径树。同样的也需要进行 RPF 检查。 RP(Rendezvous Point)是一个静态或动态定义的汇聚点在 PIM-SM 模式下用于集中处理组播流量。 SPT树用(SG)表项进行描述RPT树用(*G)表项进行描述。 流量行为上组播源 S 会先将流量发送给 RP。由 RP 将组播流量发送给组播组成员。 PIM的DR角色Designated Router。局域网上选举出对PIM协议进行相关响应的路由器类似于OSPF的DR。 1组播源侧DR发送 Register注册报文和接收 Register-stop注册停止报文构建 SPT 树。 由第一跳组播路由器形成。
2接收者侧DR发送 join 加组报文构建 RPT 树。 并且在组成员离组(组播组无成员)时向 DR 发送 Prune剪枝报文。裁剪 RPT 树。 由倒数第一跳组播路由器形成。
DR选举原则 1优先级越大越优。PIM-hello包中携带相应参数将在后文进行介绍。 2比较接口IP地址。越大越优。
2.3.DM工作模式和SM工作模式
PIM 协议定义了两种工作模式 DM(Dense Mode密集模式) 和 SM(Sparse Mode稀疏模式)。
PIM-DM 认为网络中所有设备都有加入组播组的需求因此在建立连接时使用 PUSH 方式发送报文。经 RPF 检查后将组播流量从所有其他PIM接口(out list)转发出去。 这一行为称为PIM-DM的扩散机制。out list详细来说指的是非RPF的PIM邻居接口成员接口。下游设备接收到组播流量后也进行相应扩散行为。在 PIM-DM 模式先即使某一网络中不存在组播组成员也会定期询问是否加组。将其纳入需要发送组播源的范围中去。该模式对网络带宽要求较高适用于小型网络。 自动换行 在该模式下(SG)表项的建立由RPF检查通过的组播流量来刷新完成。 PIM-SM 认为网络中所有设备都没有加入组播组的需求需要组播接收者主动加组并由 RP 来决定如何转发组播流。对接收者来说在建立组播表项时实际上相当于 RP 成为了组播源。 此时组播源 S和 RP 之间单播建立 (SG) 表项的 SPT 树RP 和接收者之间建立(*G) 表项的 RPT 树。
点击此处回到目录
2.4.PIM协议报文类型
PIM 组播协议可以同时支持 IPv4 和 IPv6 网络。在此对 PIM 报文格式进行介绍。 PIM的IPv4头部 数据链路层SMAC使用自己的接口MACDMAC使用组播IP映射而来的组播MAC。 网络层/IP层SIP使用自己的接口IPDIP使用 ALL-PIM-ROUTERS 224.0.0.13/ff02::d。IP TTL 1。IP protocol 103。
PIM的头部 所有 PIM 消息都具有上图所示的头部。 PIM Ver4-bitsPIM协议版本。固定为 2。 Type4-bitsPIM协议的类型。目前RFC定义了15种PIM报文。 无 Option 字段的 PIM报文示例。 自动换行 PIM协议常用的10种报文类型 0 Hello PIM-DM 与 PIM-SM 都适用 1 Register只适用于 PIM-SMNote单播发送 2 Register-Stop只适用于 PIM-SMNote单播发送 3 Join/Prune PIM-DM 与 PIM-SM 都适用 4 Bootstrap只适用于 PIM-SM 5 Assert PIM-DM 与 PIM-SM 都适用 6 Graft只适用于 PIM-DMNote单播发送 7 Graft-Ack只适用于 PIM-DMNote单播发送 8 Candidate-RP-Advertisement只适用于 PIM-SM 9 State Refresh只适用于 PIM-DM Reserved1字节保留字段。固定为 0。 Checksum2字节校验码。用于校验。标准 IP 校验和。
2.4.1.PIM-Hello报文
PIM-Hello 报文的主要作用在于协商参数发现和维护 PIM 邻居。PIM-Hello 包除 PIM Header 字段意外其他字段主要以TLV格式定义报文。 Type 字段 2 字节Length 字段 2 字节。
PIM-Hello常用的Option Option1-Hold time维护邻居关系的时间。默认 3.5 * Hello_Period/Hello Timer 105s。 //pim hello-option holdtion用于定义基于端口维护邻居关系的时间。 自动换行 或//用于定义hello发送间隔默认30s。报文中不携带因此是一个本地概念。 pim triggered-hello-delay 用于配置 Triggered_Hello_Delay。默认 5s。 自动换行 当收到 Hello 消息时接收路由器应记录邻居的相关信息。 如果从特定邻居 N 收到新的 Hello 消息则必须将 Neighbor Liveness Timer (NeighborInterface) 定时器重置为收到的 Hello 中 Hold time 字段值。因此 PIM 的邻居状态时间往往取决于邻居自己的通告而无需协商。此外对于 Hold time 字段值为 0xffff 时可用于按需连接以避免与定期 Hello 消息保持链接同步。对于 Hold time 字段值为 0 时则表示将相应的邻居状态立即老化过期。 《RFC3973-PIM-DMProtocol Specification的4.3.1. Sending Hello Messages》还规定当首次启动 PIM 时应将 Hello Timer 设置为 0 到 Triggered_Hello_Delay(5s) 之间的随机值。 自动换行 Option2-LAN Prune Delay OptionLAN Prune Delay 表示局域网上传递 Prune 消息的延迟时间默认500ms。 Override Interval 表示局域网上执行剪枝前的否决时间默认2500ms。 T-bit 置 1 表示支持 join 消息抑制该 bit 仅在 PIM-SM 模式下使用。 和自动换行 LAN Prune Delay 和 Override Interval 共计3s实际上描述了剪枝等待时间。仅适用于局域网。详细内容将于 PIM 的剪枝原理中介绍。 自动换行
Option19-DR Pri选举DR优先级默认1。 //pim hello-option dr-priority用于在PIM-Hello交互过程中选举DR。 PIM-DR作用DR选举时优先级越大越优否则选IP大的。 1作为IGMPv1的查询者。 2PIM-SM模式下参与RPT树和SPT树的形成。 自动换行Option20-Generation ID随机数表示当前邻居状态。如果状态发生更新则随机数也会更新。邻居收到改变或丢失随机数的 PIM-Hello 认为邻居状态改变。 pim require-genid 用于强制要求 PIM 邻居发送包含 Generation ID 的 Option否则将 PIM Hello 包丢弃。 自动换行 Option21-State Refresh Capable邻居状态刷新时间间隔默认60s。仅在 PIM-DM 模式下使用。 PIM-Hello 报文示例。 自动换行 Option26-PIM Join Attribute Hello Option用于协商支持 RFC5384 中定义的新 PIM Join 格式的内容。 hello-option join-attribute enable 用于使所有PIM接口发送的PIM Hello报文携带Join attribute属性。 点击此处回到目录
3.PIM-DM工作原理-RFC3973
3.1.PIM-DM模型
PIM-DM以Push模式以S为根建立(SG)表项。
PIM-DM模型简介 1PIM-DM 模型假定所有下游接口都希望接收组播流并通过 RPF 检查来防止组播环路。 2如果 PIM 域中不存在组播接收者将启动 prune 剪枝动作将端口过渡到 prune 状态。接口的 prune 状态存在一个有限的 Prune Timer 生命周期周期截止后将端口过渡到转发状态。 3接口在 prune 状态接收到特定 (SG) 的组播请求时将启动 graft 嫁接行为将端口过渡到转发状态。 4直连组播源的接口只会保持为 Forwarding 转发状态和 Pruned 被剪枝状态并维护相应的状态机。
PIM-DM路由器维护的状态机 1本地接口状态Hello Timer (HT用于周期发送 PIM Hello 报文)、State Refresh Capable、LAN Delay Enabled (使能时局域网中特定的剪枝传输时延和加组覆盖延时)、Propagation Delay (PD) 和 Override Interval (OI)。 2邻居发送的HelloGen ID (用于识别邻居是否改变)、LAN Prune Delay、Override Interval、State Refresh Capability 和 Neighbor Liveness Timer (NLT邻居 Hello 包中携带的 Holdtime 字段中的值用于表示邻居是否存在)。
3每个接口本地组播成员状态NoInfo (NI无信息) 或 Include 之一。 4每个接口(SG) Prune StateNoInfo (NI无信息。非剪枝状态且无 Prune Pending Timer 定时器或 Prune Timer 定时器)、Pruned (P被剪枝而 olist(SG) 出接口为空) 或 PrunePending (PP接收到剪枝报文但处于剪枝等待) 之一。 与之对应的定时器 Prune Pending Timer PPT剪枝等待定时器。可用于如下场景局域网中收到剪枝报文时等待是否有其他下游成员请求加组。 Prune TimerPT剪枝定时器。可用于如下场景当 Prune Pending Timer 定时器结束时触发用于将端口过渡到 Pruned 剪枝状态。Prune Timer 结束时将端口过渡到 Forwarding 状态。 自动换行 olist(SG)特定 (SG) 的 outgoing interface list。通常排除被剪枝端口、PIM 边界端口、断言失败者 和 RPF上游接口 的 PIM接口。 iif(SG)特定 (SG) 的 incoming interface。也即接收组播流的端口。 5每个接口(SG) Assert Winner StateNoInfo (NI无信息)、lost Assert (L断言失败者) 或 Won Assert (W断言优胜者) 之一。 与之对应的定时器 Assert TimerAT断言定时器。断言状态改变的定时器。 Assert winner’s IP Address断言优胜者的 IP。 Assert winner’s Assert Metric断言优胜者的断言开销。 6上游接口的Graft/Prune StateNoInfo (NI无组播成员)、Pruned(P被剪枝而 olist(SG) 出接口为空)、Forwarding (Folist(SG) 出接口非空) 或 AckPending (AP处于剪枝状态但已发送 Graft 嫁接消息而未收到 Graft-Ack 嫁接确认消息) 之一。 与之对应的定时器 GraftRetry TimerGT嫁接重试定时器。可用于如下场景如果在定时器到期之前未收到相应的 GraftAck则发送另一个 Graft并重置 GraftRetry 定时器。 Override TimerOT覆盖定时器。可用于如下场景上游接口 olist(SG) 出接口非空但收到 Prune(SG) 消息时设置触发时发送 Join(SG) 消息。 Prune Limit TimerPLT剪枝限制定时器。可用于如下场景用于对 LAN 上的 Prunes 进行速率限制。仅当 PIM-DM 自己的上游接口处于 Pruned 状态时使用。如果此定时器正在运行则无法从该接口发送 Prune 消息。Prune Limit Timer t_limit 210s。可以防止自己发送剪枝报文导致局域网的其他路由器无法接收组播流。 7Originator StateSource Active Timer (SAT源存活定时器) 和 State Refresh Timer (SRT状态刷新定时器)。 Source Active Timer SourceLifetime默认为 210s。 State Refresh Timer RefreshInterval默认为 60s。 自动换行source-lifetime 用来配置组播源存活时间。默认 210s。 自动换行 //pim state-refresh-capable用于开启发送PIM DM的状态刷新报文功能。 //state-refresh-interval用于指定状态刷新报文发送间隔默认60s。 3.2.PIM-DM的加组Join/剪枝Prune
当 PIM 路由器 olist(SG) 下游出接口为空时触发剪枝并启动 PLT(SG) t_limit 210s 定时器
1向上游接口/RPF接口发送剪枝报文。 2上游设备收到剪枝报文后将该下游接口将其从(SG)表项下游接口“删除”。 3如果上游设备的下游接口为空则向上游周期发送剪枝报文。 timer join-prune用于设置所有接口发送Join/Prune消息的时间间隔。默认60秒。pim timer join-prune用于设置特定接口发送Join/Prune消息的时间间隔。默认60秒。 自动换行 1如果自己已剪枝的上游 RPF 接口收到了 Prune(SG) 消息且 Prune(SG) 消息的 Holdtime 字段大于本地 PLT(SG) 定时器的剩余时间则可以以该值重置 PLT(SG) 定时器。默认 PLT(SG) t_limit 210s。 这里重点提出的原因是自己上游的PIM网络很有可能有多个邻居因此应由RPF选择的邻居进行剪枝操作。
报文格式 Upstream-NeighborPIM上游邻居地址。实际应当是RPF上游邻居地址。 Num Groups组播组/组播IP数目。 Holdtime路由器保持相应接口加入/剪枝状态的时间。也即 Prune Timer 的时间。 例如PIM-DM模式认为所有PIM路由器都需要加入组播组。此时PIM路由器如果收到剪枝报文而将收到该报文的接口剔除相应(SG)表项。 在经过Holdtime后PIM路由器会自动将该端口重新加入到下游接口。或//join-prune报文中holdtime字段的保持时间或本地启动的 Prune Timer 定时器时间。默认 3.5 * join/prune_interval 210s。 Group Record加组或剪枝信息。携带了组播组/组播IP及其与之相关的加组或剪枝的组播源IP信息。 由上游的RPF邻居地址来确定。此时不仅要求接口如果上游有多个PIM邻居还选择IP大的作为PRF剪枝。 PIM-DM的加组/剪枝 PIM-DM利用扩散机制实现组播流量的泛洪。通过剪枝完成网络中不存在组播成员网络的流量消除。
加组时 1用户首先发送 IGMP 报文进行加组 2PIM 末节路由器发送 PIM-join/prune 报文进行加组。
离组时 3用户发送 IGMPv2 离组报文/或者IGMP查询者未在组内收到成员关系报告报文。 4PIM末节路由器发送 PIM-join/prune 报文进行剪枝。如果上游在自己的(SG)表项的出接口没有其他接口。则继续向上游发送剪枝报文。 5下游设备发送到 PIM-prune 报文中携带 holdtime 字段用于标识 Prune Timer默认为 210s。上游设备接收到 prune 剪枝报文后在该端口启动该 Prune Timer。当该定时器为 0 时将强制 PUSH 发送组播流。下游设备重新进行判断是否剪枝或向下游发送。 6下游设备周期性发送 PIM-prune 报文从而持续刷新上游设备的 Prune Timer。 从以上处理过程来看剪枝并不是删除相应的(SG)表项。实际上PIM路由器只是将(SG)表项的下游接口由forward状态转变为prune状态。 在holdtime/Prune Timer之后重新进行流量发送。//这里可以看到下游接口为 P(Prune) 状态Prune Timer的剩余时间为 3:04。 自动换行剪枝报文示例 RFC定义了join/prune的Group Record字段中的Flags位这里说明下。 Sparse-bitPIM-SM模式置位1表示兼容PIMv1 WildCard-bit置位1表示建立的是 RPT 共享树也即此时也表示该 join/prune 报文的 Source 字段地址是 RP 而非组播源 S的。 Rendezvous Point Tree-bit置位1表示需要发送给RP。否则是发送给组播源 S。 自动换行 局域网中的剪枝延时 如果局域网中所有设备都支持 PIM-Hello 包中携带的 LAN Prune Delay option 并启用 LAN 延迟则上游设备收到某个下游的 Prune 剪枝消息时为了保证其他下游设备的 join 能够覆盖该 prune 消息将延迟 Prune Pending Timer LAN Prune Delay Override Interval 进行剪枝。默认周期为 3s。 如果只有一个下游邻居则将 Prune Pending Timer 设置为 0。 LAN Prune Delay option 由 2 部分组成LAN Prune Delay 和 Override Interval。这一参数用于提供剪枝时延以便其他下游邻居及时加组。 LAN Prune Delay 表示链路上的预期消息传播延迟当链路上的所有路由器都使用 LAN Prune Delay option 时LAN 上的所有路由器都必须将传播延迟设置为 LAN 上的最大 LAN Delay。 Override Interval 字段中表示其所需的随机化量。 当 LAN 上的所有路由器都使用 LAN Prune Delay option 时LAN 上的所有路由器都必须将其 Override_Interval 设置为 LAN 上的最大 Override 值。 自动换行pim hello-option lan-delay用于配置传递Prune消息的延迟时间。默认500毫秒。 pim hello-option override-interval用于配置join覆盖剪枝的时间间隔。默认2500毫秒。 点击此处回到目录
3.3.PIM-DM的嫁接Graft/Graft-Ack
Graft报文仅适用于PIM-DM模式。
PIM-DM的嫁接基本原理在已剪枝的网络中olist(SG) 出接口非空也即有新设备需要重新加入组播网络时
取消剪枝端口的 PLT(SG) 定时器过渡到 AckPending (AP) 状态。从自己的上游接口发送 Graft 消息快速结束接口的 join(SG) 的 Holdtime 字段/Prune Timer 定时器 3.5 * join/prune_interval 210s。同时启动 GRT(SG) 定时器。如果在 Graft Retry Timer Graft_Retry_Period 3s 的定时器时间内未收到 Graft-Ack 消息则重新发送 Graft 消息。 pim timer graft-retry 用来在接口上配置 Graft Retry Timer 的时间间隔。默认3s。 自动换行 Graft的特殊机制 Q如果新增的下游PIM-DM设备本身无(SG)表项也就无法实现嫁接功能。也即嫁接通常要求PIM设备上原本运行过该组播功能。如果下游PIM-DM设备新接入了一个上游PIM-DM Prune状态的PIM组播网络是否只能在 holdtime/Prune Timer 后重新等待上游接口过渡到forward状态。此时如何处理 A因此新增机制一旦上游PIM-DM Prune接口创建了新的PIM邻居会自动将端口转变为forward状态。 Graft 和 join/prune 报文字段几乎完全相同那么Graft和join/prune报文的区别 1Graft嫁接报文使用单播发送。SIP自己的接口IPDIPRPF上游邻居IP。 2Graft嫁接报文的 Holdtime 置0。 3Graft嫁接报文的 join ip address 是填充了组播源的 IP。这也意味着即使网络中无相应组播功能PIM 路由器实际上也维护相应的 (SG)。 而Graft嫁接报文和Graft-Ack报文都是单播发送区别在于Graft报文的upstream-neighbor填充的是自己的上游RPF地址Graft-Ack报文的upstream-neighbor填充的是Graft报文的源地址。 Graft嫁接报文示例。 3.4.PIM-DM的状态刷新State Refresh
PIM 的 State-refresh 报文仅适用于 PIM-DM 模式属于 PIM-DM 的增强功能。
状态刷新机制 1PIM的第一跳路由器可以过渡到 Originator 状态并周期性 (默认 State Refresh Timer RefreshInterval 60s) 向邻居发送 PIM State Refresh 状态刷新报文。用于刷新 PIM 邻居的 (SG) 表项和刷新剪枝接口的超时定时器。 2下游 PIM 邻居接收到后继续向下游发送 State Refresh 状态刷新报文。 3组播源不在发送组播流量PIM的第一跳路由器也不在发送状态刷新报文。组播网络的表项可正常老化删除。 转发 State Refresh 状态刷新消息时应将 1pim.originator 字段设置为自己的接口地址。 2pim.metric 字段设置为到达 S 组播源的单播路由开销。 3pim.metric_pref 字段设置为到达 S 组播源的单播路由优先级。 4pim.mask_len 字段设置为到达 S 组播源的单播路由掩码。 5如果该下游接口为 Pruned 剪枝状态则将 pim.prune_indicator bit 置位。 6pim.prune_now bit 用于与早期 State Refresh 状态刷新消息。发送时没发送三次应将其置位并在接收到时忽略该 bit。 7如果该下游接口 AssertState 为 NoInfo则将 pim.assert_override bit 置位。 自动换行 仅有PIM的第一跳路由器可以过渡到 Originator 状态并维护 State Refresh Timer (SRT(SG)) 状态刷新定时器 RefreshInterval 60s以及 Source Active Timer (SAT(SG)) 源存活定时器 SourceLifetime 210s。前者用于周期发送 State Refresh 状态刷新报文后者触发时将端口过渡到 NotOriginator(NO) 状态。 接口收到State Refresh状态刷新的行为 1接口处于 Forwarding 转发状态且 State Refresh 状态刷新消息的 Prune Indicator bit 不置位则接口状态不变。如果 Prune Indicator bit 置位则额外设置 OT(SG) t_overrideOT(SG) 触发后发送 Join(SG) 消息。 2接口处于 Pruned 剪枝状态且 State Refresh 状态刷新消息的 Prune Indicator bit 置位则接口状态不变并启动 PLT(SG) t_limit 210s 定时器。如果 Prune Indicator bit 不置位则额外设置发送 Prune(SG)。
覆盖上游接口的 Prune state。重置 OT(SG) t_override触发后发送 Join(SG) 消息。 //pim state-refresh-capable用于开启发送PIM DM的状态刷新报文功能。 //state-refresh-interval用于指定状态刷新报文发送间隔默认60s。 自动换行 PIM State Refresh 状态刷新报文示例。 自动换行 因此在 PIM-DM 模式下除组播流可以在组播表中触发建立 (SG) 表项外State Refresh 状态刷新消息也可以触发建立 (SG) 表项。 3.5.PIM-DM/SM的断言Assert
PIM 的 Assert 报文对 PIM-DM 和 PIM-SM 都适用主要用于在局域网中竞选向下游发送组播报文。
场景如果 PIM 路由器从 (SG) 或 (*G) 表项的下游接口收到 (SG) 报文则表示该网段存在其他的转发者。此时路由器从该下游接口发出 Assert 消息参与竞选。竞选落败者停止向自己的下游接口的转发 (SG) 组播流并且发送剪枝报文用于防止优胜者发送组播流量。用于防止组播流的重复发送。
如果断言优胜者/RPF上游接口在 3s 内没有收到 PIM-DM 的 join 报文就将该接口从 (SG) 出接口删除。
这也是PIM-DM唯二发送join报文的场景
另一个发送join报文的场景局域网下一个RPF上游存在多个下游接口当其中一个下游接口请求剪枝时需要其他下游接口发送join报文防止断流。断言工作原理组播流量防环 1从自己 (SG) 表项出接口收到了 (SG) 组播报文触发断言选举。 2选举完成后非win/断言失败设备启动 Assert Timer/断言定时器。Assert Timer/断言定时器结束后重新进行断言选举。 holdtime assert 用于指定 Assert Timer/断言定时器的间隔。默认为 180s。 3断言优胜者周期60s发送断言报文刷新断言失败者的 Assert Timer/断言定时器。
这一过程和RPF检查某种程度上有点类似。
但是RPF检查并不能减少组播流量的发送只能拒绝组播流。Group Address和Source Address描述了组播的 (SG) 或者 (*G) 表项。 R描述了断言消息类型。RPT-bit 置 0 表示断言为 (SG) 表项反之断言 (*G) 表项。 Metric Preference到组播源 S 或者 RP 的组播路由表的优先级。 Metric到组播源 S 或者 RP 的组播路由Metric。 Assert(SG) 断言消息指在 SPT 源树上发送的断言消息 Group-Address 字段设置为组 G 将 Source-Address 字段设置为组播源 S RPTbit 设置为 0 Metric-Preference 设置为 MRIB.pref(S)也即由 MRIB 确定到组播源 S 的路由优先级 Metric 设置为 MRIB.metric(S)也即由 MRIB 确定到组播源 S 的路由开销。 自动换行 Assert(*G) 断言消息指在 RPT 共享树上发送的断言消息 Group-Address 字段设置为组 G 将 Source-Address 字段设置为触发 Assert 的数据包的 IP 源地址或 0.0.0.0 RPTbit 设置为 1 Metric-Preference 设置为 MRIB.pref(RP(G))也即由 MRIB 确定到 RP 的路由优先级 Metric 设置为 MRIB.metric(RP(G))也即由 MRIB 确定到 RP 的路由开销。 自动换行断言报文示例。 断言的选举 1到组播源 S 或者 RP 的 MRIB.pref 路由协议优先级越小者越优。 2到组播源 S 或者 RP 的 MRIB.metric 越小越优。 3接口地址 IP 大的优先。 1在使用默认配置情况下断言优胜者与DR相同。 2断言要求必须选择断言优胜者作为 RPF 邻居。 PIM-SM的断言 PIM-SM 虽然是 PULL 方式但是在特定场景下也具有断言需求。 AR2作为AR4的RPF邻居而AR3作为AR5的RPF邻居。
点击此处回到目录
4.PIM-SM
4.1.PIM-SM模型
PIM-SM(Sparse Mode稀疏) 模式采用Pull拉流模式以RT为根而建立(*G)表项。
PIM-SM模型简介 1对接收者来说RP相当组播源的存在。在RP和接收者之间建立最短路径树RPT。 组播流量由RP转发给接收者。 2对组播源来说RP相当于接收者的存在。在RP和组播源之间建立最短路径树SPT。 组播流量为避免泛洪以单播注册方式建立SPT树。(Register报文通知RP存在组播源SRP接收到反向向S发送PIM-join报文完成SPT树表项建立)。在该路径树上进行组播流量转发。 也即RP是PIM-SM网络的核心RP可分为静态RP和动态RP。 静态RP–在设备上进行指定 这里指的是默认RP为所有组播组G的IP提供RP服务。同时也可以指定静态RP为ACL指定的组播组IP转发该G的报文。此时如果有多个静态RP对应G时需要根据厂家实际情况选择相应的RP。 动态RP–由Bootstrap/Candidate-RP-Advertisement报文选举产生 实际上动态RP也可指定ACL仅为指定的组播组IP转发该G的报文 1组播源发送组播流第一跳PIM路由器为避免泛洪单播封装一个PIM报文发向RP。 2RP解封装该组播报文。(有相应表项)向第一跳组播路由器发送(SG)PIM-join报文。该报文为224.0.0.13组播报文但逐跳向上游RPF邻居发送直到到达组播源。
这一过程实际上建立了SPT的(SG)表项。
其实RP也会回送一个注册停止报文将在4.2.章节详细。3第一跳PIM组播路由器接收到接收者请求后主动加组发送(*G)的join报文。该join报文由其他组播路由器以RP为根进行RPF邻居转发直到RP。这里实际上也就完成了PULL拉流操作。 详细内容将在报文介绍章节4.2和4.3时进行详细介绍。 PIM-SM注意点 1PIM-SM建立的(*G)通过该join报文生成。同时末端的IGMP成员关系报告也可生成。 2PIM-SM同样需要进行RPF检查。但RPF检查的单播地址为RP的地址因此RP需要全网可达。 3PIM-SM按需进行剪枝和加组并也同样存在剪枝否决。 PIM-SM默认认为网络中组播设备较少需要下游设备周期60s发送(*G)join表项进行加组。 或//仅在SM下生效设置向上游发送join报文的周期时间。默认60s。该值必须小于join/prune消息中holdtime字段。 值得注意的是PIM-DM是强推PUSH模式也即上游设备会强推组播流。虽然有剪枝机制但还是需要下游在接收到组播流进行发送。(不考虑状态刷新机制)。 PIM-SM采用PULL模式是需要下游主动周期性发送join去维护表项 4.2.PIM-SM的注册register/register-stop
PIM 的 Register/Register-stop 报文仅适用于 PIM-SM 模式。 作用Register 报文用于第一跳 PIM 组播路由器向 RP 通知组播源的存在并建立 (SG) 表项。 第一跳 PIM组播路由器以 SIP 组播源侧接口IPDIP RP。单播发送。 并携带 (SG) 报文表项进行 S 到 RP 之间SPT树的建立。 B-bitBorder-bit边界位。RFC7761 中已取消对该 bit 的使用。并应当置为 0 并在接收时忽略。 N-bitNull-Register-bit空注册位。组播源侧 DR 将该 bit 置位时用于在本地 RST(SG) 定时器超时前向 RP 发送探测注册消息。 Multicast Data Packet携带(SG)组播信息。不定长。 注册消息示例。当 Null-Register bit 未置位时表示这是一个空注册消息同时该消息可不包含被封装的组播消息而仅封装组播 IPvx 报头用于注册探测。通常只在首次发送 PIM Register 消息时封装完整的组播数据。 自动换行 对于 IPv4 组播网络下封装的 IPv4 报头应 IP Version 4Header Length 5Fragmentation offset 和 More Fragments 0Total Length 20IP Protocol 103 (PIM)。同时如果 Header Checksum 字段为 0 则可不进行校验。 Group Address组播组地址。 Source Address组播源地址。 这里携带的是RP所需的(SG)表项信息。 注册停止消息示例仅携带 (SG) 信息。 PIM Register/Register-Stop交互 1组播源 S 的第一跳组播路由器发送 PIM Register 单播报文封装组播流量在组播源 S 和 DR 建立 (SG) 表项。只有组播源 S 和 DR 对组播进行封装解封装。 既完成了组播流量的传递又仅在 S 和 DR 之间的 Register Tunnel 内建立 (SG) 防止了组播流的过度泛洪。 需要说明的是这里真正的 (SG) 表项的建立实际应当是 RP 在收到 PIM Register 报文并确定有下游 (*G)表项后逐跳向组播源 S 发送 PIM Join 报文而触发建立的。 2Register 报文本质是变组播为单播流量。因此 RP 往往可以发送 Register-stop防止流量的二次发送并且阻止设备对组播流量的过度封装解封装占用设备资源。 3Register 报文的一个重要特性是通知 RP组播源 S 的存在。第一跳 PIM 组播路由器在本地启动一个 RST(SG) 注册停止定时器。当接收到来自 RP 的 PIM Register-stop 报文时重置该定时器。RST(SG) 定时器结束时重新周期发送 PIM Register报文。 RST(SG) 注册停止定时器通常设置为 (0.5 * Register_Suppression_Time1.5 * Register_Suppression_Time) 之间的随机值并减去 Register_Probe_Time。 自动换行 register-suppression-timeout 用来配置设备 Register_Suppression_Time 的超时时间。协议默认取 60s。 probe-interval 用来配置设备向 RP 发送 Null-Register 空注册的时间间隔。协议默认取 5s。 4RP 进行相应 (SG) 的 RPF 检查并在本地查询组播 S 路由表是否具有 (*G)。具有相应表项。向第一跳 PIM 组播路由器逐跳发送 PIM Join(SG) 消息。并同时发送 Register-stop 报文。 此时在 RP 和组播源 S 之间建立 SPT 源树。 其他需要注意的1 1组播源侧 DR 和 RP 之间建立的是 SPT 树。在该 SPT 树中仅有组播源侧 DR 需要知道 RP 位置从而单播发送注册报文。接收者侧 DR DR和RP之间是RPT树此时树上的所有设备都需要知道 RP 位置。因为要向 RP 进行加组发送 PIM join (*G) 报文建立表项。 这里在(*G)join报文的S地址上其实填充的是RP的地址 该(*G)表项由下游PIM路由器每隔60s进行维护。 NoteRP向组播源发送的是(SG)join表项。 2PIM Register 报文是单播发送的且第一跳 PIM 路由器发送该单播报文时默认以通向组播源S的本地接口作为 SIP。 register-source 用于指定源 DR 发送 register 注册报文的源地址。 3当 RP 无组成员时需要通知组播源 S 拒绝发送组播流。这一行为通过 PIM Prune(SG) 和 Register-Stop(SG) 完成。当 RP 有组成员时需要通知组播源 S 拒绝发送单播形式的组播流。此时组播源 S 沿着 (SG) 表项直接发送组播报文。(当然需要 RP 发送join报文建立相应表项)。 这是由于Register报文不仅承担了组播流量的功能而且有通知S的效果。 4由于单播路由的特性进行 PIM Register 交互的组播源侧 DR 和发送组播数据的第一跳组播路由器不一定为同一台设备。
点击此处回到目录
4.3.PIM-SM的Bootstrap/Candidate-RP-Advertisement
PIM-SM 使用《RFC5059-Bootstrap Router Mechanism for Protocol Independent Multicast》定义的 BSR(Bootstrap Router) 机制来完成 RP 的动态选举。 原理 1每台PIM-SM都可在本地指定一个地址作为C-BSR(候选Candidate-BSR)。每台PIM-SM通过Bootstrap消息获取整个PIM-SM域中的C-BSR从而唯一选举出BSR并同时向整个PIM-SM域发布BSR信息。 //c-bsr用于指定本地候选BSR。当然这个选举是动态的一旦失效重新选举并周期维护。 2每台PIM-SM都可在本地指定一个地址作为C-RP(Candidate-RP候选RP)。C-RP接收到BSR发送的Bootstrap消息后将自己所提供服务的组播组在PIM-SM域中Candidate-RP-Advertisement报文单播发送给BSR。从而BSR可以收集全网PIM-SM域的C-RP信息。 //c-rp用于指定本地候选RP。*当然这个选举也是动态的一旦失效重新选举并周期维护。 3BSR 周期性 60s 发送 Bootstrap 报文携带 C-RP 集合和唯一确定的 BSR 地址信息。并其他 C-BSR 在本地维护 BSR 信息维护定时器默认 130s。 //C-BSR发送Bootstrap的间隔默认60s。 //C-BSR的维护周期默认130s。 //C-RP发送Candidate-RP-Advertisement的间隔默认60s。 //C-RP的维护周期默认150s。 自动换行 BSR ( Bootstrap Router则相当于组播网络中的管理中心对动态选举RP的整个过程进行管理。 Bootstrap报文使用接口作为SIP使用224.0.0.13作为DIP一般发往永久预留组播地址的报文TTL都是1。 Fragment Tag随机数用来区分 Bootstrap 消息。 Hash Mask lengthC-BSR 的 Hash 掩码长度。 BSR-priorityC-BSR 优先级。 BSR-AddressC-BSR 地址。 Group Address组播组地址。 默认为所有组播组提供服务因此是224.0.0.0/4的组播组。 RP-Count希望为该组服务的 C-RP 的总数。 Frag RP-Count在本段内包含的 C-RP 地址的个数。分片场景下使用。 RP-addressC-RP 的地址。 RP-holdtime C-RP 的有效时间。 RP-priorityC-RP 的优先级。
示例
BSR的选举规则 1比较优先级优先级大者优先。默认为0。2比较接口IP地址IP地址大者优先。
BSR的选举过程 1每台C-BSR初始都认为自己是BSR因此发送Bootstrap报文并在全网的PIM-SM域进行泛洪 2竞选失败的C-BSR不在发送Bootstrap报文而是由优胜者BSR在网络中周期60s泛洪。 同时竞选失败者建立默认C-BSR的holdtime130s的定时器在130s内没有收到优胜者的Bootstrap报文认为BSR失效自己重新泛洪。 3为了防止C-BSR环路根据Bootstrap报文中的BSR地址为根进行RPF检查。 其他还有个命令需要介绍//用于在PIM-SM域的接口上不发送bootstrap报文。可以分离PIM-SM域。 Candidate-RP-Advertisement报文单播发送SIP接口IPDIPBSR地址。 RP的选举规则 1比较组播组的掩码长度越大越优。 2比较RP优先级越大越优。默认为0。3比较HASH(组地址RP值掩码)值越大越优。掩码默认30。 4比较IP地址越大越优。
RP的选举过程 1每台C-RP向BSR发送竞选报文Candidate-RP-Advertisement报文。携带RP相关信息。 2BSR收集全网PIM-SM域的C-RP信息向全网PIM-SM域进行Bootstrap报文泛洪 3PIM路由器根据自己实际情况选择相应的C-RP作为自己的RP 也即每个区域的RP实际上都有可能不同。 这里的实际情况指的是根据提供的多个C-RP选择最短路径的RP。当然也要考虑RP所提供的组播组G是否是自己所需要的。 其他注意事项 1当配置静态RP和动态RP时动态RP优先。 2进行选举的C-RP和C-BSR都需要加入PIM进程中才能进行选举 3进行选举的C-RP和C-BSR都需要满足RPF检查 4这里需要说明的是一般来说C-RP和C-BSR都应全网可达才能具有选举的资格。 这里的3和4实际上是重复的但是需要说明下。 5报文中没有相应的协商字段因此BSR和RP的选举实际上是支持抢占的。
4.4.PIM-SM的RPT树向SPT树的切换
PIM-SM模型下实际上是由RP作为接收者的组播源。接收者和组播源的通信往往是非次优路径。该这种情况下提出了RPT树向STP树切换的优化机制。 首先有一点需要注意的是这一切换只能在倒数第一跳组播路由器上发起。 这是因为RPT树首先是在RP和倒数第一跳组播路由器之间形成的。其次PIM网络的加组离组表项建立实际上都是RP和倒数第一跳组播路由器来完成的。其他的RPT树的路由器实际上只需泛洪PIM报文根据接收到的PIM报文和组播报文完成(*G)和(SG)表项的建立。并且最重要的一点是RPT树中间节点的SPT最短路径并不一定代表了接收者到源的最短路径 场景倒数第一跳 PIM 路由器上接收到 RPT 表项的组播流业务发现到该组播源 S 的 RPF 检查优于 RPT 树建立的路径。 实现 此时会有SPT树和RPT树不同上游接口传递的组播流此时需要 1倒数第一跳路由器在 RPT 树上逐跳进行 Prune(SG) 操作。RP上如果没有相应的接收者则触发PIM-SM的剪枝相关操作。 此 Prune(SG) 报文 Sparse-bit 置位表示 PIM-SM 消息 WildCard-bit 不置位表示 Source 字段填充真实的组播源 S。 RP-bit 置位表示在 RPT 树上进行逐跳发送。 自动换行 这里需要注意的是 (SG) 表项是 RPT 流量刷新而来会被剪掉。但是 RPT 树的(*G) 还是会保留所以周期加组。 2倒数第一跳路由器在SPT树上进行 Join(SG) 操作。 此 Join(SG) 报文 Sparse-bit 置位表示 PIM-SM 消息 WildCard-bit 不置位表示 Source 字段填充真实的组播源 S。 RP-bit 不置位表示在 SPT 树上进行逐跳发送。 自动换行 //spt-switch-threshold 用于在倒数第一跳 PIM 路由器上设置 RPT 树向 SPT 树切换阈值。默认阈值为 0。 点击此处回到目录
5.PIM行为配置
5.1.PIM-DM组播处理
组播源 组播源发送组播流量。组播流量由 PIM 第一跳组播路由器接收到。
PIM路由器 1第一跳组播路由器建立组播路由表。 也即此时PIM邻居被自动识别为组播的下游接口。此时为直连RPF检查必然成功。 2第一跳组播路由器建立 PIM 路由表向 PIM 邻居转发流量。 也即 PUSH方式无论有没有表项都向 PIM 下游接口推送组播流。而下游接口根据需要建立组播表项或进行 prune 剪枝操作。 3其他 PIM 路由器接收到后进行相似处理。但是此时取决于PIM路由器状态。
如果PIM有相应表项则转发流量如果无表项则每隔60s向上游发送 Prune 报文。上游设备在3s的剪枝等待延时内没有收到 join 报文则以接收到 Prune 中 Holdtime 字段210s为定时器将下游端口状态由 forwarding 转变为 prune 维持。 这一定时器被下游周期发送的Prune报文刷新。定时器为0时将下游端口转变为forwarding加入到PIM组播表项的出接口转发组播流量)。 4最后一跳 PIM 路由器接收到组播流量建立 (SG) 表项。向相应的接收者转发流量。(如果有接收者的话) 5对于 prune 状态新加入接收者向上游发送 Graft 嫁接报文上游随之删除该 prune 端口的定时器过渡到 forward 状态开始转发流量。
5.2.PIM-SM组播处理
组播源 组播源发送组播流量。组播流量由 PIM 第一跳组播路由器接收到。
PIM路由器 第一跳组播路由器被组播流量刷新因此将组播流 (SG) 封装入单播 PIM-register 报文中发送给 RP。 RP组播路由器 1有相应的(*G)表项检查 (SG) 符合RPF 原则向组播源/第一跳组播路由器发送 (SG) join 报文建立组播表项将组播流量引入 RP。 此时RP上有(SG)又有(*G)表项。这里有一个定义是(*G)表项是对应(SG)的父项。此时(SG)会继承(*G)表项的出接口从而完成整个PIM域的组播流量的发送。根据该规则不断在全网都形成(SG)表项。 这里有一个有意思的点是在RP未向S发送(SG)join报文时只有在第一跳PIM路由器和RP路由器上存在一个被组播流传输形成的(SG)表项。而在RP和S之间的组播路由器是没有表项的。 这里的表项是由于第一跳组播路由器发送的单播Register报文中封装组播流量而形成的。中间设备处理单播报文是不进一步解封装的。 2没有相应的表项RP 向第一跳组播路由器发注册停止 Register-stop 报文。第一跳组播路由器在该端口上启动一个注册停止定时器在定时器结束后重新向 RP 发送单播注册报文。
倒数第一跳组播路由器由接收者触发建立 (*G) 表项并逐跳发送 (*G) join 报文给 RP。 此时在倒数第一跳PIM路由器☞☞☞RP的路径路由器上都建立(*G)表项。指定组播的上下游接口。 如果RP也是倒数第一跳组播路由器那么IGMP的成员关系报文当然也可以建立(*G)表项。 RP收到后将RP上的表项与该 (*G) 表项比对。随后将接收该 (*G) 表项的接口加入组播路由表的出接口中。这样就完成了表项的建立。 1在最终传输组播流量时RP和C-DR之间的组播流量还会导致(SG)表项的出现。也即PIM-SM的RPT树也是会有(SG)表项的 2PIM-SM模式下修剪等待机制同样适用。 1-当接收者退出组播组后剪枝报文首先沿着RPT树到达RP。 2-如果RP针对该 (SG) 没有相应的出接口则继续向组播源发送Prune剪枝报文。 需要注意 1满足 RPF 检查PIM-SM 的 RP 也需要满足 RPT检查。 2与 PIM-DM 模型相同PIM-SM 的也具有剪枝操作。当 (*G) 表项的下游接口全部删除此时向上游发送 (*G) 的 prune剪枝报文。
5.3.PIM配置
PIM协议配置比较简单这里以下图AR4为例进行PIM-SM介绍 指定 AR4 为静态 RP。
sysname AR4
#
multicast routing-enable
#
interface GigabitEthernet0/0/0ip address 10.1.234.4 255.255.255.0 pim sm
#
interface GigabitEthernet0/0/1ip address 10.4.5.4 255.255.255.0 pim sm
#
interface GigabitEthernet0/0/2ip address 10.4.6.4 255.255.255.0 pim sm
#
interface LoopBack1ip address 4.4.4.4 255.255.255.255 pim sm
#
pimc-bsr LoopBack1c-rp LoopBack1static-rp 4.4.4.4 preferred
#PIM的配置比较简单这里重点说明配置要点 1第一跳路由器的S接口和倒数一条路由器的C接口都需加入PIM进程。 因为要建立组播表项的上下游接口并且需要进行RPF检查。 PIM-SM模型的C-BSR和C-RP也需要如此。 2对于PIM-SM模型属于SPT树的组播路由器仅有第一跳需要知道RP的地址进行Register注册。而RPT树的路由器都需要知道RP地址。
5.3.1.常用检查命令
1display multicast rpf-info用于查看针对 (SG) 组播流的 RPF 检查情况。
自动换行 自动换行 2display multicast routing-table用于查看 (SG) 组播流的表项。
自动换行 自动换行 3display pim routing-table用于查看PIM为 (SG) 组播流生成的表象。 display pim routing-table fsm可以额外展示接口的状态机。例如P 表示接口处于剪枝状态Prune Timer定时器(默认210s由 join/prune 周期刷新)剩余 2:57。 自动换行 自动换行4display pim interface {verbose}用于查看 PIM 接口参数信息。
自动换行 自动换行 5display pim neighbor {verbose}用于查看 PIM 邻居参数信息。
自动换行 自动换行 6display pim control-message counters用于查看PIM协议包收发统计。
更新
点击此处回到目录