IP多播技术介绍(一)

1、组播的协议结构

根据协议的作用范围,组播协议分为主机-路由器之间的协议,即组播成员管理协议,以及路由器-路由器之间协议,主要是各种路由协议。组成员关系协议包括 IGMP(互连网组管理协议);组播路由协议又分为域内组播路由协议及域间组播路由协议两类。域内组播路由协议包括 PIM-SM、PIM-DM、DVMRP 、MOSPF等协议,域间组播路由协议包括 MBGP、MSDP 等协议。同时为了有效抑制组播数据在二层网络中的扩散,引入了 GARP、CGMP、IGMP Snooping 等二层组播协议。

通过 IGMP 和二层组播协议,在路由器和交换机中建立起直联网段内的组成员关系信息,具体地说,就是哪个接口下有哪个组播组的成员。域内组播路由协议根据 IGMP 维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树,在路由器中建立组播路由状态,路由器根据这些状态进行组播数据包转发。域间组播路由协议根据网络中配置的域间组播路由策略,在各自治系统(AS,Autonomous System)间发布具有组播能力的路由信息以及组播源信息,使组播数据能在域间进行转发。

2、组播地址结构

IP组播地址用于标识一个 IP 组播组。IANA 把 D 类地址空间分配给组播使用,范围从 224.0.0.0 到 239.255.255.255。如下图所示(二进制表示),IP 组播地址前四位均为“1110”。如下图所示:

clip_image002

IANA 把224.0.0.0 到 224.0.0.255 范围内的地址全部都保留给了路由协议和其他网络维护功能。该范围内的地址属于局部范畴,不论生存时间字段(TTL)值是多少,都不会被路由器转发;D类保留地址的完整的列表可以参见RFC1700。

224.0.1.0 到 238.255.255.255 地址范围作为用户组播地址,在全网范围内有效。其中233/8 为 GLOP 地址。GLOP 是一种自治系统之间的组播地址分配机制,将 AS 号直接填入组播地址的中间两个字节中,每个自治系统都可以得到 255 个组播地址;

239.0.0.0 到 239.255.255.255 地址范围为本地管理组播地址(administratively scoped addresses),仅在特定的本地范围内有效。

clip_image004

当 IP 层收到组播数据报文时,根据组播目的地址查找组播转发表,对报文进行转发。

3、组播地址到二层地址的映射

IANA 将 MAC 地址范围 01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF 分配给组播使用,这就要求将28位的 IP 组播地址空间映射到 23 位的 MAC 地址空间中,具体的映射方法是将组播地址中的低 23 位放入 MAC 地址的低 23 位,如下图所示。

clip_image006

由于 IP 组播地址的后 28 位中只有 23 位被映射到 MAC 地址,这样会有 32 个 IP 组播地址映射到同一 MAC 地址上。

4、组播成员概念

一个多播会话的多播源并不一定要成为接收它发送的流量的组中的成员。事实上,典型网络中,源并不知道那些主机是组员,接收者任何时候都能自由加入和离开组。如果源和所有的组员共享一个LAN,那么就不需要其它协议。如果发送的多播流量需要经过大型的网路,则路由器必须通过某种方法获知连接的网络中是否有组员,如果有,是哪个组的成员。当一个路由器知晓有一个多播会话时,它会向其所属的子网查询是否有主机要加入这个接收组。会向子网中所有系统地址224.0.0.1发送查询,或它可以向组内正在查询的某一特定地址发送。如果有一个或多个主机回应,那么这个路由器会将会话的数据包转到正确的子网中。

clip_image008clip_image010clip_image012

路由器周期性地向子网发送查询,如果子网中仍有组员,那么它们会响应所有的查询,如果没有主机响应,那么路由器就认为子网中所有的主机都已经离开这个组。于是停止向这个子网转发数据包。

如果主机想加入组,则主机直接向路由器发送一个请求加入消息,路由器收到请求后,马上把多播流量转发到这个子网中。

当一台主机退出一个组时,可以向路由器发送退出通知,路由器收到主机退出通知后,马上向这个子网发送一个查询,询问是否还有剩余的组员。如果没有响应,则断定该子网中没有组员,于是停止向这个子网转发组播流量。

主机发送的退出通知,可以提高路由协议的效率,如果路由器知道它连接的任何子网中没有任何组员,那么它可以把自己从多播树中剪除。

如果网络中有多个路由器时,比如,两台路由器连接一个子网,它们经过不同的路由收到同一源的多播流,如果一台路由器或一条路由失效,组员则能继续从另一台路由器收到多播流量,一般情况下,两台路由器同时向子网转发相同的多播数据流会影响网络质量。路由器通过路由协议能够彼此知道对方的存在。因此,保证只有一台路由器向同一子网转发多播数据流的方法是在多播路由协议中加入指定路由器功能。查询者负责多播流的转发。其它路由器只进行监听。只有当查询者失效才开始转发多播数据流。

clip_image014

5、因特网组管理协议(IGMP)

