基于华三网络学习笔记(理论)
组播概述
组播用于实现点到多点的传输。
- 效率高,分布式应用,多点传输
- 数据源仅发送一份数据包,链路仅传输一份数据包,只有组播组中接受者能收到数据包
- 尽最大努力交付
- 无拥塞控制
- 数据报重复
- 数据包无序交付
组播需求问题与相关技术:
- 如何标识接受者—–组播地址机制
- 接受者动态加入或离开组播组—–组成员关系管理
- 组播报文如何在网络中转发—-组播报文转发过程
- 组播报文转发路径(组播转发树)构建—–组播路由协议
组播地址:
组播地址范围:224.0.0.0---239.255.255.255
- 本地协议预留组播地址:
224.0.0.0---224.0.0.255
,属于局部范围,不会被路由器转发 - 用户组播地址:
224.0.1.0---238.255.255.255
,用户可用组播地址,全网有效232.0.0.0/8
为 SSM 组地址,其余属于 ASM 组 - 本地管理组地址:
239.0.0.0---239.255.255.255
,特定本地范围有效,属于 ASM 组 - 组播 MAC 地址:以太网:
01-00-5e-xx-xx-xx
组播地址映射:
组播 MAC 地址中高 24 位固定为0x01005E
,第 25 位为 0,低 23 位来自组播 IP 地址的低 23 位。
组播 IP 地址的高 4 位为1110
,标识组播,而低 28 位只有 23 位被映射到组播 MAC 地址,即有 5 位的丢失,一共会有2^5
即 32 个 IP 地址公用一个组播 MAC,也就是可能会接受所在组播组外的其他组播数据。
举例:
组播IP地址为:224.231.123.14 |
组播组管理协议
常用的组播组管理协议为 IGMP(Internet Group Management Protocol 因特网组管理协议)。
主机通过 IGMP 通知路由器加入或离开某个组播组,路由器通过 IGMP 周期查询组播组成员是否处于活动状态,收集成员关系并维护
IGMP 有三个版本:
- IGMPv1:定义了基本的组成员查询和报告过程
- IGMPv2:添加了组成员快速离开机制
- IGMPv3:添加了成员可指定接受或拒绝组播源的报文,支持 SSM 模型
IGMPv2
IGMP 报文:
Type
:IGMP 报文类型,包含Membership Query
、Report
、Leave Group
Max Reps Time
:最大响应时间,只有Membership Query
使用该字段checksum
:校验和Group Address
:组地址。不同报文填的不同。普遍查询填 0,特定组查询填指定组播组地址,报告报文和离开报文填组播组地址
IGMPv2 原理:
- 当同一网段中有多个 IGMP 路由器时,通过查询器选举机制(最小接口 IP)选出唯一查询器。
- 查询器周期发送普遍查询消息
General Query
,目的地址224.0.0.1
,TTL
为 1,进行组成员关系查询。主机收到后发送报告消息Report
响应。也有称为Membership Report
,但本篇统一为Report
- 主机若要加入组播组,可直接向查询器发送
Report
,离开组播组时,直接发送Leave
,目的地址为224.0.0.2
,通告所有组播路由器。查询器收到Leave
后,会发送特定组查询消息Group-Specific Query
确定该组所有成员是否都离开。 - 若是加入,查询器则会查看组播转发表项,若不存在就添加,表项为
(组播源IP地址,组播组IP)
,若为*
表示任意源。组播转发表项还包含:组播指定报文的入接口、出接口等
案例完整流程:
IGMP Snooping:解决二层组播。原因:组播数据在二层以广播发送
主机发往 IGMP 查询器的报告消息经过交换机时,交换机会监听并将组播 MAC 和端口做映射,建立表项。当交换机收到组播数据时,就按表项转发,也就只向组成员发送了
IGMPv3 概述: 1.可对源过滤 2.新的报文类型与格式 3.报告报文的组播地址为 224.0.0.22 4.取消成员报告抑制机制
IGMPv3 主机为接口上每个组播组维护一个表项(组地址,过滤模式,源列表)
过滤模式:INCLUDE:只接收来自源列表的组播源的数据包
EXCLUDE:只接收不在源列表的组播源的数据包
三种状态:当前状态,过滤模式改变状态,源列表改变状态。对应三种记录
当主机接口维护的组状态变化时,会主动发送组记录类型为过滤模型变化或源列表变化的报告报文。当接收到查询报文时,会响应记录类型为当前状态的报告报文
组播分发树模型:是组播数据的转发数据,分为最短路径树(S,G)和共享树(*,G)
组播转发机制:逆向路径转发
组播路由协议:域内:DVMRP(基于路径矢量协议)、MOSPF(基于 OSPF)、PIM 域间:MSDP、MBGP
域内协议:基于 SPT:PIM DM、DVMRP、MOSPF 基于 RPT:PIM SM
组播模型:ASM 任意信源组播:接收端只选择加入组播组,不能选择组播源
SSM 指定信源组播:接收端可以指定组播源
组播分发树:由组播路由协议建立的无环传输路径
SPT 最短路径树:组播源到接受者的最短路径。要为每个组播源建一棵最短路径树
缺点:路由器必须为每个组播源保存路由信息
RPT 共享树:以某个路由器作为树根,该路由器称为汇聚点 RP,以 RP 为树根建立到每个接收者的最短路径树。所有组播源和接收者都使用这棵树收发报文。组播源先向 RP 发数据,再由 RP 发送到所有接收者。
优点:路由器保留的路由信息很少
缺点:数据报文先要经过 RP,再到达接收者,对 RP 的可靠性和性能要求高
组播报文转发机制
RPF 逆向路径转发
原因:组播报文是发送给一组接收者的,路由器收到组播报文后,必须根据报文的源地址确定正确的入接口和下游方向,然后向下游方向转发。该过程就是 RPF。
目的:确保组播数据沿正确路径传输,避免出现环路
检查过程:在单播路由表上查找组播源(分发树为 SPT)或 RP(分发树为 RPT)对应的 RPF 接口,若数据包是在 RPF 端口接收到的,则 RPF 检查成功,转发数据包。否则检查失败,直接丢弃
PIM 协议无关组播:与单播路由无关,但仍然依靠单播路由表进行组播路由。使用 RPF 转发报文。分为两种模式:PIM-DM(密集模式),PIM-SM(稀疏模式)
PIM-DM:用于小型网络中接收者较多且密集的情况,采用“推”方式将流量泛洪。
邻居发现:路由器周期发送 PIM Hello 消息,发现其他 PIM 路由器,建立邻居关系,判断叶子网络,选举 DR(若运行的是 IGMPv1,通过 Hello 选举,其他版本就不需要选举 DR)。
扩散-剪枝:将组播数据扩散到每个节点,每个节点创建(S,G)表项(包含出接口(除 RPF 接口外所有连接 PIM-DM 邻居或组播组成员的接口)与入接口列表),若节点没有该组播组成员,就向上游发送 Prune 剪枝消息,若共享网段有路由器上有接收者,就向上游发送 Join 消息,覆盖其他路由器发送的 Prune。 扩散-剪枝过程周期进行。最终形成 SPT。
Prune 消息发送情况:1.若路由器(S,G)表中出接口表为空 2.路由器从非 RPF 接口收到组播报文,会触发断言 Assert 机制,断言失败一方会向成功一方发送 Prune 消息。
断言 Assert:若同一网段有多个组播路由器,相同报文可能会被重复发送,通过断言选取网段唯一转发组播数据的路由器。
过程:路由器在重复接收到报文的接口上发送 Assert 消息,包含 S,G,单播路由的优先级,开销 Metric。先比较路由优先级(高的胜),再比较开销(小的胜),再比较本地接口 IP 地址(大的胜)。当一台路由器上游接口故障时,该路由器将 Metric 值设为无穷大并广播 Assert,引发新一轮断言,保证流量不会长时间中断。
状态刷新机制:与组播源直连的路由器发送 State Refresh,其他路由器收到后重置剪枝超时定时器,并向所有连接 PIM-DM 邻居的路由器发送该消息,对于处于转发的接口,消息中剪枝位为 0,处于剪枝的接口,剪枝位为 1。周期发送该消息可使剪枝状态的接口维持状态,减少不必要的扩散。
嫁接:当被剪枝的节点上出现接收者时,节点会主动向上游发送嫁接 Graft 消息,上游收到后回复 Graft Ack 消息确认,节点从剪枝状态变为转发状态。两个消息都是单播发送。
PIM-SM:用于中大型网络中,组播组成员相对分散,范围较广,采用“拉”方式。核心任务是构造维护 RPT,选出 RP 作为共享树的根。
过程:组播源侧 DR 向 RP 注册,将注册报文单播发给 RP,该报文到达 RP 后触发建立 SPT,组播源把数据沿 SPT 发给 RP,再由 RP 沿 RPT 发给接收者
ASM 模型:任意源模型。任何发送者都可作为组播源向组播组发数据,接收者无法预先知道组播源位置,但可以在任意时间加入离开组播组
SSM 模型:指定信源组播模型。接收端能指定组播源。SSM 模型无需 RP,无需构建 RPT,无需组播源注册过程。