计算机网络面试题

一 TCP的三次握手和四次挥手

TCP协议是7层网络协议中的传输层协议,负责数据的可靠传输

在建立TCP连接的时候,需要通过三次握手来建立,过程是:

1.客户端向服务端发送一个特殊的报文段,这个报文段中不包含任何应用层数据,但是在报文段的首部的SYN标志位被置为1.即SYN报文段。

2.服务端接收到SYN后,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的TCP,即给客户端发送一个SYN_ACK,也不携带任何应用层的数据。

3.客户端接收到SYN_ACK后,客户端也要给该连接分配缓存和变量,再给服务端发送一个ACK,此时SYN被置为0,可以携带应用层数据。

在断开TCP连接的时候,需要通过四次挥手来断开,过程是:

1.客户端向服务端发送FIN报文段,即首部标志位FIN比特置为1。

2.服务端接收FIN后,向客户端发送ACK,表示我接受到了断开连接的请求,客户端你可以不发送数据了,不过服务端这里可能还需要数据处理,客户端到服务端的连接已经断开,缓存和变量被释放。

3.服务端处理完所有的数据后,向客户端发送FIN,表示服务端现在可以断开连接。

3.客户端收到服务端的FIN,向服务端发送ACK,表示服务端到客户端的连接已经断开,缓存和变量被释放。

二 为什么是三次握手

三次握手的重要目的是同步C/S之间的初始序列号

四次握手也可以达成,但是中间的两次握手可以合并成一个

两次握手不可以完成同步初始序列号的目的

三 七层模型和五层模型

OSI七层模型 5层因特网协议栈

应用层 应用层(报文)(HTTP,SMTP,DNS,BGP)

表示层 运输层(报文段)(TCP,UDP,OSPF)

会话层 网络层(数据报)(IPV4,IPV6,DHCP)

运输层 链路层(帧)(ARP)

网络层 物理层(bit)

链路层

物理层

四 跨域请求是什么

跨域是指浏览器在发起网络请求时,会检查该请求所对应的协议、域名、端口和当前网页是否一致, 如果不一致则浏览器会进行限制,比如在www.baidu.com的某个网页中,如果使用ajax去访问www.jd.com是不行的, 但是如果是img、iframe、 script等标签的src属性去访问则是可以的,之所以浏览器要做这层限制,是为了用户信息安全。但是如果开发者想要绕过这层限制也是可以的:

  1. response添加header,比如resp.setHeader(" Access-Control Allow-Origin",“);表示可以访问所有网站,不受是否同源的限制
  2. jsonp的方式,该技术底层就是基于script标签来实现的,因为script标签是可以跨域的
  3. 后台自己控制,先访问同域名下的接口,然后在接口中再去使用HTTPClient等工具去调用目标接口
五 描述下HTTP和HTTPS的区别

HTTP:是互联网上应用最为广泛的一种网络通信协议,协议就是C/S数据交互的约定,基于TCP协议的,可以使浏览器工作更为高效,减少网络传输。

HTTPS:是HTTP的加强版,可以认为是HTTP+SSL(Secure Socket Layer)在HTTP的基础上增加了一系列的安全机制。一方面保证数据传输的安全,另一方面对访问者增加了验证机制。是目前先行架构下最为安全的解决方案。

主要区别:

1 HTTP的连接时简单无状态的,HTTPS的数据传输是经过证书加密的,是有状态的。

2 HTTP是免费的,HTTPS需要申请证书,而证书通常是收费的。

3 它们使用的端口是不一样的。HTTPS是443端口

六 SSL是什么,它是如何工作的

SSL是TCP的加强版本,使用SSL加强后的TCP不仅可以做到TCP的一切,而且提供了进程到进程间的安全服务,这种强化是在应用层实现的,它需要在应用程序的客户端和服务端需要使用SSL的代码,当一个应用使用SSL时,发送进程向SSL套接字传递明文数据,在发送主机中的SSL则加密该数据并将加密的传递给TCP套接字。加密的数据经因特网传送到接收进程中的TCP套接字,该套接字将加密数据传递给SSL,由其进行解密,最后,SSL通过他的SSL套接字将明文数据传递给接收进程。

七 Cookie和Session有什么区别
一、为什么需要cookie和session?

会话:客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。

http协议是“无状态”协议,不能保存用户信息,需要判断是否是同一个用户,需要会话跟踪。cookies和session都是用来跟踪浏览器用户身份的会话方式,但两者应用场景不一样。

