计算机网络笔记

 交换机:
交换机的功能是什么呢?它的主要功能是识别MAC地址(48位,相当于12位16进制),也被称作—MAC地址自学习。
 交换机在接收到一个数据报文后,根据数据报文中的源MAC地址,与接收该报文的接口形成对应关系,并记录在MAC地址表中。
例如,源MAC地址为AAAA:AAAA:AAAA;交换机与该终端连接的接口编号为0/0/2,那么此时交换机就会将以下信息存在MAC表中:
在这里插入图片描述
 然后,交换机根据数据报文的目的MAC地址,查询MAC地址表,若有匹配项,则根据匹配项直接向目标进行单播转发。
 若无匹配项,则此时会进行【洪泛操作】,即除了数据发送的原接口外,向其它接口均发送一份数据。
上面提到了一个新概念—洪泛操作,就是如果没有在MAC表中找到目的MAC地址,那么就会执行该操作。并且,洪泛操作是有范围的,它的范围是当前的【广播域】
什么是广播域?这就与下面要介绍的路由器的作用有关:
 路由器:
路由器主要有以下功能:
 将整个网络分为若干个广播域;路由器的一个接口就是一个独立的广播域。
 转发数据;路由器依靠路由表转发数据;而交换机依靠MAC地址表来转发数据。
 所以,由上述对交换机和路由器的功能的分析,我们可以知道:
如果两个设备在同广播域下,那么它们依靠交换机进行数据交流;
如果两个设备在不同的广播域下,那么它们需要借助路由器进行数据交流。
注意,路由器可以有多个接口,而每个接口都有各自的MAC地址和IP地址。

 IP地址:
每个终端以及每个接口都有一个独特的IP地址,通过IP地址,接口可以识别一条数据报文是否是发给自己的。
IPV4为32位;IPV6为64位。
 IP地址分为两部分:
1.网络位:表示该IP所在的网络(即广播域)。即如果网络位相同,那么表示这两个接口在同一个广播域中。
2.主机位:单个主机的主机号。
 表示方法:使用四个点来将32位的IP分隔为4部分,每部分为8位,再将每部分转化为十进制数(点分法)。
注意:网络位的位数是可变的。而网络位的位数取决于—掩码。

 掩码:
 组成:由连续的1和连续的0组成,且必须由1开头。共有32位。
即:111111000000是有效的;而1011011101001是无效的;01111111000101也是无效的。
 功能:掩码中的数字1代表对应IP地址的比特位为网络位。
11110000.00001111.10101010.00000001 (IP)
11111111.11111111.00000000.00000000 (掩码)
则IP地址的前16位为网络位;而后16位为主机位。
 为了方便表达,我们常常将一个IP地址的网络位作为后缀写在IP地址之后,并用/隔开。
例如:11110000.00001111.10101010.00000001/24 表示该IP地址的前24位为网络位。后12位为主机位,并且该广播域内共有2的12次方 个主机。
再例如:11110000.00001111.10101010.00000010/21表示该IP地址的前21位为网络位。后15位为主机位,并且该广播域内共有2的15次方 个主机。
因为这两个IP的前24位是相同的,所以它们代表的广播域是包含的关系。
如果两个IP的掩码相同,那么可以根据掩码来判断这两个接口是否在同一个广播域中;
如果两个IP的掩码不同,那么实际上无法判断它们是否在同一个广播域中。

我们知道,每个终端必有一个IP地址和一个MAC地址。那么,还有其他的设备有IP或MAC地址吗?有,那就是被称为广播域的门户—网关。

 网关:
所谓网关,就是路由器与该广播域所连接的接口,这个接口的IP地址称之为网关IP。
那么,网关在数据传输方面有哪些作用?
 若目标终端与源终端在同一个广播域内,则由交换机进行洪泛或单播形式转发数据,而路由器会将该数据直接丢弃。
 若目标终端与源终端在不同一个广播域内,那么此时网关就将数据发送给路由器,然后路由器再进行数据转发。

