划分子网和构造超网
划分子网和构造超网
划分子网
分类IP地址存在的问题
- IP地址设计初衷:希望网络部分能唯一明确确定一个物理网络
- 早期的、分类的IP地址设计不够合理
- IP地址的利用率低
- 一个A类网络可包含的主机数:\(2^{24}– 2= 16,777,214\)
- 一个B类网络可包含的主机数:\(2^{16} – 2= 65534\)
- 一个C类网络可包含的主机数:\(2^8 – 2= 254\)
- 无法根据网络规模灵活选择网络地址
- 4个结点的网络使用一个完整的C类地址,浪费252个IP地址
- 1个10BaseT以太网最大结点数1024,得用一个B类地址,浪费6万多个IP地址
- 分配的是网络号而不是40亿个独立的IP地址,耗尽的速度快
- 126个 \((2^7 – 2)\)A类网络号分配完,就用尽了一半的IP地址,20亿
- 16,383个\((2^{14} – 1)\)B类网络号分配完,就用尽了1/4的IP地址,10亿
- 网络号和主机号位数固定,导致网络规模不可调,造成分配的不合理
- 每个物理网络分配一个网络号使得路由表过大
- 为每一个网络号增加一条目
- 大转发表增加路由器开销,增大路由查找延迟,减低路由器性能
- 使用不灵活
- 同一组织在不同地方开通新的物理网络,需要申请新的网络地址
- 不易于扩展、管理
- IP地址的利用率低
基本思路
- 二级的IP地址变成为三级:IP地址中又增加一个“子网号字段”
- 从主机号借用若干个位作为子网号 subnet-id,不改变原来的网络号net-id
- IP地址 = 网络号 + 子网号 + 主机号
- 实现多个物理网络共享一个网络号
- 减少分配网络号总数
- 路由聚合 (aggregation)
- 子网应当离得很近,从因特网其余部分看来,它们是一个单一网络,仅一个网络号
- 划分子网纯属一个机构内部的事情,对外仍表现为未划分子网的网络
- IP 数据报从其它网络到子网内某主机的路由
- 仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器
- 然后,此路由器再按目的网络号 net-id 和子网号 subnet-id 找到目的子网
- 最后将 IP 数据报直接交付目的主机
- 子网掩码
- 子网的网络地址 = 三级IP地址 AND 子网掩码
- 默认子网掩码:为便于路由器处理,未划分子网的网络也使用子网掩码
(即默认子网掩码)
- A类地址:255.0.0.0(8位网络号)
- B类地址:255.255.0.0(16位网络号)
- C类地址:255.255.255.0(24位网络号)
- 划分子网的借位原则
- RFC950规定子网号不能为全1和全0,因此至少借2位
- 最多借位数(至少留2位主机号)
- A类地址:22位
- B类地址:14位
- C类地址:6位
- 路由器FIB表的变化
- 在不划分子网的两级 IP 地址下
- 可从 IP 地址得出网络地址
- 在划分子网的情况下
- 从 IP 地址不能唯一地得出网络地址来,网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息
- 在FIB表中添加子网掩码
- 在不划分子网的两级 IP 地址下
划分子网情况下路由器转发分组的算法
- 从数据报的首部提取目的主机的 IP 地址 D
- 用本结点的各个网络的子网掩码与D逐位相与,看是否与相应的网络地址匹配:匹配,则将分组直接交付;否则是间接交付,执行 3
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 4
- 对路由表中的每一行的子网掩码和 D 逐位相与,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 5
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 6
- 报告转发分组出错(ICMP,目的不可达)
例子
- 主机H1检查目标地址 128.30.33.138是否连接在本网络上
- 是,则直接交付
- 否,交由路由器R1处理
- 将目的地址与自己的子网掩码逐位相与
- 128.30.33.128 AND 255.255.255.128 = 128.30.33.128
- 128.30.33.128 不在 128.30.33.0 子网中,因此交由路由器 R1处理
- 路由器R1查询跳转表
- 发现目标地址128.30.33.128 下一跳为接口1,直接交付
子网划分的特点
- 本质上,允许将一些类别的地址在多个子网内分拆
- 实现多个物理网络共用一个网络地址
- 减少地址空间的浪费
- 互联网络不同部分看到不同的路由,远端只看到单一网络
- 实现路由聚合
- 子网划分在一个(逻辑)网络内部进行
- 便于组织内部网络扩展与管理
构造超网
地址空间的效率和可扩展性问题
某公司网络由4064台主机构成
- 方案一:申请一个B类地址?
- 一个B类地址空间可容纳65534个主机,使用率仅4064/65534 = 6.2%
- 子网划分?依然未解决地址浪费问题
- 方案二:分配16个C类地址?
- 保证了地址利用率
- 路由器超量存储
- 若一个站点分配了16个C类网络号,则每个主干路由器需要增加16条记录才能将分组传送到该站点,尽管路径是相同的
- 如果16个C类地址连续分配
- 所有地址的高20位是相同的
- 将20位作为网络号,路由表中仅需要一个路由表项
无分类域间路由 CIDR
- 无分类域间路由 CIDR (Classless Inter-Domain Routing)
- 打破地址分类的严格界线,网络号为可变长---更有效地分配 IPv4 地址空间
- 仅仅使用转发表中的一条记录来指示如何到达多个不同网络 ---- 路由聚合
- 从(使用子网掩码)三级编址 又回到了无分类的两级编址
- IP地址 = 网络前缀(network prefix) + 主机号
- 使用各种长度的network-prefix来代替分类地址中的网络号和子网号
- 使用“斜线记法”(slash notation),又称为CIDR记法
- 即在 IP 地址后面加上一个斜线“/”,写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)
- 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”
- IP地址 = 网络前缀(network prefix) + 主机号
CIDR地址块
- 193.14.32.0/20 表示的地址块共有 212 个地址
- 网络前缀20位,主机号 12 位
- 地址块范围:193.14.32.0 ~ 193.14.47.255
路由聚合,构成超网
路由聚合
CIDR 地址块可以表示很多地址,这种地址的聚合称为路由聚合
使得路由表中的一个条目可以表示很多个(例如上千个)原来传统分类地址的路由
构成超网(supernetting)
- 如:前缀长度1315的CIDR地址块可能包含了多个B类或C类地址;前缀长度1723
位的 CIDR 地址块都包含了多个 C 类地址
- 这些地址合起来就构成了超网
- 网络前缀越短,其地址块所包含的地址数就越多;而在三级结构的IP地址中,划分子网是使网络前缀变长
- 超网是将多个网络聚合:使属于一个自治系统(AS)多个网络地址映射到一个地址
- 子网是将一个(逻辑)网络拆分:使多个物理网络共享一个网络地址
- 如:前缀长度1315的CIDR地址块可能包含了多个B类或C类地址;前缀长度1723
位的 CIDR 地址块都包含了多个 C 类地址
最长前缀匹配
- 使用 CIDR ,在查找路由表时可能会得到不止一个匹配结果
- 解决方案:最长前缀匹配(longest-prefix matching)
- 又称为最长匹配或最佳匹配
- 从匹配结果中选择具有最长网络前缀的路由
- 网络前缀越长,其地址块就越小,因而路由就越具体(more specific)
最长前缀匹配的路由查找效率
- 最简单的查找算法:对所有可能的前缀进行循环查找
- 对于目的地址D,对每个可能的前缀长度M (1~32, 32为特定主机路由 )
- 提取D中的前M位,与路由表中的网络号匹配
- 最坏情况32次
- 提高路由查找效率
- 线速100Gb/s,分组平均长度2000bits
- 路由器处理能力应达到5000万分组/秒(50Mpps)
- 通过良好的数据结构、快速查找算法
- 线速100Gb/s,分组平均长度2000bits
- 对于目的地址D,对每个可能的前缀长度M (1~32, 32为特定主机路由 )

