计算机网络6——应用层5 DHCP/SNMP

一、动态主机配置协议 DHCP

为了把协议软件做成通用的和便于移植的,协议软件的编写者不会把所有的细节都固定在源代码中。相反,他们把协议软件参数化。这就使得在很多台计算机上有可能使用同一个经过编译的二进制代码。一台计算机和另一台计算机的许多区别,都可以通过一些不同的参数来体现。在协议软件运行之前,必须给每一个参数赋值。

在协议软件中给这些参数赋值的动作叫作协议配置。一个协议软件在使用之前必须是已正确配置的。具体的配置信息有哪些则取决于协议栈。例如,连接到互联网的计算机的协议软件需要配置的项目包括:

  • IP 地址;
  • 子网掩码:
  • 默认路由器的 IP 地址;
  • 域名服务器的 IP地址。

为了省去给计算机配置IP地址的麻烦,我们能否在计算机的生产过程中,事先给每一台计算机配置好一个唯一的I地址呢(如同每一个以太网适配器拥有一个唯一的MAC 地址)?这显然是不行的。这是因为I地址不仅包括了主机号,而且还包括了网络号。一个IP地址指出了一台计算机连接在哪一个网络上。当计算机还在生产时,无法知道它在出厂后将被连接到哪一个网络上。因此,需要连接到互联网的计算机,必须对IP地址等项目进行协议配置。

用人工进行协议配置很不方便,而且容易出错。因此,应当采用自动协议配置的方法。

互联网现在广泛使用的是动态主机配置协议DHCP(Dyamic Host ConfigurationProtocol),它提供了一种机制,称为即插即用连网(plug-and-play networking)。这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。DHCP最新的 RFC 文档还是互联网草案标准IRFC 2131-21321。

DHCP对运行客户软件和服务器软件的计算机都适用。当运行客户软件的计算机移至个新的网络时,就可使用 DHCP获取其配置信息而不需要手工干预。DHCP给运行服务器软件而位置固定的计算机指派一个永久地址,而当这计算机重新启动时其地址不改变。

DHCP使用客户服务器方式。需要地址的主机在启动时就向DHCP服务器广播发送发现报文(DHCPDISCOVER)(将目的IP地址置为全1,即 255.255.255.255),这时该主机就成为DHCP客户。发送广播报文是因为现在还不知道DHCP服务器在什么地方,因此要发现(DISCOVER)DHCP服务器的IP地址。这台主机目前还没有自己的IP地址,因此它将IP数据报的源IP地址设为全0。这样,在本地网络上的所有主机都能够收到这个广播报文但只有DHCP服务器才对此广播报文进行回答。DHCP服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的IP地址池(addresspool)中取一个地址分配给该计算机。DHCP服务器的回答报文叫作提供报文(DHCPOFFER)表示“提供”了卫地址等配置信息。

但是我们并不愿意在每一个网络上都设置一个DHCP服务器,因为这样会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中继代理(relay agent)(通常是一台路由器,如下图所示),它配置了 DHCP 服务器的IP地址信息。当 DHCP 中继代理收到主机 A 以广播形式发送的发现报文后,就以单播方式向DHCP服务器转发此报文,并等待其回答。收到DHCP服务器回答的提供报文后,DHCP中继代理再把此提供报文发回给主机 A。需要注意的是,下图只是个示意图。实际上,DHCP报文只是 UDP用户数据报的数据,它还要加上 UDP首部、IP数据报首部,以及以太网的 MAC 帧的首部和尾部后,才能在链路上传送。
在这里插入图片描述
DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP协议称这段时间为租用期(lease period),但并没有具体规定租用期应取为多长或至少为多长,这个数值应由DHCP服务器自己决定。例如一个校园网的DHCP服务器可将租用期设定为1小时。DHCP服务器在给DHCP发送的提供报文的选项中给出租用期的数值。按照RFC2132的规定,租用期用4字节的二进制数字表示,单位是秒。因此可供选择的租用期范围从1秒到136年。DHCP客户也可在自己发送的报文中(例如,发现报文)提出对租用期的要求。

