网络层
第四章_网络层
4.1 网络层的功能
网络层的功能主要涉及四个部分:异构网络互连、路由与转发、SDN 的基本概念、拥塞控制。
其中异构网络互连、路由与转发、拥塞控制的示意图如下:
SDN 的基本概念如下:
4.2 IPv4
IPv4 是 网际协议(Internet Protocol,IP)的普遍使用版本。其在计算机网络模型中的位置如下图所示:

4.2.1 IPv4 分组
本章节考研考纲重点内容如下:

4.2.1.1 IPv4 分组格式
一个 IP 分组(或称 IP 数据报)由首部和数据部分组成,其首部的前一部分固定,为 20 字节,IP 数据报格式如图所示:
其各个字段的含义也尤为重要,文字介绍几个重点概念,每个字段详细介绍如图所示:
- 总长度: 占 16 位,以 1B 为单位,表示首部和数据部分之和的长度。因此 IP 数据报的最大长度为 216-1 = 65535B。
- 首部长度: 占 4 位,以 4B 为单位,可表示的最大首部长度之和为 24-1 * 4B = 60B,IP 首部的长度必须是 4 的整数倍,若可选字段导致长度不足,则通过填充字段进行填充。
- 片偏移: 占 13 位,以 8B 为单位,指出分片数据位置相对于原始数据报数据部分开头的偏移量。除最后一个分片外,其他的数据长度必须是 8B 的整数倍。
- 标识: 占 16 位,源主机用一个增量序列,为每个数据报(分组)设置标识字段。它并不是“序号”(IP 是无连接服务)。分片的时候,每个分片都复制源数据报的标识字段值,以便目的主机正确还原为原数据报(分组)。

4.2.1.2 IPv4 数据报分片
MTU 的概念: MTU(最大传送单元) 是一个数据链路层的帧所能够承受的最大数据量,不同的链路 MTU 可能不同,比如以太网是 (IP 数据报少于这个数需填充) 46–1500(MTU),有些是 4000。该概念经常被提及,涉及到 IP 数据报分片操作。
当 IP 数据报首部标志字段中 DF = 0 时,会被允许分片,每个分片带首部 + 被分割的数据部分,被分片后,每个分片能够从不同的链路进行发送,因此可能会乱序到达目的主机。目的主机会使用标识字段,标志字段,片偏移三个字段完成分片的重组。
当 IP 数据报首部标志字段中 DF = 1 时,不允许分片,而此时数据报的长度超出某一段链路的 MTU ,会向源主机发送报文表示异常。
IP 分组进行分片如图所示:
注意: 除最后一个分片外,其他的数据长度必须是 8B 的整数倍。

4.2.2 IPv4 地址
为了满足日益增长的实际需求,逐步提出了以下概念: 分类的 IP 地址 –> 子网划分 –> CIDR –> NAT
4.2.2.1 分类的 IPv4 地址
分类的 IP 地址: IPv4 最早的时候采用的分类的 IP 地址,不论哪类 IP 地址,都由网络号和主机号构成。
分为 A、B、C、D、E 五类。A、B、C 类均为单播地址(用于一对一通信)。不同类型的地址通常前若干比特位固定且表示网络号的比特位数不同。为了方便记忆,通常将 32 位 IP 地址用点分十进制表示。
当判断一个 IP 是哪类地址,既可以通过前几位比特位的特征,也能通过其点分十进制表示方式的第一个十进制数的范围。
分类的 IP 地址如图所示:
其中存在几种特殊的 IP 地址,如图所示:

默认网关: 默认网关指的是若一个终端想要接入互联网,其优先经过的路由器的 IP 地址。
IP 分组转发过程如图所示:

4.2.2.2 子网划分
本小节涉及内容如下:
子网划分技术:
就是将主机号的前若干比特位拆分出来当成子网号:
- 引入子网划分技术前:<网络号><主机号>
- 引入子网划分技术后:<网络号><子网号><主机号>
这不仅是在局域网内部逻辑上进行划分。为了使其能够起到实际的作用,引入子网掩码来进行保证子网的逻辑不会出错,比如终端 IP 地址并不是子网号不全为 1 或不全为 0,其主机号就能全为 1 或 0。即 <10><00000…> 依旧表示的是整个网络(子网)。单论主机号,其全为 0 或全为 1 依旧具有特殊的含义。
子网掩码: 是一个与 IP 地址对应的 32 位二进制串,前多少个 bit 为 1 代表 IP 地址前面多少个 bit 为网络前缀(网络号 + 子网号),计算机通过将其与 IP 地址做 “与”运算(只有两个都是 1,结果才为 1)提取出网络前缀。
路由器的数据转发过程:
引入子网划分技术后,其路由器的功能相比原先的标准分类地址也发生了变化,路由器转发过程如下图所示:
主机的数据转发过程:
主机发送数据时,会将源 IP 地址和目的 IP 地址分别与子网掩码进行按位与运算,得到各自的网络前缀(子网地址),若两者相同,则说明在同一子网;否则不在同一子网:
- 若在同一子网:终端首先会通过 ARP 协议,查询目的主机 IP 对应的 MAC 地址,并在数据链路层封装成帧,发往该 MAC 地址。
- 若不在同一子网:通过 ARP 协议查到默认网关的 MAC 地址,将数据报发给默认网关,默认网关通过 ARP 获取下一跳 MAC 地址,再将数据帧转发至下一跳路由器(路由表查下一跳 IP 只得知转发端口,即只知道走哪条路,有 MAC 地址才知道具体发到哪个设备)。
通过一张图的模拟五个数据传播过程熟悉子网划分技术:
- H3→H6(同一子网内的两台主机)
- H1→H3(不同子网内的两台主机)
- H1→H7(采用子网划分技术的网络→传统网络):老式路由器可以看做(实际通过网络号前若干比特进行判断)使用隐式默认子网掩码的路由器。
- H7→H1(传统网络→采用子网划分技术的网络):遇到转发表带子网掩码的路由器,照常匹配即可(子网划分技术路由器有默认子网掩码),
- 主机 H1 发往 Internet 的某个 IP 数据报如何传输?(设目的 IP 地址 = 111.2.3.4):走默认路由。

4.2.2.3 无分类编制(CIDR)
引入子网掩码之后,IP 地址的网络边界不再由 A/B/C 类固定划分,而是由子网掩码动态决定。通过子网掩码,可以自由选择网络前缀长度,从而将 IP 地址空间划分为任意大小的连续网络块。
在 CIDR 中,IP 地址的结构被统一表示为 <网络前缀><主机号>,并用“/前缀长度”显式标识网络位数,例如 192.168.1.0/24。这样就不再依赖传统分类地址体系。
一个单位同样会存在子网划分的需求,CIDR 具有两种子网划分方式,即定长子网划分和变长子网划分,两种划分方式都会产生一些不能分配的地址。但是定长是对需求可能分配多了,用不完。而变长一般对需求分配均匀,但是可能会出现不能再进行划分的子网(因为前缀原则),但总体来说,变长的利用率更高。
定长子网划分: 和子上一小节子网划分技术类似,通过占用一定长度的主机号。进行划分,相应的子网掩码也会改变。如:
为 20.115.21.0/24 划分四个子网:
- 20.115.21.00000000 / 26 - 20.115.21.00111111 / 26 划分给部门一。
- 20.115.21.01000000 / 26 - 20.115.21.01111111 / 26 划分给部门二。
- 20.115.21.10000000 / 26 - 20.115.21.10111111 / 26 划分给部门三。
- 20.115.21.11000000 / 26 - 20.115.21.11111111 / 26 划分给部门四。
下面用一道真题来熟悉:

变长子网划分(重点,难点): 变长子网划分要遵循的原则是在子网划分(VLSM)中,同一父网络下划分出的子网必须互不重叠。。比如 20.115.21.0/26 前 26 位是固定的,我们只需要管后 6 位满足该原则即可(画后 6 位 的前缀树)。
类比哈夫曼树编码,通过从根到叶结点“构造哈夫曼树”技巧,我们可以快速得出划分出的最小子网的网络前缀。但实际上只是简化的二叉前缀树的画法
如图所示:
注意:在 VLSM 子网划分中,同一层级的子网必须互不重叠,因此不能将存在包含关系的网络作为并列子网同时使用。如 128/28 虽然能划分出 128/29 但是不能说作为并列子网同时使用。
下面用一道真题来熟悉:

4.2.2.4 路由聚合
路由聚合和 CIDR 是一脉相承的技术。
路由聚合:
对于路由聚合技术,就是指路由器中,如果几条表项属于同一转发接口且部分网络前缀也相同,就将这几条路由表项合并成一条。从而压缩路由表规模,提升网络性能。
示意图如图所示:

最长前缀匹配原则: 当引入 CIDR 技术之后,可能会出现目的地址能够匹配多个路由项的情况(即使使用了路由聚合技术)。这个时候应选择网络前缀最长的那一条成功匹配的路由。因为网络前缀越长,对应的地址块就越小,信息就越精确。
如图所示:
“铁柱网吧”嫌弃“咸鱼电信”的路由器太慢,想要单飞,重新拉了一条线接到县里的路由器,并分配了一个 IP 给这个路由器接口。

主机与路由器的数据转发过程: 主机的数据转发过程依旧和 4.2.2.2 小节一致。
路由器的数据转发过程相比于 4.2.2.2 小节,引入 CIDR 和 路由聚合技术之后,多了一些规则,如图所示:

对于整个前面的 分类、子网划分、CIDR + 路由聚合 技术,我们可以通过下面这一张图模拟数据转发过程,进行熟悉:

4.2.2.5 网络地址转换(NAT)
网络地址转换(Network Address Translation,NAT) 简单来说是让一个局域网共用一个公网 IP 的技术,有效的缓解了 IP 地址池日益紧张的问题,还在一定程度上抵御了外部网络的攻击。其内容如图所示:
通过一张过程图来具体理解:
注意:互联网中所有的路由器对于目的地址为内网 IP 的 IP 数据报(分组)一律不予转发。

4.2.2.6 地址解析协议(ARP)
地址解析协议(Address Resolution Protocol,ARP)是网络层协议,用于将 IP 地址转换为 MAC 地址,以便于数据链路层的封装。不论网络层使用何种协议,在实际链路上传输数据的时候最终都必须使用 MAC 地址。
ARP 协议内容如下:
采用 ARP 协议的主机和路由器本身会维护一张 ARP 缓存表,
表项格式为:<IP 地址><MAC 地址>,会为每个表项设置一个生存时间(防止网络中的结点位置发生变化),如 20 分钟。
当源主机需要进行数据发送时(需进行 MAC 帧的封装)时,会查询 ARP 缓存表。若 ARP 缓存表无缓存记录,会将 ARP 分组封装进 MAC 帧,并发送广播帧(目的地址全为 1)。同一广播域内的正确主机收到会响应一个单播帧,返回正确主机的 MAC 地址。源主机将其存入进 ARP 缓存表。
ARP 分组封装成帧如图所示:
通过一个过程图来进行熟悉:

4.2.2.7 动态主机配置协议(DHCP)
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)其实是应用层协议,使用 UDP 的提供的服务。常用于给主机动态分配 IP 地址、配置子网掩码、默认网关等网络相关的参数。
DHCP 协议内容如下:
一个网路中 DHCP 协商流程如下:

4.2.2.8 网际控制报文协议(ICMP)
ICMP 协议不难理解,更多的时候是记忆问题,其内容如下:
值得注意的是,ICMP 报文会被封装在 IP 数据报的数据部分中,其和 IP 数据报的关系如图所示:

4.3 IPv6
4.3.1 IPv6 地址
本节内容如下:
IPv6 地址占 128 个 bit,每两个字节间用冒号隔开。由于太长了,自然也会存在压缩记法,如图所示:
IPv6 地址的资源分配和 IPv4 也差不多,如图所示:
当然,IPv6 地址多,也会带来另外的好处,比如一台新主机接入局域网时,能够“即插即用”,如图所示:
自然,IPv6 地址中也存在特殊的 IP 地址,IPv6 地址的分类如下:

4.4 路由算法
本节知识总览如下:
其实路由算法本质就是在解决 “最佳路径问题” ,路由算法可分为如下两大类:
- 静态路由算法: 由网络管理员手动配置每一条路由。
- 动态路由算法: 根据网络状态的变化(如链路故障和新增)来动态调整自身的路由表。
对于动态路由算法其实分为距离向量路由算法(Distance-Vector,DV)、链路状态路由算法(Link State,LS) 和 路径向量路由算法(明确要求掌握,上图有误!!!)。
4.4.1 距离向量路由算法
距离向量路由算法不需要知道完整的网络拓扑结构,只需要知道相邻节点间的距离;各邻居节点到目的节点的最短距离,通过迭代交换信息最终收敛到全网一致的最短路径解。RIP 协议就是基于此算法。
示意图如图所示:
通过一道真题来熟悉,如图所示:

4.4.2 链路状态算法
链路状态算法需要知道整体网络的拓扑结构,将其看做一个带权图,利用 Dijkstra 算法求取最短路径。OSPF 协议就是基于此算法。
示意图如图所示:

4.5 路由协议
路由算法和路由协议的关系如图所示:

4.5.1 分层次的路由协议
全世界的路由器数量、网络数量太多,不可能让每台路由器都知晓全世界的网络情况。因此有必要采用分层次的路由协议。 互联网把路由协议划分为两大类:
- 内部网关协议(Interior Gateway Protocol,IGP) (或许换成内部路由协议这个称呼熟悉些)用于 AS(自治系统) 内部的路由选择。例如:RIP、OSPF
- 外部网关协议(External Gateway Protocol,EGP) 用于 AS 之间的路由选择。例如:BGP
示意图如图所示:

4.5.2 RIP 路由协议
路由信息协议(Routing Information Protocol RIP)
4.5.2.1 RIP 的基本概念
RIP 是应用层协议,其在网络体系结构中的位置如图所示:
注意:路由器只是核心工作在网络层,并不代表只能到网络层,现代路由器是一个强大的专用计算机。
RIP 的规定如下:
采用 RIP 协议的路由器交换信息的过程如下:
若 180s(RIP 默认超时时间)还没有收到相邻路由器的更新路由表,则把相邻路由器记为不可达路由器,即把距离设置为 16(表示不可达)
4.5.2.2 RIP 工作过程(从路由器启动到收敛)
RIP 路由器规则如下图所示:
以一个网络作为示例:
0s 时刻过程如下:
注意,0s 时刻是指的是所有路由器在同一时刻启动,并向相邻结点发送报文。
30s 时刻过程如下:
60s 时刻过程如下:
60s 时刻处理完之后这个示例已经收敛。后续在第 90s 在互相交换报文的时候,各个路由器不会进行修改。
4.5.2.3 RIP 工作过程(动态适应网络拓扑变化)
当网络拓扑结构发生变化时,采用 RIP 协议的路由器能够适应并找到最短路径。
假设在 100s 时刻网络中的链路发生了变化,比如在 R1 和 R4 之间新添加了一条链路。
那么在第 120s 时刻:
在第 150s 时刻:
当然,这个示例中忽略了触发更新机制,为了更快适应,我们也可以添加上。
4.5.2.4 RIP 工作过程(反映 RIP 的缺点)
RIP 的缺点:
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。
- 当网络出现故障时,路由器之间需反复多次交换信息才能完成收敛,要经过较长时间才能将故障消息传送到所有路由器(慢收敛现象),俗称坏消息传播得慢。
注:距离向量路由可能会出现环路的情况,RIP 规定路径上的最高跳数 = 16 是一种防止环路的简单粗暴的方式。
重点是第三点,接着上一小节的例子,示例如下:
首先路由器 R2 损坏,造成 Net2 不可达。
需要经过漫长的迭代,路由器才能意识到这个网络不可达,如图所示:

4.5.2.5 RIP 工作过程(反映 RIP 的优点)
RIP 的优点:
- 实现简单、开销小、收敛过程较快。
- 若一个路由器发现了更短的路由,则这种更新信息就传播得很快,在较短时间内便可被传至所有路由器,俗称“好消息传播得快”。
重点是“好消息传播得快”:
书接上回,在 700s 时刻,R2 被修好了:
在 720s 时刻,R1、R3 和 R4 会进行相邻节点的交换,R2 会在 730s 时刻进行交换(因为 R2 是在 700s 时刻才开机的,采用 RIP 协议的每台路由器单独计时)
至此,从 700s 到 720s ,网络中的路由器迅速收敛,所谓“好消息传的快”。
4.5.3 OSPF 路由协议
开放最短路径优先协议(Open Shortest Path First,OSPF)
4.5.3.1 OSPF 协议的基本概念
OSPF 协议属于网络层,其在网络体系结构中的位置如图所示:
大致原理为,各个节点使用邻接表表示自己与相邻节点的链接信息,在各路由器泛洪得到整张网络拓扑图之后,运行 Dijkstra 算法找到最短路径。如图所示:
几个易混淆的术语:
- LSA(Link-State Advertisement):链路状态通告,就可以看做是 LSDB 中的一个单链表。
- LSDB(Link-State Database)—— 链路状态数据库,就看做就是整个邻接表,在 OSPF 中被称作 LSDB。
- LSI(Link State Information):链路状态信息,是一个广义的概念,指代所有描述链路状态的信息。可以说 LSA 是 LSI,也可以说 LSDB 是 LSI。
把 LSI 比作一本书的内容,LSDB 比作书,LSI 比作书的某一章节。
4.5.3.2 OSPF 协议的特点
与 RIP 相比,OSPF 具有以下四个主要特点:
- OSPF 使用洪泛法向本自治系统中所有路由器发送信息:路由器通过所有输出端口向相邻路由器发送信息,每个相邻路由器再将该信息转发给其所有邻居(但不再回传给刚刚发送信息的路由器,类似交换机的广播)。最终,整个区域内的所有路由器都会收到该信息的一个副本。而 RIP 仅向直接相邻的几个路由器发送信息。
- OSPF 发送的信息是本路由器与其相邻路由器之间的链路状态(局部拓扑信息),而非全局路由表:RIP 发送的是本路由器所知的全部路由信息(完整的路由表)。
- OSPF 仅在链路状态发生变化时触发洪泛更新,收敛速度快,不会出现 RIP 中 “坏消息传得慢” 的问题:而 RIP 不论网络拓扑是否变化,都需定期交换路由信息。
- OSPF 是网络层协议,不使用 UDP 或 TCP,而是直接封装在 IP 数据报中(IP 首部的协议字段为 89):而 RIP 是应用层协议,使用 UDP 传输(端口 520)。
第 1、2 和 3 点如图所示:
OSPF 的优势(其它特点)(除上述区别外):
- OSPF 支持对每条路由设置不同的代价(默认以带宽为代价),可针对不同业务类型计算差异化路径。
- 存在多条到同一目的网络且代价相同的路径时,可实现负载分担(或称负载均衡)。
- OSPF 分具备鉴别功能,确保仅在可信路由器之间交换链路状态信息。
- OSPF 支持可变长子网掩码和无分类编址。每条链路状态通告均携带一个 32 位序号,序号越大,表示状态越新。
第 1 点如图所示:
第 3 点如图所示:

4.5.3.3 OSPF 协议的基本工作原理
本小节思维导图如下:
使用 OSPF 协议的路由器生成转发表过程如图所示:
当 AS 很大时,LSDB 越复杂,泛洪压力越大,Dijkstra 算法的开销也就越高。
为了使 OSPF 能用于规模很大的网络,可将一个自治系统再划分为若干区域(Area)
划分区域后,洪泛法(flooding)交换链路状态信息的范围局限在各个区域,而不是整个 AS。
这样可以减少网络通信量,也让每个路由器的 LSDB 更小。
示意图如图所示:

4.5.3.4 OSPF 协议的分组类型
OSPF 定义了以下五种分组类型:
- 问候(Hello)分组:用来发现邻居并维持邻接关系,确认链路双向连通性。
- 数据库描述(Database Description,DD)分组:向邻居发送自己的链路状态数据库(LSDB)中的所有链路状态项目的摘要信息。
- 链路状态请求(Link-State Request,LSR)分组:向邻居请求发送某些链路状态项目的详细信息。
- 链路状态更新(Link-State Update,LSU)分组:通过洪泛法向全网发送链路状态通告(LSA),它是 OSPF 最核心的部分。路由器使用这种分组将其链路状态通知给邻居。
- 链路状态确认(Link-State Acknowledgment,LSAck)分组:对链路更新分组的确认。
这五种分组共同支撑了 OSPF 的邻居发现、数据库同步、拓扑更新、可靠确认的全过程。 OSPF 首部的 type 值会指明分组类型。在 OSPF 介绍开始的小节的图中也有更精简的描述。
问候(Hello)分组:
如图所示:
(AI 回答,LSU 分组装的是「自己本地 LSDB 中最新的 LSA 条目」,不知是否正确,不是重点,不必深究)
数据库描述(Database Description,DD)分组:
告诉对方自己有哪些 LSA(“会哪些题”),如图所示:
链路状态请求(Link-State Request,LSR)分组:
链路状态更新(Link-State Update,LSU)分组:
注意,LSU 分组的发送,导致 LSA 被添加(被修改的时候也会)可能会引起泛洪,如图所示:
链路状态确认(Link-State Acknowledgment,LSAck)分组:

4.5.4 BGP 路由协议
边界网关协议(Border Gateway Protocol,BGP)是一种内部网关协议,属于应用层协议。
4.5.4.1 BGP 路由协议的基本概念和特点
本小节思维导图如下:
值得指出的第一点是:
BGP 协议是应用层协议,基于 TCP 协议进行实现,如图所示:

值得指出的第二点是:
BGP 协议不仅运行在自治系统的边界路由器上,为了在 AS 内传播外部路由信息,一些核心路由器也需要运行 BGP。不同 AS 的边界路由器之间建立 eBGP 会话,而同一 AS 内部的路由器之间建立 iBGP 会话。由于 iBGP 学到的路由不会再向其他 iBGP 邻居传播,因此 eBGP 学到的路由必须直接传播给所有 iBGP 路由器。因此 AS 内的 iBGP 路由器通常需要形成 全连接(强连通)拓扑。如图所示:

4.5.4.2 BGP 路由协议的路由信息和工作原理
本小节思维导图如下:
工作原理如下:

4.5.4.3 BGP 路由协议的路由选择
本小节思维导图如下:
对 How? 的第三点说明如下图所示:
对 How? 的第四点说明如下图所示:

4.5.4.4 BGP 路由协议的四种报文
只需要知道有哪些报文,每个报文有什么作用即可,如图所示:

4.6 IP 多播
对于 IP 多播,思维导图如下:
IP 多播地址的使用,示例如下:
其实我们在使用网络电视的时候,进行电视调台,就是退出一个多播组(加入同一个多播地址的主机),进入另一个多播组。
4.7 移动 IP
本节思维导图如下:
首先思考一个问题,手机移动可能导致切换子网,导致 IP 地址发生变化,当正在传输一个大文件的时候,如何确保网络传输不受影响。
为了解决这个问题,引入了移动 IP 技术,概念如下图所示:
传统的通信方式是当上图所示 通信者B 向 通信者A 发送数据时,会直接传递到目标子网路由器的位置,再由目标子网路由器转发给目标主机。
而由于主机不在子网内了,于是移动 IP 的通信方式如下图所示:
请注意两点:
- 转交地址是供移动站、归属代理及外地代理使用的。移动站与其他主机之间的通信,都只使用“永久地址”。
- 一个转交地址可能被多个移动站共用。外地代理要向连接在被访网络上的移动站发送IP分组时,直接使用移动站的MAC地址。(外地代理登记了移动站的永久地址,查 MAC 地址的时候直接使用永久地址查就不会搞混了)
4.8 网络层设备
网络层设备需要了解的只有一种:路由器。现代路由器只是核心工作在网络层,但在考研中通常认为他是网络层设备。我们需要知道:
- 路由器的组成与功能
- 路由表与路由转发
本节思维导图如下:
路由器在现实生活中长这样,商用路由器相比于家用路由器,功能更加的纯粹,当然性能更加强大,也更贵。
路由器的结构划分如图所示:
我们先聚焦控制层面,如图所示:
数据层面如图所示:
关于分别位于两个层面的路由表与转发表,区分如图所示:

附言
这网络层好长啊。