4.1 网络层提供的两种服务
为什么要网络层
数据链路层解决了同一局域网计算机间帧的传输问题,但没有解决异构网络之间的连接和资源共享问题
- 异构网络互联:即跨局域网连接和资源共享
- 互联网络中主机标识问题
- 互联网中主机间路由选择问题(最佳路径)
- 互联网中数据转发的问题(分组转发)
- 数据链路层帧的校验没有解决可靠传输的问题,网络层需要解决可靠传输吗?
- 网络层要向传输层提供面向连接的服务,还是无连接的服务?(实质:在计算机通信中,可靠交付应当网络负责还是端系统负责?)
两种服务:虚电路服务和数据报服务
4.2 网际协议IP
4.2.1 虚拟互连网络

如何将异构的网络连接在一起?
- 使用中间设备
| 层 | 中间设备 | 功能 |
|---|---|---|
| 运输层及以上 | 网关(Gateway) | 连接不兼容系统,进行高层协议转换 |
| 网络层 | 路由器(Router) | 连接不同网络 |
| 数据链路层 | 网桥或桥接器(Bridge),交换机(Switch) | 仅仅把一个网络扩大了 |
| 物理层 | 转发器(Repeater) |
IP 协议

与网际协议 IPv4 配套的3个协议:
- 地址解析协议ARP
- 网际控制报文协议 ICMP
- 网际组管理协议 IGMP

4.2.2 IP数据报的格式

首部:固定部分(20B)+可变部分
- 版本:IPv4协议字段值$(0100)_2 = 4$
- 首部长度:4bit最大可表示为1111,即首部最大长度为固定20+可变40 = 60字节
- 区分服务 TOS 2Byte
总长度:首部+数据部分的总长度,最大$2^116 - 1 = 65535$字节(理论值,在实际中受到数据链路层MTU限制)
- MTU限制方式:在传输过程中进行多次分片和重组
- 标识:所有分片具有相同的标识
标志:保留位、DF位、MF位
- DF:Don't Fragment 不要分组,为1时标识当前未进行分片
- MF:More Fragment 更多分组,为1时标识当前并非最后一个分片
- 片偏移:指出分片后某片在原分组中的相对位置

- 生存时间 TTL:指示数据报在网络中可通过的路由器数的最大值
- 协议 :指出应将数据部分交给哪一个进程

- 首部校验和(只校验首部)
- 源地址、目的地址:32位二进制地址,标识各个接口,用于网络层寻址
- 可选字段(长度可变):支持排错、测量以及安全等错视,内容丰富 长度可变 增加功能同时增加开销,因此实际上很少使用
IP 协议功能及报头字段总结
网络层基本功能
- 支持多跳寻路将IP数据报送达目的端:目的IP地址
- 表面发送端身份:源IP地址
- 根据IP头部协议类型,提交给不同上层协议处理:协议
其它相关问题
- 数据报长度大于传输链路MTU的问题,通过分片机制解决:标识、标志、片偏移
- 防止循环转发浪费网络资源(路由错误、设备故障等),通过跳数限制解决:生存时间TTL
- IP报头错误导致无效传输,通过头部机校验解决:首部校验和
4.2.3 IP 地址
IP地址:给每个连接在互联网上的主机或路由器的每一个接口分配的全球唯一的标识符,IPv4 是32位的二进制地址,理论上地址空间共有 $2^{32}$ 个地址
- ICANN:负责全球Internet上的IP地址进行编号分配的机构
- RIR:地区级互联网注册机构
- NIR:国家级互联网注册机构 中国互联网络信息中心CNNIC
IP地址采用 2级结构 32位二进制数 采用点分十进制记法 IP地址 ::= {<网络号>,<主机号>}
- 网络号 net-id:n位
- 主机号 host-id:(32-n)位
分级地址结构的好处:
- IP地址管理机构负责分配网络号,单位负责分配主机号,方便IP地址的管理;
- 路由器根据网络号将分组转发到对应网络,大大减小路由表项目数,减少存储空间占用,提高效率;
分类的IP地址
单播地址:
- A类 net-id8位 第一位为0
- B类 net-id16位 前二位为10
- C类 net-id24位 前三位为110
多播地址
- D类
- 保留地址
A类地址
网络号 net-id为8位 第一位为0 可表示$2^7 - 2$个不同网络
主机号 host-id为24位 每个网络$2^{24} -2$个主机号
其中
- 网络号 00000000 表示本网络
- 网络号 01111111 用于本地软件环回测试
- 主机号 全0 表示该主机所在的网络地址
- 主机号 全1 表示该网络的所有主机(广播)
| 网络类别 | 网络数 | 第一个网络号 | 最后一个网络号 | 每个网络中主机数 |
|---|---|---|---|---|
| A | 126($2^7 -2$) | 1 | 126 | 16777214($2^{24}-2$) |
| B | 16384($2^{14}$) | 128.0 | 191.255 | 65534($2^{16} -2$) |
| C | 2097152($2^{21}$) | 192.0.0 | 223.255.255 | 254($2^8 -2$) |
网络规模:A类 > B类 > C类
一般不用于分配的特殊IP地址
| 地址 | 用途 |
|---|---|
| 网络号全0的地址 | 系统启动时用于启动时临时通信,本网络上的某主机 |
| 网络127.0.0.0 | 指本地结点(一般为127.0.0.1),用于测试网卡及TCP/IP软件 |
| 主机号全0的地址 | 用于指定网络本身,称之为网络地址或者网络号 |
| 主机号全1的地址 | 用于广播,也称定向广播,需要指定目标网络 |
| 0.0.0.0 | 本网络上的本主机 |
| 255.255.255.255 | 受限广播地址 |
子网划分 subnetting
将主机号分为 子网号subnet-id + 主机号host-id
可变长子网掩码 VLSM
划分子网是单位内部的事情:在网络内部将一个网络块进行划分以供多个内部网络使用,对外仍然是同一个网络
- 例:将C类网络200.1.1.0划分8个子网

