计算机网络基础:网络层
网络层的作用
主要任务是转发和路由选择
转发是数据层面的功能
路由选择是控制层面的功能
两种服务
虚电路服务
- 面向连接
- 通信之前先建立虚电路(Virtual Circuit),逻辑连接,分组都沿着这条逻辑连接按照存储转发的方式传送
数据报服务
- 无连接的,每一个分组独立发送,不编号
- 尽最大努力交付,不提供服务质量承诺
方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
拥塞控制
与流量控制的不同:
- 流量控制是点对点通信量的控制,其目的是限制发送端发送数据的速率,以便接收端来得及接收
- 拥塞控制是全局性问题,必须确保通信子网能够传送待传送的数据
控制方法:
- 开环控制:静态方法,提前考虑到可能的因素
- 闭环控制:动态方法,通过监视拥塞状况来决定处理策略
网际协议:IP
异构网络互联形成虚拟互联网络(逻辑互联网络),意思是互联起来的各种物理网络的异构性是客观存在的,但是通过 IP 协议就可以使这些性能各异的网络在网络层上看起来像是一个统一的网络。
- TCP UDP 属运输层
- IP 协议与 ICMP, IGMP, ARP 配套使用
IPv4 数据报
首部 + 数据 两部分组成
首部 = 固定字段(12 字段、20B)+ 可选字段(长度可变 0 ~ 40 B)
- 版本:IP协议的版本(Ipv4)
- 首部长度:占 4 位,可表示的最大数值是 15 个单位,一般以4B 为一个单位
- 区分服务:DiffServ 往往用于优先级,一般情况下不使用这个字段
- 总长度:16 位。单位 1B,数据报的长度(max: 65535B)
- 标识:计数器,产生 IP 数据报的标识、可以用于标明当前分片属于哪个数据报
- 标志:MF(后面有无分片) + DF(是否分片) + 无意义的 1 字节
- 片偏移:分片后该片在分组中的相对位置(8B 为一个单位),也就是除了最后一个分片,前面的分片长度都是 8B 的整数倍
- 生存时间:TTL,可通过的路由器数量的最大值,每经过一个路由器就减 1
- 协议:数据包使用何种协议(TCP 6;UDP 17)
- 首部检验和:用于校验首部,不校验数据部分
- 源地址 4 字节
- 目的地址 4 字节
IP 数据报分片
为什么分片:不能超过数据链路层的最大传送单元(MTU)
片在目的主机中,根据首部中的标识、标志、片偏移来组装
IP 层转发分组
基于目的主机网络路由
按照主机所在的网络地址(net-id)来制作路由表。IP 分组在每个网络中都被路由器解封装和封装,在转发到目标网络后,转由使用数据链路层的 MAC 地址以广播方式寻址。由于在传播过程中 MAC 地址不断改变,所以 MAC 地址本身不跨网络寻址。
转发表:<目的主机所在的网络, 下一跳地址>
- 向中间路由器间接交付
- 向目的主机直接交付
基于特定主机路由
为特定的目的主机指名一个路由,子网掩码为 32
算法
目的主机 > 特定主机路由 > 目的主机网络路由 > 默认路由 > 出错
- D 与路由器相连?(特定主机路由)有则直接交付
- 从目的 IP 地址 D 得到网络号 N (使用子网掩码等进行计算)
- 路由表中有 N ?(目的主机网络路由)有则间接交付
- 是否设置了默认路由?有则间接交付
- 出错
注意:
- IP 数据报的首部没有指明 下一跳地址
- 转发过程中不修改数据报中的目的 IP 地址
- 修改 MAC 帧的源 MAC 地址和目标 MAC 地址,根据 MAC 地址找下一跳
- 在不同网络中传输会修改 MAC 帧的地址,而在网桥中不会
IP 地址
- IPv4 32位
- IPv6 64位
- 由 ICANN 分配
- 路由器总是具有 >= 2 个 IP 地址,每个接口的网络号都不同
分类的 IP 地址
net-id(网络号) + host-id(主机号)
IP Address ::= {<网络号>, <主机号>}