下面,我们通过具体的示例来说明:
在这里插入图片描述
如图,现假设有三台终端,其中,PC1和PC2连接在同一个交换机下;PC3连接在另一个交换机下。且路由器AR1将该网络分为两个广播域。两个交换机都与该路由器相连。
现在我们将三台终端和路由器设置IP以及MAC地址:
在这里插入图片描述
 情形一:PC1与PC2之间的相互通信。
 我们假设现在PC1要向PC2发送一条实际内容为“Hello”的信息,那么,这条信息在传输过程中实际上会包含以下内容:
在这里插入图片描述
其中,第一行就是PC1想要发送的内容;
在第二行中,第一个IP地址是PC1,即源终端的IP地址;而第二个IP地址是PC2,即目标终端的IP地址。
在第三行中,第一个MAC地址是PC1,即源终端的MAC地址;而第二个地址是PC2,即目标终端的IP地址。
我们再分析一下该数据传输的过程:
这数据由PC1发出,到达路由器LSW1,首先,LSW1会根据数据报文中的源MAC地址,与接收该报文的接口形成对应关系,并记录在MAC地址表中(即此时记录在MAC表中的地址为PC1的MAC地址)。然后,LEW1会在现有的MAC表中查找目标终端的MAC地址,但是此时的MAC表中只有PC1的MAC地址,并没有PC2的MAC地址,那么,该路由器会在当前广播域内进行洪泛操作。它会向除PC1以外的其它所有接口发送相同的数据报文。在该例中,LSW1会向PC2以及路由器左端接口发送数据报文。
然后,PC2在接收到这数据报文时,会依次进行如下操作:
1.先识别该数据报文中目标终端的MAC地址,发现该MAC地址就是自己的MAC地址,那么接收这数据报,并且将数据包中的MAC地址丢弃;
2.然后再识别原数据报文中的目标IP地址,发现目标IP就是自己的IP,那么再将数据报文中的IP地址丢弃,最终“Hello”这一信息出现在了PC2上,由PC1向PC2的信息传输成功;
同样的,路由器的左端接口在接收到这数据报文后也会进行类似的操作。因为目标MAC地址不是左端接口的地址,所以路由器会直接丢弃整个数据报文。

 那么这时,假设PC2也向PC1发送了同样内容的信息,数据传输的过程又是怎样的呢?
此时,数据报文的实际内容为:
在这里插入图片描述
这数据从PC2发出,到达路由器LSW1。然后LSW1会将PC2的MAC地址记录在MAC表中,此时MAC表中同时含有PC1和PC2的MAC地址,所以LSW1就能够在当前的MAC表中找到PC1的MAC地址。那么,路由器此时就不会进行洪泛操作,而是根据匹配项直接向目标终端进行单播转发。
 情形二:PC1与PC3之间的相互通信。
由于PC1和PC3不在同一个广播域内,所以要实现相互通信,除了交换机,还得借助路由器。
 我们假设现在PC1要向PC3发送一条实际内容为“Hi”的信息,那么,数据报文的实际内容应该是什么?
因为PC1和PC3不在同一个广播域内,所以需要借助路由器来进行数据传输。那么此时数据报文中的目标MAC地址就应该是路由器对应网关的地址。而对于PC1而言,它只知道网关的IP地址,而并不知道网关的MAC地址。那么,PC1如何获取网关的MAC地址?这时就需要借助ARP协议了。

 ARP协议:
 原理:根据已知的地址来获取对应的另一种地址
 ARP工作过程:
以上述示例为例,PC3将会向外发送以下信息:
在这里插入图片描述
上述报文又叫做请求报文。
其中,第一行是ARP协议的内容:“请告诉我你的MAC“;第二行是原目IP。
而第三行中的第二个MAC地址:FFFF:FFFF:FFFF具有特殊的含义:
该MAC表示当前广播域的所有设备,也被称为广播帧。那么该广播域内的所有设备在识别到这个MAC后都会自动接收这条信息。而当交换机接收到该MAC时,则先自学习,然后进行洪泛操作;当路由器(或其它接口)接收到这个信息时,首先识别到FFFF:FFFF:FFFF这个MAC地址,就会意识到这信息可能是找自己的,然后去掉MAC读取目标IP,发现果然是发给自己的。然后去掉IP地址,读取到ARP协议的内容为:“请告诉我你的MAC“,这时路由器就会开始构造数据包为:
在这里插入图片描述
上述报文叫做回复报文。
然后将该数据报文发送给PC3。当PC3接收到这个信息时,就可以知道这数据是网关发送的,就可以得知目标网关的MAC地址。这时就可以构造目标MAC为PPPP:PPPP:PPPP的数据报文了。
 实际上,在设备进行ARP请求之前,它会先在本地查找ARP缓存表。
