路由器重温——OSPF路由(很重要的协议)-2

OSPF邻接关系建立,采用如下拓扑结构


报文交互过程:

看第7个包:

结合上一章的邻接关系建立流程图,


根据5、6、7、8、9五个Hello报文,理解邻接关系的建立

我的实验先配置的AR1,AR1先启动,AR1一开始的Hello报头填写了本路由器的信息,如RouterID,Area为0,但是指定路由器DR是没有的,到第6个报文将DR指定为自己,这是为什么?按我的理解,配置好AR1后,第一个报文就应该DR字段带上自己的IP。也就是第6个报文算是一个完整的AR1的开始Hello报文,AR1连发两个Hello报文,即6和7,然后是AR2的Hello报文,第8个报文,这个报文的DR值也是空的,然后是AR1发送第9个报文,这时它的活动邻居有了,为2.2.2.2,这应该是AR1接到了AR2的第8个报文,确定了邻居,这一步就应该是流程图中的2-way双向邻居关系建立。所以感觉实际的实验与流程图反过来了,AR2先发送Hello报文,AR1接收到不含自己RouterID的Hello报文(第8个),状态变为Init,然后发送带有自己RouterID和邻居RouterID的Hello报文(第9个),AR2接收到后,没有再发送Hello报文,即没有双向邻居关系建立(2-way)的过程,直接发送第14个报文,即DD报文,在wireshark标记为DB Description,看第14个报文:

这里AR2直接发送DD报文了。

查看后续稳定后的Hello报文:

可以看到DR和BDR都指定了,也就是说,在第9个报文的时候,双方都得到了足够的对方信息,已经在内部经过计算,各自选举出了DR和BDR,没有流程图中那么复杂。实验的流程,就是AR2发一个Hello报文,AR1接收到以后,判断出DR和邻居,发送给AR2,AR2接收到后,内部处理,选举出DR,BDR和邻居,直接进入DD报文阶段。就两个Hello报文搞定。

AR2发送一个DD报文,紧接着AR1也发送一个DD报文(15):

AR1有发送第二个DD报文,这个报文是对AR2第一个DD报文的应答:

AR1直接发送LSU报文

AR2发送请求报文:

这里注意两种描述:一个是Link State ID,在LSA(1)时,是产生此LSA的路由器ID,Advertising Router是产生此LSR报文的路由器ID。在LSA报头中也有也有这两个字段,Advertising Router是不是就是产生此报文的路由器ID???

然后是第19个报文,其是第14个报文的后续DD报文

看其DB Description和DD Sequence字段。

这里还要注意一点,对于Update报文,其实是有两种的,上面的第17个报文,注意其目的地址,是组播地址224.0.0.5,还有的Update报文其目的地之是具体的单播地址

猜测一下,针对组播地址的Update报文是不是只有DR/BDR主动产生呢??

对于LSA(2)网络LSA,如上面的抓包图,Attached Router是连接在同一网络的所有路由器的RouterID,也包括DR的。

然后是LSAcks报文,是对Update报文的确认,注意其目的地址,也是不一样的,有组播有单播。

配置OSPF基本功能

动态路由共同特点,整个协议功能比较复杂,但是最基本的网络配置却比较简单。在配置OSPF的基本功能之前,需配置接口的网络层地址,使各相邻节点网络层可达

OSPF基本功能的配置任务和流程如下:

①创建OSPF进程
②创建OSPF区域
③使能OSPF
④(可选)创建虚连接
⑤(可选)配置对OSPF更新LSA的泛洪限制。

一、创建OSPF进程

OSPF支持多进程,要使用OSPF协议,首先就要创建一个OSPF协议进程。创建OSPF进程的同时要指定路由器的路由器ID,因为一台路由器如果要运行OSPF协议必须存在路由器ID。路由器ID是一个IP地址方式的32位无符号整数,是一台路由器在一个AS中的唯一标识。为保证OSPF运行的稳定性,在进行网络规划时应该确定路由器ID的划分并手工配置。

创建OSPF进程的方法,在系统视图下通过ospf [process-id | router-id router-id | vpn-instancevpn-instance-name]*命令配置。

