1. Multicast Source Discovery Protocol(组播源发现协议)特征
- MSDP 采用 TLV 结构,但目前只支持 IPv4
- MSDP 封装在 TCP 数据报文中,是一个 TCP 的应用
- MSDP 与 BGP 的邻居关系建立过程类似
- MSDP 可以实现 PIM-SM 域内的 Anycost RP,达到共享组播源信息的目的
- MSDP 可以解决多个 PIM-SM 域之间 RP 的互连问题(域间组播)
- MSDP 通过单播报文,在各个 PIM-SM 域之间交互 SA 消息,以建立 MSDP 邻居
- SA 消息也是通过 PRF 检查来避免环路
- MSDP 邻居分类
封装在 TCP 数据报文中,是一个 TCP 的应用
MSDN Message 格式解析
- Type:报文类型
- Source-Active(SA):携带多个(S,G)信息,在多个 RP 之间传递,或者封装 PIM-SM 组播数据
- 包含源 RP 的 IP 地址
- 域中活动的(S,G)列表
- Source-Active Request:请求指定组播组的(S,G)列表,减少源加入延迟
- 包含被请求的组播组
- Source-Active Response:对 Source-Active Request 消息的响应
- KeepAlive:保持MSDP对等体的连接关系
- Reserved:用作 Notification
- MSDP traceroute in progress:MSDP 路由跟踪
- MSDP traceroute reply:MSDP 路由跟踪答复
3. MSDP 邻居建立
- Source-Active(SA):携带多个(S,G)信息,在多个 RP 之间传递,或者封装 PIM-SM 组播数据
采用「TCP 639 」端口建立连接
- 指定对端的 MSDP 邻居后,由 IP 地址大的主动发起连接,并启动定时器。主动端状态由 Down → Listen;被动端状态由 Down → Connect
- 被动端接收到 MSDP 消息,则邻居关系建立成功。主动端状态由 Listen → Up;被动端状态由 Connect → Up
- 双方互相发送 Keepalive 消息保持邻居的 TCP 连接
4. SA 消息与组播源信息的传递
1)SA 消息的 RPF 检查规则
- 发出 SA 消息的邻居就是源 RP,则接收该 SA 消息并向其他对等体转发
- 接收从静态 RPF 邻居到来的 SA 消息
- 如果一台路由器只拥有一个远端 MSDP 邻居,则该远端邻居自动成为 RPF 邻居,接收从该远端邻居发来的 SA 消息
- 发出 SA 消息的邻居与本地路由器属于同一 Mesh Group,则接收该 SA 消息
- 如果是从 eBGP/MBGP 过来的 SA 消息,则选用 IP 地址大的邻居的 SA 消息
如果是从 iBGP/MBGP 或存在 IGP/组播静态路由过来的 SA 消息,则选用所有等价路由中 MSDP 邻居的 SA 消息
1)组播源信息的传递
PIM-SM1 的 RP 通过 DR 发送的 Register 消息获得组播源的信息
- PIM-SM1 的 RP 创建 SA 消息(包含:组播源地址、组播组地址和源端 RP 地址),周期性向 MSDP 邻居发送
- PIM-SM2 的 RP 收到 SA 消息后,针对 PIM-SM1 的 RP 进行 RPF 检查
- 如果检查通过,则向其他 MSDP 邻居转发,并检查自己域内是否由该组播组的成员
- 如果检查失败则丢弃
- PIM-SM3 的 RP 收到 SA 消息后,针对 PIM-SM1 的 RP 进行 RPF 检查
- 如果检查通过,并检查自己域内是否由该组播组的成员。当发现存在成员时,会通过 IGMP 生成(*,G)表项,并创建(S,G)表项,向组播源逐跳发送 Join 消息,以建立一条 RP 到 组播源的 SPT 树
- 如果检查失败则丢弃
- 组播流通过 SPT 树转发至 PIM-SM3,在由 RP 通过 RPT 向接收者转发。当接收者收到组播流后,可以自己决定是否做 SPT 切换(如果有最优路径,则自己构建一条到组播源的 SPT,不在通过 RP 转发了。或手工配置不切换)
5. Anycost-RP
- RP 路径最优:组播源向距离最近的 RP 进行注册,建立路径最优的SPT;接收者向距离最近的 RP 发起加入,建立路径最优的 RPT
- RP 间的负载分担:每个 RP 上只需维护 PIM-SM 域内的部分源/组信息、转发部分的组播数据
- RP 间的冗余备份:当某 RP 失效后,原先在该 RP 上注册或加入的组播源或接收者会自动选择就近的 RP 进行注册或加入操作