4.5 划分子网和构造超网 4.5.1 划分子网 1. 从两级 IP 地址到三级 IP 地址 4.5 划分子网和构造超网 4.5.1 划分子网 1. 从两级 IP 地址到三级 IP 地址 在 ARPANET 的早期,IP 地址的设计确实不够合理。 IP 地址空间的利用率有时很低。 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。 两级的 IP 地址不够灵活。
三级的 IP 地址 从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。 这种做法叫作划分子网(subnetting) 。划分子网已成为因特网的正式标准协议。
划分子网的基本思路 IP地址 ::= {<网络号>, <子网号>, <主机号>} (4-2) 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。 划分子网的主要目的是充分利用网络地址,提高网络地址的使用效率。 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。 IP地址 ::= {<网络号>, <子网号>, <主机号>} (4-2)
划分子网的基本思路(续) 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。 最后就将 IP 数据报直接交付目的主机。
网络 145.13.0.0 … … … 一个未划分子网的 B 类网络145.13.0.0 我的网络地址 是 145.13.0.0 145.13.3.101 145.13.3.11 … 145.13.7.34 R2 145.13.3.10 145.13.7.35 网络 145.13.0.0 R1 … R3 145.13.7.56 … 所有到网络 145.13.0.0的分组均到达此路由器 145.13.21.23 145.13.21.8 145.13.21.9
划分为三个子网后对外仍是一个网络 网络 145.13.0.0 所有到达网络 145.13.0.0 的分组均到达 此路由器 145.13.3.101 145.13.3.11 145.13.7.34 145.13.3.10 … 145.13.7.35 R2 子网 145.13.3.0 子网 145.13.7.0 … 145.13.7.56 R1 R3 子网 145.13.21.0 … 145.13.21.23 网络 145.13.0.0 145.13.21.9 145.13.21.8
划分子网后变成了三级结构 当没有划分子网时,IP 地址是两级结构。 划分子网后 IP 地址就变成了三级结构。 划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。
2. 子网掩码 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。 2. 子网掩码 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。 使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。
IP 地址的各字段和子网掩码 net-id host-id 两级 IP 地址 145 . 13 . 3 . 10 net-id 145 . 13 . 3 . 10 net-id subnet-id host-id 三级 IP 地址 145 . 13 . 3 . 10 主机号 子网号为 3 的网络的网络号 子网掩码 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 子网的 网络地址 145 . 13 . 3
(IP 地址) AND (子网掩码) =网络地址 网络号 net-id 主机号 host-id 三级 IP 地址 net-id host-id subnet-id 逐位进行 AND 运算 网络号 子网号 主机号 子网掩码 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 子网的 网络地址 net-id subnet-id
默认子网掩码 A 类 地 址 网络地址 net-id host-id 为全 0 默认子网掩码 255.0.0.0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 B 类 地 址 网络地址 net-id host-id 为全 0 默认子网掩码 255.255.0.0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 类 地 址 网络地址 net-id host-id 为全 0 默认子网掩码 255.255.255.0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
子网掩码是一个重要属性 子网掩码是一个网络或一个子网的重要属性。 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
【例4-2】已知 IP 地址是 141.14.72.24,子网掩码是 255.255.192.0。试求网络地址。 (a) 点分十进制表示的 IP 地址 141 . 14 . 72 . 24 (b) IP 地址的第 3 字节是二进制 141 . 14 . 0 1 0 0 1 0 0 0 . 24 (c) 子网掩码是 255.255.192.0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (d) IP 地址与子网掩码逐位相与 141 . 14 . 0 1 0 0 0 0 0 0 . 0 (e) 网络地址(点分十进制表示) 141 . 14 . 64 . 0
【例4-3】在上例中,若子网掩码改为255.255.224.0。试求网络地址,讨论所得结果。 (a) 点分十进制表示的 IP 地址 141 . 14 . 72 . 24 (b) IP 地址的第 3 字节是二进制 141 . 14 . 0 1 0 0 1 0 0 0 . 24 (c) 子网掩码是 255.255.224.0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 (d) IP 地址与子网掩码逐位相与 141 . 14 . 0 1 0 0 0 0 0 0 . 0 (e) 网络地址(点分十进制表示) 141 . 14 . 64 . 0 不同的子网掩码得出相同的网络地址。 但不同的掩码的效果是不同的。
4.5.2 使用子网掩码的分组转发过程 在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。 4.5.2 使用子网掩码的分组转发过程 在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。 但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。 因此分组转发的算法也必须做相应的改动。
在划分子网的情况下路由器转发分组的算法 (1) 从收到的分组的首部提取目的 IP 地址 D。 分组传送给指明的下一跳路由器;否则,执行(4)。 (4) 对路由表中的每一行的子网掩码和 D 逐位相“与”, 若其结果与该行的目的网络地址匹配,则将分组传送 给该行指明的下一跳路由器;否则,执行(5)。 (5) 若路由表中有一个默认路由,则将分组传送给路由表 中所指明的默认路由器;否则,执行(6)。 (6) 报告转发分组出错。
【例4-4】已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1向 H2 发送的分组后查找路由表的过程。 128.30.33.13 目的网络地址 子网掩码 下一跳 128.30.33.0 128.30.33.128 128.30.36.0 255.255.255.128 255.255.255.0 接口 0 接口 1 R2 子网1: 网络地址 128.30.33.0 子网掩码 255.255.255.128 H1 128.30.33.1 子网2:网络地址 128.30.33.128 子网掩码 255.255.255.128 128.30.33.130 1 128.30.33.129 H2 128.30.33.138 R2 1 128.30.36.2 子网3:网络地址 128.30.36.0 子网掩码 255.255.255.0 H3 128.30.36.12
请注意:H1 并不知道 H2 连接在哪一个网络上。 H1 仅仅知道 H2 的 IP 地址是 128.30.33.138 R1 的路由表(未给出默认路由器) 128.30.33.13 目的网络地址 子网掩码 下一跳 128.30.33.0 128.30.33.128 128.30.36.0 255.255.255.128 255.255.255.0 接口 0 接口 1 R2 子网1: 网络地址 128.30.33.0 子网掩码 255.255.255.128 H1 128.30.33.1 R1 子网2:网络地址 128.30.33.128 子网掩码 255.255.255.128 128.30.33.130 1 128.30.33.129 128.30.33.138 R2 H2 请注意:H1 并不知道 H2 连接在哪一个网络上。 H1 仅仅知道 H2 的 IP 地址是 128.30.33.138 因此 H1 首先检查主机 128.30.33.138 是否连接在本网络上 如果是,则直接交付; 否则,就送交路由器 R1,并逐项查找路由表。 1 128.30.36.2 子网3:网络地址 128.30.36.0 子网掩码 255.255.255.0 H3 128.30.36.12
主机 H1 首先将 本子网的子网掩码 255. 255. 255. 128 与分组的 IP 地址 128. 30. 33 主机 H1 首先将 本子网的子网掩码 255.255.255.128 与分组的 IP 地址 128.30.33.138 逐比特相“与”(AND 操作) 255.255.255.128 AND 128.30.33.138 的计算 128.30.33.13 H1 目的网络地址 子网掩码 下一跳 128.30.33.0 128.30.33.128 128.30.36.0 255.255.255.128 255.255.255.0 接口 0 接口 1 R2 子网1: 网络地址 128.30.33.0 子网掩码 255.255.255.128 255 就是二进制的全 1,因此 255 AND xyz = xyz, 这里只需计算最后的 128 AND 138 即可。 128.30.33.1 R1 子网2:网络地址 128.30.33.128 子网掩码 255.255.255.128 128 → 10000000 138 → 10001010 128.30.33.130 1 128.30.33.129 H2 逐比特 AND 操作后:10000000 → 128 128.30.33.138 R2 1 128.30.36.2 255.255.255.128 128. 30. 33.138 128. 30. 33.128 逐比特 AND 操作 子网3:网络地址 128.30.36.0 子网掩码 255.255.255.0 H1 的网络地址 H3 128.30.36.12
因此 H1 必须把分组传送到路由器 R1 然后逐项查找路由表 128.30.33.13 目的网络地址 子网掩码 下一跳 128.30.33.0 128.30.33.128 128.30.36.0 255.255.255.128 255.255.255.0 接口 0 接口 1 R2 子网1: 网络地址 128.30.33.0 子网掩码 255.255.255.128 H1 128.30.33.1 R1 子网2:网络地址 128.30.33.128 子网掩码 255.255.255.128 128.30.33.130 1 128.30.33.129 H2 128.30.33.138 R2 1 128.30.36.2 子网3:网络地址 128.30.36.0 子网掩码 255.255.255.0 H3 128.30.36.12
路由器 R1 收到分组后就用路由表中第 1 个项目的 子网掩码和 128.30.33.138 逐比特 AND 操作 R1 收到的分组的目的 IP 地址:128.30.33.138 R1 的路由表(未给出默认路由器) 128.30.33.13 目的网络地址 子网掩码 下一跳 128.30.33.0 128.30.33.128 128.30.36.0 255.255.255.128 255.255.255.0 接口 0 接口 1 R2 子网1: 网络地址 128.30.33.0 子网掩码 255.255.255.128 H1 128.30.33.1 R1 子网2:网络地址 128.30.33.128 子网掩码 255.255.255.128 不一致 128.30.33.130 1 128.30.33.129 R2 H2 128.30.33.138 255.255.255.128 AND 128.30.33.138 = 128.30.33.128 不匹配! (因为128.30.33.128 与路由表中的 128.30.33.0 不一致) 1 128.30.36.2 子网3:网络地址 128.30.36.0 子网掩码 255.255.255.0 H3 128.30.36.12
路由器 R1 再用路由表中第 2 个项目的 子网掩码和 128.30.33.138 逐比特 AND 操作 R1 收到的分组的目的 IP 地址:128.30.33.138 R1 的路由表(未给出默认路由器) 128.30.33.13 目的网络地址 子网掩码 下一跳 128.30.33.0 128.30.33.128 128.30.36.0 255.255.255.128 255.255.255.0 接口 0 接口 1 R2 子网1: 网络地址 128.30.33.0 子网掩码 255.255.255.128 H1 一致! 128.30.33.1 R1 子网2:网络地址 128.30.33.128 子网掩码 255.255.255.128 128.30.33.130 1 128.30.33.129 128.30.33.138 R2 H2 255.255.255.128 AND 128.30.33.138 = 128.30.33.128 匹配! 这表明子网 2 就是收到的分组所要寻找的目的网络 1 128.30.36.2 子网3:网络地址 128.30.36.0 子网掩码 255.255.255.0 H3 128.30.36.12
4.5.3 无分类编址 CIDR 1. 网络前缀 划分子网在一定程度上缓解了因特网在发展中遇 到的困难。然而在 1992 年因特网仍然面临三个必 须尽早解决的问题,这就是: B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕! 因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。 整个 IPv4 的地址空间最终将全部耗尽。
IP 编址问题的演进 1987 年,RFC 1009 就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码 VLSM (Variable Length Subnet Mask)可进一步提高 IP 地址资源的利用率。 在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
CIDR 最主要的特点 CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。 CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。 IP 地址从三级编址(使用子网掩码)又回到了两级编址。
无分类的两级编址 无分类的两级编址的记法是: IP地址 ::= {<网络前缀>, <主机号>} (4-3) CIDR 还使用“斜线记法”(slash notation),它又称为CIDR记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。 CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
CIDR 地址块 128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。 这个地址块的起始地址是 128.14.32.0。 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。 128.14.32.0/20 地址块的最小地址:128.14.32.0 128.14.32.0/20 地址块的最大地址:128.14.47.255 全 0 和全 1 的主机号地址一般不使用。
128.14.32.0/20 表示的地址(212 个地址) 最小地址 10000000 00001110 00100000 00000000 10000000 00001110 00100000 00000001 10000000 00001110 00100000 00000010 10000000 00001110 00100000 00000011 10000000 00001110 00100000 00000100 10000000 00001110 00100000 00000101 10000000 00001110 00101111 11111011 10000000 00001110 00101111 11111100 10000000 00001110 00101111 11111101 10000000 00001110 00101111 11111110 10000000 00001110 00101111 11111111 所有地址 的 20 位 前缀都是 一样的 最大地址
路由聚合(route aggregation) 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。 路由聚合也称为构成超网(supernetting)。 CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。 对于 /20 地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中1的个数。
CIDR 记法的其他形式 255 192 10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的 0 省略。 10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0。此掩码可表示为 00000000 00000000 11000000 11111111 255 192
CIDR 记法的其他形式 10.0.0.0/10 可简写为 10/10,也就是将点分十进制中低位连续的 0 省略。 10.0.0.0/10 相当于指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0,即 11111111 11000000 00000000 00000000 网络前缀的后面加一个星号 * 的表示方法 如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。
构成超网 前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。(见课本P.137) 这些 C 类地址合起来就构成了超网。 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
CIDR 优点 在分类地址环境中,ISP向其客户分配IP地址时,只能以/8,/16或/24为单位来分配。 在CIDR 环境,ISP可根据每个客户的具体情况进行分配。 例,某ISP已拥有地址块206.0.64.0/18(相当于有64个C类网络)。某大学需要800个IP地址。 若不使用CIDR,可分配一B类地址——浪费6万多个地址;或分配4个C类地址——路由表中会出现对应的4个项目。 若使用CIDR,可分配一个地址块206.0.68.0/22,包括1024个地址,利用率显著提高。
CIDR 地址块划分举例 ISP 大学 X 因特网 三系 四系 二系 一系 206.0.64.0/18 206.0.68.0/22 206.0.68.0/23 206.0.70.0/24 206.0.71.0/25 206.0.71.128/25 206.0.68.0/25 206.0.68.128/25 206.0.69.0/25 206.0.69.128/25 206.0.70.0/26 206.0.70.64/26 206.0.70.128/26 206.0.70.192/26 206.0.71.0/26 206.0.71.64/26 206.0.71.128/26 206.0.71.192/26 三系 四系 二系 一系 单位 地址块 二进制表示 地址数 ISP 206.0.64.0/18 11001110.00000000.01* 16384 大学 206.0.68.0/22 11001110.00000000.010001* 1024 一系 206.0.68.0/23 11001110.00000000.0100010* 512 二系 206.0.70.0/24 11001110.00000000.01000110.* 256 三系 206.0.71.0/25 11001110.00000000.01000111.0* 128 四系 206.0.71.128/25 11001110.00000000.01000111.1* 128
CIDR 地址块划分举例 ISP 大学 X 206.0.64.0/18 因特网 206.0.68.0/22 206.0.68.0/23 206.0.70.0/24 206.0.71.0/25 206.0.71.128/25 206.0.68.0/25 206.0.68.128/25 206.0.69.0/25 206.0.69.128/25 206.0.70.0/26 206.0.70.64/26 206.0.70.128/26 206.0.70.192/26 206.0.71.0/26 206.0.71.64/26 206.0.71.128/26 206.0.71.192/26 三系 四系 二系 一系 这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。 同理,这个大学有4个系,在ISP的路由器的路由表中,也只需使用206.0.68.0/22一个条目。
2. 最长前缀匹配 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。 网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。 最长前缀匹配又称为最长匹配或最佳匹配。
收到的分组的目的地址 D = 206.0.71.128 路由表中的项目:206.0.68.0/22 (ISP) 最长前缀匹配举例 收到的分组的目的地址 D = 206.0.71.128 路由表中的项目:206.0.68.0/22 (ISP) 206.0.71.128/25 (四系) 查找路由表中的第 1 个项目 第 1 个项目 206.0.68.0/22 的掩码 M 有 22 个连续的 1。 M = 11111111 11111111 11111100 00000000 因此只需把 D 的第 3 个字节转换成二进制。 M = 11111111 11111111 11111100 00000000 AND D = 206. 0. 01000100. 0 206. 0. 01000100. 0 与 206.0.68.0/22 匹配
收到的分组的目的地址 D = 206.0.71.128 路由表中的项目:206.0.68.0/22 (ISP) 最长前缀匹配举例 收到的分组的目的地址 D = 206.0.71.128 路由表中的项目:206.0.68.0/22 (ISP) 206.0.71.128/25 (四系) 再查找路由表中的第 2 个项目 第 2 个项目 206.0.71.128/25 的掩码 M 有 25 个连续的 1。 M = 11111111 11111111 11111111 10000000 因此只需把 D 的第 4 个字节转换成二进制。 M = 11111111 11111111 11111111 10000000 AND D = 206. 0. 71. 10000000 206. 0. 71. 10000000 与 206.0.71.128/25 匹配
最长前缀匹配 D AND (11111111 11111111 11111100 00000000) = 206.0.68.0/22 匹配 D AND (11111111 11111111 11111111 10000000) = 206.0.71.128/25 匹配 选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。
3. 使用二叉线索查找路由表 当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。 IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。 为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
用 5 个前缀构成的二叉线索 32 位的 IP 地址 唯一前缀 01000110 00000000 00000000 00000000 0100 01010110 00000000 00000000 00000000 0101 01100001 00000000 00000000 00000000 011 10110000 00000010 00000000 00000000 10110 10111011 00001010 00000000 00000000 10111 1 IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
4.4 网际控制报文协议 ICMP 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。 ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。 ICMP 不是高层协议,而是 IP 层的协议。 ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
ICMP 报文的格式 8 16 31 前 4 个字节 都是一样的 类型 代码 检验和 (这 4 个字节取决于 ICMP 报文的类型) 8 16 31 前 4 个字节 都是一样的 类型 代码 检验和 (这 4 个字节取决于 ICMP 报文的类型) ICMP 的数据部分(长度取决于类型) ICMP 报文 首 部 数 据 部 分 IP 数据报
4.4.1 ICMP 报文的种类 ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
几种常用的ICMP报文类型 ICMP报文的种类 类型的值 ICMP报文的类型 差错报告报文 3 终点不可到达 4 源点抑制 11 时间超过 12 参数问题 5 改变路由(redirect) 询问报文 8或0 回送(echo)请求或回答 13或14 时间戳(timestamp)请求或回答
ICMP 差错报告报文共有 5 种 终点不可达 源点抑制(Source quench) 时间超过 参数问题 改变路由(重定向)(Redirect)
主要获得运输层的端口号和运输层的报文发送序号 ICMP 差错报告报文的数据字段的内容 IP 数据报的数据字段 收到的 IP 数据报 IP 数据报 首部 8 字节 主要获得运输层的端口号和运输层的报文发送序号 ICMP 的 前 8 字节 IP 数据报 首部 8 字节 ICMP 差错报告报文 首部 ICMP 差错报告报文 装入 ICMP 报文的 IP 数据报 IP 数据报
不应发送 ICMP 差错报告报文的几种情况 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
ICMP 询问报文有两种 回送请求和回答报文 由主机或路由器向特定的目的主机发出的询问。 时间戳请求和回答报文 请求某个主机或路由器回答当前的日期和时间 下面的几种 ICMP 报文不再使用 信息请求与回答报文 掩码地址请求和回答报文 路由器询问和通告报文
4.4.2 ICMP的应用举例 PING (Packet InterNet Groper) PING 使用了 ICMP 回送请求与回送回答报文。 PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
PING 的应用举例
Traceroute 的应用举例
4.5 因特网的路由选择协议 4.5.1 有关路由选择协议的几个基本概念 4.5 因特网的路由选择协议 4.5.1 有关路由选择协议的几个基本概念 1. 理想的路由算法 算法必须是正确的和完整的。 算法在计算上应简单。 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。 算法应具有稳定性。 算法应是公平的。 算法应是最佳的。
关于“最佳路由” 不存在一种绝对的最佳路由算法。 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。 实际的路由选择算法,应尽可能接近于理想的算法。 路由选择是个非常复杂的问题 它是网络中的所有结点共同协调工作的结果。 路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。
从路由算法的自适应性考虑 静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。 动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
2. 分层次的路由选择协议 因特网采用分层次的路由选择协议。 2. 分层次的路由选择协议 因特网采用分层次的路由选择协议。 因特网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使因特网的通信链路饱和。 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。
自治系统 AS (Autonomous System) 自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。 现在对自治系统 AS 的定义是强调下面的事实: 尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
因特网有两大类路由选择协议 内部网关协议 IGP (Interior Gateway Protocol) : 即在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。 外部网关协议EGP (External Gateway Protocol) : 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。在外部网关协议中目前使用最多的是 BGP-4。
自治系统和 内部网关协议、外部网关协议 自治系统之间的路由选择也叫做域间路由选择(interdomain routing), 自治系统 B 自治系统 A 用外部网关协议 (例如,BGP-4) R1 R2 用内部网关协议 (例如,RIP) 用内部网关协议 (例如,OSPF) 自治系统之间的路由选择也叫做域间路由选择(interdomain routing), 在自治系统内部的路由选择叫做域内路由选择(intradomain routing)
特别指出两点 因特网的早期 RFC 文档中未使用“路由器”而是使用“网关”这一名词。但是在新的 RFC 文档中又使用了“路由器”这一名词。应当把这两个属于当作同义词。 IGP 和 EGP 是协议类别的名称。但 RFC 在使用 EGP 这个名词时出现了一点混乱,因为最早的一个外部网关协议的协议名字正好也是 EGP。因此在遇到名词 EGP 时,应弄清它是指旧的协议 EGP 还是指外部网关协议 EGP 这个类别。
因特网的路由选择协议 内部网关协议 IGP:具体的协议有多种,如 RIP 和 OSPF 等。 外部网关协议 EGP:目前使用的协议就是 BGP。
4.5.2 内部网关协议 RIP (Routing Information Protocol) 1. 工作原理 路由信息协议 RIP 是内部网关协议 IGP中最先得到广泛使用的协议。 RIP 是一种分布式的基于距离向量的路由选择协议。 RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
“距离”的定义(1) 从一路由器到直接连接的网络的距离定义为 1。 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。 RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。 这里的“距离”实际上指的是“最短距离”,
“距离”的定义(2) RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。 RIP 允许一条路径最多只能包含 15 个路由器。
RIP 协议的三个要点 仅和相邻路由器交换信息。 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。 按固定的时间间隔交换路由信息,例如,每隔 30 秒。
Distance Vector Routing Example 下一跳
路由表的建立 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。 RIP 协议的收敛(convergence)过程较快,即在自治系统中所有的结点都得到正确的路由选择信息的过程。
2. 距离向量算法—更新路由表 收到相邻路由器(其地址为 X)的一个 RIP 报文: (1) 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。 (2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤: 若项目中的目的网络不在路由表中,则把该项目加到路由表中。 否则 若下一跳字段给出的路由器地址是同样的,则把收到的项 目 替换原路由表中的项目。 若收到项目中的距离小于路由表中的距离,则进行更新, 否则,什么也不做。 (3) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离为16表示不可达)。 (4) 返回。
动画演示 演示“使用RIP协议的路由表的建立过程” 使用RIP协议的路由表的建立过程.swf 路由器中路由表的举例.swf
路由器之间交换信息 RIP协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。 虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
报文的意义。如1表示请求路由信息。2表示对请求路由信息的响应或未被请求而发出的请求报文。 3. RIP2 协议的报文格式 报文的意义。如1表示请求路由信息。2表示对请求路由信息的响应或未被请求而发出的请求报文。 所使用的地址协议、如IP等 自治系统编号 4 字节 地址族标识符 路由标记 4 字节 网络地址 命令 版本 子网掩码 必为 0 下一跳路由器地址 距离 (1-16) 首部 路由部分 路由信息 (20 字节/路由) 可重复出现 最多 25 个 RIP 报文 IP 首部 UDP 首部 UDP 用户数据报 IP 数据报
RIP2 的报文由首部和路由部分组成。 RIP2 报文中的路由部分由若干个路由信息组成。每个路由信息需要用 20 个字节。地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。 它指出该入口的协议地址类型。由于 RIP2版本可能使用几种不同协议传送路由选择信息,所以要使用到该字段。IP协议地址的Address Family Identifier为2。 路由标记填入自治系统的号码,这是考虑使RIP 有可能收到本自治系统以外的路由选择信息。再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。 路由标志是分离内部和外部 RIP 路由线路的一种常用方法(路由选择域内的网络传送线路),该方法在 EGP或IGP都有应用。
RIP 协议的优缺点 RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
“”表示“直接交付” “1”表示“从本路由器到网 1” “1”表示“距离是 1” R1 说:“我到网 1 的距离是 1,是直接交付。” 正 常 情 况 1 1 网 1 网 2 1 2 R1 网 3 R1 R2 “”表示“直接交付” “1”表示“从本路由器到网 1” “1”表示“距离是 1” R1 说:“我到网 1 的距离是 1,是直接交付。”
“R1”表示 “1”表示“从本路由器到网 1” 经过 R1 “2”表示“距离是 2” R2 说:“我到网 1 的距离是 2,是经过 R1。” 正 常 情 况 1 1 网 1 网 2 1 2 R1 网 3 R1 R2 “R1”表示 经过 R1 “1”表示“从本路由器到网 1” “2”表示“距离是 2” R2 说:“我到网 1 的距离是 2,是经过 R1。”
R1 说:“我到网 1 的距离是 16 (表示无法到达), 是直接交付。” 正 常 情 况 1 1 网 1 网 2 1 2 R1 网 3 R1 R2 R2 R1 网 1 网 3 网 2 网 1出了故障 1 16 1 2 R1 R1 说:“我到网 1 的距离是 16 (表示无法到达), 是直接交付。” 但 R2 在收到 R1 的更新报文之前,还发送原来的报文, 因为这时 R2 并不知道 R1 出了故障。
正 常 情 况 1 1 网 1 网 2 1 2 R1 网 3 R1 R2 R2 R1 网 1 网 3 网 2 网 1出了故障 1 16 1 2 R1 1 3 R2 R1 收到 R2 的更新报文后,误认为可经过 R2 到达网1,于是更新自己的路由表,说:“我到网 1 的距离是 3,下一跳经过 R2”。然后将此更新信息发送给 R2。
R2 以后又更新自己的路由表为“1, 4, R1”,表明 “我到网 1 距离是 4,下一跳经过 R1”。 正 常 情 况 1 1 网 1 网 2 1 2 R1 网 3 R1 R2 R2 R1 网 1 网 3 网 2 网 1出了故障 1 16 1 2 R1 1 3 R2 1 4 R1 R2 以后又更新自己的路由表为“1, 4, R1”,表明 “我到网 1 距离是 4,下一跳经过 R1”。
这样不断更新下去,直到 R1 和 R2 到网 1 的距离都增大到 16 时,R1 和 R2 才知道网 1 是不可达的。 正 常 情 况 这就是好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是 RIP 的一个主要缺点。 1 1 网 1 网 2 1 2 R1 网 3 R1 R2 网 1 网 2 网 3 R1 R2 网 1出了故障 1 16 1 2 R1 1 3 R2 1 4 R1 1 5 R2 … … 1 16 R2 1 16 R1 这样不断更新下去,直到 R1 和 R2 到网 1 的距离都增大到 16 时,R1 和 R2 才知道网 1 是不可达的。
4.5.3 内部网关协议 OSPF (Open Shortest Path First) “最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。 是分布式的链路状态协议。
OSPF协议的三个要点 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。 “链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
Building Link State Packets simple: just put in a sequence number and aging information. The hard part is when to build them. Practice shows that once an hour is often enough.
链路状态数据库(link-state database) 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。 这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。 OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
OSPF 的区域(area) 为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。 每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。 区域也不能太大,在一个区域内的路由器最好不超过 200 个。
OSPF 划分为两种不同的区域 至其他自治系统 自治系统 AS 主干区域 0.0.0.0 区域 0.0.0.1 区域 0.0.0.3 R1 R6 网 6 R3 R7 网 1 R5 R9 网 7 网 2 R4 R2 网 3 网 8 R8 网 4 网 5 区域 0.0.0.1 区域 0.0.0.3 区域 0.0.0.2
划分区域 划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。 OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
主干路由器 至其他自治系统 自治系统 AS 主干区域 0.0.0.0 区域 0.0.0.1 区域 0.0.0.3 区域 0.0.0.2 R1 网 6 R3 R7 网 1 R5 R9 网 7 网 2 R4 R2 网 3 网 8 R8 网 4 网 5 区域 0.0.0.1 区域 0.0.0.3 区域 0.0.0.2
区域边界路由器 至其他自治系统 自治系统 AS 主干区域 0.0.0.0 区域 0.0.0.1 区域 0.0.0.3 区域 0.0.0.2 R1 R6 网 6 R3 R7 网 1 R5 R9 网 7 网 2 R4 R2 网 3 网 8 R8 网 4 网 5 区域 0.0.0.1 区域 0.0.0.3 区域 0.0.0.2
Hierarchical Routing(层次路由) Problem: No routing algorithm discussed so far can scale: all of them require each router to know about all others, that is, too demanding with respect to memory capacity and processing power. Solution: Go for sub-optimal routes by introducing regions, and separate algorithms for intra-region and inter-region routing. Two or three levels will generally do.
OSPF 直接用 IP 数据报传送 OSPF 不用 UDP 而是直接用 IP 数据报传送。 数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF 的其他特点 OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡。 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。 支持可变长度的子网划分和无分类编址 CIDR。 每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
OSPF 分组 位 8 16 31 版 本 类 型 分 组 长 度 路 由 器 标 识 符 区 域 标 识 符 检 验 和 鉴 别 类 型 8 16 31 版 本 类 型 分 组 长 度 路 由 器 标 识 符 区 域 标 识 符 检 验 和 鉴 别 类 型 鉴 别 鉴 别 24 字节 OSPF 分组首部 类型 1 至类型 5 的 OSPF 分组 IP数据报首部 OSPF 分组 IP 数据报
2. OSPF 的五种分组类型 类型1,问候(Hello)分组。用来发现和维持邻站的可达性。在两个路由器之间形成一个邻居关系。 类型2,数据库描述(Database Description)分组。向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。 类型3,链路状态请求(Link State Request)分组。 类型4,链路状态更新(Link State Update)分组, 用洪泛法对全网更新链路状态。 类型5,链路状态确认(Link State Acknowledgment) 分组。
数据库描述(DBD)分组,大多用于数据库交换期间。第一个DBD分组用于选举主从关系和配置由主设备选举的最初的序列号。有着最大路由器ID的路由器变成主设备并且对数据库同步进行初始化。主路由器发送序列号,从路由器进行确认。在主从路由器选举出来之后,数据库同步过程开始了,在这个过程中,所有LSA的分组头都在邻居之间进行交换。 DBD分组中的字段: 接口MTU--这个字段包含有以字节为单位、可以通过相关联接口传送的最大数据的大小。这个选项从RFC2178起开始被添加。当通过虚链路发送分组时这个字段必须设置为0。 选项--这个字段的选项在上一节有关Hello分组的格式中已经被讨论过了。 I比特--当设置为1时,表示这是DBD交换中的第一个分组。 M比特--当设置为1时,表示后面将有更多的分组过来。 MS比特--用于主从设备。当这个比特设置为1时,表示路由器在DBD交换过程中是主设备,如果这个比特被设置为0,表示路由器是从设备。 DBD序列号--这个字段包含一个由主设备设置的唯一的值。这个序列号在数据库交换过程中使用。只有主设备才能增加序列号。 LSA头--这个字段由一个链路状态数据库头列表组成。
2. OSPF 的五种分组类型 类型1,问候(Hello)分组。 类型2,数据库描述(Database Description)分组。 类型3,链路状态请求(Link State Request)分组。向对方请求发送某些链路状态项目的详细信息。 类型4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。是OSPF中最复杂、最核心的部分。链路状态更新分组有5种不同的链路状态。 类型5,链路状态确认(Link State Acknowledgment) 分组。 对链路更新分组的确认。
OSPF的基本操作 问候 确定可达性 问候 数据库描述 数据库描述 达到数据库的同步 数据库描述 数据库描述 链路状态请求 新情况下的同步 链路状态更新 链路状态确认
OSPF 的特点 每两个相邻的路由器每隔10秒要交换一次问候分组。若有40秒没有收到某个相邻路由器发来的问候分组,则可认为该路由器不可到达,应立即修改链路状态数据库,并重新计算路由表。 OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。 OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
OSPF 使用的是可靠的洪泛法 t1 更新报文 R t2 t3 R t4 R ACK报文 R t 1 收到信息的下游路由器在转发信息时,要将其上游路由器除外。 2 在收到更新分组后要进行确认。 t1 t2 t3 t4 更新报文 R R R ACK报文 t R
指定的路由器 (designated router) 多点接入的局域网采用了指定的路由器的方法,使广播的信息量大大减少。 指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。
4.5.4 外部网关协议 BGP BGP 是不同自治系统的路由器之间交换路由信息的协议。 BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。 可以将 BGP-4 简写为 BGP。
BGP 使用的环境却不同 因特网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。 当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的。 比较合理的做法是在 AS 之间交换“可达性”信息。 自治系统之间的路由选择必须考虑有关策略。 因此,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
BGP 发言人(BGP speaker) 每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” 。 一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。
BGP 交换路由信息 一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。 使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。 使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站或对等站。
BGP 发言人和自治系统 AS 的关系 BGP BGP 发言人 AS1 发言人 AS2 BGP 发言人 BGP 发言人 AS3
AS 的连通图举例 BGP 所交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。 当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。 AS1 AS2 AS3 AS4 AS5
BGP 发言人交换路径向量 自治系统 AS2 的 BGP 发言人通知主干网的 BGP 发言人:“要到达网络 N1, N2, N3 和 N4 可经过 AS2。” 本地 ISP(AS4) N1, N2 本地 ISP(AS5) N3, N4 地区 ISP (AS2) 主干网 (AS1) 本地 ISP(AS6) N5 地区 ISP (AS3) 本地 ISP(AS7) N6, N7
BGP 发言人交换路径向量 主干网还可发出通知:“要到达网络 N5, N6 和 N7 可沿路径(AS1, AS3)。” 本地 ISP(AS4) N1, N2 地区 ISP (AS2) 本地 ISP(AS5) N3, N4 主干网 (AS1) 本地 ISP(AS6) N5 本地 ISP(AS7) N6, N7 地区 ISP (AS3)
BGP 协议的特点 BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
BGP 协议的特点 BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。 在BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
BGP-4 共使用四种报文 (1) 打开(OPEN)报文,用来与相邻的另一个BGP发言人建立关系。 (2) 更新(UPDATE)报文,用来发送某一路由的信息,以及列出要撤消的多条路由。 (3) 保活(KEEPALIVE)报文,用来确认打开报文和周期性地证实邻站关系。 (4) 通知(NOTIFICATION)报文,用来发送检测到的差错。 在 RFC 2918 中增加了 ROUTE-REFRESH 报文,用来请求对等端重新通告。
用来鉴别收到的BGP报文。当不使用鉴别时,该字段要全为1 BGP 报文具有通用的首部(P.159) 包括首部在内的整个BGP报文的长度。 值为1到4,对应四种BGP报文的一种。 BGP 报文通用首部 字节 16 2 1 BGP 报文主体部分 类 型 长 度 标 记 TCP首部 IP 首部 BGP 报文 TCP 报文 用来鉴别收到的BGP报文。当不使用鉴别时,该字段要全为1
4.5.6 路由器在网际互连中的作用 1. 路由器的结构 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。 下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
典型的路由器的结构 路由选择处理机 3——网络层 2——数据链路层 1——物理层 路由 选择 分组 转发 交换结构 路由选择协议 路由表 输入端口 输出端口 1 2 3 3 2 1 分组处理 … … 转发表 分组 转发 输入端口 输出端口 1 2 3 交换结构 3 2 1
“转发”和“路由选择”的区别 “转发”(forwarding)就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。 “路由选择”(routing)则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。 路由表是根据路由选择算法得出的。而转发表是从路由表得出的。 在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,
输入端口对线路上收到的分组的处理 数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生一定的时延。 输入端口的处理 网络层处理 分组排队 从 线 路 接 收 分 组 交 换 结 构 数据链路层 处理 物理层处理 查表和转发
输出端口将交换结构传送来的分组发送到线路 当交换结构传送过来的分组先进行缓存。数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。 输出端口的处理 向 线 路 发 送 分 组 网络层处理 分组排队 交 换 结 构 数据链路层 处理 物理层处理 缓存管理
分组丢弃 若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。 路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
2 交换结构 总线 I1 O1 I1 O1 I2 存 储 器 I2 O2 O2 I3 I3 O3 O3 (a) 通过存储器 (b) 通过总线 2 交换结构 总线 I1 O1 I1 O1 I2 存 储 器 I2 O2 O2 I3 I3 O3 O3 (a) 通过存储器 (b) 通过总线 I1 互连网络 I2 I3 O2 (c) 通过互连网络 O1 O3
… … … 4.6 IP 多播 4.6.1 IP 多播的基本概念 不使用多播时需要 发送 90 次单播 多播是一对多的通信 视频服务器 M 90 个 R1 30 个 30 个 多播是一对多的通信 30个 R2 R3 R4 30 个 30 个 30 个 … … … 共有 90 个主机接收视频节目
多播可明显地减少 网络中资源的消耗 … … … 视频服务器 M 发送 1 次多播 1 个 R1 复制 1 个 1 个 1 个 R2 R3 多播组成员 共有 90 个 … … …
IP 多播的一些特点 (1) 多播使用组地址—— IP 使用 D 类地址支持多播。多播地址只能用于目的地址,而不能用于源地址。 (2) 永久组地址——由因特网号码指派管理局 IANA 负责指派。 (3) 动态的组成员 (4) 使用硬件进行多播
多播地址 D类地址,即1110* 。 224.0.0.0 ~ 239.255.255.255。有228 个多播组,约2.6亿个。 有些地址不能随意使用 224.0.0.0 基地址(保留) 224.0.0.1 在本子网上的所有参加多播的主机和路由器 224.0.0.2在本子网上的所有参加多播路由器 224.0.0.3 未指派 224.0.0.4 DVMRP路由器 … … 224.0.1.0 至 238.255.255.255 全球范围内可使用的多播地址 239.0.0.0 至239.255.255.255 限制在一个组织的范围
4.6.2 在局域网上进行硬件多播 因特网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。 4.6.2 在局域网上进行硬件多播 因特网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。 因此 TCP/IP 协议使用的以太网多播地址块的范围是: 从 00-00-5E-00-00-00 到 00-00-5E-FF-FF-FF 其中第一个字节的最低位为1时为多播地址。 IANA 拥有的以太网多播地址范围为: 从 01-00-5E-00-00-00到 01-00-5E-7F-FF-FF D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。
D 类 IP 地址 与以太网多播地址的映射关系 表示多播 这 5 位不使用 D 类 IP 地址 8 16 24 31 D 类 IP 地址 1110 0 1 0 0 5 E 00000001 00000000 01011110 表示多播 最低 23 位来自 D 类 IP 地址 48 位以太网地址 可见:多个D类IP地址可能对应一个MAC地址。
MAC地址映射的性能影响: 因为第三层IP组播地址信息的全部28位比特不能映射进23bit可用的mac地址空间,所以在映射的过程中,丢失了5bit的地址信息,这会导致组播地址映射到第二层IEEE MAC地址时,会有25,或者32:1的地址不明确.这也就意味着,每一个IEEE IP多播MAC地址可以表示32个IP地址组播地址. MAC和IP的后23位一一对应,后第24位可以是0或1,这一位没有对应上。 结论:每一个2层地址可以映射成32个3层地址。
4.6.3 网际组管理协议 IGMP 和多播路由选择协议 1. IP多播需要两种协议 为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol)。 连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员(即多播路由器之间的协同工作)。这就需要使用多播路由选择协议。
IGMP 使多播路由器知道多播组成员信息 128.56.24.34 135.27.74.52 IGMP R1 130.12.14.56 226.15.37.123 IGMP R3 IGMP R4 130.12.14.43
IGMP 的本地使用范围 IGMP 并非在因特网范围内对所有多播组成员进行管理的协议。 IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。 IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
2. 网际组管理协议 IGMP 1989 年公布的 RFC 1112(IGMPv1)早已成为了因特网的标准协议。 1997 年公布的 RFC 2236(IGMPv2,建议标准)对 IGMPv1 进行了更新。 2002 年 10 月公布了 RFC 3376(IGMPv3,建议标准),宣布 RFC 2236(IGMPv2)是陈旧的。
IGMP 是整个网际协议 IP的一个组成部分 和 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMP 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。 因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。
IGMP 可分为两个阶段 第一阶段:当某个主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他多播路由器。
IGMP 可分为两个阶段 第二阶段:因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
IGMP 采用的一些具体措施 在主机和多播路由器之间的所有通信都是使用 IP 多播。 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每 125 秒发送一次。 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。
IGMP 采用的一些具体措施(续) 在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。 同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
3. 多播路由选择 多播路由选择协议尚未标准化。 一个多播组中的成员是动态变化的,随时会有主机加入或离开这个多播组。 3. 多播路由选择 多播路由选择协议尚未标准化。 一个多播组中的成员是动态变化的,随时会有主机加入或离开这个多播组。 多播路由选择实际上就是要找出以源主机为根结点的多播转发树。 在多播转发树上的路由器不会收到重复的多播数据报。 对不同的多播组对应于不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。
转发多播数据报使用的方法 (1) 洪泛与剪除 这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。 一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。为了避免兜圈子,采用了叫做反向路径广播 RPB (Reverse Path Broadcasting)的策略。
RPB 的要点 路由器收到多播数据报时,先检查是否从源点经最短路径传送来的。 若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就丢弃而不转发。 如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小。
反向路径广播 RPB 和剪除 源点 转发多播数据报 R1 收到后即丢弃 R2 R3 剪除没有 组成员的树枝 R5 R4 R8 R6 R7
(2) 隧道技术(tunneling) 网 1 (支持多播) 网 2 (支持多播) 不支持多播 的网络 R1 R2 隧道 多播数据报 首部 数 据 网 1 和网 2 中的多播数据报 首部 数 据 隧道中通行的单播 IP 数据报 单播 IP 数据报
(3) 基于核心的发现技术 这种方法对于多播组的大小在较大范围内变化时都适合。 这种方法是对每一个多播组 G 指定一个核心(core)路由器,给出它的 IP 单播地址。 核心路由器按照前面讲过的方法创建出对应于多播组 G 的转发树。
几种多播路由选择协议 距离向量多播路由选择协议 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)
4.7 虚拟专用网 VPN 和网络地址转换 NAT 4.7.1 虚拟专用网 VPN 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向因特网的管理机构申请。 全球地址——全球唯一的IP地址,必须向因特网的管理机构申请。
RFC 1918 指明的专用地址(private address) 172.16.0.0 到 172.31.255.255 (16个B类) 192.168.0.0 到 192.168.255.255(256个C类) 这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。 专用地址只能用作本地地址而不能用作全球地址。在因特网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。
用隧道技术实现虚拟专用网 网络地址 = 10.1.0.0 网络地址 = 10.2.0.0 (本地地址) (本地地址) 本地地址 全球地址 Y 10.2.0.3 X 10.1.0.1 125.1.2.3 194.4.5.6 隧道 部门 B 部门 A R2 R1 因特网 使用隧道技术 网络地址 = 10.1.0.0 (本地地址) 网络地址 = 10.2.0.0 (本地地址)
用隧道技术实现虚拟专用网 加密的从 X 到 Y 的内部数据报 源地址:125.1.2.3 目的地址:194.4.5.6 外部数据报的数据部分 数据报首部 Y 10.2.0.3 X 10.1.0.1 125.1.2.3 194.4.5.6 隧道 部门 B 部门 A R2 R1 因特网 使用隧道技术 部门 A 部门 B X Y R1 R2 125.1.2.3 194.4.5.6 10.1.0.1 10.2.0.3 虚拟专用网 VPN
内联网 intranet 和外联网 extranet (都是基于 TCP/IP 协议) 由部门 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为内联网(intranet),表示部门 A 和 B 都是在同一个机构的内部。 一个机构和某些外部机构共同建立的虚拟专用网 VPN 又称为外联网(extranet)。 部门 A 部门 B X Y R1 R2 125.1.2.3 194.4.5.6 10.1.0.1 10.2.0.3 虚拟专用网 VPN
远程接入VPN (remote access VPN) 在外地工作的员工拨号接入因特网,而驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
4.7.2 网络地址转换 NAT (Network Address Translation) 需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成 IPG 才能和因特网连接。
网络地址转换的过程 内部主机 X 用本地地址 IPX 和因特网上主机 Y 通信所发送的数据报必须经过 NAT 路由器。 NAT 路由器将数据报的源地址 IPX 转换成全球地址 IPG,但目的地址 IPY 保持不变,然后发送到因特网。 NAT 路由器收到主机 Y 发回的数据报时,知道数据报中的源地址是 IPY 而目的地址是 IPG。 根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPX,转发给最终的内部主机 X。
NAT工作原理 200.8.7.3/24 200.8.7.4/24 192.168.1.5 63.5.8.1 192.168.1.7 内部本地地址 内部全局地址 192.168.1.7 200.8.7.3 192.168.1.5 200.8.7.4 源IP:192.168.1.7 目的IP:63.5.8.1 源IP:200.8.7.3 目的IP:63.5.8.1 源IP:63.5.8.1 目的IP:192.168.1.7 源IP:63.5.8.1 目的IP:200.8.7.3
IP版本4的不足: 下一代IP协议IPv6 有限的寻址空间 许多操作效率不高 IPv6的精心构思开始于1992年,到了1995年进入最后的规范竞争阶段(RFC 1719) IPv6的设计宗旨 主要是扩展IP地址空间,同时使协议使用起来更加简单、操作更加高效。 IPv6在以下方面解决IP4的存在问题: (1) 扩展寻址和路由选择能力地址扩充到128位; (2) 包头格式的简化; (3) 服务功能的质量; (4) 安全性和保密性; (5) IP的可移动性。
二、IPv6基本首部格式 版本 优先级 净负荷长度 下一个首部 跳数限制
三、IPv6的地址空间 IPv6地址有128bit,IPv6是8个由冒号分隔的16比特整数串。每 个整数代表一个16进制数字。 68DA:8909:3A22:FECA:68DA:8909:3122:1111 最初应用时不可能用满128比特,一些位置0 68DA:0000:0000:0000:68DA:8909:8909:3A22 简写表示:68DA:0:0:0:68DA:8909:8909:3A22 68DA::68DA:8909:8909:3A22 IPv6允许IPv4地址如下表示 ::202.204.25.10
IPV4到IPV6的演进技术 1)通过双协议栈过渡 TCP UDP Application Data Link(Ethernet) d 1)通过双协议栈过渡 将网络中的路由器分配一个IPv4 地址和一个IPv6地址。使之成为双栈路由器,使IPv4 和IPv6共存于统一物理网络上。 2)通过隧道技术 (a)隧道(Tunnel)是一种封装。 IPv4报文头 IPv6报文头 数据 IPv4报文 IPv6报文 (b) 隧道就象“海底”通道,通过虚拟网络连接IPv4海洋中的IPv6小岛。 IPv4网络 IPv6 网络 IPv6网络
作业 4-09、4-10、4-20、4-22、4-26、4-29、4-41
Thanks!