子网掩码 subnet mask
- 与IP地址一一对应,是32bit的二进制数,置1表示网络位(网络号+子网号),置0表示主机位
- IP地址与对应的子网掩码进行按位与运算(AND),可得到当前子网的网络地址
判断多个IP地址是否在同一网络?
1.条件一:子网掩码 是否位数相同
2.条件二:IP地址与子网掩码逐位与运算 得到的网络地址是否相同
分类的IP地址的优点和缺点
优点:
- 管理简单
- 使用方便
- 转发分组迅速
- 划分子网,灵活地使用
缺点:
- 设计上不合理
- 大地址块,浪费地址资源
- 即使采用划分子网的方法,也无法解决IP地址枯竭的问题(不够用)
无分类编制方法 CIDR
问题:
- 子网划分解决了网络过大的问题,可以把大的网络分的更小
- 如果想把网络变得更大怎么办?
- 例如希望一个网络有2个A类网络那么大,直接使用两个A类网络,彼此之间无法直接通信,应该怎么办?
——无分类编制方法 CIDR(Classless Inter-Domain Routing)

- 网络前缀 net-id:长度可变
- 消除了传统的 A类、B类和C类地址以及划分子网的概念,可以更有效地分配IPv4的地址空间
- 本质:使网络号长度随意可变
CIDR 的掩码
同样的,CIDR也用掩码表示网络前缀长度

斜线记法 Slash Notation:IP地址/n
- 例如:200.1.0.0/20 表示前20位为网络前缀
CIDR如何表示一个任意大小的地址块?
- 1个CIDR地址块200.1.0.0相当于16个C类网络200.1.0.0/24
- 每一个CIDR地址块中的地址数一定是 2的整数次幂
常用的CIDR地址块

三个特殊的CIDR地址块

路由聚合
- 一个CIDR地址块可以表示很多地址,多个较小地址块也能构成一个更大的地址块,称为 构成超网(super net),又称为 路由聚合(route aggregation)
何意味?↓
例:将206.0.68.0/23分为四个地址块(每次改变主机号的第一位)
206.0. 0100010 0.00000000/23 ->
206.0. 01000100 .00000000/24 和 206.0. 01000101 .00000000/24 -> …
聚合反之
- 路由聚合可以减少路由条目,但CIDR也无法解决地址空间不足的问题
IP地址的特点
每个IP地址都有网络前缀和主机号两部分组成
IP地址是一种 分等级 的地址结构
- 方便了 IP 地址的分配和管理
- 实现路由聚合,减小了转发表所占的存储空间以及查找转发表的时间
IP地址是标志一台主机(或路由器)和一条链路的接口
- 当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机。
- 一个路由器至少应当连接到两个网络,因此一个路由器至少应当拥有两个不同的IP地址
转发器或交换机连接起来的若干个局域网仍为一个网络
- 一个网络(或子网)是指具有相同网络前缀的主机的集合
- 转发器或交换机连接起来的若干个局域网都具有相同的网络号,他们仍为一个网络
- 具有不同网络号的局域网必须使用路由器进行互连
- 同一网络主机接口必须具有同样的网络号
在IP地址中,所有分配到网络前缀的网络都是平等的
- 互联网同等对待每一个IP地址,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网
4.3 IP分组的转发
4.3.1 基于终点的转发
- 分组在互联网中是逐跳转发的,路由器通过查转发表确定下一跳
- 基于终点的转发:基于分组首部中的目的地址传送和转发
路由转发表
路由转发表中可能包含哪些信息?
- 提示:交换机的MAC地址表包含哪些信息

路由器转发表包含信息:目的地址、下一跳地址
- 目的地址:不是目的端的IP地址,而是目的端所在网络的网络地址
- 下一跳地址:直接交付 or 下一跳的IP地址
- 一个网络中可能有多个地址,为压缩路由表的大小,将“目的地址”变化为“目的网络地址”