IGMP是主机和路由器间的“语言”。所有要加入多播组的主机和所有连接到有多播主机的子网中的路由器都必须使用IGMP。这是一种和ICMP有很多相信之处的控制协议。IGMP消息被封装在IP包头中(协议号为2),IGMP包头中的TTL参数总设为1。现在有两种版本,IGMPv1在RFC1112中描述,IGMPv2在RFC2236中描述。

5.1 IGMPv2的主机功能

主机使用IGMPv2有3类消息:

l Membership Report消息

l Version Membership Report消息

l Leave Group消息

Membership Report消息用于指示一台主机希望加入一个组,这个消息在一台主机第一次加入组时发送,有时也用来响应本地路由器发出的Membership Query消息。

Membership Report消息IP包头里的目的地址是这个组的地址,为了保证本地的路由器能够收到Membership Report消息,主机在短时间内发出一个或两个复制的报告,在RFC2236中建议这个时间间隔为10s。

如果主机在它的计地器超时前收到一个Membership Report消息,它将不再向这个组发送Membership Report消息。通过这种方法来节省网络资源。

Version Membership Report消息是IGMPV2主机向后兼容的。IGMPV2用于检测和支持其子网中的IGMPV1主机和路由器。

Leave Group消息是主机用来通知本地的路由器主机将退出该组。这个消息包含退出的组的地址。但与Membership Report消息不同的是,Leave Group消息是发向子网中所有路由器地址224.0.0.2的。是因为只有子网中的多播路由器需要知道主机已经退出,而其它组成员不需要知道。RFC2236推荐只在退出的成员为最后一个发出Membership Report消息来响应查询消息的主机时才发出Leave Group消息的。

5.2 IGMPv2的路由功能

路由器发送IGMP消息只有查询一种类型,在IGMPV2中,有两类查询:

l General Query消息

l Group-Specific Query消息

General Query消息是路由器用来查询其连接的所有子网是否有组员存在。并在子网中没有组员时检测,查询默认的时间间隔为60s。General Query消息被发送到子网中所有系统224.0.0.1地址。如果一台路由器在3次查询时间间隔里没有收到一个特定子网中的Membership Report消息,那么这个路由器将宣布这个子网中没有组成员。

Group-Specific Query消息,是当主机在正常情况下退出组时会发送一个Leave Group消息,当路由器收到Leave Group消息时,必须判断子网中是否有组员存在,为了达到这个目的,路由器发送一个Group-sperific Query消息,与Greneral Query消息不同的是,它包含组的地址,并且用组的地址作为目的地址。为了防止Group-Specific Query消息被丢弃或破坏,路由器会每隔1s分别发送两个Group-Specific Query消息。

当支持多播的路由器首先在子网中被激活,它认为自己是查询者时,会马上发送General Query消息。

查询者是负责向子网发送所有General Query和Group-Specific Query消息的路由器,当子网中有多台路由器时,需要选举查询者,有较小IP地址的路由器成为查询者,所以子网中现有的路由器在收到新路由器的General Query消息后,就检查源地址。如果它的IP地址值更小,则会继续发送查询,当新的路由器收到其中一个查询,并发现这台路由器有较小的IP地址时,它就变成非查询者。

如果非查询者在一段时间内没有收到查询者的查询,那么它认为查询者已经不存在了,并充当这个角色。

5.3 IGMPv1

l IGMPv1没有Leave Group消息

l IGMPv1没有Group-Specfic Query消息

l IGMPv1不在查询消息中规定最大响应时间

l IGMPv1没有查询者选举的过程

在某些情况下,IGMPv1和IGMPv2可能同时存在一个子网中

l 某些组员运行IGMPv1,而另一些运行IGMPv2

l 某些组员运行IGMPv2,而路由器运行IGMPv1

l 路由器运行IGMPV2,而某些组员运行IGMPV1

l 一台路由器运行IGMPv1,而子网中的另一台路由器运行IGMPv2。

如果同一子网中同时有版本1和版本2的成员,如果一个版本2成员听到路由器的查询,随后又收到同一组中版本1的Membership Report消息,那么它就不再发送自己的Membership Report消息。版本1的主机则忽略版本2的消息。

如果一台主机运行版本2,而本地路由器运行版本1,那么IGMPv1路由器将忽略版本2的消息。所以版本2的主机收到版本1的查询后,将用版本1的Membership Report消息来进行响应。

如果版本2的路由器收到版本1的Membership Report消息,它会将所有的组员按版本1对待。路由器忽略Leave Group消息,也不发送Group-Specific Query。

5.4 IGMPv3

IGMPv3正在开发,IGMPv3中主要增加了Group-and-Source-Specific Query消息。它用来识别源地址。也对Membership Report和Leave Group消息进行了修改。

5.5 IGMP消息格式

IGMPv1消息格式

clip_image016

l Version(版本):IGMP版本1。版本0在RFC-988中说明,它现在已经废弃。

l Type(类型):有两种与主机相关的IGMP报文:

n 1=主机成员请求

n 2=主机成员报告

l Unused(未用):未用字段,在发送时为零,接收时被忽略。

l Group Address(组地址):主机成员请求报文在被发送时组地址字段为零,被接收时忽略该字段。主机成员报告报文中,组地址字段为被报告组的IP主机组地址。

IGMPv2消息格式