类别 | 最大可指派 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中最大主机数 |
---|---|---|---|---|
A | 126 ( – 2 减去全0和127) | 1 | 126 | 16777214 |
B | 16383 ( – 1) | 128.1 (128.0 保留) | 191.255 | 65534 |
C | 2097151 ( – 1) | 192.0.1 | 223.255.255 | 254 |
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本网络上的本主机 |
0 | host-id | 可以 | 不可 | 在本网络上的某台主机 host-id |
全 1 | 全 1 | 不可 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
net-id | 全 1 | 不可 | 可以 | 对 net-id 上的所有主机进行广播 |
net-id | 全0 | 不可 | 可以 | 代表net-id上所有的主机 |
127 | 非全 0 或全 1 的任何数 | 可以 | 可以 | 用于本地软件环回测试 |
由于无分类 IP 地址广泛使用,分类 IP 地址已经成为历史。
私有 IP 地址与 NAT
网段:
- A 类:10.0.0.0 ~ 10.255.255.255
- B 类:172.16.0.0 ~ 172.31.255.255
- C 类:192.168.0.0 ~ 192.168.255.255
因特网中的路由器一律不转发目的地址是私有地址的数据报
NAT 用于让多台主机共享一个全球 IP 地址
转发过程:记录端口号、源 IP,修改源 IP 、端口号为全球 IP 然后转发
接收过程:根据端口号,修改目的 IP、目的端口号,然后转发
工作时需要获取传输层的端口号。
子网划分
两级 IP 地址不够灵活,三级 IP 地址:在 net-id + host-id 的基础上增加一个子网号字段,称为子网划分
-
属于单位内部的事情,对外仍表现为无子网状态
-
从主机号借用若干位作为子网号 subnet-id,主机号也减少若干位
1
IP Address ::== {<net-id> , <subnet-id>, <host-id>}
子网掩码
用于划分 net-id, subnet-id 和 host-id
- 首部无法判断是否有子网
- 子网掩码左边一连串的 1,对应于网络号和主机号
- 子网掩码右边一连串的 0,对应主机号
- 默认子网掩码下,net-id + subnet-id(无) = net-id
IP 类别 | 默认子网掩码 |
---|---|
A | 255.0.0.0 |
B | 255.255.0.0 |
C | 255.255.255.0 |
路由器
-
路由器在和相邻路由器交换路由时,必须将自己所在的网络的子网掩码告诉相邻路由器。
-
路由表中的每一项都必须有子网掩码
-
一个路由器若连接在两个子网上,就拥有两个网络地址和两个子网掩码。
CIDR 无分类域间路由选择
-
在变长子网掩码的基础上,消除了分类 IP 地址、子网划分的概念,可以在软件支持下实现超网构造
- 更有效地提高 IP 地址空间的利用率
- 减少路由器的路由表大小
- 提高路由转发能力
-
使用各种长度的”网络前缀“(network-prefix)来代替分类地址中的网络号和子网号
-
IP 地址回归了两级编址:即网络前缀 + 主机号
CIDR 使用斜线记法,IP地址/前缀比特数,高位比特数全 1 后相与即可得网络前缀
为什么不称为子网:因为没有指明若干位作为子网字段
路由聚合
一个 CIDR 地址块可以表示多个地址(128.14.32.0/20 可以表示 个地址,通常要减去 2 个,全 1 是广播地址,全 0 是网络号),称为 路由聚合,有助于减少路由器之间的路由选择信息的交换。
路由聚合 = 构成超网
最长前缀匹配(最佳匹配)
若路由表中有匹配的两条记录,选择匹配长度更长的那一个
一般将路由表存放在层次数据结构中,从上而下扫描,如:二叉线索树
ARP 协议
地址解析协议:根据 IP 地址找到硬件地址
硬件地址:数据链路层和物理层使用的地址
IP 地址:IP 地址是网络层及以上使用的地址
每个主机或路由器都设置有 ARP 高速缓存,里面有所在局域网上的各个主机的 IP 地址和 MAC 地址的映射表
- 存在于缓存中则直接查出对应的硬件地址,写入 MAC 帧
- 若无,则广播一个 ARP 请求分组,收到目的主机单播的 ARP 响应分组后,将映射写入缓存(互传双方也会存储双方的 IP 和 MAC 地址)。ARP 分组封装在物理层的帧中传送。
- 若发送方是主机,则交给同一局域网内的路由器解决
- 若目的主机在另一个网络,路由器则找到本网络的另一个路由器的硬件地址,交给它来解决
- 地址解析式自动进行的,对用户不可见
应用层协议:DHCP
动态主机配置协议:允许新加入网络的主机获取 IP 地址,无需手动参与
请求过程:
- 主机广播“DHCP发现”消息
- DHCP 服务器广播“DHCP提供”消息
- 主机广播“DHCP”请求消息
- DHCP 服务器广播“DHCP”确认消息
广播时目的地址为 255.255.255.255,主机发送的广播源地址为 0.0.0.0,DHCP 发送的广播源地址为服务器地址
由于主机尚未获得 IP 地址,所以全程使用广播和 UDP 协议
网际控制报文协议: ICMP
- 允许主机/路由器报告差错情况和提供有关异常情况的报告
- IP 层协议
差错报告报文
类型
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向)
不应发送的情况
- 对 ICMP 差错报告报文
- 对第一个分片的数据报片的所有后续数据报片
- 对具有多播地址的数据报
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)
询问报告报文
类型
- 回送请求和回答报文
- 时间戳请求和回答报文
ICMP 报文格式
- 装在 IP 数据报的数据部分
PING
- 测试连通性
- 使用 ICMP 回送请求和回送回答报文
- 应用层直接使用网络层
traceroute / tracert
- 利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文
- 实现对从源点到终点的路径的跟踪。
路由选择协议
和谁交换
交换什么
交换频率
分层次路由协议
当网络规模扩大时,路由表也会增大,需要更多的时间来扫描和交换路由表,因此路由选择应该按层次进行。
自治系统 AS
- 同一管理下的路由器,使用一种 AS 内部的路由选择协议和共同的度量(Metrics)。
- 一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
IGP 内部网关协议
- 自治系统内部使用,也称为域内路由选择
- RIP; OSPF
EGP 外部网关协议
- 自治系统之间使用,也称为域间路由选择
- BGP-4
静态协议与动态协议
静态:人为参与,无法自适应
动态:自适应,实现复杂,开销大
内部网关协议 IGP
RIP:路由信息协议
-
应用层协议,在传输层使用 UDP
-
一种距离-向量路由算法,要求路由器维护自身其到其它网络的距离(跳数,最多 15)
-
内部网关协议,为应用层协议
-
适用于小型互联网
-
两个网络之间无法同时使用多条路由
-
收敛(得到 AS 内所有节点的路由)快。
-
好消息传播快,坏消息传播慢,因为路由器故障后,相邻路由器要通过 180s 的时间后才将其标记为不可达
和谁交换
相邻路由器
交换什么
当前路由器的全部路由表
交换频率
固定时间间隔
路由表更新
OSPF:开放最短路径优先
-
一种链路状态路由算法,要求每个参与算法的节点都拥有完全的网络拓扑信息
- 要求主动测试相邻节点的状态
- 定期将链路状态传播给其它所有结点
-
内部网关协议,为应用层协议
-
基于最短路径优先 Dijkstra
-
每个路由器内都有链路状态数据库,建立起全网拓扑结构图,全网一致
-
由于传播的报文只是单个节点的链路状态而非整个路由表,其大小与网络中的路由结点数目无关,因此比距离-向量算法有更好的规模可扩展性
和谁交换
AS 内所有路由器。洪泛法。
交换什么
与本路由器相邻的所有路由器的链路状态
“链路状态”就是说明本路由器都和哪些路由器相邻,以及**该链路的“度量”(**metric,距离、时延、带宽等)。 链路状态中会有一个32位的序号,序号越大状态越新
直接用 IP 数据报传送
交换频率
只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息
区域划分
将洪泛法限制在区域内,减少网络的通信量。区域有层次之分,上层的称为主干区域,负责连通下层区域和其他自治域
外部网关协议 EGP
BGP 协议
- 边界网关协议
- 不求寻找最佳路由
- 应用层协议,基于 TCP
流程:
- 每一个 AS 选择一位 BGP 代言人。
- 发言人之间建立 TCP 连接,交换 BGP 报文,建立 BGP 会话。
- 使用 TCP 连接交换信息成为彼此的邻站或对等站。
交换:要到达某个网络所要经过的一系列 AS