在这里插入图片描述
如上图所示,ARP缓存表的主要内容是接口的IP地址与其MAC地址的对应关系。那么,当设备已知某个接口的IP而需要知道它的MAC地址时,就可以通过查询此表来得到对应的MAC地址。
如果设备未在当前的ARP缓存表中查询到相应的对应关系,那么此时就会发送一个广播帧,目标MAC为全F,且范围为整个广播域。然后当目标接收到这ARP请求报文时,它就会构造ARP应答报文并发送回去。这样当原设备接收到这一报文时就可以得知对应的MAC地址。此时,设备会将这一组新的IP、MAC对应关系记录在ARP缓存表中。然后以得到的MAC为目标MAC构造数据报文。
回到情形三中的问题,了解了ARP协议,那么无法得知MAC地址的问题就得到了解决,下面来分析一下全过程:(我们假设当PC1向PC3发送信息时,MAC表和ARP缓存表为空。)
首先,PC1会查看ARP缓存表,想要获得对应网关的MAC地址,但是,ARP缓存表中并无对应关系,所以此时PC1会构造ARP请求报文,向该广播域内的所有设备发送一个广播帧。当交换机接收到这一数据时,会将PC1与其接口的对应关系记录在MAC表中,然后跳过查表,直接进行洪泛操作,向路由器发送这信息。路由器在接收到这信息时,发现目标MAC为全F,则可能是找自己的,然后查看目标IP地址,发现的确是自己,最后发现了ARP协议。于是路由器首先会将PC1的IP与MAC的对应关系记录在ARP缓存表中,然后开始构造ARP应答报文,报文的原MAC是对应网关的MAC地址。当PC1收到路由器的回复报文后,会将网关的MAC、IP的对应关系记录在ARP缓存表中,然后开始以得到的MAC地址为目标MAC构造数据报文,发送给网关。
注意,PC1无论是发送ARP请求报文还是发送普通数据报文,交换机都会进行一次MAC地址自学习,更新一次MAC表。也就是说,在上述过程中,交换机对PC1的MAC和接口对应关系进行了两次更新。
网关在接收到这数据报文时,首先发现目标MAC正是自己的MAC地址,然后查找路由表,发现目标IP的网络位与自己的一个广播域的网络位相同,于是路由器开始处理这数据报文且只改动原目MAC地址。路由器会将原MAC地址改为对应网关的MAC地址,会将目标MAC地址改为PC3的MAC地址。
但是,路由器此时并不知道PC3的MAC地址,于是先查找ARP缓存表,但是并未找到对应关系,于是路由器开始构造ARP请求报文,这报文的原IP是与PC3所在广播域相连的网关的IP,目标IP是PC3的IP;原MAC是网关的MAC;目标MAC为全F。当PC3接收到这广播帧时,会查看是否是发给自己的,然后发现目标IP正是自己,最后看到ARP协议,于是构造ARP应答报文,这报文的原MAC是PC3的MAC,目标MAC是网关的MAC;原IP和目标IP分别是PC3和网关的IP。当网关接收到这应答报文并得知了PC3的MAC地址之后,会在ARP缓存表中记录PC3的IP以及MAC地址的对应关系,然后以PC3的MAC为目标MAC,以对应网关的MAC为原MAC;原IP、目标IP与原来不变,分别为PC1和PC3的IP地址。PC3在接收到这报文后,会将网关的MAC、IP的对应关系记录在ARP缓存表中。
在整个过程中各个设备构造的报文、记录如下:
在这里插入图片描述

 ARP缓存表老化时间:180s
MAC记录表老化时间:5min
 ARP分类:
正向ARP:由IP获取MAC;
反向ARP:由MAC获取IP;
免费ARP:用于自我介绍和冲突检测;
代理ARP:由网关设备代替主机查询MAC地址。

 TCP/IP(标准模型为4层;对等模型为5层)
 OSI参考模型(为7层):开放式系统互联模型—国际化标准组织ISO提出—协议组(协议模型)