DHCP的详细工作过程如下图所示。DHCP客户使用的UDP端口是68,而DHCP服务器使用的 UDP 端口是 67。这两个 UDP 端口都是熟知端口。
在这里插入图片描述
下面按照上图中的注释编号(1至9)进行简单的解释。

  1. DHCP服务器被动打开UDP端口67,等待客户端发来的报文
  2. DHCP客户从UDP端口68发送 DHCP 发现报文
  3. 凡收到 DHCP发现报文的DHCP服务器都发出DHCP提供报文,因此DHCP客户可能收到多个 DHCP 提供报文。
  4. DHCP客户从几个DHCP服务器中选择其中的一个,并向所选择的DHCP服务器发送 DHCP请求报文。
  5. 被选择的 DHCP服务器发送确认报文DHCPACK。从这时起,DHCP客户就可以使用这个IP地址了。这种状态叫作已绑定状态,因为在DHCP客户端的IP地址和MAC地址已经完成绑定,并且可以开始使用得到的临时IP地址了。
    DHCP客户现在要根据服务器提供的租用期T设置两个计时器T和T,它们的超时时间分别是0.5T和0.875T。当超时时间到了就要请求更新租用期。
  6. 租用期过了一半(T时间到),DHCP客户发送请求报文DHCPREQUEST要求更新租用期。
  7. DHCP 服务器若同意,则发回确认报文DHCPACK。DHCP客户得到了新的租用期,重新设置计时器。
  8. DHCP服务器若不同意,则发回否认报文DHCPNACK。这时DHCP客户必须立即停止使用原来的IP地址,而必须重新申请IP地址(回到步骤2)。
    若DHCP服务器不响应步骤6的请求报文 DHCPREOUEST,则在租用期过了87.5%时(T,时间到),DHCP客户必须重新发送请求报文DHCPREOUEST(重复步骤6),然后又继续后面的步骤。
  9. DHCP客户可以随时提前终止服务器所提供的租用期,这时只需向DHCP服务器发
    送释放报文 DHCPRELEASE 即可

DHCP很适合于经常移动位置的计算机。当计算机使用Windows操作系统时,点击“控制面板”的“网络”图标就可以找到某个连接中的“网络”下面的菜单,找到 TCP/IE协议后点击其“属性”按钮,若选择“自动获得IP 地址”和“自动获得 DNS 服务器地址”选项,就表示是使用DHCP协议。

二、简单网络管理协议 SNMP

1、网络管理的基本概念

虽然网络管理还没有精确定义,但它的内容可归纳为:

网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行
性能、服务质量等。网络管理常简称为网管。

我们可以看到,网络管理并不是指对网络进行行政上的管理。网络是一个非常复杂的分布式系统。这是因为网络上有很多不同厂家生产的、运行着多种协议的节点(主要是路由器),而这些节点还在相互通信和交换信息。网络的状态总是不断地变化着。可见,我们必须使用一种机制来读取这些节点上的状态信息,有时还要把一些新的状态信息写入到这些节点上。

下面简单介绍网络管理模型中的主要构件

管理站又称为管理器,是整个网络管理系统的核心,它通常是个有着良好图形界面的高性能的工作站,并由网络管理员直接操作和控制。所有向被管设备发送的命令都是从管理站发出的。管理站的所在部门也常称为网络运行中心NOC(NetworkOperations Center)。

管理站中的关键构件是管理程序(如下图中有字母M的椭圆形图标所示)。管理程序在运行时就成为管理进程。管理站(硬件)或管理程序(软件)都可称为管理者(manager)或管理器,所以这里的 manager 不是指人而是指机器或软件。网络管理员(administrator)才是指人大型网络往往实行多级管理,因而有多个管理者,而一个管理者一般只管理本地网络的设备。
在这里插入图片描述
在被管网络中有很多的被管设备(包括设备中的软件)。被管设备可以是主机、路由器打印机、集线器、网桥或调制解调器等。在每一个被管设备中可能有许多被管对象(Managed Obiect)。被管对象可以是被管设备中的某个硬件(例如,一块网络接口卡),也可以是某些硬件或软件(例如,路由选择协议)的配置参数的集合。被管设备有时可称为网络元素或简称为网元。在被管设备中也会有一些不能被管的对象(在下面的6.7.2节将会讲到对象命名树,所谓不能被管的对象就是不在对象命名树上的对象)。