clip_image018

l Type(类型)

有3种 IGMP 消息和主机与路由器的交互有关:

Membership Query(成员关系查询)其值为0x11,用于多播路由器发现子网中的成员。其有两个成员关系查询的子类型,General Membership Query(一般查询),用于了解一个组中是否有成员在相邻的网络中,将组地址设置为0.0.0.0。Group-Specific Query(特定组查询),用于了解在相邻的网络中特定的组是否有成员,将组地址设置为要查询的组的地址。这两个消息由组地址进行区分,成员查询消息则类似于"Query"。

Version 2 Membership Report(版本2成员关系报告)其值为0x16。用于告知路由器子网中至少有一个组员存在。

Leave Group(离开组)其值为0x17,通知路由器其退出组。

Version 1 Membership Report(版本 1 成员报告)其值为0x12。为了和IGMP v1兼容

l 最大的响应时间

最大的响 应时间域仅在成员关系查询中有效。规定了在发送一个回应报文时最大的允许时间,(其单位为1/10秒)。在所有其它的消息中,会由发送者置为0,而接收者则忽略该域。

改变该设置可以允许IGMPv2 路由器调整离开延时"leave latency" (最后一个成员离开组的时刻和通知路由协议该处已不在存在成员时的这一段时间。)

l 校验字

校验字是IGMP消息长度(IP包的整个有效负载)的16位检测。该域设为0,在计算校验字时将该域包在一起进行计算。当传送包的时候,必须计算该校验字并插入到该域中去。当接收包的时候,该校验字必须在处理该包之前进行检验。

l 组地址

在General Query成员查询消息中,发送一个通常的查询时组地址域应设为0,当发送一个Group-Specific特定组查询时,则应设置组的地址。 在Membership Report成员报告或Leave Group离开组的消息中,组的地址域保留了要报告或要离开的地址。

l 其它域

注意IGMP 消息可能会大于8个字节,尤其是将来向后兼容的IGMP版本。有一点必须注意,一个IGMPv2 的实现在处理包的时候必须忽略第一个8位字节。但是,IGMP的校验总是在整个IP的有效负载上进行计算的,而不是正好在首先的8字节上。

组播路由器使用IGMP 来了解在他们所有的邻接物理网络上哪个组拥有成员。 组播路由器保留有一个组播组成员的列表,和一个针对每个成员的定时器。 "Multicast group memberships" 指在一个指定的邻接网络上至少有一个成员存在的组播组,而不是所有成员的列表。 考虑到其所有的邻接网络,一个组应该是两个角色中的一个:查询者或非查询者。在每个物理网络上仅能有一个查询者。在每个邻接的网络上,开始时所有的路由器都做为一个查询者。如果一个组播路由器从一个拥有低IP地址的路由器听到了查询消息,则在该网络上它必须作为一个非查询者。如果一个路由器没有从其他的路由器那听到查询消息(在查询周期内),则会继续做为一个查询者。 该路由器作为一个查询者周其性的在每个邻接的(查询周期)网络上发出通常的查询消息,请求得到成员信息。在开始时,路由器应该发送 [初始查询计数] 间隔短的一般查询消息,从而可以快速的可靠的确定成员信息。一般查询的组地址为0,发给所有系统的组播组 (224.0.0.1),有最大的查询响应时间 [Query Response Interval]。

当一个主机接收到了普通的查询,它会给每个组(有查询请求到达并有成员存在的端口,包括所有系统平台的组)都设一个延时定时器,每一个定时器都设为一个不同的随机值,该值由主机上所能有的最高时钟频率产生,范围从0,到查询包中所定义的最大响应时间。当一个主机接收到了一个特定组的查询,则会将延时定时器设为从0到最大响应时间的一个随机值。如果定时器已经运行了,则如果所要求的最大响应时间小于当前运行的定时值所剩部份时,重置该定时器。当组的定时器到时后,主机组播一个版本2的成员报告到该组中,其IP 中 TTL的值为1。如主机接收到了另一个主机的报告(版本为1或2),而其本身的定时器还没有到时,则它会停止其特定组的定时器,且不发送报告,这样就减少了重复的报告。

当路由器接收到了报告,它就会把该组报告加入到一个组播组成员列表中,并且会为其成员关系设一个值为组成员生存周期的定时器 。重复的报告会导致该定时器的刷新。如果在定时器到时之前没有接收到一个特定组的报告,路由器则会假定没有本地的成员,它也不再需要在邻接的网络上为该组转发组播消息了。

当一个主机加入了一个组播组,则应该立即发送一个非请求的版本2的成员关系报告给组,以防它是网络上该组的第一个成员。初始的成员报告可能会丢失或会受到损害,为了防止此种情况,推荐在短的间隔时间内报告一次或两次(非请求报告间隔)。(一种简单的方法可以解决该问题。即通过发送版本号为2的初始成员报告,就好象是从一个组接收到了特定组查询的消息一样,并设置适当的定时器)。