查找转发表过程
- 查找转发表的过程就是逐行寻找前缀匹配
1.找到目标地址所在网络:IP地址和掩码进行与运算,得到地址所在的网络
2.与路由表中列出的网络地址,逐行匹配:目标网络的路由表列出的网络地址是同一个
3.找到正确的条目,进行下一跳转发(找不到则丢弃)
Question
- IP首部中只有目的地址,没有掩码怎么办?——在路由表中增加掩码

转发表中的2中特殊的路由
主机路由 (host route)
- 又叫做特定主机路由
- 是对特定目的主机的IP地址专门指明的一个路由
- 网络前缀就是 a.b.c.d/32
- 放在转发表的最前面
默认路由 (default route)
- 不管分组的最终目的网络在哪里,都由指定的路由器R来处理
- 用特殊网络前缀 0.0.0.0/0 表示
- 放在转发表的最后面
4.3.2 最长前缀匹配
- 使用CIDR时,在查找转发表时可能会得到不止一个匹配结果
最长前缀匹配:当得到多个匹配结果时,谁网络前缀(host-id)更长选择谁,也就是选择更精确的网络
- 最长前缀匹配原则:选择前缀最长的一个作为匹配的前缀
- 网络前缀越长,其地址块就越小,因而路由就越具体
- 把前缀最长的排在转发表的第1行
路由器分组转发算法

特别的,路由器人工定义禁止转发广播地址(255.255.255.255),因此称为 受限广播地址;但如果是有特定网络号的广播地址(例2.255.255.255/8),是可以被路由器转发的,因此称为 直接广播地址
使用二叉线索查找转发表
- 尽管已经通过将目的地址改为目的网络地址压缩了路由表,但路由表的条目数量仍然可能是巨大的,如何提高查找效率?
- 二叉线索:一种特殊结构的树,可以快速在转发表中找到匹配的叶节点
- 从二叉线索的根结点自顶向下的深度最多有 32 层,每一层对应于IP地址中的一位
- 为简化二叉线索的结构,可以用唯一前缀(unique prefix)来构造二叉线索
- 为了提高二叉线索的查找速度,广泛使用了各种压缩技术

4.3.3 IP地址与MAC地址

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

- 尽管互连在一起的网络的MAC地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节
- 只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信
4.3.4 地址解析协议ARP
实现IP通信时使用了两个地址:
- IP地址(网络层地址)
- MAC地址(数据链路层地址)

地址解析协议ARP的作用
- ARP(Address Resolution Protocol)作用:已知主机或路由器的IP地址,解析出其相对应的MAC地址

ARP高速缓存(ARP Cache):
- 存放IP地址到MAC地址的映射表
- 映射表动态更新(新增或超时删除)

ARP高速缓存的作用:
- 存放最近获得的IP地址到MAC地址的绑定
- 减少ARP广播的通信量
- 为进一步减少ARP通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到MAC地址的映射写入ARP请求分组
- 当主机B收到A的ARP请求分组时,就将主机A的IP地址及其对应的MAC地址映射写入主机B自己的ARP高速缓存中,不必再向A发送ARP请求
工作流程:

2台主机不在同一个局域网上的地址解析
A->Router 发送ARP请求
Router->B 发送ARP请求
MAC帧由路由器中转转发
使用ARP的四种典型情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时候用ARP找到目的主机的硬件地址
- 发送方是主机,要把IP数据报发送到另一个网络上的主机。这时候用ARP找到本网络上的一个路由器的硬件地址,剩下工作由这个路由器完成
- 发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时候用ARP找到目的主机的硬件地址
- 发送方是路由器,要把IP数据报转发到另一个网络上的主机。这时候用ARP找到本网络上的一个路由器的硬件地址,剩下工作由这个路由器完成
为什么要使用两种地址:IP地址和MAC地址
- MAC地址之间的转换非常复杂,对以太网MAC地址进行寻址也是极其困难的。MAC地址不适合跨网络寻址使用
- IP编址把这个复杂问题解决了,即使必须多次调用ARP来找到MAC地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的
- 虚拟互联网使用IP,各局域网使用MAC
4.4 网际控制报文协议 ICMP

- ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告
- 由主机和路由器用于网络层信息的通信
- ICMP是网络层的互联网标准协议
4.4.1 ICMP报文的格式和种类