在每一个被管设备中都要运行一个程序以便和管理站中的管理程序进行通信。这些运行着的程序叫作网络管理代理程序,或简称为代理(agent)(如上图中有字母A的几个圆形图标示)。代理程序在管理程序的命令和控制下,在被管设备上采取本地的行动。

在上图中还有一个重要构件就是网络管理协议,简称为网管协议。后面还要讨论它的作用。
简单网络管理协议 SNMP(Simple Network Management Protocol)中的管理程序和代理程序按客户服务器方式工作。

管理程序运行SNMP客户程序,而代理程序运行SNMP服务器程序。在被管对象上运行的SNMP服务器程序不停地监听来自管理站的SNMP客户程序的请求(或命令)。一旦发现了,就立即返回管理站所需的信息,或执行某个动作(例如,把某个参数的设置进行更新)。在网管系统中往往是一个(或少数几个)客户程序与很多的服务器程序进行交互。

关于网络管理有一个基本原理,这就是:

若要管理某个对象,就必然会给该对象添加一些软件或硬件,但这种“添加”对原有对象的影响必须尽量小些。

SNMP正是按照这样的基本原理来设计的。

SNMP发布于1988年。OSI虽然在这之前就已制定出许多的网络管理标准,但当时(到现在也很少)却没有符合OSL网管标准的产品。SNMP最重要的指导思想就是要尽可能简单。SNMP的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。在网络正常工作时,SNMP可实现统计、配置和测试等功能。当网络出故障时,可实现各种差错检测和恢复功能。经过近二十年的使用,SNMP不断修订完善,较新的版本是SNMP3,而前两个版本分别是SNMPV2和SNMPV1。但一般可简称为SNMP。SNMPv3 最大的改进就是安全特性。也就是说,只有被授权的人员才有资格执行网络管理的功能(如关闭某一条链路)和读取有关网络管理的信息(如读取一个配置文件的内容)。然而SNMP协议已相当庞大,一点也不“简单”,整个标准共有八个 RFC 文档[RFC 3411-3418,STD62]。因此这里只能给出一些最基本的概念。

若网络元素使用的不是SNMP协议而是另一种网络管理协议,那么SNMP协议就无法控制该网络元素。这时可使用委托代理(proxyagent)。委托代理能提供如协议转换和过滤操作等功能对被管对象进行管理。

SNMP 的网络管理由三个部分组成,即SNMP本身、管理信息结构SMI(StructureofManagement Information)和管理信息库MB(Management Information Base)。下面简述这三部分的作用。

SNMP定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象
(变量)名及其状态(值)。SNMP负责读取和改变这些数值。

SMI定义了命名对象和定义对象类型(包括范围和长度)的通用规则,以及把对象和对象的值进行编码的规则。这样做是为了确保网络管理数据的语法和语义无二义性。但从SMI的名称并不能看出它的功能。请注意,SMI并不定义一个实体应管理的对象数目,也不定义被管对象名以及对象名及其值之间的关联。

MIB在被管理的实体中创建了命名对象,并规定了其类型。

为了更好地理解上述的几个组成部分,可以把它们和程序设计进行一下对比。

我们在编程时要使用某种语言,而这种语言就是用来定义编程的规则。例如,一个变量名必须从字母开始而后面接着是字母数字。在网络管理中,这些规则由SMI来定义。

在程序设计中必须对变量进行说明。例如,intcounter,表示变量counter是整数类型。
MIB 在网络管理中就做这样的事情。MIB给每个对象命名,并定义对象的类型。

在编程中的说明语句之后,程序需要写出一些语句用来存储变量的值,并在需要时改变这些变量的值。协议SNMP在网络管理中完成这件任务。SNMP按照SMI定义的规则,存储、改变和解释这些已由 MIB 说明的对象的值。