①procees-id:1~65535的整数,缺省值为1。OSPF路由器支持多进程,进程号是本地概念,不影响与其他路由器之间的报文交换。因此不同的路由器之间,即使进程号不同也可以进行报文交换。

②router-id router-id:指定本地路由器的路由器ID,为点分十进制格式。可以单独用router  id router-id系统视图命令创建

缺省情况下,在没有手动配置路由器ID情况下,系统会优先从已配置的Loopback接口IP地址中选择最大的IP地址作为设备的路由器ID,没有配置Loopback接口,则在其他物理接口IP地址中选取最大的IP作为路由器ID。手动配置路由器ID时,必须保证同一AS中任意两台路由器的路由器ID不相同。通常做法是将路由器ID配置为与该设备某个接口的IP地址一致。要注意的是,在每台OSPF路由器中要为每个OSPF进程配置一个全网唯一的路由器ID(但同一路由器的不同进程中的路由器ID可以相同)——(那就说明,同一路由器的不同进程中路由器ID也可以不同,否则会导致邻居不能正常建立、路由信息不正确的问题。

③vpn-instancevpn-instance-name:指定所启动的OSPF进程所属的VPN实例的名称。如果不指定VPN实例,所启动的OSPF进程属于公网实例

用undo ospf process-id [flush-waiting-timer time]命令关闭指定的OSPF进程,并可通过可选参数flush-waiting-timer time设定让其他端设备删除原来保留的该设备上的LSA的时间,取值范围1~40的整数秒。

在关闭OSPF进程时选择了flush-waiting-timer time时,设备在设定的时间内再次产生自己的LSA,并将其age字段置为3600(让此LSA立即老化)。其他设备收到age字段为3600的LSA后,会立刻删除与本设备相关的LSA。否则,其他设备会一直保留这个OSPF进程中早先产生的已无效的LSA,直到这些LSA超时。

二、创建OSPF区域

OSPF协议通过将自治系统划分成不同的区域(Area)来解决规模过大问题区域是从逻辑上将设备划分为不同的组每个组用区域号(Area ID)来标识。OSPF协议将自治系统划分成不同的区域后,同一区域内的多台设备的功能(如定时器、过滤、聚合等)就可以以区域为单位进行统一规划和配置,从而减少LSDB的规模,提高网络性能。要注意:OSPF区域的边界是设备而不是链路,即互联设备的整个链路(包括两端的接口)只能属于一个区域每个运行OSPF的接口必须指明属于哪一个区域。(最后这一句需要好好思考

区域的创建是在对应的OSPF视图下进行的,使用area area-id命令配置。参数area-id用来指定区域的标识,可以采用十进制整数或IPv4地址形式输入,但显示时使用IPv4地址形式。0固定为骨干区域的ID,而且在一个多区域的OSPF网络中必须至少有一个区域ID0的骨干区域(单区域OSPF网络中的区域ID可随意)骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。缺省系统未创建OSPF区域,可用undo area area-id指令删除指定区域。

三、使能OSPF

创建OSPF进程后,还需要配置区域所包含的网段,就是network命令进行网络宣告该处的网段是指运行OSPF协议接口的IP地址所在的网段,一个网段只能属于一个区域,OSPF中网络宣告可以是子网和超网宣告,而不一定需要采用自然网段进行宣告。

OSPF路由器会对接收到的Hello报文做网络掩码检查,当接收到的Hello报文中携带的网络掩码和本设备上宣告的网络掩码不一致时,则丢弃这个Hello报文,即不能建立邻居关系。

OSPF的使能既可以在具体区域下一次性对一个或多个接口进行配置,也可在具体的OSPF接口下对一个接口进行配置。如果用两种配置方式同时配置,则对应OSPF接口下的配置优先级高于区域中为该接口的配置。

1、在OSPF区域视图下配置

在OSPF区域下是通过network ip-address wildcard-mask命令对指定网段范围的所有OSPF接口一次性使能OSPF,并指定所属的OSPF区域。

①ip-address:指定要使能OSPF网段IP地址。接口的IP地址掩码长度必须>=本命令宣告网段的掩码长度。

②wildcard-mask:IP地址的反掩码,相当于将IP地址的子网掩码反转(0变1,1变0)。它是用来与参数一起确定要使能OSPF的网段范围的,其中,“1”表示忽略IP地址中对应的位,“0”表示必须匹配的位,这样就可以在一个区域内配置一个或多个接口,对应接口的主IP地址必须在命令指定的网段范围之内。

对于Loopback接口,缺省情况下OSPF32位主机路由方式对外发布其IP地址,与接口上配置的掩码长度无关。但是如果要发布Loopback接口的网段路由,需要在接口下执行ospf network-type {broadcast | nbma}命令配置网络类型为广播或NBMA。(这一段需要好好理解

在同一个实例的不同进程之间,或者同一个进程的不同区域之间,不能同时配置具有包含关系的两个网段假设一个ABR有两个接口同在Area1区域,分别连接的是192.168.1.0/24192.168.3.0/24网段,而另一个接口属于Area0区域,连接的网段为192.168.4.0/24,这时在两个区域中宣告网段时均不能采用192.168.0.0/16,因为这样两个区域中宣告的网段是重叠的,属于包含关系。(ABR同时属于骨干区域0和其他一个或多个普通区域

在接口下通过ospf enable [process-id] area area-id命令在具体接口上使能OSPF,则优先级高于本命令的全局使能配置。

缺省情况下,接口不属于任何区域,可用undo network address wildcard-mask命令从该区域中删除运行OSPF协议的对应接口。

指定接口主IP地址位于网段192.168.1.0/24的接口使能OSPF,并加入Area2.

<huawei>system-view
[hauwei]ospf 100
[huawei-ospf-100]area 2
[huawei-ospf-100-area-0.0.0.2]network 192.168.1.0 0.0.0.255

2、在接口视图下配置

在接口视图下使能ospf enable[process-id] area area-id命令使能对应接口的OSPF功能,指定所启动的OSPF进程和所加入的OSPF区域。

在创建OSPF进程和配置本命令时要注意:

①如果先执行本命令配置接口使能OSPF,然后再创建对应的OSPF进程,虽然也可进行,但是不会自动创建对应的OSPF进程。且在创建进程的时候,进程所属的VPN必须和本命令的接口保持一致。

②如果先创建进程,然后执行本命令配置接口使能OSPF,则需要检查该接口使能的进程与已经存在的进程VPN是否一致,如果不一致,是不允许配置的。

③如果没有创建进程,属于不同VPN实例的接口不能被使能到相同的OSPF进程。

缺省情况下,接口没有使能OSPF

使能接口GE1/0/0的OSPF功能,并把它加入到OSPF1进程的骨干区域0中。

<huawei>syste-view
[hauwei]interface gigabitethernet 1/0/0
[hauwei-GigabitEthernet1/0/0]ospf enable 1 area 0

四、创建虚连接

OSPF规定,在划分OSPF区域后,非骨干区域之间的OSPF路由更新是通过骨干区域交换完成的,所以要求所有非骨干区域必须与骨干区域保持连通,并且骨干区域之间也要保持连通。实际有些区域不能与骨干区域进行直接连接,而有时骨干区域又是分离的,这时就需要通过配置OSPF“虚连接”来解决。

虚连接支持验证,以防非法建立虚连接。具体配置是在中间穿越虚连接的传输区域两端分别连接骨干区域和普通区域或分离的骨干区域的ABR对应区域视图下通过vlink-peer router-id [smart-discover | hello hello-interval | retransmit retransmit-interval | trans-delay trans-delay-interval | dead dead-interval | [simple[plain plain-text | [cipher] cipher-text] | {md5 | hmac-md5 | hmac-sha256} [key-id {plain plain-text | [cipher] cipher-text}] | authentication-null   |keychain keychain-name]]*命令进行配置。参数说明:

1)router-id:指定建立虚连接的对端设备的路由器ID
2)smart-discover:设置主动发送Hello报文。
3)hellohello-interval:指定接口发送Hello报文的时间间隔。该值必须与建立虚连接路由器上的hello-interval值相等。
4)retransmit retransmit-interval:指定接口在发送LSU报文后,多长时间没有收到LSAck应答报文即重传原来发送的LSA报文,缺省5s。
5)trans-delay trans-delay-interval:指定接口延迟发送LSA(为避免频繁发送LSA而造成设备CPU负担过重)的时间间隔,缺省1s。
6)dead dead-interval:指定在多长时间没收到对方发来的Hello报文后即宣告对方路由器失效,缺省40s。该值必须与对端设备的该参数值相等,并至少为hello-interval参数值的4倍。
7)simple:设置采用简单验证模式。
8)plain plain-text:指定采用明文密码类型。此时只能键入明文密码,查看配置文件时也是以明文方式显示密码的。
9)cipher cipher-text:指定采用密文密码类型。可以键入明文或密文密码,查看配置文件时以密文方式显示。Simple验证模式缺省是cipher密码类型。
10)md5:设置采用MD5验证模式。缺省md5验证模式缺省是cipher密码类型
11)hmac-md5:设置采用HMAC-MD5验证模式缺省是cipher密码类型
12)hmac-sha256:设置采用HMAC-SHA256验证模式缺省是cipher密码类型
13)key-id:指定接口密文验证的验证字标识符,取值范围为1~255整数,必须与对端的验证字标识符一致。
14)authentication-null:设置采用无验证模式
15)keychainkeychain-name:设置采用Keychain验证模式,并指定所使用的Keychain的名称。采用此验证模式前,需首先通过keychain keychain-name命令创建一个keychain,并分别通过key-id key-idkey-string {[plain] plain-text | [cipher] cipher-text}algorithm {hmac-md5| hmac-sha-256 | hmac-sha1-12 | hmac-sha1-20 | md5 | sha-1 | sha-256 | simple}命令配置该keychain采用的key-id、密码及其验证算法,否则会造成OSPF验证始终为失败状态。