*封装在IP数据报中
ICMP报文种类
| ICMP报文种类 | 类型的值 | ICMP报文的类型 |
|---|---|---|
| 差错报告报文 | 3 | 终点不可达 |
| 差错报告报文 | 11 | 时间超过 |
| 差错报告报文 | 12 | 参数问题 |
| 差错报告报文 | 5 | 改变路由(Redirect) |
| 询问报文 | 8或10 | 回送(Echo)请求或回答 |
| 询问报文 | 13或14 | 时间戳(Timestamp)请求或回答 |
差错报告报文:单向 询问报文:双向
注:根据RFC 6633规定,已不再使用类型值为4、10或9、15或16、17或18的报文
| 类型 | 代码 | 功能描述 |
|---|---|---|
| 0 | 0 | 回送应答(ping) |
| 3 | 0 | 目的网络不可达 |
| 3 | 1 | 目的主机不可达 |
| 3 | 2 | 目的协议不可达 |
| 3 | 3 | 目的端口不可达 |
| 3 | 6 | 目的网络未知 |
| 3 | 7 | 目的主机未知 |
| 8 | 0 | 回送请求(ping) |
| 9 | 0 | 路由通告 |
| 10 | 0 | 路由发现 |
| 11 | 0 | TTL过期 |
| 12 | 0 | 坏的IP首部 |
ICMP差错报告报文

Traceroute和ICMP
- 如何知道整个路径上路由器的地址?Tracert/Traceroute
- 利用IP数据报中的TTL字段、ICMP时间超过差错报告报文和ICMP终点不可达差错报告报文实现对从源点到终点的路径追踪
过程:
- 源向目的地发送一系列UDP段(不可能的端口号),第一个TTL=1,第二个TTL=2……,每次发送三个
当第n个数据报到达第n个路由器:
- 路由器丢弃数据报
- 并向源发送3个ICMP报文(类型11,编码0)
- 报文的源IP地址就是路由器的IP地址
停止条件:
- UDP段最终到达目的地主机
- 目的地返回 ICMP“端口不可达”分组(类型3,编码3)
- 当源得到该ICMP,停止
不应发送ICMP差错报告的几种情况
- 对ICMP差错报告报文不再发送ICMP差错报告原文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
ICMP询问报文
回送请求和回答
- 由主机或路由器向一个特定的目的主机发出的询问
- 收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
- 这种询问报文用来测试目的站是否可达,以及了解其有关状态
时间戳请求和回答
- 请某台主机或路由器回答当前的日期和时间
- 时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒
- 时间戳请求和回答可用于时钟同步和时间测量
Ping(Packet InterNet Groper)和ICMP
- Ping用来测试两个主机之间的连通性、往返时延、单向转发跳数TTL
- Ping使用ICMP回送请求与回送回答报文
*Ping命令返回的TTL值可以用来判断对方主机操作系统的类型:

4.4.2 ICMP的应用举例
4.5 下一代网络协议 IPv6
4.5.1 IPv6协议概述
为什么需要IPv6? ——IPv4地址耗尽问题、安全问题、支持性问题
IPv6主要变化
- 更大的地址空间。将地址从IPv4的32位增大到了128位,全局可达,聚合性更高
- 扩展的地址层次结构。可以划分为更多层次
- 灵活的首部格式。定义了许多可选的扩展首部
- 改进的选项。允许数据报包含有选项的控制信息,其选项放在有效载荷中
- 允许协议继续扩充。更好地适应新的应用
- 支持即插即用(即自动配置)。使用NDP获取地址前缀
- 支持资源的预分配。
- IPv6首部改为8字节对齐。首部长度必须是8字节的整数倍
- 更小的路由表。IPv4分配不连续,分配时考虑了聚类问题,相同区域默认分配相同前缀IP地址
- 分段处理。主机进行分片处理(默认最小MTU为1280字节),IPv6分组不能在传输途中分片,只能在源端进行分片(不需要路由器分片),路由器如果发现需要分片,丢弃并向源端报错
- 传输安全性。强制使用IPSec安全加密传输
IPv6数据报的一般形式
由两大部分组成:
- 基本首部 base header
有效载荷 payload
- 也称为净负荷。有效载荷允许有零个或多个扩展首部,再后面是数据部分

IPv6的基本首部

- 版本version:4位。指明了协议的版本,IPv6字段是6(0110)
- 通信量类traffic class:8位。这是为了区分不同IPv6数据报的类别或优先级
- 流标号flow label:20位。“流”是互联网络上从特定源点到特定终点的一系列数据报,所有属于同一个流的数据报都具有相同的流标号。资源预分配时使用,对实时音频/视频中使用
- 有效载荷长度payload length:16位。指明IPv6数据报除基本首部以外的字节数(扩展首部+数据)
- 下一个首部next header:8位。相当于IPv4的协议字段或可选字段,可能是TCP/UDP/ICMP等,也可能是扩展头
- 跳数限制hop limit:8位。相当于IPv4的TTL,最大值255,为0时丢弃
- 源地址、目的地址:128位
IPv4与IPv6的首部对比