在这里插入图片描述
应用层:接受用户数据,人机交互的接口
表示层:将编码转换为二进制(加密、解密)—统一格式
会话层:针对传输的每一种数据建立一条连接(防止不同的数据之间的干扰)
控制层面:上三层
数据层面:下四层
传输层:区分流量、定义数据传输方式
网络层:通过IP地址进行逻辑寻址
数据链路层:通过MAC地址进行物理寻址
LLC—逻辑链路控制层
MAC—介质访问控制层
物理层:定义协议物理特征(电压、电气、数据传输速率、传输模式);传输比特流
代表设备:中继器、集线器。
 PDU:
协议数据单元—数据在不同层面的表现形式:
上三层—数据
传输层—数据段
网络层—数据包
数据链路层—数据帧
物理层—比特流
在这里插入图片描述
 物理层:
 规定了一些物理特性(数据传输速率、传输模式、电气电压)
 介质:
1.同轴电缆(已淘汰):10BASES—粗同轴电缆—500M
10BASE2—细同轴电缆—185M
速率极低
2.双绞线:共八根铜线,且两两相绞;另有一根棉线。
在这里插入图片描述
屏蔽双绞线(STP)
非屏蔽双绞线(UTP)
类型:1、2、3、4、5、超5(使用最广)、6(频率较高;传输速率比5类高)、超6**、7、8(少见)
3.光纤:
在这里插入图片描述
 双工模式:
全双工:通讯双方都能同时发送和接受数据
半双工:通讯双方都能发送和接收数据,但是不能同时进行(例如对讲机)
单工:固定的一方发、固定的一方收。
注:同一条物理线路上的双工模式必须相同
线序:
568A:绿白、蓝白、橙白、橙、蓝白、绿、棕白、棕
568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
直连线、交叉线。
 报文的封装与解封装:
在这里插入图片描述
报文的封装:数据段包帧比特
在这里插入图片描述
报文的解封装:比特帧包段数据

 数据链路层:
 代表设备:网桥、交换机。
 链路类型:
1.广域网:
2.局域网—以太网:MAC地址是以太网专有的。
 MAC地址(物理地址)(二层地址)(物理寻址)。
实际上,与IP地址类似,MAC地址也由两部分组成:
前24位:表示厂商ID。
后24位:表示产品ID。
例如:7D-3E-11-00-01-01,前6个十六进制为厂商ID。
 数据帧:
有两种格式:以太网-2格式、IEEE 802.3格式。
以太网-2格式的组成如下:
在这里插入图片描述D-MAC、S-MAC:原目MAC。
Type:类型字段,0x0800表示交给IP协议、0x0806表示交给ARP协议。
FCS:帧校验序列。校验整个数据帧。校验数据内容是否有更改或丢失。
校验的方式为:在数据封装时,通过一定的计算方式(CRC算法)生成一个4B(32位)的不可逆二进制数据段,并填充在数据帧的末尾。当信息接收方接收到这一信息时,会再次根据该信息的内容,以相同方
式再次计算出一个结果,并将该结果与原结果进行比对。若相同,则说明数据在传输过程中未被更改,否则数据被更改。
 帧发送方式:
 单播、广播(目标MAC为全F)
 组播:单播是一对一;广播是一对所有;而组播是一对一组。即只给特定的一些人发送信息。

 网络层:
 IP地址:逻辑寻址。全球唯一。
 IP地址的有类分址:根据IP地址前8位二进制特征分类。
A:0XXXXXXX 范围为:0.0.0.0~127.255.255.255;掩码为8。
B:10XXXXXX 范围为:128.0.0.0~191.255.255.255;掩码为16。
C:110XXXXX 范围为:192.0.0.0~223.255.255.255;掩码为24。
D:1110XXXX 范围为:224.0.0.0~239.255.255.255;D类没有掩码特征。
E:1111XXXX 范围为:240.0.0.0~255.255.255.255;E类没有掩码特征。
A、B、C类:单播地址:可以作源地址,也可以做目的地址。
D类:组播地址:只能作目的地址。即一群人不能使用同一个源地址来向外发送信息。
E类:保留地址(科研地址)
 特殊地址(不能人为手工配置在电脑上):
