目录

1.网络层功能概述

2.路由算法

2.1.静态路由算法、动态路由算法和层次路由

2.2.路由信息协议(Routing Information Protocol,RIP)

2.3.最短路径算法OSPF

2.4.边界网关协议BGP(Border Gateway Protocol)

3.IPv4

3.1.IP数据报格式

3.2.IP数据包分片

3.3.IPv4地址

3.4.网络地址转换NAT

3.5.子网划分和子网掩码

3.5.1.子网划分

3.5.2.子网掩码

3.5.3.使用子网时分组的转发

3.6.无分类编址CIDR

3.7.ARP

3.8.DHCP协议

3.9.ICMP协议

4.IPv6

5.IP组播

5.1.IP组播的基本概念

5.2.IGMP协议和组播路由选择协议

6.路由器


1.网络层功能概述

将分组从源端传输到目的端,传输单位是数据报

1.路由选择和分组转发(最佳路径)

2.异构网络互联

3.拥塞控制(开环控制:静态;闭环控制:动态)

2.路由算法

2.1.静态路由算法、动态路由算法和层次路由

1.静态路由算法:手动配置路由信息。适用于变化不大的小型网络。

缺点:不能及时适应网络状态的变化,不适用大型网络

2.动态路由算法:路由器间彼此交换信息,按照路由算法优化出路由信息。可以适应不断变化的网络,适用大型网络

缺点:算法复杂,增加网络负担

3.层次路由:当网络规模扩大时,可以分成多个自治系统

自治系统内使用内部网关协议(IGP):RIP、OSPF

自治系统间使用外部网关协议(EGP):BGP

2.2.路由信息协议(Routing Information Protocol,RIP)

应用层协议,基于广播UDP,选择跳数最少

1.RIP基于距离向量,要求每个路由器都维护从自己到其他每个目的网络的唯一最佳距离记录(也称跳数,即到目的网络所经历的路由器的个数。特别的,从路由器到直接连接的网络距离为1;最多允许15个路由器,因此,距离16表示网络不可达)

2.仅和相邻路由器交换信息,每30秒交换一次(长时间未能进行交换,则说明不可达,距离更改为16),交换的信息是自己的路由表(完整的路由表,全部路由信息)

3.每个路由器刚开始的时候只知道和自己直接相邻的网络,经过若干轮交换路由表后,该路由器就能直到本自治网络内任一网络的最短距离和下一跳路由器的地址

4.交换过程:

每个路由表内含有三个数据:<目的网络><距离><下一跳的路由器地址>,设A的相邻路由器B给A发送了一个路由表:<C><3><B>

①修改该路由表,距离加1,下一跳路由器地址为B:<C><4><B>(每次必做)

②若A中的原路由表中没有关于C的路径,则直接添加该路径(弥补未知)

③若A中的原路由表中有关于C的路径,且下一跳地址为B,则直接进行更新(保持最新)

④若A中的原路由表中有关于C的路径,但下一跳地址不是B,则对原表中距离的和B发来的距离进行对比,将路由表中的路径信息更新为距离更短的那个(距离最短)

⑤超时未收到B的更新路由表,则把B设置为不可达,即距离16

5.特点:收敛慢。网络出现故障的时候,需要长时间才能将所有路由器中通往该网络的路径更新为不可达

2.3.最短路径算法OSPF

OSPF是网络层协议,使用IP数据报,选择代价最低

1.向谁发送:通过洪泛法(路由器向自己相邻的路由器发送信息,相邻的路由器收到信息后,又向自己相邻的路由器发送该信息。类似广播)向本自治系统内所有的路由器发送信息(RIP仅和自己相连的路由器交换信息)

2.发送什么:发送的是和自己相邻的所有路由器的链路状态,即和哪些路由器相连,还有通往那些路由器的链路的代价(RIP交换的是自己整个路由表)

3.多久交换一次:仅链路发生变化时(RIP是每30S)

4.规模大的时候,OSPF比RIP好(规模过大的时候,OSPF会将一个自治系统划分成若干个区域)

5.OSPF不存在收敛慢的问题

2.4.边界网关协议BGP(Border Gateway Protocol)

应用层协议,基于TCP

1.向谁发送:其他自治系统的BGP发言人(需要建立TCP连接)