首部格式改变提升转发处理速度
IPv6的扩展首部
- IPv6选项的功能都放到扩展首部中,由两端的源点和终点的主机来处理,路由器不处理(逐跳选项扩展首部除外)
每个扩展首部都包含“下一个首部”字段(IPv6首部固定字段也有)
- 可指向下一个扩展首部类型
- 最后一个扩展首部指明上层协议:TCP/UDP/ICMP…
如有多个扩展首部,需按规定顺序出现:
- 逐跳选项、路由选择、分片、鉴别、封装安全有效载荷、目的站选项
4.5.2 IPv6的地址
- 在IPv6中,每个地址占128位,地址空间大于$3.4 * 10^{38}$
三种基本类型
- 单播 unicast:传统的点对点通信
- 多播 multicast:一点对多点的通信
- 任播 anycast:IPv6新增加的一种类型。任播的终点是一组计算机,但数据报在交付时只交付其中的一个。通常是按照路由算法得出距离最近的一个
冒号十六进制记法

点分十进制:每8位一段 冒号十六进制:每16位一段
冒号十六进制省略规则:
- 每一段前面的0可省略
- 每一段连续的0可省略
- 连续多段0可以进行零压缩
零压缩
零压缩:一串连续的零可以用一对冒号取代。
example: FF05:0:0:0:0:0:0:B3 可压缩为 FF05::B3
在任一地址中,只能使用一次零压缩
点分十进制记法的后缀
- 结合使用点分十进制记法的后缀在IPv4向IPv6的转换阶段特别有用
- 例如:
0:0:0:0:0:0:128.10.2.1 -> ::128.10.2.1
IPv6前缀的表示方法
- CIDR的斜线表示法仍然可用,但取消了子网掩码
例如:
CIDR记法地址:2001:0DB8:0:CD30:123:4567:89AB:CDEF/60
IPv6的地址是:2001:0DB8:0:CD30:123:4567:89AB:CDEF
网络前缀是:2001:0DB8:0:CD30::/60
IPv6地址分类
| 地址类型 | 二进制前缀 | IPv6记法 |
|---|---|---|
| 未指明地址 | 00…0(128位),仅此一个 | ::/128 |
| 环回地址 | 00…1(128位),仅此一个 | ::1/128 |
| 多播地址 | 11111111(8位),功能和IPv4的一样 | FF00::/8 |
| 本地链路单播地址 | 1111111010(10位),未连接到互联网不能和互联网上的其他主机通信 | FE0::/10 |
| 全球单播地址 | 除上述四种外,所有其它二进制前缀 |
IPv6地址配置方式
- 手动配置
- DHCPv6(IPv6动态主机配置协议)
- 无状态地址自动配置,基于邻居发现协议(ND)的路由器请求报文(RS)的IPv6前缀信息,结合自己的链路层地址生成IPv6地址
4.5.3 从IPv4向IPv6过渡
IPv4协议和IPv6协议并不兼容,迁移需要经历很长时间
- 涉及:互联网用户、互联网服务提供商ISP、互联网内容提供商ICP、网络设备厂家
- 向后兼容:IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由
两种过渡策略:
- 使用双协议栈
- 使用隧道技术
双协议栈
由域名系统DNS查询结果决定使用哪一套系统


问题:协议数据报转换时可能丢失一部分字段,首部不再完整
隧道技术

问题:增加了多余的首部,提高了传输成本
4.5.4 ICMPv6

ICMPv6是面向报文的协议,用来报告差错,获取信息,探测邻站或管理多播通信:
- 比ICMPv4复杂
- ARP协议和IGMP协议的功能合并到ICMPv6中
- 增加了对移动IPv6的支持
ICMPv6报文的分类

4.6 路由选择协议
4.6.1 路由选择协议概述
理想的路由算法
- 算法必须是正确的和完整的
- 算法在计算上应简单
- 算法应能适应通信量和网络拓扑的变化,要有自适应性
- 算法应具有稳定性
- 算法应是公平的
算法应是最佳的 -> 关于“最佳路由”:
- 不存在一种绝对的最佳路由算法
- 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已
路由选择非常复杂:
- 需要许多路由器协同动作
- 环境不断变化,而这种变化有时候无法事先知道
- 当网络发生拥塞时,很难获得所需的路由选择信息
路由算法划分
根据路由算法是否随网络等等通信量或拓扑自适应划分
静态路由选择策略
- 非自适应路由选择
- 缺点:不能及时适应网络状态变化
- 优点:简单、开销小
动态路由选择策略
- 自适应路由选择
- 缺点:实现较为复杂,开销较大
- 优点:能较好地适应网络状态的变化
分层次的路由选择协议