总之,SMI建立规则,MIB对变量进行说明,而SNMP完成网管的动作。

下面就一一介绍上述的三个构件。

2、管理信息结构SMI

管理信息结构SMI是SNMP的重要组成部分。根据6.7.1节所讲,SMI的功能应当有三个,即规定:

  • 被管对象应怎样命名:
  • 用来存储被管对象的数据类型有哪些
  • 在网络上传送的管理数据应如何编码

1)被管对象的命名

SMI规定,所有的被管对象都必须处在对象命名树(object naming tree)上。下图给出了对象命名树的一部分。对象命名树的根没有名字,它的下面有三个顶级对象,都是世界上著名的标准制定单位,即ITU-T(过去叫作CCITT)和ISO,以及这两个组织的联合体,它们的标号分别是0到2。图中的对象名习惯上用英文小写表示。在ISO的下面的一个标号为3的节点是ISO认同的组织成员org。在其下面有一个美国国防部 dod(Department ofDefense)的子树(标号为6),再下面就是intermet(标号为1)。在只讨论 intermet 中的对象时,可只画出 internet 以下的子树,并在 intermet 节点旁边写上对象标识符 1.3.6.1 即可。
在这里插入图片描述
在 intermet 节点下面的标号为2的节点是 mgmt(管理)。再下面只有一个节点,即管理信息库 mib-2,其对象标识符为1.3.6.1.2.1。在mib-2下面包含了所有被 SNMP 管理的对象(见下面6.7.3节的讨论)。

2)被管对象的数据类型

SMI使用基本的抽象语法记法1(即ISO 制定的 ASN.1)来定义数据类型,但又增加了一些新的定义。因此 SMI既是 ASN,1的子集,又是ASN.1的超集。ASN1的记法很严格它使得数据的含义不存在任何可能的二义性。例如,使用ASN.1 时不能简单地说“一个具有整数值的变量”,而必须说明该变量的准确格式和整数取值的范围。当网络中的计算机对数据项并不都使用相同的表示时,采用这种精确的记法就尤其重要。

我们知道,任何数据都具有两种重要的属性,即值(value)与类型(type)。这里“值”是某个值集合中的一个元素,而“类型”则是值集合的名字。如果给定一种类型,则这种类型的一个值就是该类型的一个具体实例。

SMI把数据类型分为两大类:简单类型和结构化类型。简单类型是最基本的、直接使用ASN.1定义的类型。下表给出了最主要的几种简单类型。
在这里插入图片描述

3)编码方法

SMI使用 ASN.1制定的基本编码规则 BER(Basic Encoding Rule)进行数据的编码。BER指明了每种数据的类型和值。在发送端用BER编码,可把用ASN.1所表述的报文转换成唯-的比特序列。在接收端用BER进行解码,就可得到该比特序列所表示的ASN.1报文。

初看起来,或许用两个字段就能表示类型和值。但由于表示值可能需要多个字节,因此还需要一个指出“要用多少字节表示值”的长度字段。因此 ASN.1把所有的数据元素都表示为TL-V 三个字段组成的序列(见下图)。T 字段(Tag)定义数据的类型,L 字段(Length)定义 V字段的长度,而 V字段(Value)定义数据的值。
在这里插入图片描述

  1. T字段又叫作标记字段,占1字节。T字段比较复杂,因为它要定义的数据类型较多。T字段又再分为以下三个子字段:
  • 类别(2位)共四种:通用类(00),即ASN.1定义的类型:应用类(01),即SMI定义的类型;上下文类(10),即上下文所定义的类型;专用类(11),保为特定厂商定义的类型。
  • 格式(1位)共两种,指出数据类型的种类:简单数据类型(0),结构化数据类型(1)。
  • 编号(5位)用来标志不同的数据类型。编号的范围一般为0~30。当编号大于30时,T字段就要扩展为多个字节(这种情况很少用到,可参考ITU-TX.209,这里从略)。