2.发送什么:交换网络可达性信息(到达某一网络要经历的一系列自治系统,即路径)(据此选出到达各AS的较好路由)

3.多久交换:只有发生变化时候(类似OSPF),仅更新有变化的部分(刚开始时,交换整个BGP路由表)

4.支持CIDR

3.IPv4

3.1.IP数据报格式

1.版本:4bit,指明是IPv4还是IPv6

2.首部长度:4bit,单位为4B,表明整个首部的长度。因为首部最小为20B,因此,首部长度内数据为0101 - 1111。若首部的长度不为4的倍数,则填充为4的倍数(首部长度必为4的倍数)

3.总长度:16bit,单位为1B,表明整个IP数据报的长度

4.生存时间:8bit,IP分组的保质期。每经过一个路由器就-1,直到0就丢弃(防止数据包不断在网络中循环)

5.协议:8bit,指出此分组携带的数据使用何种协议。6为TCP,17为UDP

6.首部检验和:只检验首部

7.源地址和目的地址:32bit,分别表示发送方的IP地址和接收方的IP地址

8.标识:同一数据报的分片使用同一标识(接收端根据标识将相同标识的分片组成数据)

9.标志:中间位:DF(Dont Fragment) = 1,禁止分片; DF = 0,允许分片

最低位:MF(More Fragment)= 1,后面还有分片;MF = 0,最后一个分片 / 没分片

10.片偏移:指出该片在原分组的相对位置,以8B为单位(除了最后一个分片,每个分片的大小都是8的倍数)

11.记忆:一总八片的首四

3.2.IP数据包分片

1.分片的原因,数据链路层的MTU严格限制IP数据报的长度,若大于该长度,则无法传输,因此,需要分片(过长但是不同意分片的分组,则无法传递,返回ICMP差错报文)

2.分片在接收方的网络层进行组装,同一分组的标识相同,根据片偏移字段确定该分片属于原数据的哪一个部分(参考3.1中的8、9、10)

例如:原数据部分为3800B,设最长分片不超过1420B

A.首部为20B,因此,最长分片的最大数据部分为1420 - 20 = 1400B

B.3800 = 1400 + 1400 + 1000

C.0 - 1399为第一个分片:因为是第一个分片,片偏移量为0,总长度为数据部分1400B + 首部20B = 1420B,DF = 0(允许分片),MF = 1(不是最后一个分片),标识为12345

1400 - 2799为第二个分片:第一个字节为1400B,除以单位8B,片偏移量为175,总长度为数据部分1400B + 首部20B = 1420B,DF = 0(允许分片),MF = 1(不是最后一个分片),标识为12345

2800 - 3799为第三个分片:第一个字节为2800B,除以单位8B,片偏移量为350,总长度为数据部分1000B + 首部20B = 1020B,DF = 0(允许分片),MF = 0(是最后一个分片),标识为12345

3.3.IPv4地址

IP地址:标识路由器主机的接口,一个接口对应一个IP地址(<网络号><主机号>)

受限制使用的IP地址

1.0.0.0.0:可以作为源地址,不可以作为目的地址。本网范围内表示主机,该主机不清楚在发送数据的时候应该填什么源IP地址

引用:知乎@车小胖

0.0.0.0和255.255.255.255这两个IP地址到底有啥用? - 知乎

2.网络号全0,主机号特定: 表示本网内某个特定主机,可以作为源地址,不能作为目的地址

3.网络号全1,主机号全1:不能作为源地址,但能作为目的地址,本网广播地址,路由器隔离广播域,因此,路由器不会转发(参考1中的255.255.255.255)(本网内广播,区别5)

4.网络号特定,主机号全0:不能作为源地址,也不能作为目的地址,表示某一整个网络

5.网络号特定,主机号全1:不能作为源地址,但能作为目的地址,直接广播地址(对其他网络的主机进行广播,区别3)

6.网络号127,主机号为非全0或者非全1:可以作为源地址,可以作为目的地址,本地环回地址

小结:网络号全0,表示本网,都不能作为目的地址,但能作为源地址

主机号全1为广播地址,能作为目的地址,但不能作为源地址

主机号全0不能作为目的地址和源地址

7.私有地址:内部网络,与外界通信使用NAT

A类:10.0.0.0 - 10.255.255.255,网段个数1