客户端访问服务器的流程如下:
• 首先,客户端发送一个HTTP请求到服务器端

• 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,响应头中包含Set-Cookie头部,该头部包含了sessionId,浏览器接收到服务器返回的 sessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 sessionID 属于哪个域名。

• 在客户端发起的第二次请求中,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息添加在请求头中,也发送给服务端

• 服务器接收请求,分解Cookie,获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作,返回响应给客户端

二、cookie和session是什么?

Cookie 是Web 服务器发送给客户端(浏览器)的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将 Cookie 发送到客户端,在客户端可以进行保存,以便下次使用。

Session 代表着服务器和客户端一次会话的过程。每一个用户都有一个不同的 session,各个用户之间是不能共享的,是每个用户所独享的,在 session 中可以存放信息。Session 的实现依赖于 Cookie,如果 Cookie 被禁用,那么 session 也将失效。

三、Cookie 和 Session 有什么不同?

• 作用范围不同,cookie一般用来保存用户信息,数据保存在浏览器端;session主要作用是通过服务器端记录用户的状态,数据保存在服务器端。典型的例子是购物车,添加商品到购物车,HTTP无状态协议,系统不知道是哪个用户操作的,服务器给用户创建特定的session之后就可以标识这个用户了。

• 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。

• 有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效。

• 隐私策略不同,Cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;Session 存储在服务端,安全性相对 Cookie 要好一些。

• 存储大小不同, 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie。

四、禁用cookie后如何保障整个机制的正常运转?

第一种,在每次请求中都携带一个 SessionID 的参数放入URL

第二种,Token 机制。Token 的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。随机且无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。

token 的认证流程与cookie很相似:

• 用户登录,成功后服务器返回Token给客户端。

• 客户端收到数据后保存在客户端

• 客户端再次访问服务器,将token放入headers中

• 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

八 TCP和UDP的区别

TCP是基于连接的,UDP是无连接的

TCP的传输是可靠的,因为首部字段序号和确认号的缘故,UDP是不可靠的

UDP的首部开销小只需要8字节,TCP首部一般需要20字节

UDP是面向报文的

发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文

TCP是面向流的

TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。

TCP可以传递任意长度的消息

UDP不能传输任意的长度

九 数据封装过程

从应用层下来的报文首先经过运输层的数据封装,我们这里用TCP来举例子,在应用层的报文前加上源端口和目的端口,序号和确认号

还有其他的一些首部字段(SYN,ACK,FIN。。。)

https://www.cnblogs.com/muyi23333/articles/13841268.html(首部字段详解)

运输层下来的报文段在网络层组装成数据报,(这里以IP协议为例)即在报文段前面加上IP协议的版本,首部长度,服务类型,数据报长度,寿命,上层协议,首部检验和,源IP和目的IP等字段。

网络层下来的数据报在链路层封装成帧,既在数据报上面加上源MAC和目的MAC还有还有一些校验码比如CRC校验。

链路层下来的帧进入物理层使用bit进行传输。

十 为什么SYN/FIN不包含数据却要消耗一个序列号

因为SYN和FIN也可能会丢失,所以需要给他们绑定序列号以确定C/S到底有没有收到

十一 端口号划分

熟知端口号 0-1023

已登记端口号 1024-49151

临时端口号 49152-65535(2的16次方)

十二 讲一讲telnet的用法

1 检查端口是否打开 talnet ip port 这条命令能够告诉我们此ip的server指定端口的连接是否可达

2 模拟发送http请求

十三 对称加密和非对称加密
对称加密

加密和解密使用同一个密钥的加密方式

对称加密的工作过程如下

发送方使用密钥将明文数据加密称密文,然后发送出去,接受方收到密文后,使用同一个密钥将密文解密称明文读取

不足之处如下

密钥传输问题:如上所说,由于对称加密的加密和解密使用的是同-一个密
钥,所以对称加密的安全性就不仅仅取决于加密算法本身的强度,更取决于
密钥是否被安全的保管,因此加密者如何把密钥安全的传递到解密者手里,
就成了对称加密面临的关键问题。(比如, 我们客户端肯定不能直接存储对
称加密的密钥,因为被反编译之后,密钥就泄露了,数据安全性就得不到保
障,所以实际中我们一-般都是客户端向服务端请求对称加密的密钥,而且密
钥还得用非对称加密加密后再传输。)
密钥管理问题:再者随着密钥数量的增多,密钥的管理问题会逐渐显现出
来。比如我们在加密用户的信息时,不可能所有用户都用同-一个密钥加密解
密吧,这样的话,- -旦密钥泄漏,就相当于泄露了所有用户的信息,因此需
要为每一个用户单独的生成个密钥并且管理, 这样密钥管理的代价也会非常大