在这里插入图片描述

  • L字段又叫作长度字段(单字节或多字节)。当L字段为单字节时,其最高位为0,后面的7位定义V字段的长度。当L字段为多个字节时,其最高位为1,而后面的7位定义后续字节的字节数(用二进制整数表示)。这时,所有的后续字节并置起来的二进制整数定义V字段的长度。下图给出了L字段的格式举例。
    在这里插入图片描述
  • V字段又叫作值字段,用于定义数据元素的值。

根据以上所述,我们给出两个用十六进制表示的编码例子。例如,INTEGER15,根据表6-5,其T字段是02,再根据表6-4,INTEGER 类型要用4字节编码。最后得出 TLV 编码为02 04000000 0F。又如 IPAddress 192.1.2.3,IPAddress的T字段是 40,V 字段需要 4字节表示,因此IPAddress 192.1.2.3 的 TLV 编码是 40 04 C0 01 02 03。

TLV方法中的V字段还可嵌套其他数据元素的TLV字段,并可多重嵌套。

3、管理信息库 MIB

所谓“管理信息”就是指在互联网的网管框架中被管对象的集合。被管对象必须维持可供管理程序读写的若干控制和状态信息。

这些被管对象构成了一个虚拟的信息存储器,所以才称为管理信息库 MIB。管理程序就使用MIB中这些信息的值对网络进行管理(如读取或重新设置这些值)。只有在MIB中的对象才是SNMP所能够管理的。

例如,路由器应当维持各网络接口的状态、入分组和出分组的流量、丢弃的分组和有差错的报文的统计信息,而调制解调器则应当维持发送和接收的字符数、码元传输速率和接受的呼叫等统计信息。因此在 MIB中就必须有上面这样一些信息。

我们再看一下下图,可以找到节点mib-2下面的部分是MIB子树。表6-6给出了节点 mib-2所包含的前八个信息类别代表的意思(在后面还有好几个类别)。
在这里插入图片描述
上面所说的 MIB 对象命名树的大小并没有限制。下面给出若干MIB 变量的例子(见表6-7),以便更好地理解 MIB的意义。这里的“变量”是指特定对象的一个实例。
在这里插入图片描述
在这里插入图片描述
上面列举的大多数项目的值可用一个整数来表示。但 MIB 也定义了更复杂的结构。例如,MIB 变量 ipRoutingTable 则定义一个完整的路由表。还有其他一些 MIB 变量定义了路由表项目的内容,并允许网络管理协议访问路由器中的单个项目,包括前缀、地址掩码以及下一跳地址等。当然,MIB 变量只给出了每个数据项的逻辑定义,而一个路由器使用的内部数据结构可能与 MIB的定义不同。当一个查询到达路由器时,路由器上的代理软件负责MIB变量和路由器用于存储信息的数据结构之间的映射。

4、SNMP的协议数据单元和报文

实际上,SNMP的操作只有两种基本的管理功能,即

  • (1)“读”操作,用 Get 报文来检测各被管对象的状况
  • (2)“写”操作,用 Set 报文来改变各被管对象的状况。

SNMP的这些功能通过探询操作来实现,即SNMP管理进程定时向被管理设备周期性地发送探询信息。上述时间间隔可通过SNMP的管理信息库MIB来建立。探询的好处是第一,可使系统相对简单:第二,能限制通过网络所产生的管理信息的通信量。但探询管理协议不够灵活,而且所能管理的设备数目不能太多。探询系统的开销也较大。如探询频繁而并未得到有用的报告,则通信线路和计算机的CPU周期就被浪费了。

但SNMP不是完全的探询协议,它允许不经过询问就能发送某些信息。这种信息称为
陷阱(trap),表示它能够捕捉“事件”。但这种陷阱信息的参数是受限制的。

当被管对象的代理检测到有事件发生时,就检查其门限值。代理只向管理进程报告达到某些门限值的事件(这就叫作过滤)。这种方法的好处是:第一,仅在严重事件发生时才发送陷阱;第二,陷阱信息很简单且所需字节数很少。

总之,使用探询(至少是周期性地)以维持对网络资源的实时监视,同时也采用陷阱机制报告特殊事件,使得SNMP成为一种有效的网络管理协议。