B类:172.16.0.0 - 172.31.255.255 网段个数16

C类:192.168.0.0 - 192.168.255.255 网段个数256

8.

网络类别 最大可用网络数 第一个可用网络号 最后一个可用网络号 每个网络中的最大主机数
A 2 ^ 7 - 2 1 126 2 ^ 24 - 2
2 ^ 14 - 1 128.1 191.255 2 ^ 16 - 2
C 2 ^ 21 - 1 192.0.1 223.255.255 2 ^ 8 - 2

每类地址中都去除全0(0、128.0、192.0.0),A类地址多去除一个127(巡回地址)

每个网络中去除主机号全为0(表示本网络),全1(广播地址)

3.4.网络地址转换NAT

在专有网连接到因特网的路由器上安装NAT软件,使其成为NAT路由器;专有网与外界进行数据交换使用的IP地址为NAT路由器的IP地址

例如:A给B发送数据

1.A给NAT路由器发送数据报①:网络层:源IP地址为192.168.0.3(A的专有网内地址),目的地址为213.18.2.4(B的IP地址);传输层:端口号30000

2.NAT路由器给B发送数据报①:将C中原来的源IP地址192.168.0.3(A的专有网内地址)替换为172.38.1.5(NAT路由器IP地址),并且端口号也从30000替换为40001,但是,目的地址不变,这样B就能识别(根据NAT转换表)

例如:B给C发送数据,C为专有网内地址192.168.0.4

3.B给NAT路由器发送数据报②:网络层:源IP地址为213.18.2.4(B的IP地址),目的地址为172.38.1.5(NAT路由器IP地址);传输层:端口号40002

4.NAT路由器给A发送数据报②:将D中原来的目的地址172.38.1.5(NAT路由器IP地址)替换为192.168.0.4(C的专有网内地址),端口号40002替换为30001(根据NAT转换表),但是,源地址不变

3.5.子网划分和子网掩码

3.5.1.子网划分

1.仅对内展现,对外仍然表现为没有划分子网的网络

2.从主机号借用若干别特作为子网号:<网络号><子网号><主机号>(子网号可以没有,但是主机号至少2位)(主机号不能全0,不能全1;子网号可否全0全1看情况)

3.5.2.子网掩码

1.网络号全1,主机号全0

2.子网掩码与Ip地址逐位相与,得到子网网络地址

例如:IP地址为141.14.72.24,子网掩码为255.255.192.0,求网络地址

1.72的二进制为0100 1000

2.192的二进制为1100 0000(剩下6位 + 8位 = 14位主机号)

3.相与得到0100 0000→64

4.网络地址为141.14.64.0

若子网掩码为255.255.224.0

1.72的二进制为0100 1000

2.224的二进制为1110 0000(剩下5位 + 8位 = 13位主机号)

3.相与得到0100 0000→64

4.网络地址为141.14.64.0

3.5.3.使用子网时分组的转发

1.路由表中含有:

①目的网络地址

②目的网络子网掩码

③下一跳地址(接下来应该将数据传到哪)

2.设路由器收到了一个数据

①从IP分组的首部提取数据的目的IP地址

②判断是否能够直接交付,判断方法:将目的地址逐一与该路由器的各个子网地址的子网掩码进行相与操作,若相与结果,与任一子网对应,则转发给该子网

直接交付:该路由器的子网中是否含有该目的地址

间接交付:该路由器的子网中并没有该目的地址,需要交付给下一个路由器

③若所有子网都不符合目的地址,查看是否有和目的地址相同的特定主机路由

④检测路由表中是否有路径:目的地址和路由表中的目的网络子网掩码逐一相与判断是否与其对应,对应则发送给相应路由

⑤若④仍然找不到,则发送给默认路由0.0.0.0,由其转发给下一个路由,直到找到目的地址(并非无限制的转发,被生存时间所限制)

⑥若生存时间用尽仍没找到,则丢弃,并报告出错

3.6.无分类编址CIDR

1.消除了传统类地址和划分子网概念

在IP地址后加上 /网络前缀的位数

2.构成超网:将多个子网聚合成一个较大的子网。

方法:所有网络地址取交集

例如:206.1.0.0/17 和 206.1.128.0/17 聚合后得到206.1.0.0/16