Area2区域连接骨干区域和另一个普通区域的两端ABR上创建虚连接,对端路由器ID为1.1.1.1。

<huanwei>system-view
[huawei]ospf 100
[huawei-ospf-100]area 2
[hauwei-ospf-100-area-0.0.0.2]vlink-peer1.1.1.1

五、配置对OSPF更新LSA的泛洪限制

当邻居数量或者需要泛洪的LSA报文数量较多时,邻居路由器会在短时间内收到大量LSU更新报文。如不能及时处理,可能因处理更新报文而丢弃Hello报文,造成邻居断开。重建邻居时,交互的报文更大,情况进一步恶化。此时可通过对OSPF更新LSA的泛洪进行限制。

对OSPF更新LSA的泛洪限制是在对应的OSPF进程下通过 flooding-control [number transmit-number | timer-interval transmit-interval]*命令进行配置。通过本命令可设置本地设备每次泛洪更新LSA的数量和泛洪更新LSA的时间间隔。配置本命令后,对OSPF更新LSA泛洪的限制功能将立刻生效。

1)number transmit-number:设置每次泛洪更新LSA的数量,取值范围为1~1000的整数,缺省50。

2)timer-interval transmit-interval:设置每次泛洪更新LSA的时间间隔,取值范围30~100000ms,缺省30。