SNMP使用无连接的 UDP,因此在网络上传送SNMP 报文的开销较小。但UDP是不保证可靠交付的。这里还要指出,SNMP使用UDP的方法有些特殊。在运行代理程序的服务器端用熟知端口 161来接收 Get 或 Set 报文和发送响应报文(与熟知端口通信的客户端使用临时端口),但运行管理程序的客户端则使用熟知端口 162 来接收来自各代理的 trap 报文。

SNMP 现在共定义了如表6-8所示的8种类型的协议数据单元IRFC3416,STD62],其中PDU编号为4的已经废弃了。在PDU编号后面是对应的T字段值(十六进制形式表示)。
在这里插入图片描述
在这里插入图片描述
和大多数 TCP/IP 协议不一样,SNMP 报文没有固定的字段。相反,它们使用标准ASN.1编码。因此,SNMP 报文用人工进行编码和理解时都比较困难。为此,在下图中给出了SNMPv1的报文格式。可以看出,一个SNMP 报文共由四个部分组成,即版本、首部、安全参数和SNMP报文的数据部分。目前最新版本是版本3。首部包括报文标识(message identifcation)、最大报文长度、报文标志(message fag)。报文标志占1字节,其中的每一位定义安全类型或其他信息。安全参数用来产生报文摘要(见下一章的 7.3.1节)。

在这里插入图片描述
从上图可看出,在SNMPPDU前面还有两个有关加密信息的字段。这是当数据部分需要加密时才使用的两个字段。与网络管理直接相关的是后面的SNMPPDU部分。对于表6-8 给出的前四种 PDU 的格式都是相同的,即由PDU 类型、请求ID、差错状态、差错索引以及变量绑定这几个字段组成。PDU的各种类型以及类型的编号和T字段的编码已在表6-8中给出。下面简单介绍一下其他字段的作用。

  • 请求ID(request ID) :由管理进程设置的4字节整数值。代理进程在发送响应报文时也要返回此请求ID。由于管理进程可同时向许多代理发出请求读取变量值的报文,因此设置了请求ID可使管理进程能够识别返回的响应是对应于哪一个请求报文。
  • 差错状态(error status):在请求报文中,这个字段是零。当代理进程响应时,就填入 0~18 中的一个数字。例如0表示 noError(一切正常),1 表示 tooBig(代理无法把回答装入到一个 SNMP 报文之中),2表示 noSuchName(操作指明了一个不存在的变量),3 表示badValue(无效值或无效语法),等等[RFC 3416]。
  • 差错索引(error index):在请求报文中,这个字段是零。当代理进程响应时,若出现 noSuchName,badValue或readOnly 的差错,代理进程就设置一个整数,指明有差错的变量在变量列表中的偏移。
  • 变量绑定:指明一个或多个变量的名和对应的值。在请求报文中,变量的值应忽略(类型是 NULL)。
  • 为了大致了解 ASN.1给出的定义的形为了大致了解 ASN.1给出的定义的形式,下面举出定义GetRequest-PDU 的例子。两个连字符“–”后面的是注解。
    在这里插入图片描述

但变量 VarBindList 是什么类型呢?还需要继续定义(这里从略)。上面ASN.1 定义中的第二行中的IMPLICIT 叫作隐式标记,是为了在进行编码时可省去对IMPLICIT 后面的类型(SEQUENCE)的编码,使最后得出的编码更加简洁。

下面我们假定管理者发送 GetRequest-PDU,为的是从某路由器的代理进程获得“收到UDP 数据报的数目”的信息。从图6-21可以查出,mib-2下面第7个节点是udp,而 udp节点下面的第一个节点就是 udpInDatagrams。由于这个节点已经是叶节点(即没有连接在它下面的子节点了),读取这个节点的数值时应在节点标识符后面加上 0,即 1.3.1.1.2.1.7.1.0。这样,可得出 GetRequest-PDU的 ASN.1编码,如图6-25 所示。

在这里插入图片描述
可以把图中各字段的十六进制编码表示如下。
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值