网络层¶
约 8775 个字 预计阅读时间 44 分钟
Concept¶
异构网络互连¶
网络互连指将两个以上的计算机网络通过一定的方法,用中继系统相互连接起来,以构成更大的网络系统。根据所在层次,中继系统可分为以下四种:
| 网络层次 | 中继设备 | 能否隔离冲突域 | 能否隔离广播域 |
|---|---|---|---|
| 物理层 | 中继器、转发器、集线器 | ❌ | ❌ |
| 数据链路层 | 交换机、网桥 | ✔ | ❌ |
| 网络层 | 路由器 | ✔ | ✔ |
| 网络层以上 |
对于物理层和数据链路层的中继,从网络层的角度来看只是把一个网络扩大了,他们仍然是同一个网络,因此一般不称为网络互连。我们一般称网络互连为通过路由器进行网络连接和路由选择。
路由选择和分组转发是路由器的主要功能:
- 路由选择 根据路由协议构造路由表,同时经常或定期地与相邻路由器交换信息,获取网络最新拓扑,动态更新维护路由表,以决定分组到达目的地节点的最优路径
- 分组转发 根据转发表将分组从合适的端口转发出去
路由表是根据路由选择算法得到的,而转发表是根据路由表得出的;讨论路由选择时,往往不区分二者
网络层服务¶
网络层服务可分为面向连接的虚电路服务和无连接的数据报服务。
虚电路
当两台计算机通信时,先建立一条在网络层上逻辑的虚电路。连接一旦建立,就固定了虚电路对应的物理路径。
Note
- 与电路交换类似,虚电路的通信过程也分为 虚电路建立、数据传输、虚电路释放 三个阶段
- 但不同的是,在数据交换前,电路交换要建立物理连接,而虚电路是建立逻辑连接,不需要提前为每条虚电路分配带宽
每条虚电路具有一个 VCID,通信双方仅在连接建立时使用完整的目的地址作为分组首部,之后每个分组的首部只需要携带这条虚电路的 VCID 即可。
虚电路上每一个节点都维护一个虚电路表,表中每项记录一个打开的虚电路信息,包括在接受链路和发送链路上的 VCID、前一节点和后一节点的标识等,它是在虚电路建立过程中确定的。同时,这也意味着每条链路都可能同时有多个虚电路通过。
虚电路不只是临时性的,也可以提供永久性虚电路 PVC,基本不需要 setup time
数据报
网络在发送分组前无需先建立连接,网络不提供端到端的可靠传输服务。对应着我们常用的分组转发。
| 数据报服务 | 虚电路服务 | |
|---|---|---|
| 连接的建立 | 不需要 | 必须有 |
| 目的地址 | 每个分组都要有完整的目的地址 | 仅在建立连接阶段使用,之后使用 VCID |
| 路由选择 | 每个分组独立进行路由选择 | 属于同一条虚电路的分组按同一路由转发 |
| 分组顺序 | 不保证分组有序到达 | 保证分组有序到达 |
| 可靠性 | 不保证可靠通信 | 可靠性由网络保证 |
| 对网络故障适应性 | 路径选择变化后正常传输 | 所有经过故障节点的虚电路均失效 |
IPv4¶
分组格式¶
Internet Protocol 定义了数据传送的基本单元——IP 分组及其确切的数据格式。IP 分组的首部分为前半 20B 固定大小的必要部分以及后半可变大小的可选字段,用来提供错误检测及安全等机制:
- 版本: 共 4 bit,在 IPv4 数据报中为 4,IPv6 数据报中为 6
- 首部长度: 共 4 bit,以 4B 为单位
- 最大可表示首部长度为 60B,即该字段值为 15
- 最常用首部长度为 20B,即该字段值为 5
- IP 首部前两个字节通常为 0x45
- 总长度: 共 16 bit,指首部和数据长度之和,以 B 为单位
- 最大可表示数据报长度为 \(2^{16}-1=65535B\)
- 但是数据链路层中最大传送单元(MTU)大小为 1500B 或更小,因此 IP 数据报封装成帧时总长度不能超过该值
- 是分片后的总长度,因此与分片和重组无关
- 标识: 共 16 bit,计数器,每产生一个数据报就加一
- 一个数据报封装成帧被分片时,他们的标识号是相同的,用来正确重装成原来的数据报
- 标志: 共 3 bit,目前只有两位有意义
- 最低位 MF = 1 表示后面还有分片;MF = 0 表示是最后一个分片
- 中间位 DF = 1 时表示不允许分片;DF = 0 表示允许分片
- 若 DF=1,且分组长度又超过 MTU 时,丢弃该分组,并用 ICMP 终点不可达报文向源主机报告差错
- 片偏移: 共 13 bit,表示数据报分片后该片在原数据报中的相对偏移,以 8B 为单位
- 这也意味着,除了最后一个分片,所有分片的数据部分长度都是 8B 的整数倍
- 生存时间 TTL: 共 8 bit,数据报在网络中可通过的路由器数量最大值
- 路由器在转发数据报之前,会对 TTL 进行减一
- 如果 TTL 减为 0,则丢弃
- 协议: 共 8 bit,表示使用 IP 的上层协议
- TCP 为 6
- UDP 为 17
- 首部检验和: 共 16 bit,只检验首部
- 经过路由器时数据报首部会改变,因此每次都要重新计算首部检验和
- 具体计算方法是对首部每 16 bit 按反码运算求和再取反码
- 源地址、目的地址: 共 32 bit,标识发送方和接收方的 IP 地址
Example
某 IP 分组的片偏移字段值为 100,首部长度字段值为 5,总长度字段值为 100,则该 IP 分组的数据部分的第一个字节的编号与最后一个字节的编号为?
- 第一个字节:\(100\times 8 = 800\)
- 最后一字节:\(800+ (100- 5\times 4) -1 = 879\)
数据报分片¶
IP 数据报转发路径上的各段链路可能使用不同的链路层协议,因此有不同的 MTU。例如,以太网的 MTU 为 1500B,而许多广域网的 MTU 不超过 576B。当 IP 数据报总长度大于 MTU 时,就需要将 IP 数据报中的数据分装在多个较小的 IP 数据报中,即分片。
例如,一个 4000B 的 IP 数据报(20B 首部,3980B 数据)需要转发到一条 MTU 为 1500B 的链路上。那么经计算,原始数据报中 3980B 数据被分为三片,每片数据部分依次为 1480B、1480B、1020B,它们的标识号均与原始数据报相同:
IPv4 地址¶
IP 地址是网络上每台主机或路由器的每一个接口都会被分配的一个全球唯一 32 位标识符,它由网络号和主机号组成,其中网络号标志该主机所连接到的网络,主机号标志该主机。
早期互连网使用分类的 IP 地址:
判断以下地址类型
10.2.1.1A 类128.63.2.100B 类201.222.5.64C 类256.241.201.10不存在,超出范围
下列属于单播地址的是?
172.31.128.255/18✔10.255.255.255❌- 为 A 类地址,主机号全 1,代表广播地址
192.168.24.59/30❌- 为 CIDR 地址,只有末两位为主机号,而 59 末两位为
11,因此也为广播地址
- 为 CIDR 地址,只有末两位为主机号,而 59 末两位为
224.105.5.211❌- 为 D 类多播地址
| 网络类别 | 第一个可用网络号 | 最后一个可用网络号 | 最大可用网络数 | 每个网络中最大主机数 |
|---|---|---|---|---|
| A | 1 | 126 | \(2^7-2\) | \(2^{24}-2\) |
| B | 128.0 | 191.255 | \(2^{14}\) | \(2^{16}-2\) |
| C | 192.0.0 | 223.255.255 | \(2^{21}\) | \(2^8-2\) |
对于 A 类网络,网络号 0 和 127 被特殊地址占用,所以最大可用网络为 \(2^7-2\)
在各类 IP 地址中,有些 IP 地址具有特殊用途,不用做主机的 IP 地址:
| 地址 | 用途 |
|---|---|
| 全 0 网络地址 | 用于系统启动时临时通信,又叫主机地址,只能作为分组的源,不能是目的 |
| 127.x.x.x | 指本地节点,用于测试网卡及 TCP/IP 软件 |
| 全 0 主机地址 | 指网络本身 |
| 全 1 主机地址 | 指本网络的广播地址,也称直接广播地址 |
| 0.0.0.0 | 指任意地址,只能作为分组的源,不能是目的,用于 DHCP 发现报文 |
| 255.255.255.255 | 用于本地广播,也称受限广播地址,一般不被转发 |
互联网中的路由器对目的 IP 地址是以下三个私有地址段的 IP 数据报均不会转发
- 10.0.0.0/8,即 10.0.0.0 - 10.255.255.255,相当于 1 个 A 类网络
- 172.16.0.0/12,即 172.16.0.0 - 172.31.255.255,相当于 16 个连续的 B 类网络
- 192.168.0.0/16,即 192.168.0.0 - 192.168.255.255,相当于 256 个连续的 C 类网络
这几个私有段用于专用网络地址,需要通过网关使用 NAT 转换为公用地址,才能访问互联网。
子网划分¶
网络号:主机号这种两级 IP 地址的缺点在于不够灵活,有时会导致 IP 地址空间利用率太低。
1985 年以后,IP 地址中新增字段子网号,使得两级 IP 地址变为三级 IP 地址。子网划分 subnetting 在网络内部将一个网络块进行划分以供多个内部网络使用,对外仍是一个网络。
我们用子网掩码来指明分类 IP 地址的主机号部分被借用了多少位作为子网号。子网掩码为 \(1^* 0^*\) 组成,主机或路由器只需将 IP 地址与对应子网掩码逐位与运算即可得到相应子网的网络地址。
无分类编址 Classless Inter-Domain Routing 在变长子网掩码的基础上,进一步消除了传统 A、B、C 类地址的概念。它使用长度可任意选取的网络前缀来代替网络号,因此分配更灵活有效。
CIDR 通常使用斜线记法,例如对于地址 128.14.32.5/20,它的掩码是 20 个连续的 1 和后续 12 个连续的 0,通过逐位与即可得到该地址的网络前缀:
分组转发¶
路由器转发表中一定包含目的网络地址和下一跳地址两个字段,IP 数据报可以通过多次间接交付到达目的主机所在网络的路由器,然后对主机进行直接交付。
转发过程中,路由器会将数据链路层送上来的帧拆开,并根据下一跳的链路使用的 MAC 地址修改源 MAC 地址和目的 MAC 地址字段。而分组中的源 IP 地址和目的 IP 地址则保持不变。
后面所说的 NAT 会改变源 IP 地址或目的 IP 地址
如果采用 CIDR 编址,一个分组可能在转发表中找到多个匹配的前缀,此时应该按照最长前缀匹配 Longest Prefix Match 原则选择最具体的路由。
例如:目标地址是
192.168.1.25路由表中有:
192.168.1.0/24→ eth0192.168.0.0/16→ eth1系统会选择更“具体”的
/24路由。
此外,路由表中还可以增加两种特殊的路由:
- <1> 特定主机路由 对特定目的主机的 IP 地址指定一个路由,以方便管理员控制与测试网络
- 若特定主机 IP 为 a.b.c.d,则转发表中对应项目的网络地址为 a.b.c.d/32,其中 /32 表示的子网掩码没有意义
- <2> 默认路由 用特殊前缀 0.0.0.0/0 表示默认路由,所有不在转发表中的目的网络均走默认路由
- 默认路由通常用于路由器到互联网的路由
地址解析¶
在实际网络链路传送数据帧时,最终必须使用 MAC 地址,所以需要一种方法完成 IP 地址到 MAC 地址的映射,即 Address Resolution Protocol。
每台主机都有一个 ARP 缓存,用于存放本局域网上各主机和路由器的 IP 地址到 MAC 地址的映射表,称 ARP 表。
如果主机要向不同网络上的另一个 IP 地址发送数据,则此时不会产生 ARP 解析,而是将数据发往自己的默认网关。
ARP 中每个表项都有一定生存时间,超时则会被删除
当主机 A 要向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 表中查找有无主机 B 的 IP 地址。
- 如果有,就在 ARP 表中查出其对应的硬件地址,再把其硬件地址写入到 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址。
- 如果没有,则在本局域网上广播发送一个 ARP 请求分组,广播使用的目的 MAC 地址为
FF-FF-FF-FF-FF-FF。主机 B 在 ARP 分组中见到自己的 IP 地址就向 A 发送 ARP 响应分组(单播)。主机 A 收到主机 B 的 ARP 响应分组后,就在其 ARP 缓存表中写入主机 B 的 IP 地址到硬件地址的映射。
ARP 协议解析是自动进行的,用户并不知道地址解析的过程。
NAT¶
网络地址转换(Network Address Translation)用于将专用网络地址转换为公用网络地址,从而对外隐藏内部管理的 IP 地址。
以下三个私有 IP 地址块只能用于 LAN,并且不同 LAN 可以重复使用这些地址,从而有效解决了 IP 地址不足的问题,因此也被称为可重用地址:
- 10.0.0.0/8,即 10.0.0.0 - 10.255.255.255,相当于 1 个 A 类网络
- 172.16.0.0/12,即 172.16.0.0 - 172.31.255.255,相当于 16 个连续的 B 类网络
- 192.168.0.0/16,即 192.168.0.0 - 192.168.255.255,相当于 256 个连续的 C 类网络
然而互联网上 IP 地址是不能重复的,因此这些私有 IP 地址不能直接用于互联网,必须通过网关使用 NAT 转换为全球 IP。
互联网中的所有路由器对目的地址是私有地址的数据报均不转发
使用 NAT 的路由器至少有一个有效的全球 IP 地址。当本地地址的主机要和外界通信时,NAT 路由器使用 NAT 转换表进行 <本地 IP 地址 : 端口> 到 <全球 IP 地址 : 端口> 的映射。
因此,NAT 路由器不仅仅工作在网络层,还涉及传输层的端口号。它在转发 IP 分组时,会将其源 IP 地址或目的 IP 地址字段也跟着修改。
DHCP¶
Dynamic Host Configuration Protocol 用于给主机动态分配 IP 地址,它提供了即插即用的联网机制,允许一台计算机加入新的网络自动获取 IP 地址。
DHCP 是基于 UDP 的应用层协议
主机向 DHCP 服务器广播发现报文,本地网络上的所有主机虽然都能收到该广播报文,但是只有 DHCP 服务器才能回答。DHCP 服务器先在数据库中查找该计算机的配置信息,如果找不到,则从服务器的 IP 地址池中获取一个地址分配给该主机,并回复提供报文。
完整的交换过程如下:
- DHCP Discover (发现阶段): 客户端以广播方式发送请求报文,旨在定位网络内可用的 DHCP 服务器并请求分配配置参数。
- 此时 DHCP 发现报文中,源地址设置为
0.0.0.0,目的地址设置为255.255.255.255
- 此时 DHCP 发现报文中,源地址设置为
- DHCP Offer (提供阶段): 各 DHCP 服务器通过广播响应,向客户端提供包含候选 IP 地址、子网掩码及租约时长的配置建议。
- 此时 DHCP 提供报文中,目的地址设置为
255.255.255.255
- 此时 DHCP 提供报文中,目的地址设置为
- DHCP Request (请求阶段): 客户端广播发送请求报文,正式通告其选择的服务器及 IP 地址。
- 此时 DHCP 请求报文中,源地址设置为
0.0.0.0,目的地址设置为255.255.255.255
- 此时 DHCP 请求报文中,源地址设置为
- DHCP Acknowledge (确认阶段): 被选定的服务器广播发送确认报文,正式将 IP 地址租约分配给客户端,并完成网络参数的最终配置。
- 此时 DHCP 确认报文中,目的地址设置为
255.255.255.255
- 此时 DHCP 确认报文中,目的地址设置为
因为启动时客户机并不知道服务器的 IP 地址,所以不能建立 TCP 连接,因此采用 UDP 广播的方式。
ICMP¶
Internet Control Message Protocol 是网络层协议,被封装在 IP 数据报内发送,通常用来报告差错和异常情况,即分为 ICMP 差错报告报文 和 ICMP 询问报文 两种。
ICMP 差错报告报文是目标主机(或到目标主机路径上的路由器)向源主机报告差错和异常的报文,有以下 5 种常用类型:
- 终点不可达: 当路由器或主机不能交付数据报时,就向源发送
- 源点抑制: 当路由器或主机因拥塞而丢弃数据报时,就向源发送
- 时间超过: 路由器收到数据报时会修改其首部 TTL 指减一,若结果为 0 了,则丢弃数据报,并向源发送时间超过报文;还有一种情况是终点在规定时间内没有收到一个数据报的所有报片。则向源发送时间超过报文
- 参数问题: 当路由器或主机检查数据报首部某字段值不正确而丢弃数据报时,就向源发送
- 改变路由(重定向): 路由器把重定向报文发送给主机,让主机知道下次应该将数据报发送给更好的路由
对于以下几种情况,不再发送 ICMP 差错报告报文
- 1) 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文
- 2) 对第一个分片的数据报片的所有后续数据报片,都不发送 ICMP 差错报告报文
- 因为只有第一个分片才会携带 TCP/UDP 首部
- 3) 对具有多播地址的数据报,都不发送 ICMP 差错报告报文
- 防止多个主机同时回复 ICMP 差错报文
- 4) 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报,不发送 ICMP 差错报告报文
而 ICMP 询问报文通常有以下两种类型:
- 回送请求和回答报文: 用来测试目的主机是否可达,并了解有关状态
- 时间戳请求和回答报文: 利用报文中记录的时间戳,发送方可计算出当前的往返时延
ping 命令就使用了 ICMP 回送请求和回答报文
IPv6¶
IPv4 地址不够用,目前有以下三种措施:
- 1)采用五类别编址 CIDR,使 IP 地址分配更加合理
- 2)采用 NAT 方法节省全球 IP 地址
- 3)使用更大地址空间的 IPv6
只有 IPv6 才能从根本上解决地址耗尽的问题
总结来讲,IPv6 具有如下特点:
- 地址长 128 位
- 首部长度固定为 40B
- 扩展首部被放入“有效载荷”内,路由器不对其进行处理
- 这也说明 IPv6 协议是可以继续扩充的
- 支持即插即用,自动配置,无需 DHCP
- 只允许源主机进行分片,不允许中间路由器对其分片
路由算法和路由协议¶
路由算法¶
路由算法是路由选择协议的核心,决定了路由表的表项是如何获得的。给定一组路由器及连接路由器的链路,路由算法要找到一条从源路由器到目的路由器的最佳路径。
这里的“最佳”指具有最低的开销
根据能否随网络的通信量或拓扑自适应地调整变化,路由算法被划分为如下两大类:
- <1> 静态路由算法 指由网络管理员手工配置每一条路由
- 简单、开销较小,但不能及时适应网络状态变化
- 适用于简单的小型网络
- <2> 动态路由算法 根据网络流量负载和拓扑结构的变化来动态调整自身的路由表
- 常用的动态路由算法分为距离-向量路由算法和链路状态路由算法
Distance Vector Routing
所有最短路径算法都依赖于一个性质:两点之间的最短路径也包含了其它顶点之间的最短路径。距离-向量路由算法使用 Bellman-Ford 算法作为基础,对网络上每个节点 \(x\) 维护以下路由信息:
- <1> 从 \(x\) 到每个直接相连邻居 \(v\) 的链路费用 \(c(x,v)\)
- <2> 节点 \(x\) 的距离向量,即 \(x\) 到网络中其它节点的开销
- 这是一组距离,因此称为距离向量
- <3> \(x\) 的每个邻居的距离向量
Bellman-Ford 算法用于计算单源最短路径,\(d_x(y)\) 表示点 \(x\) 到 \(y\) 的最短距离
在距离-向量算法中,每个节点定期向它的每个邻居发送自己的距离向量副本。当节点 \(x\) 从邻居 \(v\) 收到了一个新距离向量时,它会使用 Bellman-Ford 公式 \(d_x(y) = \min \{c(x,y) + d_v(y)\}\) 来更新自己的距离向量。如果 \(x\) 的距离向量因此而改变,则它接下来继续向它的每个邻居发送更新后的距离向量。
显然,用于更新路由的更新报文大小与网络中节点数量成正比,因此大型网络将导致很大的更新报文,并且 Bellman-Ford 算法时间复杂度可达 \(O(N\times E)\approx O(N^3)\)。
距离向量算法的特点是迭代、分布式
- 每次本地迭代由下列引起:本地链路费用改变、邻居更新报文
- 各节点依次计算,相互依赖
Link State Routing
我们将本路由器都和哪些路由器相邻(网络拓扑)以及相应链路的代价称为链路状态。链路状态算法会维护一个全网范围内一致的拓扑结构图,每个节点会执行下列两项任务:
- 主动测试所有相邻节点的状态
- 定期将链路状态传播给所有其它节点
- 因此每个节点都知道全网共有多少个节点、哪些节点是相连的、其代价是多少
- 每个节点都可根据全局链路状态通过 Dijkstra 算法计算出到达其它节点的最短路径
在链路状态算法中,虽然每个节点需要存储更多数据(网络拓扑结构图),但是它们只需要通过广播的方式告诉其它所有节点它与它直接相邻的链路的代价,报文大小与网络中节点数量无关。
路由协议¶
网络太大,则路由表过大。为此,我们为路由划分层次。
互联网被划分为许多较小的自治系统 Autonomous System AS。自治系统是在单一技术管理下的一组路由器,这些路由器使用一种 AS 内部的路由选择协议和共同的度量。
- Interior Gateway Protocol, IGP 是在一个自治系统内部使用的路由选择协议,它与互联网中其它 AS 选用什么路由选择协议无关,包括我们上面所说的两种路由算法
- External Gateway Protocol, EGP 用来传递不同自治系统中的路由选择信息,例如源主机和目的主机不在同一 AS 中,就需要用到 EGP
自治系统之间的路由选择称为域间路由选择,自治系统内部的路由选择称为域内路由选择
| 协议 | RIP | OSPF | BGP |
|---|---|---|---|
| 类型 | IGP | IGP | EGP |
| 路由算法 | 距离向量 | 链路状态 | 路径向量 |
| 传递协议 | UDP | IP | TCP |
| 路径选择 | 跳数最少 | 代价最低 | 较好,非最佳 |
| 交换节点 | 和本节点相邻的路由器 | 网络中所有路由器 | 和本节点相邻的路由器 |
| 交换内容 | 当前本路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 首次为整个路由表,以后为有变化的部分 |
Routing Information Protocol, RIP
路由信息协议是 IGP 中最先得到广泛应用的协议,它是一种分布式的基于距离向量的路由选择协议。
RIP 使用跳数(或距离)来衡量到达目的网络的距离,规定从一路由器到直接连接的网络的跳数为 1,每经过一个路由器,跳数加 1。网络中每个路由器都要维护从它自身到其它目的网络的跳数,即距离向量,每个路由表项都有三个关键字段:目的网络 \(N\),距离 \(d\),下一跳路由器地址 \(X\)。
RIP 允许一条路径中最多只能包含 15 个路由器,因此跳数为 16 表示网络不可达,因此 RIP 只适用于小型互联网。
规定最高跳数是为了防止分组不断在环路上循环的情况
RIP 中每个路由器都要不断和其它路由器交换信息:
- 1)和谁交换信息:仅和直接相邻的路由器交换信息
- 2)交换什么信息:交换本路由器所知道的全部信息,即自己的路由表
- 3)何时交换信息:按固定的时间间隔(通常为 30s)交换路由信息;当网络拓扑发生变化时,路由器也需即使向相邻路由器通告拓扑变化后的路由信息
路由器刚启动时只知道自己到直接相连的几个网络的距离为 1。每个路由器仅和相邻路由器周期性地交换并更新路由信息,经过若干次交换和更新后,所有的路由器最终都会知道到达本 AS 内任何网络的最短距离和下一条路由器的地址,称为收敛。
Open Shortest Path First, OSPF
OSPF 协议也是 IGP 的一种,是使用分布式链路状态路由算法的典型代表,与 RIP 相比具有以下四个主要特点:
- 1)OSPF 使用洪泛法向本 AS 中的所有路由器发送信息,而 RIP 仅向自己相邻的几个路由器发送信息
- 具体而言,OSPF 中路由器向所有相邻路由器发送信息,而每个相邻路由器又将此信息发往所有的相邻路由器(除了刚刚发来信息的那个路由器),最终所有路由器都收到了这个信息的副本
- 2)发送的信息是与本路由器相邻的所有路由器的链路状态,而 RIP 发送的信息是整个路由表
- 3)只有当链路状态发生变化时才会发送信息,并且收敛更快,而 RIP 不管网络拓扑是否发生变化,也要定期交换路由表信息
- 4)OSPF 是网络层协议,直接用 IP 数据报传送,而 RIP 是应用层协议,它在传输层使用 UDP
因为各路由器之间频繁地交互链路状态信息,所以所有路由器最终都能建立一个链路状态数据库,即全网拓扑结构图。然后,每个路由器利用链路状态数据库中的数据,使用 Dijkstra 算法计算自己到达各目的网络的最优路径,构造出自己的路由表。
虽然使用 Dijkstra 算法能够得到完整的最优路径,但是路由表中仍只存储下一跳的地址
除此之外,OSPF 还有以下特点
- OSPF 允许对每条路由设置不同的代价,对于不同类型的业务可计算出不同的路由
- 若到同一个目的网络有多条相同代价的路径,则可将通信量分配给这几个路径
- OSPF 分组具有鉴别功能,从而保证仅在可信赖的路由器之间交换链路状态信息
- OSPF 支持可变长度的子网划分和无分类编址 CIDR
- 每个链路状态都有一个 32 位的序号,序号越大,状态越新
Border Gateway Protocol, BGP
边界网关协议是不同 AS 的路由器之间交换路由信息的协议,属于 EGP。
BGP 是基于 TCP 的应用层协议,采用了路径向量路由选择,目的是力求寻找一条能够到达目的网络且比较好的路由(并不一定是最佳路由)。
BGP 不仅运行在 AS 之间,还运行在 AS 内部,根据 BGP 路由信息交换的对等双方类型,我们有以下两种会话分类:
- external BGP, eBGP: 跨越两个 AS 的 BGP 会话称为 eBGP,用于从相邻 AS 获得网络可达信息
- internal BGP, iBGP: 同一 AS 内部两个路由器间的 BGP 会话称为 iBGP,用于将网络可达信息传播给 AS 内的路由器
BGP 中最重要的两个属性为 AS-PATH 和 NEXT-HOP,路由器通过 BGP 报文学习到某一终点所需经过的路径:
例如,对于如上例子,边际路由器 R1a 从 R2a 收到报文 C, AS2, AS3, R2a,它的含义是“从 R2a 出发能够到达 AS2->AS3 中的网络 C”,即 \(R1a\rightarrow R2a \rightarrow ... \rightarrow C\)。
AS-PATH 就是到某个网络所要经过的全部自治系统序列,而不仅仅是下一条
而对于网络 \(A\),它会收到 iBGP 报文 C, AS2, AS3, R1a,表示它要到达网络 \(C\) 需要将分组转发到同一 AS 内部的路由器 R1a 上。此时需要根据内部网关协议找到从网络 \(A\) 到达 R1a 的最佳路由的下一跳并转发,而并不一定是直接转发到 R1a。
当 BGP 刚刚运行时,BGP 的邻站要交换整个的 BGP 路由表;以后只需要在发生变化时更新有变化的部分。
BGP 报文通常通过半永久端口 179 进行交换,包括以下四类:
- Open 报文: 用于与相邻 BGP 对等方建立关系,使通信初始化
- 两个路由器建立 TCP 连接后必须发送 Open 报文,以相互识别对方,并协商一些参数
- Update 报文: 用于通知某一路由的信息,以及列出要撤销的多条路由
- 撤销路由可以一次撤销多条,但新增路由只能一次增加一条
- Keepalive 报文: 用于周期性地证实邻站的连通性
- 除此之外,收到 Open 报文的路由器要发回 Keepalive 报文表示接受建立 BGP 连接
- Notification 报文: 用来发送检测到的差错
IP 多播¶
多播(or 组播)指源主机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机,即一对多的通信。
IPv4 地址中的 D 类地址保留用来作为多播目的地址,范围是 224.0.0.0 - 239.255.255.255,可分配的有 28 位。
相比于一般的 IP 数据报,多播使用了 IGMP 协议,对应的首部协议字段为 2,且:
- <1> 多播数据报也是“尽最大努力交付”,不提供可靠交付
- <2> 对多播数据报不产生 ICMP 差错报文
TCP 是面向连接的,因此它不能使用多播;多播机制仅应用于 UDP
为了在最后的局域网实现硬件多播,我们也有相应的多播 MAC 地址。以太网多播地址的范围为 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF,可分配的有 23 位。
注意到多播 IP 地址的范围大于多播 MAC 地址,因此二者是多对一的映射关系
实际上,我们直接把 IP 地址的后 23 位映射到 MAC 地址中,多出的 5 位地址不作映射(即 32 个多播地址共用 1 个 MAC 地址)
路由器要获得多播组的成员信息,需要使用 Internet Group Management Protocol, IGMP。通过 IGMP,路由器可以知道本局域网中是否有主机参加或退出了某个多播组,它的作用范围是局域网而不是互联网。
IGMP 报文被封装在 IP 数据报内传送,通常被视为 IP 协议的一个组成部分,它的工作分为两个阶段:
- 1)当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个 IGMP 报文,声明自己要成为该组成员
- 本地的多播路由器收到后,利用多播路由选择协议,把这种组关系转发给互联网上其它多播路由器
- 2)本地多播路由器要周期性探询本地局域网上的主机,以确认它们是否仍是组成员
- 只要对某个组有一台主机响应,路由器就认为这个组是活跃的
- 如果一个组在多轮探询后仍无响应,则认为本网络的主机都离开了这个组
另外,通过构造多播转发树,我们避免了路由环路的出现
移动 IP¶
移动 IP 技术指移动站以固定的 IP 地址实现跨越不同网络的漫游功能。例如,我们需要在移动中进行 TCP 传输,则在移动站漫游时,应一直保持这个 TCP 连接,为此,需要保证 IP 地址保持不变。
- 移动节点: 具有永久 IP 地址的移动主机
- 移动节点的地址称为永久地址(or 归属地址)
- 移动站原始连接的网络称为归属网络,移动站移动到另一地点所接入的外地网络称为被访网络
- 本地代理: 连接在归属网络上的路由器
- 外地代理: 连接在被访网络上的路由器
移动站 A 移动到被访网络时,要先向外地代理进行登记,获得一个临时的转交地址。转交地址用于建立本地代理和外地代理之间的连接,本地代理收到发送给 A 的 IP 分组后,会通过该隧道发送给外地代理,从而实现移动 IP。