3.最长前缀匹配:查找路由表时,若有多个结果(逐位相与),应选择具有最长网络前缀的路由(前缀越长,地址块越小,路由越具体)

例如:目的地址为206.0.71.130;路由表内有A:206.0.71.128/25,B:206.0.71.0/25,C:206.0.68.0/22

①前两个字节都相同,故只比较后两个字节

②目的地址:0100 0111 1000 0010

A:网络前缀长度为25,故地址掩码为1111 1111 1000 0000,与目的地址相与得到:0100 0111 1000 0000,结果为206.0.7.128/25,匹配成功

B:网络前缀长度为25,故地址掩码为1111 1111 1000 0000,与目的地址相与得到:0100 0111 1000 0000,结果为206.0.7.128/25,匹配失败

C:网络前缀长度为22,故地址掩码为1111 1100 0000 0000,与目的地址相与得到:0100 0100 0000 0000,结果为206.0.68.0/22,匹配成功

因为匹配成功中A的前缀位数最长,因此转发给A

3.7.ARP

数据链路层发送数据需要接收方IP地址和MAC地址,发送方IP地址和目的地址。但是,有时候仅有接收方的IP地址,而没有接收方的MAC地址,ARP就是通过接收方的IP地址查询其MAC地址

1.若目的主机是本网络的主机

(IP1为源主机,IP3为目的主机)

①查询本机的ARP高速缓存(ARP高速缓存中本网络IP地址和MAC地址的映射)中是否有目的主机的IP地址

②若有,则就可以据此查出目的主机的MAC地址,并将其写入MAC目的地址

③若没有,则需要发送广播ARP请求分组目的MAC地址为FF-FF-FF-FF的帧,局域网内所有主机都将会收到这个分组(交换机能隔离冲突域,但不能隔离广播域,虽然本网络内所有主机都会收到该广播ARP请求分组,但有且仅有目的主机会响应),目的主机收到后,就会返回ARP响应分组(单播分组,局域网内其他主机无法收到),该分组含有目的主机的IP地址和MAC地址。本主机收到后,就将这个IP地址和MAC地址的映射写入ARP高速缓存中(方便下次发送)

2.若目的主机不是本网络主机

①本主机通过目的主机的IP地址与子网掩码逐位相与判断是否接收方是本网络内的主机

②若不是本网络内的主机,则寄希望于本主机的默认网关(路由器)找到目的主机的MAC地址

③本主机将会给默认网关发送广播ARP请求分组,而不是其本来想要发送的目的主机(发送方IP地址为本主机,MAC地址为本主机MAC地址,接收方IP地址为默认网关,MAC地址为FF-FF-FF-FF)

④默认网关接收到该广播ARP请求分组后,将会给本主机返回一个单播ARP相应分组(其他主机收不到),含有默认网关的IP地址和MAC地址(而非本主机本来想发送的目的主机的IP和MAC地址)

⑤本主机给目的主机发送数据,数据中的IP源地址为本主机地址,MAC源地址为本主机地址,IP目的地址为目的主机IP地址,MAC地址为默认网关的MAC地址

⑥该数据每次经过中间结点(路由器)的时候(进入新的网络环境)(每次一到下一跳都要使用一次ARP协议),都会进行解封装、封装,因此,其目的MAC地址和源MAC地址都会进行改变,但是目的IP地址和源IP地址不会因此而改变。其中,源MAC地址会变成该中间结点的MAC地址,目的MAC地址将会变成下一跳的结点的MAC地址

⑦到目的地址所属的默认网关后,目的MAC地址将会变为目的主机的MAC地址,源MAC地址为目的主机所属的默认网关的MAC地址(同样通过ARP协议查询目的主机的MAC地址),在发送的过程中源IP地址和目的IP地址从未改变

3.8.DHCP协议

应用层协议,使用客户/服务器方式,通过广播进行交互,基于UDP,动态分配IP地址

①功能:

1.即插即用:主机进入范围内,DHCP就可以为它进行服务

2.地址重用:设IP地址为IP1,本来由A使用,在A不再使用该地址后,B可以使用IP1

3.支持移动用户加入网络

4.在用地址续租:延长主机使用其IP地址的期限(IP地址使用有期限)

②过程:C/S,全程广播,即目的地址为255.255.255.255