当一主机离开一个组播组,如果它是最后一个主机,除它外没有其它的机器来报告成员关系了,则它应该发送一条离开组的消息 给所有路由器,地址为组播组(224.0.0.2),如它并不是最后一个回答查询的主机,它可以不发送消息,就好象另一个在子网中的成员一样。这样也可以减少了一些数据流量。一个没有足够存储器的主机不能记住是否它是最后一个主机,它离开一个组时,它总是会发送一条离开组的消息。为了和早期的版本标准的兼容,路由器应接收该条离开组的消息。离开组消息发布给所有的路由器组,因为其它的组成员不必知道一个主机是否离开了该组,但它不会破坏该离开组的消息。

当查询者在其接口上接收到了组成员离开组的消息之后,它发送 [最后成员查询计数 ] 特定组成员查询 消息[最后成员查询间隔] 给正离开的组。这些特定组查询有最大的响应时间(设为最后成员查询间隔)。如果在最后查询的响应时间之后,没有报告者接到消息,路由器则会假定该组没有本地的成员。在该时间内,任一个查询者到非查询者的传送都会忽略,一个路由器会继续发送特定组的查询。

对于接收端口上没有组成员时,非查询者必须忽略离开组的消息,而查询者则是应该忽略离开组的消息。当查询者接收发一个特定组查询消息,如果它的组成员定时器大于[最后成员查询计数] 消息中所定义的最大响应时间,它会将其组成员计数 为该值。

5.6 LAN组成员管理

IGMP 组播成员管理机制是针对第三层设计的,在第三层,路由器可以对组播报文的转发进行控制,只要进行适当的接口配置和对 TTL 值的检测就可以了。但是在很多情况下,组播报文要不可避免地经过一些二层交换设备,尤其是在局域网环境里。如果不对二层设备进行相应的配置,则组播报文就会转发给二层交换设备的所有接口,这显然会浪费大量的系统资源。在交换网络上控制多播的方法四种:

l 手工配置的交换式多播树

l GMRP

l ICMP监听

l CGMP

1、手工配置的交换式多播树

是在交换机的桥接表里加一个静态的条目,在思科设备上被称内容可寻址存储器(CAM)表。如下图所示,组员在交换端口2/3、2/4、2/19上,面路由器端口在1/1上,组地址为239.0.5.10,这个IP地址将造成多播的MAC地址为0100.5E00.050A,把这个信息手式输入交换机的CAM表中。手工配置扩展性不好。而且不能跨路VLAN的边界。

clip_image020

2、GARP多播组注册协议(GMRP)

是一个IEEE802.1p中规定的开放协议,它让MAC层的多播组地址动态地在交换上注册和取消。GARP 组播注册协议(GMRP)是通用属性注册协议(GARP)的一种应用,主要提供一种类似于 IGMP 探查技术的受限组播扩散功能。GMRP 和 GARP 都是由 IEEE 802.1P 定义的工业标准协议。

GMRP 允许网桥和终端站向连接到相同局域网段的 MAC 网桥动态注册组成员信息,并且这些信息可以被传播到支持扩展过滤服务(extended filtering services)的桥接局域网中的所有网桥系统。 GMRP 的操作基于 GARP 所提供的服务。

GMRP 软件运行在交换机和主机上。在主机上运行的 GMRP 和 IGMP 一同使用。主机 GMRP 软件衍生为主机第三层 IGMP 控制数据包的第二层 GMRP 版本。交换机接收来自主机第二层 GMRP 和第三层 IGMP 的流量。交换机使用接收的 GMRP 流量来限制主机 VLAN 的第二层组播。其实在所有情况下,都可以使用 IGMP 探查技术来限制第二层组播,而不需要为主机安装或配置该软件。

当有某台主机想加入一个 IP 组播组时,它需要发送一个 IGMP join 信息,该信息衍生为一个 GMRP join 信息。一旦收到 GMRP join 信息,交换机就会将收到该信息的端口加入到适当的组播组。交换机将 GMRP join 信息发送到 VLAN 中所有其它主机上,其中一台主机作为组播源。当组播源发送组播信息时,交换机将组播信息只通过先前加入到该组播组的端口发送出去。此外交换机会周期性发送 GMRP 查询,如果主机想留在组播组中,它就会响应 GMRP 查询,在该情况下,交换机没有任何操作;如果主机不想留在组播组中,它既可以发送一个 leave 信息也可以不响应周期性 GMRP 查询。一旦交换机在计时器(leave all timer)设定期间收到主机 leave 信息或没有收到响应信息,它便从组播组中删除该主机。

