目录
网络层
网络层的几个重要概念
网络层提供的两种服务
争论:
- 网络层应该向运输层提供怎样的服务?面向连接还是无连接?
- 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
2 种观点:
- 面向连接的可靠交付。
- 无连接的、尽最大努力交付的数据报服务,不提供服务质量的承诺。
计算机网络模仿电信网络,使用面向连接的通信方式。
通信之前先建立虚电路 VC (Virtual Circuit) (即连接),以保证双方通信所需的一切网络资源。
如果再使用可靠传输的网络协议,可使所发送的分组无差错按序到达终点,不丢失、不重复。
虚电路只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,并不是真正建立了一条物理连接。
互联网采用的设计思路:
- 网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。
- 每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),也不保证分组传送的时限。
- 由主机中的运输层负责可靠的通信。
对比的方面 | 虚电路服务 | 数据报服务 |
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网络层的两个层面
- 不同网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成。
- 在路由器之间传送的信息有以下 2 大类:
- 1. 数据。
- 2. 路由信息(为数据传送服务)。
- 数据层面
- 路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。
- 独立工作。
- 采用硬件进行转发,快。
- 控制层面
- 根据路由选择协议所用的路由算法计算路由,创建出本路由器的路由表。
- 许多路由器协同动作。
- 采用软件计算,慢。
网际协议 IP
与网际协议 IPv4 配套的 3 个协议:
- 1. 地址解析协议 ARP (Address Resolution Protocol)
- 2. 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 3. 网际组管理协议 IGMP (Internet Group Management Protocol)
虚拟互连网络
实现网络互连、互通时需要解决许多问题,如以下“不同”:
- 当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节;
- 如果这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的互联网。
IP 地址
- 在 TCP/IP 体系中,IP 地址是一个最基本的概念。
- 没有IP地址,就无法和网上的其他设备进行通信。
- 本部分重点:
- 1. IP 地址及其表示方法
- 2. 分类的 IP 地址
- 3. 无分类编址 CIDR
- 4. IP 地址的特点
互联网上的每台主机(或路由器)的每个接口分配一个在全世界唯一的 IP 地址。 由互联网名字和数字分配机构 ICANN (Internet Corporation for Assigned Names and Numbers) 进行分配。
- A 类地址的网络号字段 net-id 为 1 字节
- B 类地址的网络号字段 net-id 为 2 字节
- C 类地址的网络号字段 net-id 为 3 字节
- A 类地址的主机号字段 host-id 为 3 字节
- B 类地址的主机号字段 host-id 为 2 字节
- C 类地址的主机号字段 host-id 为 1 字节
- D 类地址是多播地址
- E 类地址保留为今后使用
注意:
- A 类网络地址中, 网络号 0 和 127 是保留地址,不指派。0 表示“本网络”,127 保留作为本地环回测试地址。
- B 类网络地址中,网络号 128.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
- C 类网络地址中,网络号 192.0.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
- 指派主机号时,要扣除全 0 和全 1 。全 0 和全 1 有特殊含义和用途。
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
0 | 0 | 可以 | 不可 | 在本网络上的本主机(见 6.6 节 DHCP 协议) |
0 | X | 可以 | 不可 | 在本网络上主机号为 X 的主机 |
全 1 | 全 1 | 不可 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
Y | 全 1 | 不可 | 可以 | 对网络号为 Y 的网络上的所有主机进行广播 |
127 | 非全 0 或全 1 的任何数 | 可以 | 可以 | 用于本地软件环回测试 |
优点:
- 管理简单;
- 使用方便;
- 转发分组迅速;
- 划分子网,灵活地使用。
缺点:
- 设计上不合理:
- 大地址块,浪费地址资源;
- 即使采用划分子网的方法,也无法解决 IP 地址枯竭的问题。
- CIDR (Classless Inter-Domain Routing) :无分类域间路由选择。
- 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,可以更加有效地分配 IPv4 的地址空间,但无法解决 IP 地址枯竭的问题。
- 要点:
- (1) 网络前缀
- (2) 地址块
- (3) 地址掩码
- CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块。
- 一个 CIDR 地址块包含的 IP 地址数目,取决于网络前缀的位数。
注意:
- 又称为子网掩码 (subnet mask)。
- 位数:32 位。
- 目的:让机器从 IP 地址迅速算出网络地址。
- 由一连串 1 和接着的一连串 0 组成,而 1 的个数就是网络前缀的长度。
- 每一个 CIDR 地址块中的地址数一定是 2 的整数次幂。
- 除最后几行外,CIDR 地址块都包含了多个 C 类地址(是一个 C 类地址的 2n 倍,n 是整数)。
- 因此在文献中有时称 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。用于默认路由。 |
可见:网络前缀越短,地址块所包含的地址数越多。
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的转发表中,需要有 64 行。采用地址聚合后,转发表中只需要用 1 行来指出到 206.0.64.0/18 地址块的下一跳。 在 ISP 内的路由器的转发表中,也仅需用 206.0.68.0/22 这 1 个项目,就能把外部发送到这个大学各系的所有分组,都转发到大学的路由器。
- (1) 每个 IP 地址都由网络前缀和主机号两部分组成。
- IP 地址是一种分等级的地址结构。
- 方便了 IP 地址的分配和管理。
- 实现路由聚合,减小了转发表所占的存储空间,以及查找转发表的时间。
- IP 地址是一种分等级的地址结构。
- (2) IP 地址是标志一台主机(或路由器)和一条链路的接口。
- 当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号必须是不同的。这种主机称为多归属主机 (multihomed host)。
- 一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的 IP 地址。
- (3) 转发器或交换机连接起来的若干个局域网仍为一个网络
- 按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合。
- 转发器或交换机连接起来的若干个局域网都具有同样的网络号,它们仍为一个网络。
- 具有不同网络号的局域网必须使用路由器进行互连。
- (4) 在 IP 地址中,所有分配到网络前缀的网络都是平等的。
- 互联网同等对待每一个 IP 地址,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网
注意:
- 同一个局域网上的 主机或路由器的 IP 地址中的网络号 必须一样。
- 路由器的每一个接口都有一个不同网络号的 IP 地址。
- 两个路由器直接相连的接口处,可指明也可不指明 IP 地址。 如指明 IP 地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。这种网络仅需两个 IP 地址,可以使用 /31 地址块。主机号可以是 0 或 1。
IP 地址与 MAC 地址
- IP 地址
- 虚拟地址、软件地址、逻辑地址。
- 网络层和以上各层使用。
- 放在 IP 数据报的首部。
- MAC 地址
- 固化在网卡上的 ROM 中。
- 硬件地址、物理地址。
- 数据链路层使用。
- 放在 MAC 帧的首部。
- 尽管互连在一起的网络的 MAC 地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。
- 只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或路由器之间的通信。
地址解析协议 ARP
- 实现 IP 通信时使用了两个地址:
- 1. IP 地址(网络层地址)
- 2. MAC 地址(数据链路层地址)
- 问题:已经知道了一个机器(主机或路由器)的 IP 地址,如何找出其相应的 MAC 地址?
- ARP 高速缓存 (ARP cache):
- 存放 IP 地址到 MAC 地址的映射表。
- 映射表动态更新(新增或超时删除)。
超过生存时间的项目都从高速缓存中删除,以适应网络适配器变化。
- 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时:
- 本局域网上广播发送 ARP 请求(路由器不转发 ARP 请求)。
- ARP 请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
- 单播 ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
- ARP 分组封装在以太网帧中传输。
- 存放最近获得的 IP 地址到 MAC 地址的绑定。
- 减少 ARP 广播的通信量。
- 为进一步减少 ARP 通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到 MAC 地址的映射写入 ARP 请求分组。
- 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的 IP 地址及其对应的 MAC 地址映射写入主机 B 自己的 ARP 高速缓存中。不必在发送 ARP 请求。
- ARP 用于解决同一个局域网上的主机或路由器的 IP 地址和 MAC 地址的映射问题。
- 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 不同网络使用不同的 MAC 地址。MAC 地址之间的转换非常复杂。
- 对以太网 MAC 地址进行寻址也是极其困难的。
- IP 编址把这个复杂问题解决了。
- 连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,即使必须多次调用 ARP 来找到 MAC 地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。
- 因此,在虚拟的 IP 网络上用 IP 地址进行通信非常方便。
IP 数据报的格式
- IP 数据报由首部和数据两部分组成
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 可选字段,其长度是可变的
- 版本——占 4 位,指 IP 协议的版本。 目前的 IP 协议版本号为 4 (即 IPv4)。
- 首部长度——占 4 位,可表示的最大数值 是 15 个单位(一个单位为 4 字节), 因此 IP 的首部长度的最大值是 60 字节。
- 区分服务——占 8 位,用来获得更好的服务。 只有在使用区分服务(DiffServ)时,这个字段才起作用。 在一般的情况下都不使用这个字段
- 总长度——占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节。 总长度必须不超过最大传送单元 MTU。
- 标识 (identification) ——占 16 位, 它是一个计数器,用来产生 IP 数据报的标识。
- 标志(flag) ——占 3 位,目前只有前两位有意义。
- 标志字段的最低位是 MF (More Fragment)。 MF=1 表示后面还有分片,MF=0 表示最后一个分片。
- 标志字段中间的一位是 DF (Don't Fragment) 。 只有当 DF=0 时才允许分片。
- 片偏移——占 13 位,指出:较长的分组在分片后 某片在原分组中的相对位置。 片偏移以 8 个字节为偏移单位。
- 生存时间——占 8 位,记为 TTL (Time To Live), 指示数据报在网络中可通过的路由器数的最大值。
- 协议——占 8 位,指出此数据报携带的数据使用何种协议, 以便目的主机的 IP 层将数据部分上交给那个处理过程
- 首部检验和——占 16 位,只检验数据报的首部, 不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
- 源地址和目的地址都各占 32 位。
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 长度可变:从 1 个字节到 40 个字节不等,取决于所选择的项目。
- 增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销。
- 实际上这些选项很少被使用.
IP 层转发分组的过程
基于终点的转发
- 分组在互联网中是逐跳转发的。
- 基于终点的转发:基于分组首部中的目的地址传送和转发。
为了压缩转发表的大小, 转发表中最主要的路由是(目的网络地址,下一跳地址) , 而不是(目的地址,下一跳地址)。 查找转发表的过程就是逐行寻找前缀匹配。
- H1 首先检查 128.1.2.132 是否连接在本网络上。 如果是,则直接交付;否则,就送交路由器 R1。
- 路由器 R1 收到分组后查找转发表。先检查第 1 行。
- 路由器 R1 收到分组后查找转发表。接着检查第 2 行。
最长前缀匹配
- 使用 CIDR 时,在查找转发表时可能会得到不止一个匹配结果。
- 最长前缀匹配 (longest-prefix matching) 原则:选择前缀最长的一个作为匹配的前缀。
- 网络前缀越长,其地址块就越小,因而路由就越具体。
- 把前缀最长的排在转发表的第 1 行。
- 主机路由 (host route)
- 又叫做特定主机路由。
- 是对特定目的主机的 IP 地址专门指明的一个路由。
- 网络前缀就是 a.b.c.d/32
- 放在转发表的最前面。
- 默认路由 (default route)
- 不管分组的最终目的网络在哪里,都由指定的路由器 R 来处理
- 用特殊前缀 0.0.0.0/0 表示。
使用二叉线索查找转发
- 二叉线索 (binary trie):一种特殊结构的树,可以快速在转发表中找到匹配的叶节点。
- 从二叉线索的根节点自顶向下的深度最多有 32 层,每一层对应于 IP 地址中的一位。
- 为简化二叉线索的结构,可以用唯一前缀 (unique prefix) 来构造二叉线索。
- 为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
- 规则:先检查 IP 地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。每个叶节点代表一个唯一前缀。
- 为检查网络前缀是否匹配,必须使二叉线索中的每一个叶节点包含所对应的网络前缀和子网掩码。
网际控制报文协议 ICMP
ICMP 报文的种类
- ICMP (Internet Control Message Protocol) 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- ICMP 是互联网的标准协议。
- 但 ICMP 不是高层协议,而是 IP 层的协议。
- 2 种:差错报告报文,询问报文。
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
- (1) 回送请求和回答
- 由主机或路由器向一个特定的目的主机发出的询问。
- 收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。
- 这种询问报文用来测试目的站是否可达,以及了解其有关状态。
- (2) 时间戳请求和回答:
- 请某台主机或路由器回答当前的日期和时间。
- 时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从1900 年 1 月 1 日起到当前时刻一共有多少秒。
- 时间戳请求与回答可用于时钟同步和时间测量。
ICMP 的应用举例
PING (Packet InterNet Groper)
- 用来测试两个主机之间的连通性。
- 使用了 ICMP 回送请求与回送回答报文。
- 是应用层直接使用网络层 ICMP 的例子,没有通过运输层的 TCP 或 UDP。
Traceroute
- 这是UNIX操作系统中名字。在 Windows 操作系统中这个命令是 tracert。
- 用来跟踪一个分组从源点到终点的路径。
- 它利用 IP 数据报中的 TTL 字段、ICMP 时间超过差错报告报文和ICMP 终点不可达差错报告报文实现对从源点到终点的路径的跟踪。
IPv6
- IP 是互联网的核心协议。
- IPv4 地址耗尽问题:
- 到 2011 年 2 月,IANA IPv4 的 32 位地址已经耗尽。
- 各地区互联网地址分配机构也相继宣布地址耗尽。
- 我国在 2014 – 2015 年也逐步停止了向新用户和应用分配 IPv4 地址。
- 根本解决措施:采用具有更大地址空间的新版本的 IP,即 IPv6。
- IPv6 仍支持无连接的传送。
- 将协议数据单元 PDU 称为分组 (packet) 。
- 主要变化(1/2):
- 1. 更大的地址空间。 将地址从 IPv4 的 32 位 增大到了 128 位。
- 2. 扩展的地址层次结构。可以划分为更多的层次。
- 3. 灵活的首部格式。定义了许多可选的扩展首部。
- 4. 改进的选项。允许数据报包含有选项的控制信息,其选项放在有效载荷中。
- 5. 允许协议继续扩充。更好地适应新的应用。
- 6. 支持即插即用(即自动配置)。不需要使用 DHCP。
- 7. 支持资源的预分配。支持实时视像等要求保证一定的带宽和时延的应用。
- 8. IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。
- 由两大部分组成:
- 基本首部 (base header)
- 有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
- 首部长度:固定的 40 字节,称为基本首部。
- 首部字段数:只有 8 个。
- 版本(version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6。
- 通信量类(traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
- 流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- 有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
- 下一个首部(next header)—— 8 位。相当于 IPv4 的协议字段或可选字段。
- 跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为零时,就要将此数据报丢弃。
- 源地址—— 128 位。是数据报的发送站的 IP 地址。
- 目的地址—— 128 位。是数据报的接收站的 IP 地址。
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
- 三种基本类型:
- 1. 单播 (unicast):传统的点对点通信。
- 2. 多播 (multicast):一点对多点的通信。
- 3. 任播 (anycast):IPv6 增加的一种类型。任播的终点是一组计算机,但数据报在交付时只交付其中的一个。通常是按照路由算法得出的距离最近的一个。
- IPv6 将实现 IPv6 的主机和路由器均称为节点。
- 一个节点可能有多个与链路相连的接口。
- IPv6 地址是分配给节点上接口的。
- 1. 一个具有多个接口的节点可以有多个单播地址。
- 2. 其中的任何一个地址都可以当作到达该节点的目的地址。
- 在 IPv6 中,每个地址占 128 位,地址空间大于 3.4 × 1038 。
- 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex):16 位的值用十六进制值表示,各值之间用冒号分隔。
- 零压缩 (zero compression):一串连续的零可以用一对冒号取代。
地址类型 | 二进制前缀 | IPv6记法 |
未指明地址 | 00…0(128位),仅此一个 | ::/128 |
环回地址 | 00…1(128位),仅此一个 | ::1/128 |
多播地址 | 11111111(8位),功能和 IPv4 的一样 | FF00::/8 |
本地链路单播地址 | 1111111010(10位), 未连接到互联网,不能和互联网上的其他主机通信 | FE80::/10 |
全球单播地址 | 除上述四种外,所有其他的二进制前缀 |
从 IPv4 向 IPv6 过渡
- 方法:逐步演进,向后兼容。
- 向后兼容:IPv6 系统必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。
- 两种过渡策略:
- 使用双协议栈
- 使用隧道技术
ICMPv6
互联网的路由选择协议
有关路由选择协议的几个基本概念
- 关于“最佳路由”
- 不存在一种绝对的最佳路由算法。
- 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
- 路由选择非常复杂
- 需要所有节点共同协调工作的。
- 环境不断变化,而这种变化有时无法事先知道。
- 当网络发生拥塞时,很难获得所需的路由选择信息。
- 静态路由选择策略
- 非自适应路由选择;
- 不能及时适应网络状态的变化;
- 简单,开销较小。
- 动态路由选择策略
- 自适应路由选择;
- 能较好地适应网络状态的变化;
- 实现较为复杂,开销较大。
- 互联网:
- 采用自适应的(即动态的)、分布式路由选择协议。
- 把整个互联网划分为许多较小的自治系统 AS,采用分层次的路由选择协议。
- 分为 2 个层次:
- 自治系统之间的路由选择 或 域间路由选择 (interdomain routing);
- 自治系统内部的路由选择 或 域内路由选择 (intradomain routing);
- 自治系统 AS : 是在单一技术管理下的许多网络、IP地址以及路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。每一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
- 内部网关协议 IGP
- 在一个自治系统内部使用的路由选择协议
- 常用:RIP,OSPF
- 外部网关协议 EGP
- 在不同自治系统之间进行路由选择时使用的协议
- 使用最多:BGP-4
内部网关协议 RIP
- 路由信息协议 RIP (Routing Information Protocol) 是一种分布式的、基于距离向量的路由选择协议。
- 互联网的标准协议。
- 最大优点:简单。
- 要求网络中的每个路由器都要维护从它自己到其他每一个目的网络的距离记录。
- 路由器到直接连接的网络的距离 = 1。
- 路由器到非直接连接的网络的距离 = 所经过的路由器数 + 1。
- RIP 协议中的“距离”也称为“跳数”(hop count),每经过一个路由器,跳数就加 1。
- 好路由 = “距离短”的路由。最佳路由 = “距离最短”的路由。
- 一条路径最多只能包含 15 个路由器。
- “距离”的最大值为 16 时即相当于不可达。
- RIP 不能在两个网络之间同时使用多条路由,只选择距离最短”的路由。
- 1. 仅和相邻路由器交换信息。
- 2. 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 3. 按固定时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
- 路由器在刚刚开始工作时,路由表是空的。
- 然后,得到直接连接的网络的距离(此距离定义为 1)。
- 之后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
- 路由表主要信息:
- 路由表更新规则:
- 使用距离向量算法找出到达每个目的网络的最短距离。
对每个相邻路由器(假设其地址为 X)发送过来的 RIP 报文,路由器:
- (1) 修改 RIP 报文中的所有项目(即路由):把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
- (2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
- (3) 若 3 分钟还未收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
- (4) 返回。
- 算法基础:Bellman-Ford 算法(或 Ford-Fulkerson 算法)。
- 算法要点:
- 设 X 是结点 A 到 B 的最短路径上的一个结点。
- 若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。
- 组成:首部和路由 2 个部分。
- 路由部分:由若干个路由信息组成。每个路由信息共 20 个字节。
- 地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。
- 路由标记填入自治系统的号码。
- 后面为具体路由,指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
- 一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是 4+20 x25=504 字节。如超过,必须再用一个 RIP 报文来传送。
- RIP2 具有简单的鉴别功能。
- RIP 协议特点:好消息传播得快,坏消息传播得慢。
- 问题:坏消息传播得慢(慢收敛)。
- 当网络出现故障时,要经过比较长的时间才能将此信息(坏消息)传送到所有的路由器。
- 这就是好消息传播得快,而坏消息传播得慢。这是 RIP 的一个主要缺点。
- 优点:
- 实现简单,开销较小。
- 缺点:
- 网络规模有限。最大距离为 15(16 表示不可达)。
- 交换的路由信息为完整路由表,开销较大。
- 坏消息传播得慢,收敛时间过长。
内部网关协议 OSPF
- 开放最短路径优先 OSPF (Open Shortest Path First)是为克服 RIP 的缺点在 1989 年开发出来的。
- 原理很简单,但实现很复杂。
- 使用了 Dijkstra 提出的最短路径算法 SPF。
- 采用分布式的链路状态协议 (link state protocol)。
- 现在使用 OSPFv2。
- 采用洪泛法 (flooding),向本自治系统中所有路由器发送信息。
- 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- 链路状态:说明本路由器都和哪些路由器相邻,以及该链路的度量 (metric)。
- 当链路状态发生变化或每隔一段时间(如30分钟),路由器才用洪泛法向所有路由器发送此信息。
- 每个路由器最终都能建立。
- 全网的拓扑结构图。
- 在全网范围内是一致的(这称为链路状态数据库的同步)。
- 每个路由器使用链路状态数据库中的数据构造自己的路由表(例如,使用Dijkstra的最短路径路由算法)。
链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。 重要优点:OSPF 更新过程收敛速度快。
- 优点:
- 减少了整个网络上的通信量。
- 减少了需要维护的状态数量。
- 缺点:
- 交换信息的种类增多了。
- 使 OSPF 协议更加复杂了。
分层次划分区域的好处: 使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF 协议能够用于规模很大的自治系统中。
- 对于不同类型的业务可计算出不同的路由。
- 可实现多路径间的负载均衡(load balancing)。
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分和无分类编址 CIDR。
- 32 位的序号,序号越大状态就越新。全部序号空间在 600 年内不会产生重复号。
- 问候 (Hello) 分组。
- 数据库描述 (Database Description) 分组。
- 链路状态请求 (Link State Request) 分组。
- 链路状态更新 (Link State Update) 分组。
- 链路状态确认 (Link State Acknowledgment)分组。
- 1,确定邻站可达。
- 相邻路由器每隔 10 秒钟要交换一次问候分组。
- 若有 40 秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的。
- 2,同步链路状态数据库。
- 同步:指不同路由器的链路状态数据库的内容是一样的。
- 两个同步的路由器叫做完全邻接的 (fully adjacent) 路由器。
- 不是完全邻接的路由器:它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。
- 3,更新链路状态。
- 只要链路状态发生变化,路由器就使用链路状态更新分组,采用可靠的洪泛法向全网更新链路状态。
- 为确保链路状态数据库与全网的状态保持一致,OSPF 还规定:每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
- OSPF 链路状态只涉及相邻路由器,与整个互联网的规模并无直接关系,因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。 OSPF 没有“坏消息传播得慢”的问题,收敛数度快
- 多点接入的局域网采用了指定的路由器 DR (designated router) 的方法,使广播的信息量大大减少。
- 指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。
外部网关协议 BGP
- BGP 是不同自治系统的路由器之间交换路由信息的协议。
- BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。
- 可以将 BGP-4 简写为 BGP。
- 用于自治系统 AS 之间的路由选择。
- 只能是力求选择出一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要计算出一条最佳路由。
- 互联网的规模太大,使得自治系统AS之间路由选择非常困难。
- 自治系统AS之间的路由选择必须考虑有关策略。
- 采用了路径向量 (path vector) 路由选择协议。
- 在 AS 之间, BGP 发言者在半永久性 TCP 连接(端口号为179)上建立 BGP 会话(session)。这种连接又称为 eBGP 连接。
- 在 AS 内部,任何相互通信的两个路由器之间必须有一个逻辑连接(也使用 TCP 连接)。AS 内部所有的路由器之间的通信是全连通的。这种连接常称为 iBGP 连接。
- eBGP (external BGP) 连接:运行 eBGP 协议,在不同 AS 之间交换路由信息。
- iBGP (internal BGP) 连接:运行 iBGP 协议, 在 AS 内部的路由器之间交换 BGP 路由信息。
- 在 AS 内部运行:
- 内部网关协议 IGP(可以是协议 OSPF 或 RIP)。
- 协议 iBGP。
- 在 AS 之间运行:
- 协议 eBGP。
- 同一个协议 BGP(使用的报文类型、使用的属性、使用的状态机等都完全一样)。
- 但它们在通报前缀时采用的规则不同:
- 在 eBGP 连接的对等端得知的前缀信息,可以通报给一个 iBGP 连接的对等端。反过来也是可以的。
- 但从 iBGP 连接的 则不能够通报给另一个 iBGP 连接的对等端。
- R3 从 eBGP 连接的对等端 R4 得到的前缀信息可以通报给 iBGP 连接的对等端 R1 或 R2。
- R3 从 iBGP 连接的对等端 R1 和 R2 得到的前缀信息可以通报给 eBGP 连接的对等端 R4。
- 但 R3 从 iBGP 连接的对等端 R1 得到的前缀信息不允许再通报给另一个 iBGP 连接的对等端 R2。
BGP 路由 = [ 前缀, BGP属性 ] = [ 前缀, AS-PATH, NEXT-HOP ]
- 前缀:指明到哪一个子网(用 CIDR 记法表示)。
- BGP 属性:最重要的两个属性是
- 自治系统路径 AS-PATH
- 下一跳 NEXT-HOP。
- 末梢 AS:不会把来自其他 AS 的分组再转发到另一个 AS。必须向所连接的 AS 付费。
- 多归属 AS (multihomed AS):同时连接到两个或两个以上的 AS。增加连接的可靠性。
- 穿越 AS:为其他 AS 有偿转发分组。
- 对等 AS:经过事先协商的两个 AS,彼此之间的发送或接收分组都不收费。
- 本地偏好 (local preference) 值最高的路由 (默认值=100
- AS 跳数最小的路由
- 使用热土豆路由选择算法(分组在 AS 内的转发次数最少)
- 路由器 BGP ID 数值最小的路由。具有多个接口的路由器有多个 IP 地址,BGP ID 就使用该路由器的 IP 地址中数值最大的一个。
- R1a 选择 R1c 作为离开 AS1 的最佳选择,其 BGP 转发表中对应的项目应当是:(匹配前缀 X,下一跳路由器 R1c)。
- R1b 选择 R1d 作为离开 AS1 的最佳选择,其 BGP 转发表中对应的项目应当是:(匹配前缀 X,下一跳路由器 R1d)。
路由器的构成
- 路由器工作在网络层,用于互连网络。
- 是互联网中的关键设备。
- 路由器的主要工作:转发分组。
- 把从某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
- 转发
- 根据转发表将用户的 IP 数据报从合适的端口转发出去。
- 仅涉及到一个路由器。
- 转发表是从路由表得出的。
- 转发表必须包含完成转发功能所必需的信息,每一行必须包含从要到达的目的网络到输出端口和某些 MAC 地址信息(如下一跳的以太网地址)的映射。
- 路由选择
- 按照路由选择算法,根据网络拓扑的变化情况,动态地改变所选择的路由,并由此构造出整个的路由表。
- 涉及到很多路由器。
- 路由表一般仅包含从目的网络到下一跳(用 IP 地址表示)的映射
- 常用交换方法有三种:通过存储器、通过总线、通过纵横交换结构。
- (1) 当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。
- (2) 路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中。
- (3) 若存储器的带宽(读或写)为每秒 M 个分组,那么路由器的交换速率(即分组从输入端口传送到输出端口的速率)一定小于 M/2。
- (1) 数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。
- (2) 当分组到达输入端口时若发现总线忙,则被阻塞而不能通过交换结构,并在输入端口排队等待。
- (3)因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制。
- 常被称为互连网络 (interconnection network)。
- (1) 它有 2N 条总线,控制交叉节点可以使 N 个输入端口和 N 个输出端口相连接。
- (2) 当输入端口收到一个分组时,就将它发送到水平总线上。
- (3) 若通向输出端口的垂直总线空闲,则将垂直总线与水平总线接通,把该分组转发到这个输出端口。若输出端口已被占用,分组在输入端口排队等待。
- 特点:是一种无阻塞的交换结构,分组可以转发到任何一个输出端口,只要这个输出端口没有被别的分组占用。
IP 多播
IP 多播的基本概念
- 1988 年,Steve Deering 首次提出 IP 多播的概念。
- 多播 (multicast):以前曾译为组播。
- 目的:更好地支持一对多通信。
- 一对多通信:一个源点发送到许多个终点。
- 在互联网上进行多播就叫做 IP 多播。
- 互联网范围的多播要靠路由器来实现。
- 能够运行多播协议的路由器称为多播路由器 (multicast router)。
- 多播路由器也可以转发普通的单播 IP 数据报。
- 从 1992 年起,在互联网上开始试验虚拟的多播主干网 MBONE (Multicast Backbone On the InterNEt)。
- 在 IP 多播数据报的目的地址需要写入多播组的标识符。
- 多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。
- 地址范围:224.0.0.0 ~ 239.255.255.255
- 每一个 D 类地址标志一个多播组。
- 多播地址只能用于目的地址,不能用于源地址。
- 多播数据报和一般的 IP 数据报的区别:
- 目的地址:使用 D 类 IP 地址。
- 协议字段 = 2,表明使用网际组管理协议 IGMP。
- 尽最大努力交付,不保证一定能够交付多播组内的所有成员。
- 对多播数据报不产生 ICMP 差错报文。在 PING 命令后面键入多播地址,将永远不会收到响应。
在局域网上进行硬件多播
- IANA 拥有的以太网地址块的高 24 位为 00-00-5E。
- TCP/IP 协议使用的以太网地址块的范围是
- 从 00-00-5E-00-00-00 到 00-00-5E-FF-FF-FF
- IANA 只拿出 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF (2^23 个地址)作为以太网多播地址。或者说,在 48 位的多播地址中,前 25 位都固定不变,只有后 23 位可用作多播。
- 收到多播数据报的主机,还要在 IP 层对 IP 地址进行过滤,把不是本主机要接收的数据报丢弃。
网际组管理协议 IGMP 和多播路由选择协议
- 网际组管理协议 IGMP (Internet Group Management Protocol)
- 使多播路由器知道多播组成员信息(有无成员)。
- 多播路由选择协议
- 使多播路由器协同工作,把多播数据报用最小代价传送给多播组的所有成员。
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组。IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。
路由器 R 不应当向网络 N3 转发多播组 M1 的分组,因为网络 N3 上没有多播组 M1 的成员。
- 多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化),因为每一台主机可以随时加入或离开一个多播组。
- 多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,还要考虑这个多播数据报从什么地方来和要到什么地方去。
- 多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员的接入网络。
- 在 IGMP 报文加上 IP 首部构成 IP 数据报。
- 但 IGMP 也向 IP 提供服务。
- 因此,不把 IGMP 看成是一个单独的协议,而是整个网际协议 IP 的一个组成部分。
- 第一阶段:加入多播组。
- 第二阶段:探询组成员变化情况。
- 当某个主机加入多播组时,该主机向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。
- 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。
- 本地多播路由器周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
- 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。
- 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
- 所有通信都使用 IP 多播。只要有可能,都用硬件多播来传送。
- 对所有的组只发送一个请求信息的询问报文。默认询问速率是每 125 秒发送一次。
- 当同一个网络上连接有多个多播路由器时,能迅速和有效地选择其中的一个来探询主机的成员关系。
- 分散响应。在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。若一台主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。
- 采用抑制机制。同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就不再发送响应了。
- 实际上就是要找出以源主机为根节点的多播转发树
- 不同的多播组对应于不同的多播转发树。
- 同一个多播组,对不同的源点也会有不同的多播转发树。
- M 个源,N 个多播组,需要 MⅹN 棵以源为根的多播转发树。
- 转发多播数据报时使用三种方法:
- (1) 洪泛与剪除
- (2) 隧道技术 (tunneling)
- (3) 基于核心的发现技术
- 适合于较小的多播组,所有组成员接入的局域网也是相邻接的。
- 开始时,路由器转发多播数据报使用洪泛的方法(这就是广播)。
- 为避免兜圈子,采用反向路径广播 RPB (Reverse Path Broadcasting) 的策略。
- 剪枝:如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就把它和下游的树枝一起剪除。
- 嫁接:当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
- 对于多播组的大小在较大范围内变化时都适合。
- 对每一个多播组 G 指定一个核心 (core) 路由器,并给出它的 IP 单播地址。
- 核心路由器按照前面讲过的 2 种方法创建出对应于多播组 G 的转发树(核心路由器为根节点)。
- 为一个多播组构建一棵转发树,而不是为每个(源,组)组合构建一棵转发树。
- 构建转发树开销较小,扩展性较好。
- 如果有一个路由器 R1 向核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。
- 当数据报到达参加了多播组 G 的路由器 R2 时,R2 就处理这个数据报。
- 如果 R1 发出的是一个多播数据报,其目的地址是 G 的组地址,R2 就向 G 的成员转发这个多播数据报。
- 如果 R1 发出的数据报是一个请求加入多播组 G 的数据报,R2 就把这个信息加到它的路由中,并用隧道技术向 R1 转发每一个多播数据报的副本。
- 距离向量多播路由选择协议 DVMRP (Distance Vector Multicast Routing Protocol)。互联网上使用的第一个多播路由选择协议。
- 基于核心的转发树 CBT (Core Based Tree)
- 开放最短通路优先的多播扩展 MOSPF (Multicast Extensions to OSPF)
- 协议无关多播-稀疏方式 PIM-SM (Protocol Independent Multicast-Sparse Mode) 。唯一成为互联网标准的一个协议。
- 协议无关多播-密集方式 PIM-DM (Protocol Independent Multicast-Dense Mode)
虚拟专用网 VPN 和网络地址转换 NAT
虚拟专用网 VPN
- 由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。
- 考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。
- 如果一个机构内部的计算机通信也是采用 TCP/IP 协议,那么这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。
- 本地地址:仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
- 全球地址:全球唯一的 IP 地址,必须向互联网的管理机构申请。
- 问题:如何区分本地地址和全球地址?
- 解决:RFC 1918 指明了一些专用地址 (private address)
- 专用地址只能用作本地地址,而不能用作全球地址。
- 互联网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。
- 采用专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。
- 专用 IP 地址也叫做可重用地址 (reusable address)。
- 利用公用互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网 VPN (Virtual Private Network)。
- 专用网:指这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。
- 虚拟:表示实际上没有使用通信专线,只是在效果上和真正的专用网一样。
- 如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。
- 必须为每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。
- 内联网 (intranet):同一个机构的内部网络所构成的 VPN。
- 外联网 (extranet):一个机构和某些外部机构共同建立的 。
- 远程接入 VPN (remote access VPN):允许外部流动员工通过接入 VPN 建立 VPN 隧道访问公司内部网络,好像就是使用公司内部的本地网络访问一样。
网络地址转换 NAT
- 问题:在专用网上使用专用地址的主机如何与互联网上的主机通信(并不需要加密)?
- 解决:
- 再申请一些全球 IP 地址。但这在很多情况下是不容易做到的。
- 采用网络地址转换 NAT。这是目前使用得最多的方法。
- 需要在专用网连接到互联网的路由器上安装 NAT 软件。
- 装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球 IP 地址。
- 所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
- 在内部主机与外部主机通信时,在 NAT 路由器上发生了两次地址转换:
- 离开专用网时:替换源地址,将内部地址替换为全球地址。
- 进入专用网时:替换目的地址,将全球地址替换为内部地址。
- 当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。
- 可以使专用网内较多数量的主机轮流使用 NAT 路由器有限数量的全球 IP 地址。
通过 NAT 路由器的通信必须由专用网内的主机发起,因此,专用网内部的主机不能充当服务器用。
- NAT 并不能节省 IP 地址。
- NAPT 可以使多台拥有本地地址的主机,共用一个 全球 IP 地址,同时和互联网上的不同主机进行通信。
- 使用运输层端口号的 NAT 叫做网络地址与端口号转换 NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫做传统的 NAT (traditional NAT)。
- NAPT 把专用网内不同的源 IP 地址都转换为相同的全球 IP 地址,将 TCP 源端口号转换为新的 TCP 端口号(互不相同)。
- 收到从互联网发来的应答时,从 IP 数据报的数据部分找出运输层端口号,从 NAPT 转换表中找到正确的目的主机。