可以通过地址聚合进一步缩减路由条目
地址聚合依赖于:连续的地址分配以及拓扑结构(条件)
现实情况:
- 互联网规模非常大
- 地址分配往往是随机的,难以进行高效的地址聚合,导致 路由表爆炸,通信链饱和
- 每个网络的网络管理员有自己的管理方法和思路,并不希望每个路由器都干涉本网络内部的地址分配等问题
层次路由
可以解决:
- 网络的扩展性问题:当网络扩大时,控制路由表条目和路由表存储空间的增长
- 管理的自治问题:网络管理员可以控制和管理自己网络的路由
自治系统
互联网由大量不同的网络互连,每个管理机构控制的网络是自治的
自治系统 Autonomous System
- 是在单一技术管理下的许多网络、IP地址以及路由器
- 这些路由器使用一种自治系统内部的路由选择协议和共同的度量(跳数、带宽、时延…)
- 每一个AS对其它AS表现出的是一个 单一的和一致的 路由选择策略
- 不同的AS可以使用不同的路由算法/路由协议
- 每个AS有一个全球唯一的ID号:AS ID
- 自治系统内的还可以进一步划分层次:私有自治系统或区域

自治系统内部使用内部网关路由协议 Interior Gateway Protocols(IGP)
- 每个自治系统域内路由算法可不同
- 典型IGP协议:OSPF、RIP、IS-IS、IGRP、EIGRP等等
自治系统之间使用外部网关路由协议 Exterior Gateway Protocols(EGP)
- 各自治系统域之间的路由需统一
- 典型EGP协议:BGP
层次路由的效果:

4.6.2 内部网关协议 RIP

RIP的工作原理
- 路由信息协议RIP(Routing Information Protocol)是一种 分布式的、基于距离向量的 路由选择协议
- 最大优点:简单
- 要求网络中的每个路由器都要维护从它自己到其他每一个目的网络的距离记录
RIP “距离”的定义
- 路由器到 直接连接 的网络距离 = 1
- 路由器到 非直接连接 的网络距离 = 所经过的路由器数+1
- RIP协议中的“距离”也称为“跳数”(hop count),每经过一个路由器跳数+1
- 好路由 = “距离短”的路由 最佳路由 = “距离最短”的路由
- 一条路径最多只能包含15个路由器,“距离”的最大值为16时即相当于不可达
- RIP不能在两个网络之间同时使用多条路由,只选择“距离最短”的路由

RIP协议的三个特点
1.和谁交换信息?
仅和 相邻 路由器交换信息
2.交换什么信息?
交换的信息是当前本路由器所知道的 全部信息,即自己的路由表
3.什么时候交换?
按 固定时间间隔 交换路由信息,例如每隔30s。当网络拓扑发生变化时,路由器夜蛾及时向相邻路由器通告拓扑变化后的路由信息
间隔太短,消耗网络资源;间隔太长,无法及时更新
RIP路由表的建立
- 路由器在刚刚开始工作时,只知道 直接连接 的网络的距离(此距离定义为1)
- 之后,每一个路由器也只和 相邻路由器 交换并更新路由信息
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中每个目的网络的最短距离和下一跳路由器的地址
- RIP路由表项:目的网络、距离、下一跳
| 目的网络 | 距离 | 下一跳路由器 |
|---|---|---|
| Net2 | 3 | R4 |
RIP协议的收敛过程较快
- “收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程
距离向量算法
阅读详解:https://blog.csdn.net/weixin_42374938/article/details/119349738
RIP2报文(二代)

坏消息传得慢
- RIP协议特点:好消息传播的块,坏消息传播的慢
- 问题:坏消息传播得慢(慢收敛)
- Means:当网络出现故障时,要经过比较长的时间才能将此信息(坏消息)传送到所有路由器
RIP协议的优缺点
优点:
- 实现简单,开销较小
缺点:
- 网络规模有限。最大距离为15(16表示不可达)
- 交换的路由信息为完整路由表,开销较大
- 坏消息传播得慢,收敛时间过长
4.6.3 内部网关协议 OSPF
- 开放最短路径优先OSPF 是为了克服 RIP 的不足在1989开发出来的
- 使用了Dijkstra提出的最短路径算法 SPF
- 采用分布式的链路状态协议 link state protocol
- 现在使用OSPFv2
OSPF特点
- 向本自治系统中所有路由器洪泛信息
- 发送的信息就是与本路由器相邻的所有路由器的链路状态
- 只有当链路状态发生变化时路由器才用洪泛法发送此信息
“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”
- OSPF度量值一般包括:费用、距离、时延、带宽等
- 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库LSDB
- 这个数据库实际上就是区域内的拓扑结构图,他在区域内是一致的(称为LSDB的同步)
- 指定的路由器DR 代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息

OSPF适用于更大的网络,为加快收敛、便于管理,使用层次结构的区域划分,以减小LSDB规模,减少网络流量
划分为:主干区域、普通区域
- 主干路由器 BR backbone router
- 区域边界路由器 ABR area border router
划分区域
优点:
- 减少了整个网络上的通信量
- 减少了需要维护的状态数量
缺点:
- 交换信息的种类增多了
- 使OSPF协议更加复杂了
OSPF的五种分组类型
- 问候分组 Hello
- 数据库描述分组 Database Description
- 链路状态请求分组 Link State Request
- 链路状态更新分组 Link State Update
- 链路状态确认分组 Link State Acknowledgment
OSPF分组

