计算机网络4-网络层
网络层的几个重要概念
网络层提供的两种服务
| 对比的方面 | 虚电路服务 | 数据报服务 |
|---|---|---|
| 思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
| 连接的建立 | 必须有 | 不需要 |
| 终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
| 分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
| 当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
| 分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
| 端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网络层的两个层面
数据层/控制层

- 数据层面:路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。
- 控制层面:根据路由选择协议所用的路由算法计算路由,创建出本路由器的路由表。
软件定义网络 SDN 中的数据层面和控制层面

网际协议IP
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP(Address Resolution Protocol)
- 网际控制报文协议 ICMP(Internet Control Message Protocol)
- 网际组管理协议 IGMP(Internet Group Management Protocol)
虚拟互联网络
使用中间设备进行互连

使用转发器或网桥不称为网络互联,仅仅是把一个网络扩大了,仍然是一个网络。

IP 网的意义
- 使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
- 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。
IP地址
IP 地址的编址方式经历了三个历史阶段:
- 分类
- 子网划分
- 无分类
IP地址及其表达方式
IP 地址:32 位二进制代码,分为每 8 位为一组
IP地址采用二级结构
IP 地址 ::= {
分类的IP地址

各类 IP 地址的指派范围

- 指派时要扣除全 0 和全 1 的主机号。
无分类编址CIDR
CIDR (Classless Inter-Domain Routing) :无分类域间路由选择。
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
- 网络前缀:前缀的位数 n 不固定,可以在 0 ~ 32 之间选取任意值
CIDR 记法:斜线记法 (slash notation)a.b.c.d / n:二进制 IP 地址的前 n 位是网络前缀。
例如128.14.35.7/20:前 20 位是网络前缀。
- 地址块:CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块。
- **地址掩码:又称为子网掩码 ,**由一连串 1 和接着的一连串 0 组成,而 1 的个数就是网络前缀的长度。
/20 地址块的地址掩码:11111111 11111111 11110000 00000000
例题
13. (单选题, 2分)某网络的IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是
- A. 32,8
- B. 32,6
- C. 8,32
- D. 8,30
__正确答案:B:32,6;
网络地址 = (二进制的 IP 地址) AND (地址掩码)

把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
三个特殊的CIDR地址块
| 网络前缀长度 | 点分十进制 | 说明 |
|---|---|---|
| /****32 | 255.255.255.****255 | 就是一个 IP 地址。这个特殊地址用于主机路由 |
| /****31 | 255.255.255.****254 | 只有两个 IP 地址,其主机号分别为 0 和 1。 这个地址块用于点对点链路 |
| /****0 | 0.0****.0.0 | 同时 IP 地址也是全 0,即 0.0.0.0/0。用于默认路由。 |
IP地址的特点
- 每个 IP 地址都由网络前缀和主机号两部分组成。
- IP 地址是标志一台主机(或路由器)和一条链路的接口。
- 转发器或交换机连接起来的若干个局域网仍为一个网络。
- 在 IP 地址中,所有分配到网络前缀的网络都是平等的。
同一个局域网上的主机或路由器的IP 地址中的网络号必须一样。
路由器的每一个接口都有一个不同网络号的 IP 地址。

IP地址与MAC地址
- **IP地址:**虚拟地址、软件地址、逻辑地址。网络层和以上各层使用。放在 IP 数据报的首部。
- **MAC地址:**固化在网卡上的 ROM 中。硬件地址、物理地址。数据链路层使用。放在 MAC 帧的首部。

从协议栈的层次上看 IP 地址和 MAC 地址

地址解析协议APR
问题:已经知道了一个机器(主机或路由器)的 IP 地址,如何找出其相应的 MAC 地址?
ARP (Address Resolution Protocol ) 作用:从 IP 地址解析出 MAC 地址。
- APR高速缓存
- 存放 IP 地址到 MAC 地址的映射表。
- 映射表动态更新(新增或超时删除):超过生存时间的项目都从高速缓存中删除,以适应网络适配器变化
- APR工作

- ARP 查找 IP 地址对应的 MAC地址
- 在局域网上广播发送 ARP 请求(路由器不转发 ARP 请求)。
- ARP 请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
- 单播 ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
- ARP 分组封装在以太网帧中传输**。**
如果两台主机不在同一个局域网上:
通信的路径:A → 经过 R1 转发 → B。因此主机 A 必须知道路由器 R1 的 IP 地址,解析出其 MAC 地址。然后把 IP 数据报传送到路由器 R1。

- (单选题, 2分)位于不同子网中的主机之间相互通信时,下列说法中正确的是
A. 路由器在转发IP数据报时,重新封装源硬件地址和目的硬件地址
数据包到达路由器:
1. 检查目的IP地址,确定下一跳
2. 查询ARP表获取下一跳的MAC地址
3. 重新封装链路层帧头:
源MAC地址 = 路由器出接口的MAC地址
目的MAC地址 = 下一跳设备的MAC地址
为什么要使用两种地址:IP地址和MAC地址
MAC地址之间的转换非常复杂。IP编址把这个复杂问题解决了,连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,即使必须多次调用 ARP 来找到 MAC 地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。因此,在虚拟的 IP 网络上用 IP 地址进行通信非常方便。
IP数据报的格式
- 版本:有4(IPv4)和6(IPv6)两个值;
- 首部长度:占4位,因此最大值为15。值为1表示的是1个32位字的长度,也就是4字节。因为固定部分长度为20字节,因此该值最小为5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
- 区分服务:用来获得更好的服务,一般情况下不使用
- 总长度:包括首部长度和数据部分长度
- 生存时间:TTL,它的存在是为了防止无法交付的数据报在互联网不断兜圈子。以路由器跳数为单位,当TTL为0时就丢弃数据报。 ;
- 协议:指出携带的数据应该上交给哪个协议进行处理,例如ICMP、TCP、UDP等
- 首部检验和:因为数据报每经过一个路由器,都要重新计算校验和,因此校验和不包含数据部分可以减少计算的工作量。
- 标识:占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF=1 表示后面还有分片,MF=0 表示最后一个分片。标志字段中间的一位是** DF** (Don’t Fragment) 。只有当** DF=0 时才允许分片**。
- 片偏移:和标识符一起,用于发生分片的情况。片偏移的单位为8字节。
关于检验和的描述,错误的是(B)
A、IP、TCP、UDP采用一样的算法计算检验和。
B、IP、TCP、UDP的检验和都覆盖整个数据报或报文段。
C、IP的检验和算法不同于以太网帧的帧检验算法。
D、TCP和UDP在计算检验和的时候,都需要包括一个12字节的伪首部。
(IP的校验和仅覆盖首部,而UDP和TCP的校验和覆盖首部和数据部分)
IP层转发分组的过程
基于终点的转发
- 分组在互联网中是逐跳转发的。
- 基于终点的转发:基于分组首部中的目的地址传送和转发。
为了压缩转发表的大小,转发表中最主要的路由是(目的网络地址,下一跳地址) ,而不是(目的地址,下一跳地址)。查找转发表的过程就是逐行寻找前缀匹配。

最长前缀匹配
- 使用 CIDR 时,在查找转发表时可能会得到不止一个匹配结果。
- 最长前缀匹配 (longest-prefix matching) 原则:选择前缀最长的一个作为匹配的前缀。
转发表中两种特殊的路由
- 主机路由:
- 是对特定目的主机的 IP 地址专门指明的一个路由。
- 网络前缀就是 a.b.c.d/32放在转发表的最前面。
- 默认路由
- 不管分组的最终目的网络在哪里都由指定的路由器 R 来处理
- 用特殊前缀 0.0.0.0/0 表示。
路由分组转发算法

使用二叉线索查找转发表

网际控制报文协议ICMP
ICMP (Internet Control Message Protocol) 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 是互联网的标准协议。但 ICMP 不是高层协议,而是 IP 层的协议。
ICMP报文的种类
- 差错查询报文
- 询问报文
ICMP的应用举例
ping
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
Traceroute
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。它利用 IP 数据报中的 TTL 字段、ICMP 时间超过差错报告报文和ICMP 终点不可达差错报告报文实现对从源点到终点的路径的跟踪。
- 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。
IPv6
IPv4 地址耗尽问题促使了具有更大地址空间的新版本IP的出现。、
IPv6的基本首部
IPv6 仍支持无连接的传送。将协议数据单元 PDU 称为分组 (packet) 。
主要变化有:
- 更大的地址空间。 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。可以划分为更多的层次。
- 灵活的首部格式。定义了许多可选的扩展首部。
- 改进的选项。允许数据报包含有选项的控制信息,其选项放在有效载荷中
- 允许协议继续扩充。更好地适应新的应用。
- 支持即插即用(即自动配置)。不需要使用 DHCP。支持资源的预分配。
- 支持实时视像等要求保证一定的带宽和时延的应用。
- IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。
IPv6数据报的一般形式
两大部分:基本首部/有效载荷:
有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。

- **版本:**对 IPv6 该字段总是 6。
- 通信量类: 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
- **流标号:**20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- **有效载荷长度(payload length):**16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
- **下一个首部:**8 位。相当于 IPv4 的协议字段或可选字段。
- 跳数限制: 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为零时,就要将此数据报丢弃。
- **源地址:**128 位。是数据报的发送站的 IP 地址。
- 目的地址: 128 位。是数据报的接收站的 IP 地址。
IPv6的地址
三种基本类型:
- 单播 (unicast):传统的点对点通信。
- 多播 (multicast):一点对多点的通信。
- 任播 (anycast):IPv6 增加的一种类型。任播的终点是一组计算机,但数据报在交付时只交付其中的一个。通常是按照路由算法得出的距离最近的一个。
**冒号十六进制记法:**在 IPv6 中,每个地址占 128 位,16 位的值用十六进制值表示,各值之间用冒号分隔。

零压缩,点分十进制记法的后缀
从IPv4向Ipv6过渡
两种过渡策略:使用双协议栈和隧道技术


ICMPv6
IPv6 也需要使用 ICMP 来反馈一些差错信息。新的版本称为 ICMPv6

互联网的路由选择协议
路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
可以把路由选择协议划分为两大类:
- 自治系统内部的路由选择(域内路由选择IGP):RIP(距离向量) 和 OSPF(链路状态)
- 自治系统间的路由选择(域间路由选择EGP):BGP(路径向量)
内部网关协议RIP
路由信息协议 RIP (Routing Information Protocol) 是一种分布式的、基于距离向量的路由选择协议。
跳数(hop count):每经过一个路由器,跳数就加 1。
特点:
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定时间间隔交换路由信息
路由表主要信息:目的网络 距离(最短) 下一跳地址
路由表更新原则:使用距离向量算法找出到达每个目的网络的最短距离。
距离向量算法
对每个相邻路由器(假设其地址为 X)发送过来的 RIP 报文,路由器:
(1) 修改 RIP 报文中的所有项目(即路由):把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若路由表中没有目的网络N,则把该项目添加到路由表中。否则
若路由表中网络 N 的下一跳路由器为 X,则用收到的项目替换原路由表中的项目。否则
若收到项目中的距离小于路由表中的距离,则用收到项目更新原路由表中的项目。否则
什么也不做。
(3) 若 3 分钟还未收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
(4) 返回。
例:

RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
内部网关协议OSPF
开放最短路径优先 OSPF (Open Shortest Path First)是为了克服 RIP 的缺点而开发出来的。使用了 Dijkstra 提出的最短路径算法 SPF,采用分布式的链路状态协议 (link state protocol)。 现在使用 OSPFv2。
OSPF 具有以下特点:
- 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
- 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
- 只有当链路状态发生变化时,路由器才会发送信息。
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
工作过程
- 确定邻站可达。相邻路由器每隔 10 秒钟要交换一次问候分组。若有 40 秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的
- 同步链路状态数据库。
- 同步:指不同路由器的链路状态数据库的内容是一样的。
- 两个同步的路由器叫做完全邻接的 (fully adjacent) 路由器
- **更新链路状态:**只要链路状态发生变化,路由器就使用链路状态更新分组,采用可靠的洪泛法向全网更新链路状态。
路由器角色
内部路由器(IR):所有接口都在同一区域
区域边界路由器(ABR):连接多个区域,汇总路由
骨干路由器(BR):至少一个接口在Area 0
自治系统边界路由器(ASBR):连接其他AS,引入外部路由
外部网关协议BGP
BGP(Border Gateway Protocol,边界网关协议)是不同自治系统的路由器之间交换路由信息的协议。
AS 之间的路由选择很困难,主要是由于:
- 互联网规模很大;
- 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
- AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
BGP 只能寻找一条比较好的路由,而不是最佳路由。采用了路径向量 (path vector) 路由选择协议。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。
BGP 路由 = [ 前缀, BGP属性 ] = [ 前缀, AS-PATH, NEXT-HOP ]
前缀:指明到哪一个子网(用 CIDR 记法表示)。
**BGP 属性:**最重要的两个属性是
- **自治系统路径 AS-PATH **
- 下一跳 NEXT-HOP。
在属性 AS-PATH 中,不允许出现相同的 AS 号。
BGP的路由选择
- 本地偏好 (local preference) 值最高的路由 (默认值=100)
- AS 跳数最小的路由
- 使用热土豆路由选择算法(分组在 AS 内的转发次数最少)
- 路由器 BGP ID 数值最小的路由。具有多个接口的路由器有多个 IP 地址,BGP ID 就使用该路由器的 IP 地址中数值最大的一个
25. (单选题, 2分)直接封装RIP、OSPF、BGP报文的协议分别是( D )。
- A. TCP、UDP、IP
- B. TCP、IP、UDP
- C. UDP、TCP、IP
- D. UDP、IP、TCP
路由器的构成
路由器工作在网络层,用于互连网络,用于转发分组。

常用交换方法有三种:通过存储器、通过总线、通过纵横交换结构

IP多播
一对多通信:一个源点发送到许多个终点。
在 IP 多播数据报的目的地址需要写入多播组的标识符。多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。 地址范围:224.0.0.0 ~ 239.255.255.255每一个 D 类地址标志一个多播组。
多播地址只能用于目的地址,不能用于源地址。
多播数据报
多播数据报和一般的 IP 数据报的区别:目的地址:使用 D 类 IP 地址。协议字段 = 2,表明使用网际组管理协议 IGMP。
尽最大努力交付,不保证一定能够交付多播组内的所有成员。
对多播数据报不产生 ICMP 差错报文。在 PING 命令后面键入多播地址,将永远不会收到响应
网际组管理协议 IGMP (Internet Group Management Protocol)使多播路由器知道多播组成员信息(有无成员)。
多播路由选择协议使多播路由器协同工作,把多播数据报用最小代价传送给多播组的所有成员。
多播路由选择:
转发多播数据报时使用三种方法:
- 洪泛与剪除
- 隧道技术 (tunneling)
- 基于核心的发现技术
虚拟专用网VPN和网络地址转换NAT
虚拟专用地址VPN
由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
有三个专用地址块:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。
下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。

网络地址转换NAT
专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。
在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。
多协议标记交换MPLS
软件定义网络SDN简介
更新: 2026-01-02 21:52:28
原文: https://www.yuque.com/cindahy/tibcve/emx25za2uggnsump