非对称加密

就是指与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(public
key)和私有密钥(private key)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应
的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的
公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算
法叫作非对称加密算法。

使用过程如下

首先双方都有自己的一对公钥和私钥,我们假设A给B传送数据

传输数据之前,双方先交换各自的公钥,然后A使用公钥B给数据加密,然后将数据传输过去,B拿到数据以后,使用自己的私钥来解密即可

总结

(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要
将密钥在网络传输,所以安全性不高。

(2)非对称加密使用了一 对密钥,公钥与私钥,所以安全性高,但加密与
解密速度慢。

(3)解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然
后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以
使用对称加密来进行沟通。

十四 什么是认证和授权?如何设计一个权限认证框架

认证就是对系统访问者的身份进行确认。

授权就是对系统访问者的行文进行控制。

参考若依

十五 什么是CSRF攻击,如何防止

CSRF:翻译过来是跨站请求伪造,针对cookie+session

一个正常的请求会将合法用户的sessionId保存到浏览器的cookie。这时候,如果用户在浏览器中打开一个tab页,那么这个tab页也是可以获得浏览器的cookie的,黑客就可以利用这个cookie信息进行攻击。

CSRF防止方式:

1 尽量使用post请求,限制get请求,使用尽量多的参数。

2 增加token,在请求中放入一个攻击者无法伪造的信息,并且该信息不存在于cookie当中

十六 使用HTTP长连接有哪些优点

HTTP1.1中加入的长短连接是通过http header connection 来判断是否是长连接 长连接的时候connection = keep-alive,短链接的时候等于close

1 减少握手次数

2 减少慢启动影响 (TCP有拥塞控制的功能, 为了保证公网的带宽资源,各个TCP连接都会先慢慢的启动,以较慢的速度传输)

缺点

TCP协议是流式协议,保证顺序不可以混乱,只要有一个报文丢包了,对方的应用层也不能接收,回退N步。

十七 阻塞IO和非阻塞IO

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvPC8DTz-1645533806731)(C:\Users\86198\AppData\Roaming\Typora\typora-user-images\image-20220222123820943.png)]

https://segmentfault.com/a/1190000003063859

十八 epoll和poll的区别

IO模型有以下三种

数据永远先到达内核空间,kernel会采用不同的IO模型得到数据返回给程序,程序拷贝到自己的程序空间

  1. select模型,使用的是数组来存储Socket连接文件描述符,容量是固定的,需要通过轮询来判断是否发生了I0事件
  2. poll模型,使用的是链表来存储Socket连接文件描述符,容量是不固定的,同样需要通过轮询来判断是否发生了I0事件
  3. epll模型,epoll和poll是完全不同的, epoll是一 种事件通知模型, 当发生了10事件时,应用程序才进行IO操作, 不需要像pol模型那样主动去轮询
十九 零拷贝是什么

零拷贝指的是,应用程序在需要把内核中一块区域的数据转移到另外一块内核区域时,不需要经过先复制到用户空间,再转移到目标内核区域去了,而是实现直接转移,使用transferTO()

二十 什么是协议

定义了在两个或者多个通信实体之间交换的报文的格式和顺序,以及报文发送或者接收报文所采取的动作

二十一 P2P的实际使用

在一个P2P的体系结构中,对位于数据中心的专用服务器有最小的依赖或者没有。相反,应用程序在间断连接的主机对之间使用直接通信

,这些主机对被称为对等方。这些对等方并不为服务商所有,相反却为用户控制的桌面机器所有。因为这种对等方通信不必通过专门的服务体系结构,该体系结构被称为对等方到对等方的。

P2P最引人入胜的特征之一是它们的自扩展性。且不需要庞大的服务器基础和服务器带宽。

QQ传文件的方式就是采用的P2P传输方式,具有不需要中转的优势。

