网络层
网络层概述
基本概念
- 网络层提供主机到主机的通信服务
- 主要任务:将分组从源主机经过多个网络和多段链路传输到目的主机【分组转发和路由选择】
- OSI 参考模型的网络层提供面向连接的虚电路服务
- TCP/IP 体系的网络层提供无连接的数据报服务:
- 所传送的分组可能出错、丢失、重复、失序或超时
- 通信的可靠性由传输层负责
- 路由器做得比较简单,网络造价降低,运行方式灵活,能够适应多种应用
主要功能
异构网络互连
- 网络互连:指将两个以上的计算机网络,通过一定的方法,用一些中继系统相互连接起来,以构成更大的网络系统
- 根据所在的层次,中继系统分为:
- 物理层:转发器,集线器
- 数据链路层:网桥或交换机
- 网络层:路由器
- 网络层以上:网关
- 注意:
- 使用物理层或数据链路层的中继系统时,只是把一个网络扩大了,从网络层的角度看,它仍然是同一个网络,一般并不称为网络互连
- 因此网络互连通常是指用路由器进行网络连接和路由选择

- TCP/IP 体系在网络互连上采用的做法是在网络层采用标准化协议(IP 协议),但相互连接的网络可以是异构的
- 虚拟互连网络:
- 互连起来的各种物理网络的异构性【拓扑结构、寻址方案、差错处理方法、路由选择机制等】是客观存在的
- 通过 IP 协议可使这些网络在网络层看起来像是一个统一的网络【IP 网络】
路由与转发
- 路由选择:根据路由协议构造路由表,同时经常或定期地与相邻路由器交换信息,获取网络最新拓扑,动态更新维护路由表,以决定分组到达目的地结点的最优路径
- 分组转发:路由器根据转发表将分组从合适的端口转发出去
拥塞控制
- 拥塞:
- 在通信子网中,因出现过量的分组而引起网络性能下降的现象
- 此时所有节点都来不及接受分组,而要丢弃大量分组
- 判断是否拥塞的方法:
- 观察网络吞吐量与网络负载的关系:
- 随着网络负载的增加,吞吐量明显小于正常标准,进入轻度拥塞
- 网络的吞吐量随着网络负载的增大而下降,可能已经进入拥塞状态
- 轻度拥塞 →拥塞 →死锁
- 观察网络吞吐量与网络负载的关系:
- 拥塞控制的作用:
- 确保网络能够承载所达到的流量
- 全局性过程:涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素
- 拥塞控制的方法:
- 开环控制【静态】:
- 在设计网络时事先考虑可能发生拥塞的情况,一旦系统启动并运行,就不修改
- 手段包括:确定何时可接收新流量、何时可丢弃分组及丢弃哪些分组,确定何种调度策略等
- 闭环控制【动态】:
- 采用监测网络监视哪里发生了拥塞,动态调整网络系统运行
- 基于反馈环路的概念
- 开环控制【静态】:
网络层提供的两种服务
| 数据报服务 | 虚电路服务 | |
|---|---|---|
| 连接的地址 | 不需要 | 必须 |
| 目的地址 | 每个分组都有完整的目的地址 | 仅在连接建立阶段使用,之后每个分组使用长度较短的虚电路号 |
| 路由选择 | 每个分组独立地进行路由选择和转发 | 属于同一条虚电路的分组按照同一路由转发 |
| 分组顺序 | 不保证有序 | 有序 |
| 可靠性 | 不保证可靠通信,可靠性由用户主机保证 | 可靠性由网络保证 |
| 对网络故障的适应性 | 出故障的结点丢失分组,其他分组路径选择发生变化时可以正常传输 | 所有经过故障结点的虚电路均不能工作 |
| 差错处理和流量控制 | 由用户主机进行流量控制,不保证数据报的可靠性 | 可由分组交换网负责,也可由用户主机负责 |
面向连接的虚电路服务
- 当两台计算机进行通信时,先建立网络层的连接 ---- 虚电路 VC
- 连接一旦建立,就固定了虚电路对应的物理路径
- 三个阶段:虚电路建立、数据传输、虚电路释放
- 每次建立虚电路时,将一个未用过的虚电路号 VCID分配给该虚电路
- 分组的首部仅在连接建立时使用完整的目的地址,之后每个分组的首部只需携带一条虚电路的编号
- 虚电路网络中的每个结点上都维持一张虚电路表:
- 表中每项记录一个打开的虚电路的信息
- 包括在接收链路和发送链路上的虚电路号、前一结点和下一结点的标识

- 特点:
- 提供了可靠的通信功能
- 通信链路的建立和拆除需要时间开销:
- 对长时间、频繁的数据交换效率高
- 对交互式应用和少量的短分组开销大
- 分组首部不包含目的地址,包含的是虚电路号
- 路由选择体现在连接建立阶段
- 当网络中某个结点或链路出现故障而失效时,将会造成全局破坏
- 保证了数据的有序到达
无连接的数据报服务
- 网络在发送分组前不需要建立连接
- 源主机的高层协议将报文拆成若干较小的数据段,并加上地址等控制信息后构成分组
- 中间结点存储分组很短一段时间,找到最佳的路由后,尽快转发每个分组
- 网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉【与电话网络相比】