OSPF-邻居状态机
邻居
- 端口连接到同一个网段
- 由Hello报文维护
完全邻接
- 为了交换路由信息而形成的关系
- 并非所有的邻居关系都能成为邻接关系

OSPF工作过程
详解:https://blog.csdn.net/XY0918ZWQ/article/details/108681831

OSPF使用 可靠的洪泛法 发送更新分组

4.6.4 外部网关协议 BGP
- BGP是 不同自治系统的路由器之间 交换路由信息的协议
- 目前互联网中唯一实际运行的自治域之间的路由协议
- 当前使用 BGP-4
协议 BGP 的主要特点
力求选择出一条能够跨越AS到达目的路由且 比较好的路由 (不能兜圈子),而并非要计算出一条最佳路由
- 互联网的规模太大,使得自治系统AS之间的路由之间选择非常困难
- 采用了路径向量路由选择协议

- 对等 BGP发言者(BGP speaker) 在AS之间交换信息
eBGP连接和iBGP连接(使用TCP连接)

- eBGP(external BGP)连接:运行eBGP协议,在不同AS之间交换路由信息
- iBGP(internal BGP)连接:运行iBGP协议,在AS内部的路由器之间交换BGP路由信息。AS内部路由器之间同时还要交换内部网关路由协议信息,例如RIP、OSPF

- R4->R3可以通报给R1或R2(外到内)
- R1->R3或R2->R3可以通报给R4(内到外)
- R1->R3不能通报给R2(不能经过BGP Speaker在内部传递信息)
BGP路由信息
BGP路由[前缀,AS-PATH,NEXT-HOP]

BGP的路由选择顺序

- 比较好的BGP路由不能兜圈子
如何判断BGP“兜圈子”?
- 在属性AS-PATH中,不允许出现相同的AS号
BGP的四种报文
| 报文 | 功能 |
|---|---|
| OPEN 打开 | 用来与相邻的另一个BGP Speaker建立关系,使通信初始化 |
| UPDATE 更新 | 用来通告某一路由的信息,以及列出要撤销的多条路由 |
| KEEPALIVE 保活 | 用来周期性地证实邻站的连通信 |
| NOTIFICATION 通知 | 用来发送检测到的差错 |
BGP的首部

4.6.5 路由器工作原理
- 路由器工作在网络层。用于在不同网络之间转发分组
在路由器之间传送的信息有以下两大类:
- 主机之间所需要传送的数据
- 路由信息(为数据传送服务)
路由器包含两个核心功能:
- 控制层面:运行各种路由协议(BGP、OSPF、RIP等),学习去往不同目的的转发路径(路由表)
- 数据层面:根据上述路由表,将收到的IP分组转发到正确的下一跳链路

路由器的结构

不同路由种类的优先级
优先级数值越小,优先级越高

路由器中IP报文转发核心功能
- 链路层解封装,IP头部校验
- 获取报文目的IP地址
- 用目的IP地址,基于最长前缀匹配规则查询转发表
- 查询失败,丢弃报文
查询成功
- √ 获取转发出接口和下一跳IP地址
- √ IP头部“TTL”字段值减一,重新计算IP头部“校验和”
- 重新进行链路层封装,发送报文
三种典型的交换结构

家用路由器
与典型网络路由器差异极大
- 不运行动态路由协议(出口唯一)
- 运行DHCP协议,分配私有IP
- NAT地址转换
- 本地DNS服务
- 用户管理及认证
- 防火墙功能
- 无线AP
- …
4.7 IP多播
4.7.1 IP多播
多播 multicast:源主机给网络中的一部分目标用户发送数据报
目的:更好地支持一对多通信
一对多通信:一个源点发送到许多终点

多播的应用
- 音频/视频会议
- 共享电子白板
- 数据分发
- 实时数据组播
- 游戏与仿真
- …
4.7.2 多播实现的两个步骤
1.确定多播组成员
2.多播路由
- 网际组管理协议IGMP,让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组,即让路由器获悉该网段的组播组成员