六OSPF基本功能管理

①display ospf[process-id] peer:查看指定进程或所有进程下的OSPF邻居信息。
②display ospf[process-id] interface:查看指定进程或所有进程下的OSPF接口信息。
③display ospf[process-id] routing:查看指定进程或所有进程下的OSPF路由表信息。
④display ospf[process-id] lsdb:查看指定进程或所有进程下的OSPF LSDB信息。

七、OSPF基本功能配置示例

如上图,所有路由器都运行OSPF,并将整个自治系统划分为3个区域,其中RouterARouterB作为ABR来转发区域之间的路由。配置完后,每台路由器都应学到AS内到所有网段的路由。

1、基本配置思路分析

OSPF基本功能配置很简单,先创建OSPF进程,创建所需区域,在路由器或者对应接口上使能OSPF。在此之前还需要配置好各路由器接口IP地址。

模拟实验:

①配置各路由器接口IP地址。

②配置OSPF基本功能。本例中都是单进程,所以在创建OSPF进程时,进程号可以不写,都采用缺省的1号进程。

AR1和AR2上的配置:AR1和AR2属于ABR,所以要分别创建所连接的两个区域,并在每个区域中宣告区域中接口所连接的网段

在配置OSPF基本功能时,最关键的一点就是各OSPF接口的网段通告。在OSPF网段通告时要特别注意,在不同区域、不同进程中所通告的网段路由不能有包含、交叉关系,当然更不能是完全重叠关系(这种情况主要发生在连接多个区域的ABR上)。如本例中RouterA上的GE1/0/0接口所连接的网段是192.168.0.0/24,GE2/0/0接口连接的网段是192.168.1.0/24,如果它们是在同一区域中,则完全可以用192.168.0.0/16的路由进行通告,但因为现在它们是在不同区域中,所以两个区域中都不能这样宣告,只能分别宣告,以避免重叠。同时,如果两个接口位于不同OSPF进程,也一样不能宣告成192.169.0.0/16路由的,因为这样两个进程所宣告的网段就是重叠的了。