- 特点:
- 发送分组前不需要建立连接
- 网络尽最大努力交付,传输不保证可靠性【误码、丢失、重复、失序】
- 每个分组的首部必须包括发送方和接收方的完整地址,以便独立传输
- 分组在交换结点存储转发时,需要排队等候处理,带来一定时延
- 网络具有冗余路径,当某个结点或链路出现故障,可相应地更新转发表,寻找其他路径
- 收发双方不独占某条链路,资源利用率高
因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘 (用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心
SDN 的基本概念
- 将网络层抽象地划分为:
- 数据平面:实现转发
- 控制平面:实现路由选择
- 软件定义网络 SDN:
- 采用集中式的控制平面和分布式的数据平面来控制网络,两个平面相互分离
- 控制平面利用控制 - 数据接口对数据平面上的路由器进行集中式控制,方便软件控制网络
- 路由器的工作仅为:收到分组、查找转发表、转发分组
- 远程控制器:
- 在控制平面上
- 掌握各主机和整个网路的状态,为每个分组计算出最佳路由
- 通过 Openflow 协议将转发表【SDN 中称为流表】下发给路由器

- SDN 通过为开发者提供强大的编程接口,使得网络具有很好的编程性:
- 北向接口:
- SDN 提供的编程接口
- 提供了一系列丰富的 API,开发者可以在此基础上设计自己的应用
- 南向接口:
- SDN 控制器和转发设备建立双向会话的接口
- 使用南向接口协议【如 openflow】,SDN 控制器可兼容不同的硬件设备,同时在设备中实现上层应用的逻辑
- 东西向接口:
- SDN 控制器集群内部控制器之间的通信接口
- 用于增强整个控制平面的可靠性和可拓展型
- 北向接口:
- SDN 的优点:
- 全局集中式控制和分布式高速转发,既利于控制平面的全局优化,又利于高性能的网络转发
- 灵活可编程与性能的平衡,控制和转发功能分离后,使得网络可以由专有的自动化工具以编程方式配置
- 降低成本,控制和数据平面分离后,尤其是在使用开放的接口协议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本
- SDN 的问题:
- 安全风险:集中管理容易受攻击,若崩溃,则整个网络会受到影响
- 瓶颈问题:原本分布式的控制平面集中化后,随着网络规模扩大,控制器可能成为网络性能的瓶颈
IPv4
- IPv 4 地址是给因特网(Internet)上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的 32 比特的标识符
- IPv 4 即现在普遍使用的 IP 协议(版本 4)
- IP 协议定义数据传送的基本单元——IPv 4 分组及其确切的数据格式
- IP 协议也定义一些规则包括:
- 指明分组如何处理、错误怎样控制
- 特别是 IP 协议还包括非可靠投递的思想,以及与此关连的分组路由选择的思想
IPv4 分组
- 在 TCP/IP 标准中,各种数据格式常常以
32比特【4字节】为单位来描述
IPv4 分组的格式
-
一个 IP 分组【IP 数据报】由首部和数据部分组成:
- 首部:前一部分的长度固定【共
20 B】,后面是一些可选字段,用来提供错误检测及安全等机制
- 首部:前一部分的长度固定【共
-
版本:占
4比特,IPv4 数据报中该字段值是 4 -
首部长度:占
4比特,以4 B为单位- 最小取值为
0101【十进制为5】,表示 IP 数据报首部只有20 B【 固定部分4 B单位,所以取值5对应20 B】 - 最大取值为
1111【十进制取值为15】,表示 IP 数据报首部长度为60 B【20 B固定部分和最大40 B可变部分】
- 最小取值为
-
区分服务 :占
8比特,一般情况下不使用该字段 -
总长度:
- 占
16比特,以1 B为单位 - 表示
IP数据报的总长度【首部 + 数据载荷】 - 最大取值:(十进制
65535)
- 占
-
标识:
- 占
16比特,属于同一个数据报的各分片数据报应该具有相同的标识 IP软件维持一个计数器,每产生一个数据报,计数器值+1,并将此值赋给标识字段- 当一个数据报的长度超过网络的 MTU 时,必须分片,此时每个分片都复制一次标识号,便于重组
- 占
-
标志 :占
3比特,各比特含义如下- 最低位 MF:
1表示后面还有分片,0表示这是最后一个分片 - 中间位 DF:
1表示不允许分片,0表示允许分片 - 最高位为保留位:必须为
0
- 最低位 MF:
-
片偏移【必须是整数】:
- 占
13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少单位 - 以
8 B为偏移单位 - 除最后一个分片外,每个分片的长度是 8 B 的整数倍
- 占
-
生存时间 TTL:
- 占
8比特,最初以秒为单位,最大生存周期为11111111【十进制255秒】 - 路由器转发
IPv4数据报时,将IP数据报首部中的该字段值减去IP数据报在本路由器上耗费的时间,若不为0【说明路由器消耗时间后还活着】就转发,否则丢弃 - 现在以 ” 跳数 ” 为单位,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段值减 1,若不为 0 就转发,否则丢弃【防止兜圈】
- 占
-
协议:占
8比特,指明IPv4数据报的数据载荷是何种协议数据单元 PDU
-
首部检验和:
- 占
16比特,用来检测首部在传输过程中是否出现差错, - 比
CRC检验码简单,称为因特网检验和 IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段【生存时间、标志、片偏移等】的取值可能发生变化- 由于
IP层本身不提供可靠传输服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报


- 占
-
源 IP 地址和目的 IP 地址:各占
32比特,用来填写发送该IP数据报的源主机IP地址和接收该IP数据报的目的主机 -
可选字段:
- 长度从
1-40 B不等 - 用来支持排错、测量及安全等措施,增加了
IP数据报的功能 - 增加了每一个路由器处理 IP 数据报的开销,实际上很少被使用
- 长度从
-
填充字段:确保首部长度为
4 B长度的整数倍,使用全0进行填充
IP 数据报分片
- 标识、标志、片偏移区分出了一个 IP 数据报分片:
- 最大传送单元 MTU:
- 一个链路层数据帧能承载的最大数据量
- IP 数据报封装在链路层的帧中,因此链路层的 MTU 严格限制了 IP 数据报的长度
- 在 IP 数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的 MTU
- 当 IP 数据报长度超过 MTU 时,无法封装成帧,需要将原 IP 数据报分片为若干个更小的 IP 数据报
- 片在目的地的网络层被重新组装

举例



IPv4 地址与 NAT
IPv4 地址
-
IPv4地址就是因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特【4 B】 的标识符 -
IPv4地址由因特网名字和数字分配机构ICANN进行分配 -
IPV 4 地址的编址方法经历了三个阶段

-
无论哪一类 IP 地址,都由主机号和网络号组成
- 主机号:
- 标志主机【或路由器】的接口
- 同一个网络中,不同主机【或路由器】的接口的 IPv4 地址的主机号必须各不相同,以便区分各主机(或路由器)的接口
- 网络号:
- 标志主机【或路由器】的接口所连接到的网络
- 同一个网络中,不同主机【或路由器】的接口的 IPv4 地址的网络号必须相同,表示它们属于同一个网络

- 主机号:
-
IPv4 地址的表示方法——点分十进制表示方法

早期 IPv4 编址:分类编址
-
A 类、B 类和 C 类地址都是单播地址,只有单播地址可以分配给网络中的主机【或路由器】的各接口

-
特殊的 IP 地址:
- 主机号全 0 标识网络本身,如 202.98.174.0
- 主机号全 1 标识本网络的广播地址【直接广播地址】,如 202.98.174.255
- 环回自检地址:
- 127.x.x.x ,表示网络本身
- 目的地址为环回地址的 IP 数据报永远不会出现在任何网络上
- 32 位全为 0,即 0.0.0.0 表示本网络上的主机
- 32 位全为 1,即 255.255.255.255 表示整个 TCP/IP 网络的广播地址【受限广播地址】
实际使用时,由于路由器对广播域的隔离,255.255.255.255 等效为本网络的广播地址
- A 类地址可用网络数: 【减 2 是去掉最小网络号 0 和最大网络号 127】
- A 类网络中可分配的地址数量为 【减 2 是去掉主机号为全 0 的网络地址和全 1 的广播地址】
- 最小网络号为 0,表示本网络,不能指派
- 最大网络号为 127,作为本地环回测试地址,不能指派
- 最小的本地环回测试地址为 127.0.0.1
- 最大的本地环回测试地址为 127.255.255.254
- 最小可指派的网络号为 1,网络地址为 1.0.0.0
- 最大可指派的网络号为 126,网络地址为 126.0.0.0

例题

- IP 地址的重要特点:

网络地址转换 NAT 和私有 IP 地址
- 网络地址转换 NAT:
- 通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的 IP 地址
- 能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源
- 专用网本地 IP 地址是可重用的,可缓解
IPv4地址空间即将耗尽的问题 - 隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。
- 私有 IP 地址:
- 为了网络的安全,划出部分 IP 地址
- 只用于 LAN,而不用于 WAN
- 允许私有 IP 地址被 LAN 重复使用
- 也可称为可重用地址
- 必须通过网关利用 NAT 把私有 IP 地址转换为 Internet 中合法的全球 IP 地址才能出现在 Internet 上
- 在因特网中的所有路由器,对目的地址是私有的一律不进行转发
- 采用私有 IP 地址的互联网称为专用互联网或本地互联网
- 私有 IP 地址网段:
- A 类【1 个】:10.0.0.0 —— 10.255.255.255
- B 类【16 个】:172.16.0.0 —— 172.31.255.255
- C 类【256 个】:192.168.0.0 —— 192.168.255.255
- 使用 NAT 时需要在专用网络连接到因特网的路由器上安装 NAT 软件:
- 装有 NAT 软件的路由器称为 NAT 路由器,至少要有一个有效的外部全球地址 IP
- 所有使用内部专用地址的主机在和外部因特网通信时,都要在 NAT 路由器上将其内部专用地址转换成 IP
- 注意:
- 普通路由器在转发 IP 分组时,其源 IP 地址和目的 IP 地址都不会改变
- NAT 路由器在转发 IP 分组时,一定要更换其 IP 地址【转换源 IP 地址或目的 IP 地址】
- 普通路由器仅工作在网络层
- NAT 路由器转发数据报时需要查看和转换传输层的端口号

- 网络地址与端口号转换 NAPT:
- 由于绝大多数的网络应用都是使用运输层协议
TCP或UDP来传送数据,因此可以利用运输层的端口号和 IP 地址一起进行转换 - 用一个全球 IP 地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信
- 由于绝大多数的网络应用都是使用运输层协议
划分子网与路由聚合
划分子网
- 两级 IP 地址的缺点:
- IP 地址利用率有时会很低
- 给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变得太坏
- 两级的 IP 地址不够灵活

- 划分子网的基本思路:
- 划分子网纯属于一个单位内部的事情,单位对外仍然表现为没有划分子网的网络
- 从主机号借用若干比特作为子网号,主机号也就减少了相同的比特
- 路由器转发分组根据的仍然是 IP 数据报的目的网络号
- 注意:
- 划分子网只是把 IP 地址的主机号这部分进行划分,而不改变 IP 地址原来的网络号,因此,从一个 IP 地址本身无法判断主机所连接的网络是否进行了子网划分
- 子网中主机号全 1 或全 0 的地址不能随意指派:
- 全 0 作子网的网络号
- 全 1 作子网的广播地址
- 划分子网增加了灵活性,但减少了能够连接在网络上的主机总数
子网掩码和默认网关
- 32 比特的子网掩码:可以表明分类 IP 地址的主机号部分被借用了几个比特作为子网号
- 子网掩码使用左起多个连续的比特 1 来对应网络号和子网号
- 子网掩码使用连续的比特 0 来对应主机号
- 通过逻辑与运算得到 IPv4 地址所在子网的网络地址【掩码为 1 的部分】


-
在使用子网掩码的情况下:
- 一台主机在设置 IP 地址信息的同时,必须设置子网掩码
- 同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码
- 路由器的路由表中所包含的信息主要内容有目的网络地址、子网掩码、下一跳地址
-
默认子网掩码:指在未划分子网的情况下使用的子网掩码

举例


无分类编址 CIDR
- 无分类域间路由选择 CIDR:
- 消除了传统的
A类、B类和C类地址,以及划分子网的概念,因此可以更有效的分配地址空间 - 使用 CIDR 记法:在
IPv4地址后面加上斜线 “/”,在斜线后面写上网络前缀所占比特数量
- 消除了传统的

- CIDR 地址块:网络前缀都相同的连续 IP 地址
- 只要知道 CIDR 地址块中的任何一个地址,就可以知道:
- 地址块中的最小地址
- 地址块中的最大地址
- 地址块中的地址数量 ,实际可指派
- 地址块中聚合某类网络(A、B、C)的数量
- 地址掩码

- 主机号全 0 或全 1 的地址一般不使用,通常只使用在这两个特殊地址之间的地址
路由聚合
- 因为一个 CIDR 地址块中有很多地址,所以在路由表中就可利用 CIDR 地址块来查找目的网络,这种地址的聚合称为路由聚合,也称构成超网
- 使得路由表中的一个项目可以表示多个原来传统分类地址的路由
- 有利于减少路由器之间的信息交换,提高网络性能
如路由器
A上连接同一网络的多台主机,路由器B与A相连。若A将所有主机的具体IP地址都报给B,则路由器B中会增加多项路由条目。可实际上B向A中任意一个主机转发数据的时都是走同一个端口,因此我们可以将这些网络的共同前缀提取出来成为新的网络号,同时将剩余主机号置 0 放入路由器 B 中如:
A连接了172.1.4.0/25和172.1.7.0/24,则提取公共前缀聚合后变为172.1.4.0/22

- 最长前缀匹配:
- 若路由器查表转发分组时发现有多条路由条目匹配,则选择网络前缀最长的那条路由条目
- 网络前缀越长,地址块越小,路由越具体
- CIDR 查找路由表的方法:
- 将无分类编址的路由表存放在一种层次式数据结构【通常采用二叉线索】
- 自上而下地按层次进行查找



子网划分的应用

采用定长的子网掩码
- 使用同一个子网掩码来划分子网
- 子网划分方式不灵活,只能划分出 2^n 个子网
- 每个子网所分配的 IP 地址数量相同,容易造成 IP 地址浪费

采用变长的子网掩码
- 使用不同的子网掩码来划分子网
- 子网划分方式灵活:可以按需分配
- 每个子网所分配的 IP 地址数量可以不同,尽可能减少对 IP 地址的浪费

例题

网络层转发分组的过程
- 同一个网络之间的主机可以直接通信,不同网络之间的主机通信需要路由器中转
- IP 数据报的发送和转发过程包括以下两个过程:
主机发送 IP 数据报
- 源主机判断目的主机和自己在同一个网络:
- 将自身的
IP地址与子网掩码相与得到自身的网络号1 - 再将目的
IP地址与自身子网掩码相与得到网络号2 - 若两个网络号相等,说明处在同一个网络,则直接交付
- 若两个网络号不相等,则间接交付

- 将自身的

- 间接交付时,主机选择路由器交付 IP 数据报:
- 设置默认网关【路由器】:当路由表中查不到数据时会将数据发往的路由器端口
IP地址
- 设置默认网关【路由器】:当路由表中查不到数据时会将数据发往的路由器端口
- 路由表中可增加两种特殊路由:
- 默认路由:
- 用特殊前缀 0.0.0.0/0 表示,全 0 掩码与任何目的地址进行按位与运算的结果必为 0
- 通常用于路由器到互联网的路由
- 特定主机路由:
- 对特定目的主机的 IP 地址专门指明一个路由,以方便网络管理员控制和测试网络
- 默认路由:
路由器转发 IP 数据报
-
路由器收到 IP 数据报 后转发:
- 检查收到的 IP 数据报是否正确【生存时间是否结束,首部是否误码】
- 若不正确,则丢弃该 IP 数据报,并向发送该 IP 数据报的源主机发送差错报告

-
基于 IP 数据报首部中的目的 IP 地址在路由表中进行查找:
- 若找到匹配的路由条目,则按该路由条目的指示进行转发
- 否则丢弃该 IP 数据报,并向发送该 IP 数据报的源主机发送差错报告

- 注意:
- 得到下一跳路由器的 IP 地址后,并不是直接将该地址填入待发送的数据报,而是将该 IP 地址转换成 MAC 地址【通过 ARP 】
- 将 MAC 地址填入 MAC 帧首部,然后根据这个 MAC 地址找到下一跳路由器
- 在不同网络中传送时,MAC 帧的源地址和目的地址要发生变化
- 广播 IP 数据报的情况:

地址解析协议 ARP
IP 地址与 MAC 地址
-
IP 地址:是网络层即网络层以上使用的地址,是分层的
-
MAC 地址【硬件地址】:是数据链路层使用的地址,是平面式的
-
封装位置:

-
数据报传输过程中的变化情况:
- 源 IP 地址和目的 IP 地址保持不变
- 源 MAC 地址和目的 MAC 地址逐链路(或逐网络)改变

例题

- IP 地址与 MAC 地址的关系:
- 如果仅使用 MAC 地址进行通信,则会出现以下主要问题:
- 因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的 MAC 地址
- 手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的 MAC 地址信息而严重占用通信资
- 包含海量 MAC 地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延
- 因特网的网际层使用 IP 地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少,因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的 MAC 地址
- 如果仅使用 MAC 地址进行通信,则会出现以下主要问题:
ARP 工作原理
- 地址解析协议 ARP:解决同一局域网上的主机或路由器的 IP 地址和硬件地址的映射问题
- 每台主机都有一个 ARP 高速缓存:
- 存放本局域网上各主机和路由器的的 IP 地址到 MAC 地址的映射表【ARP 表】
- 动态类型:通过 ARP 自动获取,生命周期默认为两分钟
- 静态类型:手工配置,不同操作系统下的生命周期不同【例如系统重启后不存在或系统重启后依然有效】

-
ARP 请求报文:只在子网广播发送

-
ARP 响应报文:单播发送


- ARP 过程:
- 目的主机在本局域网:
- 先在 ARP 高速缓存中查看有无目的 IP 地址与 MAC 地址的映射
- 若有,则把硬件地址写入 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址
- 若无,则通过广播 ARP 请求分组,在获得目的主机的 ARP 响应分组后,将目的主机的 IP 地址与硬件地址写入 ARP 告诉缓存
- 目的主机不在本局域网:
- 先通过上述方式获得路由器的 IP 地址和硬件地址的映射关系,将 IP 分组发送给本局域网的路由器
- 剩下的工作交给路由器完成

- 目的主机在本局域网:
动态主机配置协议 DHCP
基本概念
- DHCP:
- 常用于给主机动态地分配 IP 地址
- 提供了即插即用的连网机制
- 应用层协议,基于 UDP 用户数据报协议

工作原理
- 使用客户/服务器模型
- 需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文,这时该主机就成为 DHCP 客户
- 本地网络只有 DHCP 服务器才能回答此广播报文
- DHCP 服务器先在其数据库中查找该计算机的配置信息:
- 若找到,则返回找到的信息
- 若找不到,则从服务器的 IP 地址池中取一个地址分配给该计算机
- DHCP 服务器的回答报文称为提供报文

- 注意:
- DHCP 允许网络上配置多台 DHCP 服务器(冗余和负载均衡考虑)
- DHCP 服务器分配给 DHCP 客户的 IP 地址是临时的,这段时间称为租用期【由 DHCP 服务器决定,也可 DHCP 客户在报文中提出要求
- DHCP 客户和服务器通过广播方式来进行交互【初始时 IP 地址都是未知的】
网际控制报文协议 ICMP
基本概念
- 网际控制报文协议 ICMP
- 为了更有效地转发 IP 数据报以及提高 IP 数据报交付成功的机会
- 主机或路由器使用 ICMP 报告差错和异常情况
- ICMP 报文被封装在 IP 数据报中发送

ICMP 报文类型
差错报告报文
- 用于目的主机或到目的主机路径上的路由器,向源主机报告差错和异常情况
-
终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文

-
源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报发送速率放慢

-
时间超过:
- 当路由器收到一个目的
IP地址不是自己的IP数据报,会将其生存时间 TTL 字段值减1。若结果不为0,则将该IP数据报转发出去;若结果为 0,除丢弃该 IP 数据报外,还要向源点发送时间超过报文 - 当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文

- 当路由器收到一个目的
-
参数问题:当路由器或目的主机收到
IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文
-
改变路由【重定向】:路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器 【可通过更好的路由】

- 以下情况不应发送
ICMP差错报告报文:- 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文
- 对第一个分片的 IP 数据报片的所有后续数据报片,都不发送 ICMP 差错报告报文
- 对具有多播地址的 IP 数据报,都不发送 ICMP 差错报告报文
- 对具有特殊地址【如 127.0.0.0 或 0.0.0.0】的 IP 数据报,不发送 ICMP 差错报告报文
询问报文
-
回送请求和回答:
- 由主机或路由器向一个特定的目的主机发出的询问
- 收到此报文的主机必须给源主机或路由器发送
ICMP回送回答报文 - 这种询问报文用来测试目的站是否可达及了解其有关状态
-
. 时间戳请求和回答:
- 用来请某个主机或路由器回答当前的日期和时间
- 在
ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒 - 这种询问报文用来进行时钟同步和测量时间
ICMP 应用举例
-
分组网间探测 PING:
- 用来测试主机或路由器之间的连通性
- 使用的 ICMP 报文类型为回送请求和回答
-
跟踪路由 traceroute:
- 用于探测 IP 数据报从源主机到达目的主机要经过哪些路由器
- 在UNIX版本中,具体命令为“traceroute”,其在运输层使用UDP 协议,在网络层使用 ICMP 报文类型只有差错报告报文
- 在Windows版本中,具体命令为“tracert”,其应用层直接使用网际层的 ICMP 协议,所使用的 ICMP 报文类型有回送请求和回答报文、差错报告报文
IPv6
IPv 6 的主要特点

IPv6 数据报的首部
- 包括:
- 基本首部
- 有效载荷:由零个或多个扩展首部【不属于 IPv6 数据报的首部】即其后面的数据部分组成

IPv6 数据报的基本首部

- 版本:长度为
4比特,用来表示IP协议的版本,对于IPv6该字段的值是6 - 通信量:长度为
8比特,该字段用来区分不同的IPv6数据报的类别或优先级 - 流水号:长度为
20比特- IPv6 提出了流的抽象概念
- 流:因特网上从特定源点到特定终点【单播或多播】的一系列 IPv6 数据报
- 所经过的路径上的所有路由器都保证指明的服务质量
- 所有属于同一个流的
IPv6数据报都具有同样的流标号 - 流标号用于资源分配
- 流标号对于实时音视频数据的传送特别有用【对于传统的非实时数据,没有用处,把流标号字段的值置为
0】
- 有效载荷长度:长度为
16比特- 指明
IPv6数据报基本首部后面的有效载荷【包括扩展首部和数据部分】的字节数量 - 以字节为单位,最大取值为
65535,
- 指明
- 下一个首部:长度为
8比特- 相当于
IPv4数据报首部中的协议字段或可选字段 - 当
IPv6数据报没有扩展首部时,与IPv4的协议字段一样,其值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU - 当
IPv6数据报基本首部后面带有扩展首部时,其值就标识后面第一个扩展首部的类型
- 相当于
- 跳数限制:长度为
8比特- 用来防止
IPv6数据报在因特网中永久兜圈 - 源点在每个
IPv6数据报发出时即设定某个跳数限制【最大 255 跳】 - 每个路由器在转发
IPv6数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为0时,就把这个IPv6数据报丢弃
- 用来防止
- 源地址和目的地址:长度都为
128比特- 分别用来填写
IPv6数据报的发送端的IPv6地址和接收端的IPv6地址
- 分别用来填写
IPv6 数据报的扩展首部
IPv4数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度- 为了提高路由器对数据包的处理效率,
IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部【除逐跳选项扩展首部】
在 [RFC 2460] 中定义了以下六种扩展首部
- 逐跳选项 (Hop-by-Hop Options): 这种扩展首部用于携带逐跳处理的选项,比如路由器需要特殊处理的数据。这种首部必须由数据包传输过程中的每个路由器处理。
- 目的选项 (Destination Options): 这种扩展首部用于携带目的节点需要处理的选项。它可以包含多种选项,比如家乡地址选项,用于移动 IPv6 场景。
- 路由 (Routing): 这种扩展首部用于指定数据包的路由路径。与 IPv4 的源路由概念类似,但 IPv6 的路由扩展首部更灵活,可以指定多个中间节点。
- 分段 (Fragmentation): 当数据包大小超过链路 MTU 时,需要进行分片。分段首部用于携带分片相关的控制信息。
- 认证首部 (Authentication Header - AH) 和封装安全有效载荷 (Encapsulating Security Payload - ESP): 这两种首部用于提供数据包的认证和加密,增强网络安全性。
- 每一个扩展首部都由若干个字段组成,它们的长度也各不相同
- 所有扩展首部中的第一个字段都是
8比特的下一个首部字段【该字段的值指出在该扩展首部后面是何种扩展首部】 - 当使用多个扩展首部时,应按以上的先后顺序出现
IPv4 和 IPv6 数据报首部格式对比

IPv6将IPv4数据报首部中不必要的功能取消了,这使得IPv6数据报基本首部中的字段数量减少到只有8个- 但由于
IPv6地址的长度扩展到了128比特,因此使得IPv6数据报基本首部的长度反而增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节 - 取消了首部长度字段,因为 IPv 6 数据报的首部长度是固定的 40 字节
- 取消了区分服务(服务类型)字段,因为 IPv 6 数据报首部中的通信量类和流标号字段实现了区分服务字段的功能
- 取消了总长度字段,改用有效载荷长度字段。这是因为 IPv 6 数据报的首部长度是固定的 40 字节,只有其后面的有效载荷长度是可变的
- 取消了标识、标志和片偏移字段,因为这些功能已包含在 IPv 6 数据报的分片扩展首部中
- 把生存时间 TTL 字段改称为跳数限制字段,这样名称与作用更加一致
- 取消了协议字段,改用下一个首部字段
- 取消了首部检验和字段,这样可以加快路由器处理 IPv 6 数据报的速度
- 取消了选项字段,改用扩展首部来实现选项功能
- IPv6 路由器不支持在转发过程中进行分片,所有分片操作都必须在源节点完成。
IPv6 地址
IPv6 地址空间
- 在
IPv6中,每个地址占128个比特,地址空间大小为 IPv6地址表示方法:冒号十六进制记法- “左侧零”省略:指两个冒号间的十六进制数中最前面的一串 0 可以省略不写
- “连续零”压缩:指一连串连续的 0 可以用一对冒号取代
- 在一个
IPv6地址中只能使用一次“连续零”压缩,否则会导致歧义 - 冒号十六进制记法还可结合点分十进制的后缀【这在
IPv4向IPv6过渡阶段非常有用】 CIDR的斜线表示法在IPv6中仍然可用



IPv6 地址的分类
IPv6 数据报的目的地址
- 单播(unicast):传统的点对点通信
- 多播(multicast):
- 一点对多点的通信,数据报发送到一组计算机中的每一个
IPv6没有采用广播的术语,而将广播看作多播的一个特例
- 任播(anycast):
IPv6新增的一种类型- 任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个
IPv6地址分类:




从 IPv 4 向 IPv 6 过渡
使用双协议栈
- 双协议栈(Dual Stack)是指在完全过渡到 IPv 6 之前,使一部分主机或路由器装有
IPv4和IPv6两套协议栈 - 双协议栈主机或路由器既可以和
IPv6系统通信,又可以和IPv4系统通信 - 双协议栈主机或路由器记为
IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址 - 转换过程中一些字段无法转换,因此信息损失是无法避免的

- 双协议栈主机通过域名系统
DNS查询目的主机采用的IP地址- 若
DNS返回的是IPv4地址,则双协议栈的源主机就使用IPv4地址 - 若
DNS返回的是IPv6地址,则双协议栈的源主机就使用IPv6地址
- 若
使用隧道技术
- 当
IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据载荷 - 封装有
IPv6数据报的IPv4数据报在IPv4网络中传输 - 当
IPv4数据报要离开IPv4网络时,再将其数据载荷(即原来的IPv6数据报)取出并转发到IPv6网络
路由算法与路由协议
路由算法
- 路由选择协议的核心是路由算法,即需要何种算法来获得路由表中的各个项目
静态路由和动态路由
从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类:
- 静态路由算法【非自适应路由算法】:
- 指由网络管理员手工配置的路由信息【网络路由、默认路由和特定主机路由等】
- 简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化【网络管理员需要手工去修改路由表中相关的静态路由信息】
- 一般只在小规模网络中采用

0.0.0.0/0(相应的地址掩码为0.0.0.0) 是默认路由条目中最短的网络前缀192.168.2.1/32(相应地址掩码为255.255.255.255) 是特定主机路由条目中的最长网络前缀路由器在查找转发表转发 IP 数据报时,遵循“最长前缀匹配”的原则,因此默认路由条目的匹配优先级最低
- 动态路由算法【自适应路由算法】:
- 根据网络流量负载和拓扑结构的变化来动态调整路由表
- 路由器通过路由选择协议自动获取路由信息
- 比较复杂、开销比较大,但能较好地适应网络状态的变化
- 适用于大规模网络
距离 - 向量路由算法(动态)
- 基于 Bellman-Ford 算法,用于计算单源最短路径

- 所有结点都定期地将它们的整个路由选择表传送给所有与之直接相邻的结点
- 路由选择表包含:每条路径的目的地【另一结点】、路径的代价【距离】
- 所有结点都必须参与距离向量交换,以保证路由的有效性和一致性
注意:这里的代价是一个抽象的概念,如
RIP就将距离定义为“跳数”跳数指从源端口到达目的端口所经过的路由器个数,每经过一个路由器,跳数加 1
链路状态路由算法(动态)
- 要求每个参与该算法的结点都具有完全的网络拓扑信息,并执行下列两项任务:
- 主动测试所有相邻结点的状态
- 定期地将链路状态传播给所有其他结点
- 结点每收到一个链路状态报文,路由结点便使用这些状态信息去更新自己的网络拓扑和状态“视野图”
- 一旦链路状态发生变化,结点就使用 Dijkstra 最短路径算法重新计算到达所有结点的最短路径
- 优点:
- 每个路由结点都使用同样的原始状态数据独立地计算路径,而不依赖中间节点的计算
- 链路状态不加以改变地传播,易于查找故障
- 应用:由于一个路由器的链路状态只涉及相邻路由器的连通状态,而与整个互联网的规模并无直接关系,因此链路状态路由算法可以用于大型的或路由信息变化聚敛的互联网环境
- 比较:
- 在距离 - 向量算法中:每个结点仅与它的直接邻居交谈,向它的邻居发送自己的路由表,其大小取决于网络中的结点数目,代价较大
- 在链路状态算法中:每个结点通过广播的方式与所有其他结点交谈,但它只告诉它们与它直接相连的链路的费用
- 典型的链路状态算法是 OSPF 算法
分层次的路由选择协议
- 因特网所采取的路由选择协议具有三个主要特点
- 自适应:动态路由选择,能较好地适应网络状态的变化
- 分布式:各路由器通过相互间的信息交互,共同完成路由信息的获取和更新
- 分层次:将整个因特网划分为许多较小的自治系统 AS【在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择】

- 注意:
- 外部网关协议
EGP和内部网关协议IGP只是路由选择协议的分类名称,而不是具体的路由选择协议 - 外部网关协议和内部网关协议名称中使用的是“网关”这个名词,是因为在因特网早期的 RFC 文档中,没有使用“路由器”而使用的是“网关”这一名词
- 外部网关协议
路由信息协议 RIP
- RIP 是一种分布式的基于距离向量的路由选择协议
RIP 的规定
- 要求自治系统
AS内的每一个路由器,都要维护从它自己到AS内其他每一个网络的距离记录,即距离向量 - 使用跳数【距离】来衡量到达目的网络的距离:
- 路由器到直连网络的距离定义为
1 - 路由器到非直连网络的距离定义为所经过的路由器数
+1
- 路由器到直连网络的距离定义为
- 允许一条路径最多只能包含
15个路由器:- 距离等于 16 时相当于不可达【防止分组在环路上循环,避免网络拥塞】
RIP只适用于小型互联网
RIP认为好的路由就是距离短的路由,也就是所通过路由器数量最少的路由
- 当到达同一目的网络有多条距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上
- 每个路由表项含三个关键字段:目的网络 N、距离 d、下一跳路由器地址 X
RIP 的特点
- 和谁交换信息:仅和相邻路由器
- 交换什么信息:交换的是各自路由表的信息
- 何时交换信息:
- 周期性交换【如 30 秒】
- 触发更新:为了加快 RIP 的收敛速度,当网络拓扑发生变化时,路由器要及时向相邻路由器通告拓扑变化后的路由信息
RIP 的基本工作过程
- 路由器刚开始工作时,只知道自己到直连网络的
RIP距离为1
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息
- 若干次交换和更新后,每个路由器都知道到达本自治系统
AS内各网络的最短距离和下一跳路由器,称为收敛
RIP 的距离向量算法
基本更新过程
-
C 向 D 发送封装有路由信息的
RIP更新报文
-
D 收到 C 的路由表后,对其进行修改

-
根据修改后的 C 的路由表,更新 D 的路由表

更新时的情况
- 到达目的网络,相同的下一跳,最新消息,要更新
RIP变大了也要更新,因为这是最新消息
| 目的网络 | RIP 距离 | 下一跳 | |
|---|---|---|---|
| C 的路由表 | N 2 | 5 | C |
| D 的路由表(更新前) | N 2 | 2 | C |
| D 的路由表(更新后) | N 2 | 5 | C |
- 发现了新的网络,要更新【添加】
| 目的网络 | RIP 距离 | 下一跳 | |
|---|---|---|---|
| C 的路由表 | N 3 | 9 | C |
| D 的路由表(更新前) | Null | Null | Null |
| D 的路由表(更新后) | N 3 | 9 | C |
- 到达目的网络,不同的下一跳,新路由优势,要更新
| 目的网络 | RIP 距离 | 下一跳 | |
|---|---|---|---|
| C 的路由表 | N 6 | 5 | C |
| D 的路由表(更新前) | N 6 | 8 | F |
| D 的路由表(更新后) | N 6 | 5 | C |
- 到达目的网络,不同的下一跳,RIP 距离相等,可以等价负载均衡
| 目的网络 | RIP 距离 | 下一跳 | |
|---|---|---|---|
| C 的路由表 | N 8 | 4 | C |
| D 的路由表(更新前) | N 8 | 4 | E |
| D 的路由表(更新后) | N 8 | 4 | C,E |
不更新的情况
- 到达目的网络,不同的下一跳,新路由劣势,不更新
| 目的网络 | RIP 距离 | 下一跳 | |
|---|---|---|---|
| C 的路由表 | N 9 | 6 | C |
| D 的路由表(不更新) | N 9 | 4 | F |
- 除了上述 RIP 路由条目更新规则,在 RIP 的距离向量算法中还包含以下一些时间参数:
- 路由器每隔大约 30 秒向其所有相邻路由器发送路由更新报文
- 若 180 秒【默认】没有收到某条路由条目的更新报文,则把该路由条目标记为无效【即把 RIP 距离设置为 16,表示不可达】
- 若再过一段时间【如 120 秒】,还没有收到该路由条目的更新报文,则将该路由条目从路由表中删除
RIP 的优缺点



- 坏消息传播得慢:
- 又称为路由环路【两个路由器相互学习错误路由,造成循环】
- 或距离无穷计数问题,这是距离向量算法的一个固有问题
- 可以采取多种措施减少出现该问题的概率或减小该问题带来的危害
- 限制最大路径距离为
15【16表示不可达】 - 当路由表发生变化时就立即发送更新报文 【触发更新】,而不是周期性发送
- 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口反方向传送【水平分割】
- 限制最大路径距离为
RIP 版本和相关报文的封装
- 现在较新的
RIP版本是 1998 年 11 月公布的RIP2 - 与
RIP1相比,RIP2可以支持变长子网掩码和 CIDR RIP2还提供简单的鉴别过程并支持多播RIP相关报文使用运输层的用户数据报协议UDP进行封装,使用的UDP端口号为520- 从
RIP报文封装的角度看,RIP属于 TCP/IP 体系结构的应用层 - 但
RIP的核心功能是路由选择,这属于 TCP/IP 体系结构的网际层
例题


开放最短路径优先协议 OSPF
基本概念
-
链路状态
LS:指本路由器都和哪些路由器相邻,以及相应链路的代价【费用、距离、时延、带宽】
-
Hello分组:- 建立和维护邻居关系
- 封装在
IP数据报中,发往组播地址 224.0.0.5 IP数据报首部中的协议号字段的取值为89,表明 IP 数据报的数据载荷为OSPF分组
- 发送周期为
10秒 - 40 秒未收到来自邻居路由器的
Hello分组,则认为该邻居路由器不可达 - 每个路由器都会建立一张邻居表

-
链路状态通告 LSA:使用
OSPF的每个路由器都会产生,包含- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
-
链路状态更新分组 LSU:LSA 被封装在 LSU 中,采用可靠的洪泛法发送
- 洪泛法的要点是路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器【其上游路由器除外】,以此类推
- 可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认
-
链路状态数据库 LSDB:
- 使用
OSPF的每个路由器都有一个,用于存储LSA - 通过各路由器洪泛法发送封装有自己
LSA的LSU分组,各路由器的LSDB最终达到一致 - 使用
OSPF的各路由器基于LSDB进行最短路径优先计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表
- 使用
OSPF 与 RIP
OPSF协议克服了RIP的缺点,两者区别如下:
| OSPF | RIP | |
|---|---|---|
| 发送信息方式 | 向本自治系统中所有路由器【洪泛法】 | 仅向自己相邻的路由器 |
| 发送信息内容 | 与本路由器相邻的所有路由器的链路状态【路由器所知道的部分信息】 | 本路由器所知道的全部信息【整个路由表】 |
| 更新时期 | 只有当链路状态发生变化时,并且更新过程收敛得快【不会出现 “坏消息传得慢”】 | 不管网络拓扑是否发生变化,路由器之间都要定期交换路由表的信息 |
| 所属层次 | 网络层协议,直接用 IP 数据报传送【协议字段为 89】 | 应用层协议,在传输层使用 UDP |
- OSPF 还具有以下特点:
- OSPF 允许对每条路由设置成不同的代价,对于不同类型的业务可计算出不同的路由
- 若到同一个目的网络有多条相同代价的路径,则可将通信量分配给这几条路径
- OSPF 分组具有鉴别功能,从而保证仅在可信赖的路由器之间交换链路状态信息
- OSPF 支持可变长度的子网划分和无分类编址 CIDR
- 每个链路状态都带上一个 32 位的序号,序号越大,状态就越新
OSPF 五种分组
- 问候 Hello 分组:用来发现和维护邻居路由器的可达性
- 数据库描述分组:向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 链路状态请求信息分组:向邻居路由器请求发送某些链路状态项目的详细信息
- 链路状态更新分组:路由器使用这种分组将其链路状态进行洪泛发送
- 链路状态确认分组:对链路状态更新分组的确认分组
OSPF 基本工作过程
- 相邻路由器之间周期性发送问候分组 Hello,以便建立和维护邻居关系
- 建立邻居关系后,给邻居路由器发送数据库描述分组 DD,也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器
- 收到数据库描述分组后,若发现自己缺少其中某些链路状态项目,则会发送链路状态请求分组 LSR
- 对方收到链路状态请求分组后,则会将其所缺少的链路状态项目的详细信息封装在链路状态更新分组 LSU 中发送回去
- 收到链路状态更新分组后,将这些信息添加到自己的链路状态数据库中

多点接入网络中的 OSPF 路由器
一条总线上有多台主机,则它们互为邻居,因此每个路由器都要向其他路由器发送问候分组和链路状态更新分组
为了减少所发送分组的数量,则需要用相应方法对邻居关系进行删减
OSPF采用选举指定路由器 DR 和备用的指定路由器 BDR的方法减少邻居数目- 所有的非
DR/BDR只与DR/BDR建立邻居关系 - 非
DR/BDR之间通过DR/BDR交换信息 - 当
DR失效时由BDR顶上
OSPF 划分区域
- 为了使 OSPF 协议能够用于规模很大的网络,OSPF把一个自治系统 AS 再划分为若干个更小的范围,称为区域

- 自治系统边界路由器 ASBR:R6
- 主干路由器 BBR:R3、R4、R5、R6 和 R7
- 区域内路由器 IR:区域 1 内的 R1 和 R2,区域 2 内的 R8,区域 3 内的 R9
- 区域边界路由器 ABR:R 3、R 4 和 R 7
例题

边界网关协议 BGP
基本概念
- 边界网关协议 BGP:属于外部网关协议
EGP这个类别,用于自治系统 AS 之间的路由选择协议
- 使用 BGP 的环境因素:
- 不同 AS 内,度量路由的代价【距离,宽带,费用等】可能不同
- AS 之间的路由选择必须考虑政治、安全或经济等有关因素
工作原理
- 在配置
BGP时,每个AS的管理员要选择至少一个路由器作为该AS的BGP 发言人 (BGP Speaker)。 - 一般来说,两个
BGP发言人都是通过一个共享网络连接在一起的,而BGP 发言人往往就是 BGP 边界路由器 (BGP Border Router)。 - 使用
TCP连接(端口号 179)交换路由信息的两个 BGP 发言人,彼此称为对方的邻站或对等站 (Peer)。 BGP发言人除了运行BGP协议外,还必须运行自己所在AS所使用的内部网关协议IGP(例如RIP或OSPF),以确保 AS 内部的可达性。BGP发言人交换网络可达性的信息,这些信息包括要到达某个网络所要经过的一系列自治系统序列(即 AS-Path 属性)。- 当
BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好路由,从而构造出树形结构且不存在环路的自治系统连通图。 - EBGP 与 IBGP:
- EBGP (External BGP):用于在不同自治系统之间建立 BGP 会话。EBGP 对等体通常是直连的,或通过少量跳数可达,主要负责在 AS 间交换路由信息。
- IBGP (Internal BGP):用于在同一个自治系统内部的 BGP 发言人之间建立 BGP 会话。IBGP 的主要目的是将通过 EBGP 学到的外部路由信息传递给 AS 内部的所有 BGP 路由器,确保 AS 内所有路由器都知晓如何到达外部网络。
- IBGP 路由分发规则:为防止 AS 内部的路由环路,IBGP 规定从一个 IBGP 对等体学到的路由不能再通告给其他 IBGP 对等体(即 IBGP 水平分割原则)。这使得 IBGP 对等体之间需要建立全连接网状拓扑(Full Mesh),或使用路由反射器 (Route Reflector) 或联盟 (Confederation) 等机制来简化配置。
- 可达性保证:IBGP 对等体之间不要求直连,只要通过 AS 内部的 IGP 协议(如 OSPF、RIP)能够互相可达即可。
- 热土豆路由选择 (Hot Potato Routing):
- 这是一种常见的路由选择策略,尤其在 AS 内部的应用。
- 定义:当一个 AS 收到发往外部网络的数据包时,它会尽快将该数据包转发到离其最近的(即在 AS 内部 IGP 度量值最小的)出口点,并将其“扔给”下一个自治系统。
- 目的:最小化数据包在本地 AS 内部的传输距离和延迟,尽快将流量移出本 AS,以节省内部带宽资源并降低内部转发成本。


BGP 的特点
- BGP 交换路由信息的结点数量级是 AS 个数的数量级,这要比这些 AS 中的网络数少很多
- 每个 AS 中 BGP 发言人【或边界路由器】的数目是很少的,使得 AS 之间的路由选择不致过分复杂
- BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器、到达该目的网络所要经过的各个自治系统序列
- 当 BGP 刚运行时,BGP 的邻站交换整个 BGP 路由表,但以后只需要在发生变化时更新有变化的部分
BGP-4 的 4 中报文
- OPEN (打开) 报文:用来与相邻的另一个
BGP发言人建立关系,使通信初始化 - UPDATE (更新) 报文:用来通告某一路由的信息,以及列出要撤销的多条路由
- KEEPALIVE (保活) 报文:用来周期性地证实邻站的连通性
- NOTIFICATION (通知) 报文:用来发送检测到的差错
RIP、OSPF 与 BGP 的比较
| 特性 | RIP | OSPF | BGP |
|---|---|---|---|
| 类型 | 内部网关协议 (IGP) | 内部网关协议 (IGP) | 外部网关协议 (EGP) |
| 作用范围 | 单个自治系统 (AS) 内部 | 单个自治系统 (AS) 内部,支持区域划分 | 不同自治系统 (AS) 之间 |
| 算法 | 距离矢量协议 (Distance-Vector) | 链路状态协议 (Link-State) | 路径矢量协议 (Path-Vector) |
| 度量标准 | 跳数 (Hop Count) | 代价 (Cost),基于带宽等 | AS-Path、本地优先级、MED 等多属性,基于策略 |
| 收敛速度 | 慢 | 快 | 较慢(涉及策略和大量路由) |
| 扩展性 | 差 (最大跳数 15) | 好,支持层次化路由 | 极好,适用于全球互联网路由 |
| 路由环路 | 可能产生,需采取措施避免 (如水平分割) | 不产生 (基于 SPF 算法) | 不产生 (基于 AS-Path 和策略) |
| 协议端口 | UDP 520 / 521 (RIPv1/v2) | IP 协议号 89 | TCP 179 |
| 路由更新 | 周期性广播完整路由表 (RIPv1),增量更新 (RIPv2) | 触发式更新,周期性发送 LSA | 初始全表,后续增量更新 |
| 路由计算 | 贝尔曼 - 福特算法 | Dijkstra (SPF) 算法 | 基于 AS 路径和策略选择 |
例题


IP 多播
基本概念
- 多播:
- 让源主机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机,即一对多通信
- 与传统单播“一对一”通信相比,多播可以极大地节省网络资源
- 在因特网上进行的多播,称为IP 多播
- 多播需要路由器的支持才能实现,能够运行多播协议的路由器称为多播路由器

IP 多播地址
- 多播数据报的源地址是源主机的 IP 地址,目的地址是 IP 多播地址
- IP 多播地址就是 IPv4 中的 D 类地址
- 多播地址只能用作目的地址,而不能用作源地址
- 每一个 D 类地址来标识一个多播组,使用同一个 IP 多播地址接收 IP 多播数据报的所有主机就构成了一个多播组
- 每个多播组的成员是可以随时变动的,一台主机可以随时加入或离开多播组
- 多播组成员的数量和所在的地理位置也不受限制,一台主机可以属于几个多播组
- 非多播组成员也可以向多播组发送 IP 多播数据报

- 与 IP 数据报相同,IP 多播数据报也是“尽最大努力交付”,不保证一定能够交付给多播组内的所有成员
- IPv 4 多播地址又可分为预留的多播地址【永久多播地址】、全球范围可用的多播地址以及本地管理的多播地址

IP多播可分为以下两种:- 只在本局域网上进行的硬件多播
- 在因特网上进行的多播
在局域网上进行硬件多播
-
利用硬件多播来实现局域网内的 IP 多播的原理:
- MAC 地址有多播 MAC 地址这种类型,因此只要把 IPv4 多播地址映射成多播 MAC 地址,即可将 IP 多播数据报封装在局域网的 MAC 帧中
- MAC 帧首部中的目的 MAC 地址字段的值设置为由 IPv4 多播地址映射成的多播 MAC 地址
- 当给某个多播组的成员主机配置其所属多播组的 IP 多播地址时,系统就会根据映射规则从该 IP 多播地址生成相应的局域网多播 MAC 地址

-
因特网号码指派管理局 IANA,将自己从 IEEE 注册管理机构申请到的以太网 MAC 地址块中从
01-00-5E-00-00-00到01-00-5E-7F-FF-FF的多播 MAC 地址,用于映射 IPv4 多播地址 -
这些多播 MAC 地址的左起前 25 个比特都是相同的,剩余 23 个比特可以任意变化,因此共有 个

-
由于
IP多播地址可变化的28比特的前5个比特无法映射到MAC多播地址,这会造成IP多播地址与多播MAC地址的映射关系并不是唯一的 -
因此,收到 IP 多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的 IP 多播数据报丢弃

举例


IGMP 与多播路由协议
网际组管理协议 IGMP
基本概念
-
IGMP:
- TCP/IP 体系结构网际层中的协议
- 作用:让连接在本地局域网上的多播路由器知道本局域网上是否有主机【实际上是主机中的某个进程】加入或退出了某个多播组
- 仅在本网络有效,使用 IGMP 并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中
-
IGMP 报文类型:
- 成员报告报文
- 成员查询报文
- 离开组报文
-
IGMP 报文被封装在 IP 数据报中传送,但它也向 IP 提供服务
-
不把 IGMP 视为一个单独的协议,而视为整个网际协议 IP 的一个组成部分

-
IGMP 的工作可分为两个阶段:
- 第一阶段:
- 当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个 IGMP 报文,声明自己要成为该组的成员
- 本地的多播路由器收到 IGMP 报文后,还要利用多播路由选择协议,把这种组成员关系转发给互联网上的其他多播路由器
- 第二阶段
- 组成员关系是动态的,本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否仍继续是组的成员
- 只要对某个组有一台主机响应,多播路由器就认为这个组是活跃的
- 一个组在经过几次探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机都已离开了这个组,就不再把这个组的成员关系转发给其他的多播路由器
基本工作原理【看湖科大】
-
加入多播组
- 多播组只关心是否有成员,而不关心成员具体 IP,所以 A 收到相同组 B 的多播数据报后取消发送。

- 多播组只关心是否有成员,而不关心成员具体 IP,所以 A 收到相同组 B 的多播数据报后取消发送。
-
监视多播组的成员变化
- IGMP 成员查询报文的内容可以是 0.0.0.0,表示全部多播组
- IP 多播数据报的目的地址:224.0.0.1:特殊的 IP 多播地址,在本网络中所有参加多播的主机和路由器的网际层都会接受该多播数据报


- 同一网络中的多播路由器可能不止一个,但没有必要每个多播路由器都周期性地发送
IGMP成员查询报文 - 只要在这些多播路由器中选择一个作为查询路由器,由查询路由器发送
IGMP成员查询报文,而其他的多播路由器仅被动接收响应并更新自己的多播组列表即可 - 选择查询路由器的方法:
- 每个多播路由器若监听到源 IP 地址比自己的 IP 地址小的
IGMP成员查询报文则退出选举 - 最后,网络中只有
IP地址最小的多播路由器成为查询路由器
- 每个多播路由器若监听到源 IP 地址比自己的 IP 地址小的
- 退出多播组
- 超时 125s 不回复,多播路由器认为多播组不活跃而取消(或发送主动成员查询报文)
- 主动发送退出报文

多播路由选择协议【看湖科大】
-
作用:连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把 IP 多播数据报用最小的代价传送给所有的多播组成员【实现在因特网上进行 IP 多播】
-
主要任务:在多播路由器之间为每个多播组建立一个多播转发树:
- 多播转发树连接多播源和所有拥有该多播组成员的路由器
- IP 多播数据报只要沿着多播转发树进行洪泛,就能被传送到所有拥有该多播组成员的多播路由器
- 之后,在多播路由器所直连的局域网内,多播路由器通过硬件多播,将 IP 多播数据报发送给该多播组的所有成员
- 针对不同的多播组需要维护不同的多播转发树,而且必须动态地适应多播组成员的变化,但此时网络拓扑并不一定发生变化,因此**多播路由选择协议要比单播路由选择协议(例如 RIP、OSPF 等)复杂得多
- 为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组成员的路由器**

-
目前有两种方法来构建多播转发树:
- 基于源树(Source-Base Tree) 多播路由选择
- 组共享树(Group-Shared Tree)多播路由选择
移动 IP
基本概念
-
移动 IP:
- 使得移动主机在各网络之间漫游时,仍然能够保持其原来的 IP 地址不变
- 为因特网中的非移动主机提供了相应机制,使得它们能够将 IP 数据报正确发送到移动主机

-
归属网络:每个移动主机都有一个默认连接的网络或初始申请接入的网络,称为归属网络
(Home Network) -
归属地址:移动主机在归属网络中的
IP地址在其整个移动通信过程中是始终不变的,因此称为永久地址(Permanent Address)或归属地址(Home Address) -
归属代理:
- 在归属网络中,代表移动主机执行移动管理功能的实体称为归属代理
(Home Agent) - 通常就是连接在归属网络上的路由器,然而它作为代理的特定功能则是在网络层完成的
- 在归属网络中,代表移动主机执行移动管理功能的实体称为归属代理
-
外地网络:移动主机当前漫游所在的网络称为外地网络
(Foreign Network)或被访网络(Visited Network) -
外地代理:
- 在外地网络中,帮助移动主机执行移动管理功能的实体称为外地代理
(Foreign Agent) - 通常就是连接在外地网络上的路由器
- 在外地网络中,帮助移动主机执行移动管理功能的实体称为外地代理
-
转交地址:外地代理会为移动主机提供一个临时使用的属于外地网络的转交地址
(Care-of Address)
通信过程
-
代理发现与注册
- 移动主机 A 通过自己的代理发现协议,与外地代理建立联系,并从外地代理获得一个属于该外地网络的转交地址【例如 175.1.1.1/16】,同时向外地代理注册自己的永久地址、归属代理地址
- 外地代理将移动主机 A 的永久地址记录在自己的注册表中,并向移动主机的归属代理注册该移动主机的转交地址【也可由移动主机直接进行注册】
- 归属代理会将移动主机 A 的转交地址记录下来,此后归属代理会代替移动主机接收所有发送给该移动主机的 IP 数据报,并利用 IP 隧道技术将这些数据报转发给外地网络中的移动主机
- 当移动主机不在归属网络时,归属代理会以自己的 MAC 地址应答所有对该移动主机的 ARP 请求,即归属代理采用 ARP 代理技术
- 为了使归属网络中其他各主机和路由器能够尽快更新各自的 ARP 高速缓存,归属代理还会主动发送 ARP 广播,并声称自己是该移动主机。这样,所有发送给该移动主机的 IP 数据报都会发送给归属代理

-
固定主机向移动主机发送 IP 数据报
- 当外地代理和移动主机不是同一台设备时,转交地址实际上是外地代理的地址而不是移动主机的地址,转交地址既不会作为移动主机发送 IP 数据报的源地址,也不会作为移动主机所接收的 IP 数据报的目的地址
- 转交地址仅仅是归属代理到外地代理的 IP 隧道的出口地址
- 所有使用同一外地代理的移动主机都可以共享同一个转交地址


-
移动主机向固定主机发送 IP 数据报
- 由于 IP 路由器并不关心 IP 数据报的源地址,因此该 IP 数据报被直接路由到固定主机 B,而无须再通过归属代理进行转发
- 移动主机可以将外地代理作为自己的默认路由器,也可以通过代理发现协议从外地代理获取外地网络中其他路由器的地址,并将其设置为自己的默认路由器

-
同址转交地址方式
- 移动主机需要运行额外的外地代理软件
- 外地网络也需要提供相应机制,使移动主机能够自动获取一个外地网络中的地址作为自己的 IP 地址和外地代理的地址,被称为同址转交地址(Co-Located Care-of Address)
-
三角形路由问题

- 解决方法:
- 给固定主机配置一个通信代理,固定主机发送给移动主机的 IP 数据报,都要通过该通信代理转发
- 通信代理先从归属代理获取移动主机的转交地址,之后所有发送给移动主机的 IP 数据报,都利用转交地址直接通过 IP 隧道发送给移动主机的外地代理,而无须再通过移动主机的归属代理进行转发
- 这种方法以增加复杂性为代价,并要求固定主机也要配置通信代理,也就是对固定主机不再透明
网络层设备
冲突域和广播域
- 域:冲突或广播在其中发生并传播的区域
- 冲突域:
- 连接到同一物理介质上的所有节点的集合,这些节点之间存在介质争用的现象
- OSI 中被视为第 1 层概念
- 第 1 层设备:集线器、中继器不能划分冲突域
- 第 2 层设备:网桥、交换机,第 3 层设备:路由器,能划分冲突域
- 广播域:
- 接受同样广播消息的结点集合,在该集合中的任何一个结点发送一个广播帧,其他能收到这个帧的结点都被认为是该广播帧的一部分
- OSI 中被视为第 2 层概念
- 第 1、2 层设备不能划分广播域
- 第 3 层设备能划分冲突域
- 通常所说的局域网 LAN 特指使用路由器分割的网络,也就是广播域
路由器的组成和功能
基本概念
- 路由器:
- 是一种具有多个输入/输出端口的专用计算机
- 主要实现物理层,数据链路层,网络层的功能
- 是网络层设备
- 任务:连接异构网络并完成分组转发
- 在多个逻辑网络【即多个广播域】互连时必须使用路由器
路由器的组成
- 路由选择部分:
- 包括:路由选择处理机、路由选择协议、路由表
- 也称:控制部分,核心是路由选择处理机
- 任务:
- 根据所选定的路由选择协议构造出路由表
- 同时经常或定期地和相邻路由器交换路由信息更新和维护路由表
- 分组转发部分:
- 包括:交换结构【一个在路由器中的网络】、一组输入端口、一组输出端口
- 也称:交换组织
- 作用:根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去

- 路由器的端口中都有物理层、数据链路层和网络层的处理模块
- 输入端口在物理层接收比特流,在数据链路层提取出帧,剥去帧的首部和尾部后,分组就被送入网络层的处理模块,输出端口执行相反的操作
- 端口在网络层的处理模块中都设有一个缓冲队列,用来暂存等待处理或已处理完毕待发送的分组,还可用来进行必要的差错检测
- 路由器的端口一般都具有输入和输出功能
路由表与分组转发
-
路由表:
- 根据路由选择算法得出的,主要用途是路由选择
- 组成:目的网络的 IP 地址、子网掩码、下一跳 IP 地址、接口

-
转发表:
- 从路由表得出,其表项和路由表项有直接的对应关系
- 组成:一个分组将要发往的目的地址、分组的下一跳【下一步接收者的目的地址,实际为 MAC 地址】
- 可使用一个默认路由【优先级比其他项目低】代替所有具有相同“下一跳”的项目,以减少重复项
- 可以用软件或特殊的硬件实现
- 路由表中“直接”(或“直连”)表示目的网络与路由器的某个接口直接相连,无需经过其他中间路由器转发,数据可通过该本地接口直接送达目的网络。

-
转发与路由选择的区别:
- 转发:路由器根据转发表把收到的 IP 数据报从合适的端口转发出去,仅涉及一个路由器
- 路由选择:涉及很多路由器,路由表是许多路由器协同工作的结果
-
路由表不等于转发表,分组的实际转发是靠直接查找转发表,而不是直接查找路由表