1.主机加入多播组
2.路由器定期探寻成员变化情况
History
- 1989 RFC1112(IGMPv1) 成为互联网标准协议
- 1997 RFC2236(IGMPv2,建议标准)
- 2002/10 RFC3376(IGMPv3,建议标准)
多播IP地址
- 在IP多播数据报的目的地址使用IP地址中的 D类地址(多播地址)表示组成员
每一个D类地址标志一个多播组
- 地址范围:224.0.0.0~239.255.255.255
- 常用:224.0.0.0/24
- 多播地址只能用于目的地址,不能用于源地址
| 多播地址(一跳子网使用) | 设备 |
|---|---|
| 224.0.0.1 | LAN上所有设备 |
| 224.0.0.2 | LAN上所有路由器 |
| 224.0.0.5 | LAN上所有OSPF路由器 |
| 224.0.0.251 | LAN上所有DNS服务器 |
多播硬件地址
TCP/IP协议使用的以太网地址多播地址的范围是:
- 00-00-5E-00-00-00 ~ 00-00-5E-FF-FF-FF
- 所有通信都使用IP多播。只要有可能,都用硬件多播来传送,以减小网络开销
4.8 虚拟专用网 VPN 和网络地址转换 NAT
4.8.1 虚拟专用网VPN
- 由于 IP地址的紧缺,一个机构无法使所有主机都拥有公网IP
- 考虑到 互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网
- 使用专用链路:铺设、租用(费用高,不灵活,安全性高)
虚拟专用网VPN(Virtual Private Network)
- 专用网络的经济、可靠、灵活的解决方案
- 使用安全隧道技术将专用网络在公共网络上扩展

- 虚拟专用网VPN利用 公用互联网 作为本机构各个 专用网 之间的 通信载体

专用网络IP地址块(本地地址)
10.0.0.0/8
- A类,从10.0.0.0到10.255.255.255 1个
172.16.0.0/12
- B类,从172.16.0.0到172.31.255.255 连续16个
192.168.0.0/16
- C类,从192.168.0.0到192.168.255.255 连续256个
4.8.2 网络地址转换NAT
- 所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其 本地IP地址 转换成 全球IP地址,才能和互联网连接

- 当NAT路由器具有 n 个全球IP地址时,专用网内最多可以同时有n台主机接入到互联网——并不能节省IP地址
- 可以使专用网内较多数量的主机 轮流 使用NAT路由器有限数量的全球IP地址
网络地址与端口号转换 NAPT
- 使用运输层端口号的NAT叫做 网络地址与端口号转换 NAPT
- NAPT可以使多台拥有本地地址的主机,共用一个全球IP地址,同时和互联网上的不同主机进行通信
- NAPT把专用网内不同的源IP地址都转换为相同的全球IP地址,将TCP源端口号转换为不同的新TCP端口号
- 收到从互联网发来的应答时,从IP数据报的数据部分找出运输层端口号,从NAPT转换表中找到正确的目的主机
| 方向 | 字段 | 旧的IP地址和端口号 | 新的IP地址和端口号 |
|---|---|---|---|
| 出 | 源IP地址:TCP源端口 | 10.0.0.3:30000 | 138.0.1.5:40001 |
| 出 | 源IP地址:TCP源端口 | 10.0.0.4:30000 | 138.0.1.5:40002 |
| 入 | 目的IP地址:TCP目的端口 | 138.0.1.5:40001 | 10.0.0.3:30000 |
| 入 | 目的IP地址:TCP目的端口 | 138.0.1.5:40002 | 10.0.0.4:30000 |
NAT的优点与缺点
优点:
- 节省合法地址,减少地址冲突
- 灵活连接Internet
- 保护局域网的私密性
缺点:
- 违反了IP的结构模型,路由器处理传输层协议
- 违反了端到端的原则
- 违反了最基本的协议分层规则
- 不能处理IP报头加密
- 新型网络应用设计者必须考虑NAT场景,如P2P应用程序
4.9 多协议标记交换 MPLS
4.9.1 MPLS的工作原理
- 当网络很大时,查找路由表要花费很多时间
- 在出现突发通信时,缓存会溢出,引起分组丢失、传输时延增大和服务质量下降
MPLS:互联网建议标准
- 多协议:在MPLS的上层可以采用多种协议
- 标签:MPLS利用面向连接技术,使每个分组携带一个叫做标签(label)的小整数。标签交换路由器用标签值检索转发表,实现分组的快速转发
| 标签 | 转发接口 |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |

MPLS协议的工作过程

LSR同时具有 标记交换 和 路由选择 这两种功能
4.9.2 MPLS报文结构
- MPLS采用 封装技术
MPLS首部的格式

4.10 软件定义网络 SDN 简介
4.10.1 SDN与协议OpenFlow
- 软件定义网络 SDN 于2009年首先提出
优点:
- 提高网络带宽利用率
- 网络运行更加稳定
- 管理更加高效简化
- 运行费用明显降低


OpenFlow数据层面:流表
- 流表 (flow table):规定“匹配+动作”
- 流:穿过网络的一种分组序列,而在此序列中的分组都共享分组首部某些字段的值

- 数据层面的分组交换机或OpenFlow交换机完成“匹配+动作”,即广义转发
匹配:对不同层次首部中的字段进行匹配
动作:转发,重写,丢弃等
流表结构

4.10.2 SDN体系结构

SDN与传统网络的差别
| SDN | 传统网络 |
|---|---|
| 功能分散。交换机、SDN控制器、网络控制应用程序都是可以分开的实体。 可以由不同的厂商和机构来提供 | 控制层面、数据层面、协议的实现都垂直集成在一个机器里 由单独的厂商提供 |



































































































