通过以上配置就完成了整个网络的OSPF基本路由配置。通过displayospf peer查看各自的OSPF邻居。

AR1与AR2和AR3建立了完全(Full)的邻接关系。

使用display ospf routing查看各自的OSPF路由信息。


这里对type字段有些不理解,前面学过路由类型是四种,区域内(intra-area)路由、区域间(inter-area)路由、第一类外部(Type1 External)路由、第二类外部(Type2 External)路由,这里的transit和stub是什么类型???下面是查找的一篇文章:

【OSPF】链路类型 LinkType

 
OSPF除了定义网络类型(Network Type),还定义了链路类型(Link Type),这是两个不同的概念。链路类型主要用于描述OSPF路由器的接口或邻居。在1类LSA中,可以看到产生该LSA的路由器所连接的所有链路(Link)、链路的类型以及相关的内容。通过每个1类LSA中描述的各种链路(Link),OSPF得以描绘出网络的拓扑和子网信息。
 
  LS age: 1355
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 1.1.1.1
  Advertising Router: 1.1.1.1
  LS Seq Number: 8000001F
  Checksum: 0xFF44
  Length: 48
  Area Border Router
  AS Boundary Router
  Number of Links: 2
 
    Link connected to: another Router (point-to-point)
     (Link ID) Neighboring Router ID: 2.2.2.2
     (Link Data) Router Interface address: 10.1.12.1
     Number of TOS metrics: 0
      TOS 0 Metrics: 64
 
   Link connected to: a Stub Network
     (Link ID) Network/subnet number: 10.1.12.0
     (Link Data) Network Mask: 255.255.255.0
     Number of TOS metrics: 0
      TOS 0 Metrics: 64
 
1类LSA中,用于描述Link的LINKID、Link Date的取值根据OSPF link类型不同而不同:
 
【OSPF】链路类型 <wbr>LinkType
下面分别来看一看这些个Link:
 
1.Stub Network Link
 【OSPF】链路类型 <wbr>LinkType
如果路由器的一个接口被激活OSPF,并且该接口上没有任何OSPF邻居,则该接口使用Stub Network Link来描述。一个接口被通告进OSPF,无论其二层封装是什么(以太网、PPP、HDLC等),只要在该接口上没有OSPF邻居,那么就是Stub Network Link。例如上图所示,R2产生的1类LSA中用于描述接口FE0/0的Link数据就是:
 
    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 10.1.23.0
     (Link Data) Network Mask: 255.255.255.0
     Number of TOS metrics: 0
      TOS 0 Metrics: 1
 
Loopback接口永远被定义为Stub Network Link,默认使用32位掩码表示,这就是为什么在OSPF实验过程中,Loopback接口IP地址无论配置什么掩码,路由学习过来都是/32的主机路由。不管将Loopback接口改为哪种OSPF网络类型(Network Type),始终改变不了它的OSPF链路类型(Link Type),但可以改变它在LSA中的掩码长度。
 
 
2.Transit Link
 
拥有两台或两台以上OSPF路由器的链路,简单理解为有邻居的OSPF接口,使用Transit Link来描述。但网络类型为Point-To-Point和点到多点(Point-To-Multipoint)的接口除外,因为它们被定义为Point-To-Point Link。
 【OSPF】链路类型 <wbr>LinkType
 