和谁交换
相邻BGP发言人之间
交换什么
交换发言人的路由表。
包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
交换频率
在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。
后面只需要在发生变化时更新有变化的部分。。
4 种 BGP 报文
打开:与相邻 BGP 发言人建立关系
更新:用来发送某一路由的信息
保活:确认打开报文和周期性证实邻站关系
通知:发送检测到的差错
IP 组播
- 仅面向 UDP
- 一个源地址、一个组播地址(组播地址标识了多个目的地址)
- 主机使用 IGMP(因特网组管理协议) 的协议加入组播组,通过该协议告知路由器自己要接收来自这个组播组的分组,路由器将定期探询主机是否还在这个组播组内
- 仅发送一份数据,仅在出现分岔的时候才复制,故其在每条链路上只传播一次
路由器
一台专用计算机,用于在互联网中进行路由选择。
可用于隔离广播域(数据链路层设备隔离冲突域、网络层设备隔离广播域)
冲突域:连接到同一物理介质上的结点的集合。存在介质争用现象。
广播域:接受同样广播消息的结点集合。
作用
- 分组转发:路由器的数据部分,路由器根据转发表将 IP 数据报从合适的端口转发出去,组成部分包含输入端口、交换结构、输出端口。交换结构:存储器交换、总线交换、互联网交换
- 路由选择:路由器的控制部分,核心是路由选择处理机
- 与网桥的区别:路由器是面向协议的,而网桥与高层协议无关

路由表是根据路由选择协议得出的,主要用于路由选择。而转发表是从路由表得出的,其结构应该方便查找。

若路由器处理分组的速率赶不上分组进入队列的速率,就会排队
若缓存已满,后续进入的分组会被丢弃。
IPv6
与 IPv4 的区别
- 更大的地址空间
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项
- 允许协议继续扩充
- 支持即插即用:无需 DHCP
- 支持资源的预分配
- IPv6 首部改为 8 字节对齐:首部必须是 8 字节的整数倍
数据报组成
- 基本首部:40字节, 8 个字段
- 取消了首部长度字段,因为首部长度是固定的 40 字节;
- 取消了服务类型字段;
- 取消了总长度字段,改用有效载荷长度字段;
- 有效载荷(max: 64kb):扩展首部 + 数据
数据报目的地址
- 单播 (unicast):传统的点对点通信。
- 多播 (multicast):一点对多点的通信。
- 任播 (anycast):这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
虚拟专用网 VPN
- 基于 TCP/IP 协议
- 内联网:单位内部自主构成的 VPN
- 外联网:单位与外部机构共同建立的 VPN