1.主机广播DHCP发现报文(寻找本网络内的服务器):源地址0.0.0.0,由主机发送,代表本网络内本主机,此时本主机并没有IP地址,故用0.0.0.0表示本主机;目的地址255.255.255.255,即广播地址

2.DHCP服务器广播DHCP提供报文(拟分配,可能有多个服务器响应):源地址为DHCP服务器地址,由DHCP服务器发送;目的地址255.255.255.255,即广播地址

3.主机广播DHCP请求报文(针对某一个服务器申请,此时仍采用广播可以告诉其他服务器,该主机已经和某服务器进行了通信):源地址0.0.0.0,由主机发送;目的地址2555.255.255.255,即广播地址

4.DHCP服务器广播DHCP确认报文(正式分配):源地址为DHCP服务器地址,由DHCP服务器发送;目的地址为255.255.255.255,即广播地址

3.9.ICMP协议

网络层协议,作用是通过ICMP报文报告差错或者异常情况,ICMP报文作为IP数据报的数据部分加上首部组成IP数据报

1.ICMP差错报文:

①终点不可达:路由器或者主机无法交数据付

②源点抑制:网络内产生拥塞

③时间超过:路由器收到生存时间为0的数据或者目的主机没在预定时间内收到完整的数据报

④参数问题:首部字段出问题

⑤改变路由:更改最佳路由路径

2.ICMP询问报文

①回送请求和回答报文:测试目的站是否可达及了解状况(PING)

②时间戳请求和回答报文:用来进行时间同步和测量时间

3.不应发送的情况:

①ICMP差错报文出错

②仅对分组第一个出错数据发送ICMP差错报文,之后的分组不发送

③对于组播地址(一点对多点)不发送ICMP差错报文

④对于特殊地址(例如127巡回)不发送ICMP差错报文

4.IPv6

1.地址空间从ipv4的32bit提升到128bit,根本上解决地址耗尽问题(CIDR,NAT不能根本解决)

2.彻底移除检验和字段

3.将可选字段移除首部,形成扩展首部

4.即插即用,无需DHCP

5.首部长度为8B的倍数,而ipv4为4B的倍数

6.只能在主机分片,ipv4可以在路由器和主机分片

5.IP组播

5.1.IP组播的基本概念

1.单播:发送数据到单个目的地,点对点

广播:发送数据到某一广播域或子网内所有设备,点对多点

组播:发送数据到某些特定主机,到这些主机的默认网关处开始复制数据和分发(在之前的传输过程中仅发送一份数据),点对多点

2.组播的设备将会被分配到一个组播地址,使用D类地址。只能作为目的地址,不能作为源地址(单播地址作为源地址)

3.基于UDP,尽最大可能交付

4.不产生ICMP报文

5.组播MAC帧的地址和组播IP地址的映射关系:MAC地址开头一定是01-00-5E,取IP地址的后23位作为MAC地址的后23位

5.2.IGMP协议和组播路由选择协议

1.IGMP:让路由器知道是否本局域网内有主机是某个组播组成员,使用IP数据报,网络层协议

2.组播路由选择协议:找出以源主机为根节点的组播转发树,避免在路由器之间兜圈子

6.路由器

1.路由选择:路由选择处理机根据路由选择协议(RIP,OSPF)构造出路由表

2.分组转发:交换结构根据转发表(由路由表得来)对输入端口的数据找到合适的输出端口进行转发(若是RIP/OSPF分组(外部),则送往路由选择处理机;若是数据分组,则送往输出端口转发)

3.输入端口的处理(解封装):物理层接收比特流→数据链路层提取数据帧→网络层提取数据报(排队产生时延)

输出端口(封装):网络层→数据链路层→物理层

输入端口和输出端口队列产生溢出是分组丢失的重要原因(缓存满了,直接丢弃)

4.可以互联两个不同网络层协议的网段