通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话。随即,发送计算机与接收计算机就会在确定好的端口范围内,建立起TCP或UDP连接开始文件的检索与传输。
在默认状态下,QQ优先采用了UDP(User Data Protocol,用户数据报协议)协议传送数据,而对可靠性要求高的数据通讯系统往往使用TCP协议传输数据。与TCP协议不同,UDP协议并不提供数据传送的验证机制——在整个文件传输过程中如果出现数据报的丢失,协议本身并不能作出任何的检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。 UDP协议适用于无须应答、要求时效的软件使用,这样的设计正好与QQ追求的目标相符,所以QQ优先使用了此协议进行一切功能应用。但是,由于UDP协议具有不可靠性,常会因种种原因导致消息或数据的发送失败(很多时候会发现发送文件给对方接收时,对方根本收不到要求接收文件的消息。或是发送聊天消息时,对方根本没有收到过消息)。显然,UDP协议由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。QQ在数据传输上更注重实际性能,为了获得更好的使用效果,往往可以牺牲一定的可靠性。

二十二 进程与计算机网络之间的接口

套接字(socket)是同一台主机内应用层与运输层之间的接口

对于操作系统来说,无论是 client 还是 server,都属于应用层的软件,要通过 socket 与内核中的网络协议栈进行交互。
socket 是核心,是枢纽,是进程与网络建立关系的必经之路!

内核是如何将数据包转发至 socket 的呢?

网络数据首先到达网卡,然后进入内核,由网络协议栈去处理,那么内核是如何进行数据分发的呢?它怎么知道该如何把数据交给特定的用户进程呢?

这时,就需要 socket 发挥作用了!

socket 中存储了特定的四元组: 源ip+port,目的ip+port;

TCP Client :

源 ip+port ,socket 为 [src ip, src port) <=> (*, *)] ;
Connect 到目的 ip+port,socket 变为 [src ip, src port) <=> (dst ip, dst port)];
通过 Socket 与 TCP Server 进行通信。
Client 端,一个连接会占用一个系统端口。

TCP Server:

Accept 返回的 socket 为 [src ip, src port) <=> (dst ip, dst port)];每一个连接都对应一个 socket id。
Server 端,所有连接共享同一个端口。

当系统接收 TCP 网络数据时,根据端口定位到特定的进程,然后进程根据 socket id 区分来自不同 client 的数据。系统中所有 socket 中的四元组信息,必定唯一,不可能重复!

进程与socket

每个进程,在内核中都有一个表,保存了该进程申请并占用的所有 socket 描述符,在进程看来,socket 其实跟文件也没有什么不同,只不过通过描述符获得的对象不同而已,接口对应的系统调用也不同。

那么进程跟socket是一一对应的吗?

其实不然,socket是一种资源,就像文件一样,一个进程打开了,另一个进程也可以用,只不过socket比较特殊而已。

理论上,能够通过 sendmsg 将 socket 描述符传递给其他进程,这样其他进程就可以调用该描述符的接口了。这种场景确实不怎么会用到,也没有进行实际验证。

当然,父子进程间,还有线程间,进行 socket 的共享,是比较常见的。

二十三 简单概述下HTTP协议

HTTP全称是 超文本传输协议,它是web的核心,HTTP由两个程序实现,一个客户程序和一个服务程序。两者通过交换HTTP报文进行会话,HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。

HTTP下层使用TCP协议,面向连接的,传输是可靠的。无状态的协议

在1.1后采用长连接

HTTP请求报文格式

请求行 请求方式和协议版本等等

请求头 Host token 等等header

请求空行

请求体(get没有请求体)

HTTP响应报文格式

响应行 HTTP版本和状态码

响应头 Date Last-Modified 等等

响应空行

响应体

二十四 简述下DNS

DNS是因特网的目录服务,它的功能简单来说就是将IP地址转换为主机名

DNS属于应用层协议,底层使用UDP 看重的就是UDP不需要握手,启动快

使用UDP也可以减少启动时延

为了处理扩展性的问题,DNS的服务器采用了分层的架构,大致来说分为三种类型的服务器

根DNS服务器

顶级域服务器 com服务器 org服务器 。。。

权威服务器 facebook.com服务器 amazon.com服务器

还有一类重要的服务器称为本地DNS服务器

通常来说本地DNS服务器一般与主机处于同一个局域网中

二十五 运输层协议重点总结
运输层为运行在不同主机上的进程之间提供了逻辑通信

回退N步(GBN)协议中,允许发送方发送多个分组而不需要等待确认,至于为什么时N呢?

因为流量控制的问题。

在GBN中,如果发送方发送了 1 2 3 4 5 五个连续的包

但是2在发送的过程中丢失了

这时候即使收到了3 4 5 也需要丢弃知道收到2为止