0.0.0.0:以太网地址(代表所有地址或代表没有地址)。
255.255.255.255:受限广播地址。
192.168.1.0/24(主机位全0):代表该广播域内所有设备,又被称为网段。
192.168.1.255/24(主机位全1):代表定向广播地址。定向为网络位所对应的广播域。
127.X.X.X :本地测试地址。
169.254.0.0/16:本地链路地址。
 私有地址:
 用途:为了解决IP地址不足的问题。
 特性:可重复。
 分类:从IP地址的各类中抽取部分作为可重复的地址。
A类:10.0.0.0~10.255.255.255,只有一个地址段。可供上千万主机使用。
B类:172.16.0.0~172.31.255.255,有16个地址段。
C类:192.168.0.0~192.168.255.255,有256个地址段。
 共有地址:
除了上述私有地址和特殊地址外的所有单播地址。
 IP报文头部:

在这里插入图片描述
 IP报文头部长度范围为20~60字节。
 Version:IP协议版本,即IPV4和IPV6。只填充‘4’,长度为4比特。
 Header Length:头部长度,单位为4字节,范围为15。
 Total Lentgh:报文总长度
 Time to Live:简称TTL,即报文的存在时间。大小为一字节,最大为255。单位为路由器个数。每经由路由器时,TTL减一。
 Protrol:相当于Type。决定数据交给TCP还是UDP处理。(TCP、UDP都是传输层协议)
 Header Checksum:首部校验核,只校验IP。
 IP Options:在IP报文头部中可选。并且长度不定。
 IP分片:MTU(最大传输单元)
 两台设备会协商发送的数据报文的最大容量,即MTU。MTU针对设备接口。
 MTU的值不固定,链路类型不同,MTU也会不同。以太网中的MTU为1500字节。
 如果传输的数据报文较大,那么就会将数据分为几片发送,且每片数据都包含IP头部。所以先将data部分分片完毕,然后再进行数据封装,且将IP头部报文加上。
 Identification:
当几个data片经过不同的路径、先后到达目的地时,我们首先需要解决一个问题,设备如何判断所有数据片都传输完毕?通过标识位来解决。
标识位:给每一个分片的数据报文分配一个序列号,从小到大,依次加一。
标志位:大小为3bit,
第一位为0,无意义,仅作填充。
第二位为DF位,若该位为1,则代表未分片,直接处理该数据;若为0,则代表原数据被分片传输,存储该数据而不处理;
第三位为M位,表示该报文是否是最后一片报文。若为1,则代表后续还有报文。
注意:如果在所有报文传输结束之前,接收到了M位为0的报文,那么也不会处理,因为路由器会识别出缺少了某个序列号。
 Fragement Offect:表示该报文data部分的当前位置与在原报文内的原位置的的变化,即偏移量。单位为8字节。
为什么会有偏移量?是因为在每一个data片的前面都加上了IP头部报文,所以再将此时的片按照原顺序组合成原数据时,data片的位置就发生了偏移。

 传输层:
端口号:标识进程,为16位二进制。
 0~65535
1~1023:静态端口;
1024~65535:动态端口
 常见端口号:
telnet—23
ftp—20/21
http—80
https—443
DNS—53
 TCP协议:传输控制协议
 是一种面向连接的可靠性协议,所谓面向连接,就是指数据在传输之前收发双方需要首先建立一条逻辑通路。
在这里插入图片描述
大小:最小20字节。
 Source Port、Destination Port:原目端口号。
 Data Offset:数据偏移,数据接收方可以根据该字段以及数据包总量判断报文是否传输完全。
 可靠性:
1.确认机制:当目标每收到一个报文(片)后,都要回复一个确认报文,假设原向目标发送的报文内含的序列号为x,当目标收到该报文时,将x+1填入确认序列号中,并回复。
2.重传机制:当一个数据段中的某个报文丢失,会提醒要求重新传输该丢失报文。
3.排序机制:传输一个数据段,被分为多个报文,从不同的路径传输,最终到达目的地的顺序会被打乱,需要重新排列组合恢复原始的报文内容。
4.流控机制:调节窗口大小来对流量进行控制
我们假设源A一次性可以发送5000字节的报文,然后分片发送,那么,B就可以在累计接收到5000字节后发送一条确认报文给A。这一机制大大减少了确认报文的发送数量。
那么,此时如何确认是否接收到了全部的报文?
假设A要向B发送三条报文,当A发送一个1000的报文时,内含序列号x,然后再发送一个1000的报文,内含序列号x+1000,再发1000,内含序列号x+2000。
在这里插入图片描述
此时B在接到全部的报文时,会回复确认报文x + 2001。那么此时A在接到确认报文时,会认为B已经接到了全部的报文。那么,如果第一个报文丢失,那么B就不会发送确认报文。此时A会重发。A会根据B发送的确认报文来判断B是否接到了全部的报文,如果确认报文中的序列号不符合正常的序列号,那么A就会认为B并未接收到完整的报文信息,发生了丢包。然后A会重传对应的丢失的报文。
实际上,A、B的数据传输过程中还会涉及到win这个参数:
首先,A、B之间先要建立一个逻辑通道,并协商win参数。即A会告诉B,它一次性可以发送5000字节的报文,而B告诉A它一次性可以处理4000字节的报文。那么,A、B之间就会按照较小的一方来传输信息。所以,A一次性传输4000字节的信息。
我们现在假设A将这4000字节的报文分为4个1000字节,连续发送4次给B。然后,当B接收到全部的报文时,它会回复一个携带win = 0的字段的报文给A,表示此时B 已经达到了最大可处理信息的容量,让A暂时不要向B发送消息。然后,当B将这4000字节的信息处理完毕之后,会向A回复win = 4000的字段,表示此时B的窗口已经恢复到4000字节了;如果此时电脑又打开了一个应用程序,使得win = 3000,那么A就会根据这个数值发送对应大小的数据报文。
 窗口大小:指无需等待确认就可以连续发送的最大数据量。
在这里插入图片描述
假设A一次性可以发送5000;B一次性可以接收4000,并且A、B协商MTU为1000,则当A连续发送4条1000的报文时,B会恢复报文:win = 0。
 TCP分段:
 已经有IP分段了,为什么还要进行TCP分段?
设想这样一个问题:A要向C发送数据,但是中间经由B,而且A、B之间协商的MTU与B、C之间协商的MTU不同。那么数据的传输会是怎样的?
在这里插入图片描述
现假设A、B之间的MTU大于B、C之间的MTU,那么,当报文由B发送给C时,为了满足B、C之间的MTU要求,数据会进行二次分片。
二次分片的后果是什么?试想,如果在数据传输过程中发生了丢包,那么A要根据C发送的确认报文进行判断。但是,由于数据进行了二次分片,导致C向A发送的确认报文中的序列号A无法识别。自然也就无法确认是否发生丢包以及进行重传了。
如何解决这个问题?可以规定在数据传输之前,在传输层提前将数据进行分片;并且,规定TCP协议封装的数据不允许在IP层面进行分片操作。所以,经由TCP协议封装的数据,DF 会被置为1。

 TCP分片方法:
MSS(最大传输段)= MTU – IP头部 – TCP头部。
我们再以一个具体示例来看看TCP分片的应用:
假设A、B之间的MTU = 1500;B、C之间的MTU = 500。那么,正常情况下,A在分片时会按照1500来分片(因为A无法知道B、C之间的MTU)。那么就会导致数据无法传输到C。这时,就要借助PMTU来解决了。
PMTU:路径MTU发现协议
 原理:A在正式构造数据包之前,会先构造一个数据报文,这数据报文的源为A,目标为C,且该数据报文内没有具体信息,只用‘0’填充,大小为1500。然后这报文首先到达B,B在接收到这报文之后,发现这报文的大小为1500,且DF = 1,由于B、C之间的MTU为500,那么B就无法将该报文发送给C。此时B会丢弃这报文,并且向A回复一条报文,这报文的大致内容为:你的报文不可达,原因是B、C之间的MTU为500。A在接收到这报文后,又构造一个报文,新构造的报文的源为A、目标为C,且大小为500字节。这时再次发送给B,B在接收到这500字节大小的报文后,因为符合B、C间MTU要求,所以会将这报文发送给C,C在接收到这报文后,会像A发送回复报文,表示C接收到了A发送的报文。A在接收到C发送的报文后,就可以知道将MTU设为500就可以将数据报文发送给C,于是,A就会以MTU =500对数据进行分片。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值