408计算机网络学习笔记——网络层相关推荐

  1. 计算机网络学习笔记--网络层知识点整理

    为什么要划分网络层? 不用的网络有不同的协议和标准,为了可以在不同网络之间互访,共享双方的资源,并且还要保持每个计算机网络本来的独立性,所以才划分出了网络层,并制定了专门的协议来负责网络间通信. 网络 ...

  2. 408计算机网络学习笔记——计算机网络体系结构

    目录 1.计算机网络概述 1.1.计算机网络的组成 1.2.计算机网络的分类 1.3.计算机网络性能指标 2.计算机网络体系结构与参考模型 2.1.计算机网络的分层结构 2.1.1.分层的基本原则 2 ...

  3. 408计算机网络学习笔记——数据链路层

    目录 1.数据链路层基本概念 2.组帧 2.1.字符计数法 2.2.字符填充法 2.3.零比特填充法 2.4.违规编码法 3.差错控制 3.1.检错编码 3.1.1.奇偶检验码 3.1.2.CRC循环 ...

  4. 408计算机网络学习笔记——3.6局域网

    3.6 局域网 3.6.1局域网基本概念和体系结构 局域网,简称LAN,是指在某一区域内由多台计算机互联组成的计算机组,它使用的是广播信道而不是点对点信道. 局域网的特点: 1.覆盖范围小,几千米之内 ...

  5. 408计算机网络学习笔记——应用层

    目录 1.应用层的功能 2.网络应用模型 2.1.客户/服务器模型(C/S) 2.2.P2P模型(peer to peer) 3.DNS系统 3.1.域名服务器 3.2.域名解析过程 4.FTP 5. ...

  6. 片偏移怎么计算_计算机网络学习笔记(四)之网络层

    点击蓝字关注我吧 越努力越幸运!!! 1 网络层的功能 1.1异构网络互联 网络的互联:指将两个以上的计算机网络,通过一定的方法, 用一种或多种通信处理设备(即中间设备)相互联接起来,以构成更大的网络 ...

  7. 计算机网络学习笔记:第三章

    文章目录 计算机网络学习笔记:第三章 前言 3.1.概述和运输层服务 3.1.1 运输层和网络层的关系 3.1.2 因特网运输层概述 3.2.多路复用与多路分解 前言 运输层位于应用层和网络层之间,是 ...

  8. 计算机网络学习笔记:第二章

    文章目录 计算机网络学习笔记:第二章 前言 2.1.应用层协议原理 2.1.1 网络应用程序体系结构 2.1.2 进程通信 2.1.3 可供应用程序使用的运输服务 2.1.4 因特网提供的传输层服务 ...

  9. 计算机网络-学习笔记

    计算机网络-学习笔记 1.1.1 概念.组成.功能和分类 概念:计算机网络:是一个将分散的.具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统.计算机网 ...

最新文章

  1. Select函数实现原理分析
  2. 那些美的让人流连忘返的风景照片
  3. Handler消息机制(八):Handler内存泄漏的场景有哪些,如何避免
  4. 利用 force index优化sql语句性能
  5. 关于Matconvnet中Conv-ReLU-Pool-NormBatch的总结与思考
  6. java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。
  7. 面试官:换人!他连进程线程协程这几个特点都说不出
  8. LeetCode20.有效的括号 JavaScript
  9. 阿里巴巴在内蒙古旱区试水物联网灌溉技术,一年省出1.5个西湖 1
  10. vscode创建代码片段
  11. 基于51单片机超声波测距仪设计倒车雷达防撞报警器
  12. Mysql及SQLyog安装教程
  13. 使用python生成正弦光栅的代码示例,包括竖直光栅,水平光栅,圆光栅
  14. rce远程执行 0day漏洞 复测
  15. c语言中排列组合函数,排列组合c怎么算公式是什么
  16. InstallShield
  17. WEB——LNMP服务搭建
  18. VC++通过查看ReactOS开源代码,解决完整路径dll加载失败问题(附源码)
  19. 基于jsp servlet javabean的学生管理系统
  20. 2022年5个人工智能趋势

热门文章

  1. 大数据入门级学习攻略
  2. 阅读笔记:Blindly Assess Image Quality in the Wild Guided by A Self-Adaptive Hyper Network
  3. Android无线热点默认属性修改
  4. html里如何将数字转换为条形码,excel中如何把数字变成条形码?
  5. 支付宝客户端架构解析:iOS 容器化框架初探
  6. 骨传导品牌排行榜前十名,2022十大骨传导耳机品牌
  7. php WEB报表工具的设计
  8. python参考手册 豆瓣_详解python 模拟豆瓣登录(豆瓣6.0)
  9. 计算机与师范数学的联系论文,数学师范生毕业论文
  10. 五款高效率黑科技神器工具,炸裂好用,省时间