3、IGMP 监听( IGMP Snooping

主机发出 IGMP 成员报告消息,这个消息是给路由器的;在 IGMP 成员报告经过交换机时,交换机对这个消息进行监听并记录下来,形成组成员和接口的对应关系;

交换机在收到组播数据报文时,根据组成员和接口的对应关系,仅向具有组成员的接口转发组播报文。

IGMP 监听可以解决二层环境中的组播报文泛滥问题,但要求交换机具有提取第三层信息的功能;其次,要求交换机对所有的组播报文进行监听和解读,这会产生很多的无效工作;此外,组播报文监听和解读工作也会占用大量的 CPU 处理时间。

4、CGMP

思科组管理协议(CGMP)主要用来限定只向与 IP 组播客户机相连的端口转发 IP 组播数据包。这些客户机自动加入和离开接收 IP 组播流量的组,交换机根据请求动态改变其转发行为。CGMP 主要提供以下服务:

l 允许只将 IP 组播数据包转发到连接 IP 组播客户机的那些端口。

l 通过限制不必要的 IP 组播流量,节省了网络带宽。

l 不需要改变终端主机系统。

l 不会产生为交换网络中的每个组播组创建独立 VLAN 的额外开销。

路由器和交换机都必须配置运行CGMP,可是只有路由器才产生CGMP包,交换机上的CGMP的处理只是读取这些包,有两种CGMP包:

l Join包由路由器发出,告诉交换机向多播组中加入一个或多个组员

l Leave包由路由器发出,告诉交换机从多播组中删除一个或多个组员,或删除整个组。

这两种类型的包有相同的格式,包的目的地址总是为保留的MAC地址0100.0cdd.dddd.激活CGMP功能的交换机会侦听这个地址。

这两种包里的基本信息是一个或多个MAC地址对:

l 组目的地址(GDA)

l 单播源地址(USA)

承载CGMP包的帧的源MAC地址就是发起路由器的MAC地址,目的地址就是保留的MAC地址0100.0cdd.dddd,只有路由器才能产生CGMP包,在帧中,这个包由SNAP头封装。SNAP头的OUI部分设为0x00000c,类型为0x2001。

类型

GDA

USA

功能

Join

0

路由器的MAC

确定端口为一多播路由器端口

Join

组的MAC

组员的MAC

确定多播组,并把成员的端口加入到组中

Leave

组的MAC

组员的MAC

从一个组中删除成员的端口

Leave

组的MAC

0

从CAM中删除组

Leave

0

路由器MAC

从CAM中删除所有与路由器端口相关的组和端口

Leave

0

0

从所有交换机上删除所有的组

报文格式如下

clip_image022

l Version总是设为0x1,表示版本1

l Type用于定义这个包的为join(0x0),还是leave(0x1)

l Reserved总是设为0

l Count用于定义这个包中有多少个GDA/USA对。

l GDA为组目的地十,当这个参数为非0地,它定义了一个多播MAC地址,当这个参数为0时,它表示所有可能的组

l USA为单播源地址,当这个参数为非0时,它表示发起路由器的MAC地址或组成员的MAC地址,当其为0时,它表示所有的组成员和发起路由器。

6、组播路由

与单播报文的转发相比,组播报文的转发相对复杂。一方面,组播路由类型与单播路由不同,是点到多点的一棵路由树;另一方面组播报文转发的处理过程也有所不同。

6.1组播路由的分类

组播路由可以分为两大类:信源树(Source Tree)和共享树(Shared Tree)。

信源树是指以组播源作为树根,将组播源到每一个接收者的最短路径结合起来构成的转发树。由于信源树使用的是从组播源到接收者的最短路径,因此也称为最短路径树(shortest path tree,SPT)。对于某个组,网络要为任何一个向该组发送报文的组播源建立一棵树。

共享树以某个路由器作为路由树的树根,该路由器称为汇集点(Rendezvous Point,RP),将 RP 到所有接收者的最短路结合起来构成转发树。使用共享树时,对应某个组,网络中只有一棵树。所有的组播源和接收者都使用这棵树来收发报文,组播源先向树根发送数据报文,之后报文又向下转发到达所有的接收者。

信源树的优点是能构造组播源和接收者之间的最短路径,使端到端的延迟达到最小;但是付出的代价是,在路由器中必须为每个组播源保存路由信息,这样会占用大量的系统资源,路由表的规模也比较大。

共享树的最大优点是路由器中保留的状态数可以很少,缺点是组播源发出的报文要先经过 RP,再到达接收者,经由的路径通常并非最短,而且对 RP 的可靠性和处理能力要求很高。

6.2报文转发过程

单播报文的转发过程中,路由器并不关心组播源地址,只关心报文中的目的地址,通过目的地址决定向哪个接口转发。在组播中,报文是发送给一组接收者的,这些接收者用一个逻辑地址标识。路由器在接收到报文后,必须根据源和目的地址确定出上游(指向组播源)和下游方向,把报文沿着远离组播源的方向进行转发。这个过程称作 RPF(Reverse Path Forwarding,逆向路径转发)。

RPF 执行过程中会用到原有的单播路由表以确定上游和下游的邻接结点。只有当报文是从上游邻接结点对应的接口(称作 RPF 接口)到达时,才向下游转发。RPF 的作用除了可以正确地按照组播路由的配置转发报文外,还能避免由于各种原因造成的环路,环路避免在组播路由中是一个非常重要的问题。RPF 的主体是 RPF 检查,路由器收到组播报文后,先对报文进行 RPF 检查,只有检查通过才转发,否则丢弃。RPF 检查过程如下:

l 路由器在单播路由表中查找组播源或 RP 对应的 RPF 接口(当使用信源树时,查找组播源对应的 RPF 接口,使用共享树时查找 RP 对应的 RPF 接口),某个地址对应的 RPF 接口是指从路由器向该地址发送报文时的出接口;

l 如果组播报文是从 RPF 接口接收下来的,则 RPF 检查通过,报文向下游接口转发;

l 否则,丢弃该报文。

6.3 域内组播路由协议

与单播路由一样,组播路由也分为域内和域间两大类。域内组播路由目前已经讨论的相当成熟,在众多的域内路由协议中,DVMRP(距离矢量组播路由协议)、PIM-DM(密集模式协议无关组播)和PIM-SM(稀疏模式协议无关组播)是目前应用最多的协议。

1、DVMRP(Distance Vector Multicast Routing Protocol)

DVMRP 是第一个在 MBONE 上得到普遍使用的组播路由协议,它在 RIP 协议的基础上扩充了支持组播的功能。DVMRP 协议首先通过发送探测消息来进行邻居发现,之后通过路由交换来进行单播寻径和确定上下游依赖关系。

DVMRP 采用逆向路径组播(RPM)算法进行组播转发。当组播源第一次发送组播报文时,使用截断逆向路径组播(truncated RPM)算法沿着源的组播分发树向下转发组播报文。当叶子路由器不再需要组播数据包时,它朝着组播源发送剪枝消息,对组播分发树进行剪枝,借此除不必要的通信量。上游路由器收到剪枝消息后将收到此消息的接口置为剪枝状态,停止转发数据。剪枝状态关联着超时定时器,当定时器超时时,剪枝状态又重新变为转发状态,组播数据再次沿着这些分支流下。另外,当剪枝区域内出现了组播组成员时,为了减少反应时间,下游不必等待上游剪枝状态超时,而是主动向上游发送嫁接报文,以使剪枝状态变为转发状态。可见,DVMRP 是由数据触发驱动,建立组播路由表,而路由树的建立过程可以概括为“扩散与剪枝”(Broadcast and Prune)。转发特点可以概括为“被动接受,主动退出”。

另外,在多路访问网络中,当有两个或多个的组播路由器时,网络上可能会重复转发包。为了防止这种情况出现,在多路访问网络上,DVMRP 为每个源选择了一个唯一的转发器。

DVMRP有7种包的类型:

l DVMRP Probe

l DVMRP Report

l DVMRP Prune

l DVMRP Graft

l DVMRP Graft Acknowledgement

l DVMRP Ask Neighbors2

l DVMRP Neighbors2

所有包的目的地址都是224.0.0.4,这个地址是保留的“所有DVMRP路由器”。

DVMRP有多个版本,版本1在RFC1075中描述,最新的版本3在一具internet草案9中描述。

DVMRP路由器启动的第一步就是用Probe包去发现邻居,每个Probe包都有如下消息:

l 一组描述发起路由器DVMRP能力的标志,作用是为了与这个协议较早的版本兼容

l 一个生成ID,用于检测邻居状态的变化

l 一组发起路由器收到Probe包的邻居地址。

这些信息中,最基本的是这一组邻居的地址,当一个DVMRP路由器收到一个probe包时 ,它记录下这个发起路由器的地址和接收这个包的网络接口。

发现邻居后,路由器继续发送probe包来进行保持,probe包每隔10s发送一个,如果在35s内没有收到probe包,那么这个邻居就被宣告死亡。

DVMRP采用了RIP的许多变量来对外告知路由表和直连的子网,路由通过DVMRP Report消息从“所有DVMRP路由器”地址224.0.0.4对外告知,路由更新每60s发送一次,这个时间闻到称为路由报告间隔。如果一条路由在140s内没有更新,那么这条路由还将继续保持两个报告间隔(120s)。在这段时间内,这条路由在对外宣告时设置的度量为无限。当保持时间也过期后,这条路由将从路由表中被删除。

度量与每一条路由相关,是跳数的总和。如果设为32跳,意味着跳数无限。不过,路由器可以把度量设成1~63,1~31表示可达源,33~63表示依赖路由。

当多个上游路由器连接到一个多路访问的网络中时,只有指定的前转器才能向下游转发包,节省了网络资源。当两个或多个路由器在一个多路访问的网络中交换路由信息时,它们可以告诉对方谁离多播源更近。那么,这台路由器就成指定前转器。如下图所示。如果这教些路由器到达多播源的距离相等,则共享网络中有较低IP值的路由器成为指定的前转器。

clip_image024

DVMRP消息的IP包头的协议为2,这一协议号与IGMP相同,IGMP是DVMRP开始阶段的遗物,原来是这个协议的一个子集。

DVMRP消息头

每一个DVMRP消息都是以其开始的。

clip_image025

Type是IGMP的类型号,对于所有的DVMRP消息均设为0x13。RFC1075中,这部分定义为4bit版本和4bit类型,版本为0x1,类型为0x3,版本1中的这8bit值为0x13,与版本3相同,使得版本3能向后兼容。

校验和(chechsum)是标准的IP风格的校验和,为一个16bitDVMRP消息补码和的补码

次要版本(minor version)和主要版本(major version)对于所有的DVMRP消息分别设为0xFF和0x03。

编码(code)定义了DVMRPv3消息的消息类型。

Code

DVMRP Message Types

1

Probe

2

Report

3

Ask Neighbors

4

Neighbors

5

Ask Neighbors 2

6

Neighbors 2

7

Prune

8

Graft

9

Graft Ack

DVMRP Probe(探测)消息格式

clip_image027

有4种功能

l 它们让路由器通过发起路由器列出所有检测到的DVMRP路由器,互相知道彼此的位置

l 它们可以让DVMRP路由器互相通告彼此的功能

l 在有多条通路都可以到达下游组员时,它们可以选出指定前转器

l 它们每10s发送一次,具有保持存活的功能,如果35s内没有听到邻居的Probe消息,这个邻居将宣布死亡。

DVMRP Probe消息字段信息如下:

能力(capabilities):占用了包头中保留的8bit,probe消息是DVMRP中唯一一个修改了包头中参数的消息。下表列出了能力标识值和它们代表的意思,如果一个标识设为1,则发起路由器支持相关的能力。

Bit

Flag

Capability

0

L

这个路由器是叶路由器

1

P

这个路由器理解剪除

2

G

这个路由器发送生成ID

3

M

这个路由器能处理mtrace请求

4

S

这个路由器支持DVMRP MIB.

5

N

这个路由器理解 Prune、Graft、Graft Ack 消息中附加掩码

6, 7

U

未使用

阶段ID(generation ID)是一个不会减少的32bit数字,用于检测路由器的重启。当检测到一个生成ID有变化是,任何从这个发起路由器发出的剪除消息均为无效,并被清除。

邻居地址(Neighbor address)列出了发起路由器收到的发出probe消息的邻居的地址。

DVMRP Route Report (路由报告)消息格式

Route Report消息每60秒发送一个,其格式如下图所示。这条消息由一组或多组网络掩码构成,对于每一个掩码,有对应的一个或多个网络地址和相应的度量值。但实际中,这个长度是可变的。

clip_image029

掩码(Mask):网络掩码,网络掩码的第一个八位组总是设为255,所以只有后3个八位组在掩码参数里, 这个参数意味着DVMRP路由不能收敛于掩码小于8的地址。

源网络(source net):是源网络地址,它的前缀长度同前面的掩码相对应,源网络的长度根据前面的掩码长度而变化。

度量(metric):是发起这个报告的路由器和源网络间所有接口的量度之和。这个量度是跳数之和。32表示无限跳数,但量度的取值范围是1~63。路由器通过向上游路由器宣告一条毒性反转路由(其度量值是接收到的度量值加上无穷大32),来向上游路由器通告路由相关性,因而度量值33~63表示下游相关性。

DVMRP Prune(剪除)消息格式

clip_image031

源主机地址(source host address):为发起主机的IP地址

组地址(group address):为将被剪除的组的IP地址

剪除生存周期(prune lifetime):是以s为单位的上游路由器保存剪除状态的时间,这个值或者是这个组中收到的下游剪除消息中的最小值。或者是在没有下游剪除消息的情况下使用的默认的存活时间2小时

源网络掩码(source network mask):将被剪除的多播组源网络的掩码,这个参数是可选的,仅当上游邻居在probe消息中表明它支持网络掩码时才包括这个参数。

DVMRP Graft(嫁接)消息格式

clip_image033

源主机地址(source host address):是发起主机的IP地址

组地址(group address):是需接入的组的IP地址

源网络掩码(source network mask):为将被接入的多播组源网络的掩码,这个参数是可选的,仅当上游邻居在probe消息中表明它支持网络掩码时才包括这个参数。

DVMRP Graft Acknowledgement(嫁接确认)消息格式

clip_image035

除了头中的编码参数不一致外,格式同Graft消息一样。

DVMRP Ask Neighbors2(询问邻居2)消息格式

此消息是两个用于排错的消息中的一个消息,数字2用于与作废的Ask Neighbors消息区别开来,Ask Neighbors2消息是一个发向一个特定目的地的单播。当路由器收到Ask Neighbors2消息时,它应用单播消息Neighbors2向消息发起者应答,这个消息仅是一个DVMRP消息头,其编码设为0x5。

clip_image037

DVMRP Neighbors2(询问邻居2)消息格式

DVMRP发送Neighbors2来响应Ask Neighbors2消息,这条消息是向Ask Neighbors2消息的发送者发送的单播,这个消息列出了路由器的能力和发送者的各逻辑端口的地址,对于列出的每个端口,均规定了这个接口的DVMRP参数,面且所知道的这个接口上的DVMRP邻居也列出了。

clip_image039

各参数定义如下:

能力(capabilities):定义了发起路由器的DVMRP能力,这一参数与prune消息中的能力参数相同。

Bit

Flag

Description

0

Tunnel (隧道)

通过隧道到达邻居

1

Source Route(源路由)

隧道使用IP源地址路由

2

Reserved (保留)

未使用

3

Reserved (保留)

未使用

4

Down (关闭)

操作状态关闭

5

Disabled (禁用)

管理的状态关闭

6

Querier (查询)

对接口查询

7

Leaf (叶)

这个接口没有下游的邻居

本地地址(local address):是这个路由器的上一个接口的地址,如果这个接口被宕掉或禁用,那么它和一个单一的邻居地址相对应,这个邻居地址为0.0.0.0

度量(metric):定义这个接口的DVMRP的度量

阈值(threshold):定义了接口管理性定界阈值

邻居计数(Nbr count):定义了这个接口上列出的邻居的数目。

邻居(neighbor):知道这个接口上的DVMRP邻居路由器的IP地址

标识(flags):用于描述这个接口上的可选参数。

在路由器上可以使用show ip dvmrp route命令查看其路由表:

R5#sh ip dvmrp route

DVMRP Routing Table - 6 entries

10.1.1.0/24 [0/3] uptime 00:47:56, expires 00:02:47

via 10.2.5.2, Serial1/0.705

10.1.2.0/24 [0/3] uptime 00:47:56, expires 00:02:47

via 10.2.5.2, Serial1/0.705

10.2.1.0/24 [0/2] uptime 00:47:56, expires 00:02:47

via 10.2.5.2, Serial1/0.705

10.2.2.0/24 [0/3] uptime 00:47:56, expires 00:02:46

via 10.1.2.1, FastEthernet0/0

10.2.3.0/24 [0/2] uptime 00:47:57, expires 00:02:46

via 10.1.2.1, FastEthernet0/0

10.2.4.0/24 [0/2] uptime 00:47:57, expires 00:02:46

via 10.1.2.1, FastEthernet0/0

使用debug命令进行测试:

R5#debug ip dvmrp detail

DVMRP debugging is on

R5#debug ip dvmrp pruning

DVMRP debugging is on

R5#

*Nov 4 22:58:59.603: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 22:59:10.603: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 22:59:21.603: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 22:59:32.603: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 22:59:43.603: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 22:59:50.327: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 22:59:52.283: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 22:59:53.627: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 22:59:53.647: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 22:59:53.647: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 22:59:53.647: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 22:59:53.667: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 22:59:53.667: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 22:59:53.671: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 22:59:53.671: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 22:59:54.627: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:00:05.627: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:00:16.627: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:00:27.627: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:00:38.627: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:00:49.627: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:00:50.947: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:00:52.343: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:00:54.635: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:00:54.655: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:00:54.655: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:00:54.655: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:00:54.667: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:00:54.667: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:00:54.667: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:00:54.691: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:01:00.647: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:01:11.647: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:01:22.647: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:01:33.647: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:01:44.647: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:01:51.247: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:01:52.379: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:01:54.707: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:01:54.727: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:01:54.727: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:01:54.727: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:01:54.747: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:01:54.751: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:01:54.751: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:01:54.751: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:01:55.707: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:02:06.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:02:17.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:02:28.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:02:39.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:02:50.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:02:52.271: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:02:53.407: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:02:55.711: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:02:55.731: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:02:55.731: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:02:55.731: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:02:55.751: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:02:55.755: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:02:55.755: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:02:55.755: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:03:01.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:03:12.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:03:23.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:03:34.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:03:45.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:03:53.283: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:03:54.431: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:03:56.711: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:03:56.731: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:03:56.731: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:03:56.735: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:03:56.755: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:03:56.755: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:03:56.755: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:03:56.755: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:03:56.759: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:04:07.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:04:18.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:04:29.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:04:40.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:04:51.711: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:04:54.271: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:04:54.479: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:04:57.731: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:04:57.751: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:04:57.751: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:04:57.751: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:04:57.771: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:04:57.775: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:04:57.775: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:04:57.775: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:05:02.731: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:05:13.731: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:05:24.731: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:05:35.731: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:05:46.731: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:05:55.247: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:05:55.563: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:05:57.759: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:05:58.759: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:05:58.779: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:05:58.779: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:05:58.779: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:05:58.799: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:05:58.803: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:05:58.803: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:05:58.803: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:06:08.759: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:06:19.759: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:06:30.759: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:06:41.759: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:06:52.759: DVMRP(0): Aging routes, 0 entries expired

*Nov 4 23:06:56.279: DVMRP(0): Received Report on FastEthernet0/0 from 10.1.2.1

*Nov 4 23:06:56.647: DVMRP(0): Received Report on Serial1/0.705 from 10.2.5.2

*Nov 4 23:06:59.771: DVMRP(0): Building Report for FastEthernet0/0

*Nov 4 23:06:59.791: DVMRP(0): Delay Report on FastEthernet0/0

*Nov 4 23:06:59.791: DVMRP(0): 2 unicast, 0 MBGP, 2 DVMRP routes advertised

*Nov 4 23:06:59.791: DVMRP(0): Building Report for Serial1/0.705

*Nov 4 23:06:59.811: DVMRP(0): Delay Report on Serial1/0.705

*Nov 4 23:06:59.811: DVMRP(0): 2 unicast, 0 MBGP, 3 DVMRP routes advertised

*Nov 4 23:06:59.815: DVMRP(0): Send Report on FastEthernet0/0 to 224.0.0.4

*Nov 4 23:06:59.815: DVMRP(0): Send Report on Serial1/0.705 to 224.0.0.4

*Nov 4 23:07:03.771: DVMRP(0): Aging routes, 0 entries expired

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值