选择重传

由于GBN的重传问题比较浪费,选择重传使得接收方将确认一个正确接收的分组而不管是否有序。失序的分组将被缓存直到所有丢失分组皆被接收到为止,这时才可以将一批分组按序交付给上层。

拥塞控制和流量控制的区别

拥塞控制是目标是整个互联网(慢启动)

流量控制是对于两台通信的端系统来说的(滑动窗口)

二十六 子网掩码是什么

**“子网”**掩码,顾名思义,它就是拿来划分子网的,更准确的说,划分子网的同时,还能通过它知道主机在子网里面的具体ip的具体地址。

我们并不能通过一个ip地址准确的知道他的子网地址是什么,知道他的主机在子网里面的地址是什么

通过和子网掩码的配和就可以知道这个ip地址的子网是什么,并且知道它在子网中的地址

二十七 DHCP是什么

DHCP:即为动态主机配置协议,DHCP允许主机自动获取一个IP地址。网管可以配置DHCP,以使得主机每次与网络连接时能够得到一个相同的ip地址,或者分配一个临时的ip地址。下层协议使用UDP

DHCP工作的步骤如下

1 DHCP客户生成包含DHCP发现报文的IP数据报,使用广播目的地址255.255.255.255和本机ip 0.0.0.0

DHCP客户将IP数据报传递给链路层,链路层将该帧广播到子网的左右节点

2 DHCP服务器收到一个DHCP发现报文,用DHCP提供报文做出会应,该报文向该子网的所有节点广播,仍然使用IP广播地址(因为他不知道谁需要这个DHCP报文)提供ip

3 新到达的客户从一个或多个服务器中选择一个,并向选中的服务器提供DHCP请求报文进行响应,回显配置的参数

4 服务器用DHCPACK进行响应确认

二十八 OSPF和BGP

OSPF是同一个AS中的路由选择算法

OSPF是一种链路状态协议,它使用DijKstra算法。使用OSPF,一台路由器构建了一幅关于整个AS的完整拓扑图。

每台路由器在本地运行DijKstra的最短路径算法,已确定自身节点到另一个节点的最短路径树。

使用OSPF时,路由器向AS中所有的路由器广播路由选择信息。每当一条链路的状态发生改变就会广播

BGP是各个AS间的路由选择

我们把它称为AS之间的粘合剂,下层协议使用TCP

BGP为每台路由器提供了两种手段

1 从邻居AS获得前缀的可达性信息。BGP确保在因特网中的其他AS都知道该子网。

2 确定到该前缀最好的路由。一台路由器可能知道两条或者更多到特定前缀的不同路由,为了确定更好的前缀,该路由器将运行一个BGP路由选择过程

二十九 ARP协议

ARP协议全称地址解析协议,将IP地址转化为MAC地址

在同一个子网中,一台主机要向另一台主机发送信息,假设以及通过DNS知道了ip地址,但是这台主机并不知道MAC地址,这时候就需要使用ARP协议,输入ip地址就会返回MAC地址。(注意只能是同一个子网中)

三十 web页面请求的历程

当我们在浏览器上输入一串url时,计算机发生了什么呢?

1 首先我们的电脑要使用DHCP来获取自己的ip地址,DNS服务器的IP地址。

2 当我们在浏览器出入URL并回车时,这将导致主页最终显示在web浏览器上。浏览器通过生成一个TCP套接字开始了该过程,套接字用于向url发送HTTP请求,为了生成该套接字,我们需要知道IP地址。

我们首先可以根据URL域名再本地的hosts文件查找是否由映射IP,有的话就可以直接返回。

没有的话我们就需要使用DNS来询问url对应的ip地址

这里我们需要将报文发给网关服务器,让他去寻找DNS服务器,但是我们不知道网关服务器的MAC,使用ARP协议得到网关服务器的MAC地址

然后就可以将DNS报文发送给网关服务器了,网关服务器可以通过BGP或者OSPF协议到达DNS服务器

DNS服务器返回给我们的计算机url的ip地址

3 由了url的ip地址后,我们就可以生成TCP套接字,该套接字用于向url发送HTTPGET报文,生成套接字时,要使用tcp的三次握手

完成三次握手之后,我们就可以发送字节了,然后再对应的服务器通过HTTP响应返回给我们的套接字。

我们的浏览器程序从套接字中读取HTTP响应,从HTTP响应体中抽取Web网页的html,并最终显示了Web网页。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值