例如上图所示,R1的FE0/0接口激活了OSPF并且有一个OSPF邻居R2,因此R1在LSA1中描述这个接口时,使用Transit Link来描述,如下:
 
    Link connected to: a Transit Network
     (Link ID) Designated Router address: 10.1.23.2
     (Link Data) Router Interface address: 10.1.23.1
     Number of TOS metrics: 0
      TOS 0 Metrics: 1
 
 
3.Point-To-Point Link
 
OSPF网络类型为Point-To-Point的接口,使用“Point-To-Point Link”来描述,但Loopback接口除外;
网络类型为点到多点(Point-To-Multipoint)的接口,同样使用为Point-To-Point Link这种链路类型来描述。
【OSPF】链路类型 <wbr>LinkType
例如上图,R1的S0/0口的OSPF网络类型是P2P,因此R1产生的LSA1中用于描述该接口的链路类型就是P2P LINK,输出如下:
 
    Link connected to: another Router (point-to-point)
     (Link ID) Neighboring Router ID: 1.1.1.1
     (Link Data) Router Interface address: 10.1.12.2
     Number of TOS metrics: 0
      TOS 0 Metrics: 64
 
    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 10.1.12.0
     (Link Data) Network Mask: 255.255.255.0
     Number of TOS metrics: 0
      TOS 0 Metrics: 64
 
值得注意的是,对于P2P的网络类型接口,OSPF使用了两个LINK来描述,一个是P2P Link用于描述链路对端连接的路由器ID及自己本地的接口IP地址,另外还使用了一个Sub Network Link来描述该条链路的子网。
 
综上所述,OSPF的集中链路类型中,P2P以及Transit Link是用于描述网络拓扑结构的,而Stub Network是用于描述子网号的。
 
4.Virtual link
 
这种链路类型用于描述OSPF虚链路(Virtual Link)。
 【OSPF】链路类型 <wbr>LinkType
在上图中R1、R3建立了一条虚链路,则R1产生的LSA1中描述该虚链路的数据如下:
 
    Link connected to: a Virtual Link
     (Link ID) Neighboring Router ID: 3.3.3.3                #虚链路对端设备的RouterID
     (Link Data) Router Interface address: 10.1.12.1       #本地接口IP地址
     Number of TOS metrics: 0
      TOS 0 Metrics: 128
 
上面输出中的Metric: 128,指的是从本地到虚链路对端,沿途所有出接口的cost累加。例如R1产生的描述虚链路的Link数据中包含的metric值就是如图所示绿色标记的接口cost累加。

 

AR1建立了到达所有非直连网段(直连网段的路由不会在OSPF路由表中出现,仅会出现在IP路由表中)的OSPF路由。(这里有点问题,192.168.0.0192.168.1.0不就是直连网络吗??)

通过display ospf lsdb查看各路由器的LSDB:

这条命令中Type是LSA的类型,

LSA的种类:
在这里插入图片描述

八、OSPF虚连接配置示例

如上图拓扑,Area2没有与骨干区域直接相连。Area1被用作传输区域(Transit Area来连接Area2和Area0.为了使Area2与骨干区域连通,需要在RouterA和RouterB之间配置一条虚连接(Virtual Link)。

1、基本配置思路分析

OSPF虚连接需要在配置OSPF基本功能的基础上进行配置,所以首先需要配置各路由器的OSPF基本功能,使各路由器通过OSPF协议三层互通,然后在RouterA和RouterB上分别配置虚连接,使非骨干区域与骨干区域连通。

①配置各路由器接口的IP。

②配置OSPF基本功能。

AR1属于ABR,所以要分别创建所连接的两个区域,并在每个区域中宣告区域中接口所连接的网段。

通过display ospf routing视图命令查看RouterA的OSPF路由表。由于Area2没有与Aera0直接相连,所以AR1的路由表中没有Area2中的路由

配置虚连接,需要在AR1AR2上同时配置

发现AR1已通过OSPF学习到了Area2中的路由。证明虚连接配置成功。

到这里,发现对路由器类型、路由类型、链路类型、LSA类型等概念了解的还不够深入,需要查找资料深入学习。

 

 

 

 

 

 

 

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值