划分子网和构造超网

划分子网和构造超网

划分子网

分类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地址中又增加一个“子网号字段”
    • 从主机号借用若干个位作为子网号 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表中添加子网掩码

划分子网情况下路由器转发分组的算法

  1. 从数据报的首部提取目的主机的 IP 地址 D
  2. 本结点的各个网络的子网掩码与D逐位相与,看是否与相应的网络地址匹配:匹配,则将分组直接交付;否则是间接交付,执行 3
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 4
  4. 对路由表中的每一行的子网掩码和 D 逐位相与,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 5
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 6
  6. 报告转发分组出错(ICMP,目的不可达)

例子

image-20231028200243639
  1. 主机H1检查目标地址 128.30.33.138是否连接在本网络上
    • 是,则直接交付
    • 否,交由路由器R1处理
  2. 将目的地址与自己的子网掩码逐位相与
    • 128.30.33.128 AND 255.255.255.128 = 128.30.33.128
    • 128.30.33.128 不在 128.30.33.0 子网中,因此交由路由器 R1处理
  3. 路由器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 地址块”

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)多个网络地址映射到一个地址
      • 子网是将一个(逻辑)网络拆分:使多个物理网络共享一个网络地址

最长前缀匹配

  • 使用 CIDR ,在查找路由表时可能会得到不止一个匹配结果
  • 解决方案:最长前缀匹配(longest-prefix matching)
    • 又称为最长匹配或最佳匹配
    • 从匹配结果中选择具有最长网络前缀的路由
      • 网络前缀越长,其地址块就越小,因而路由就越具体(more specific)

最长前缀匹配的路由查找效率

  • 最简单的查找算法:对所有可能的前缀进行循环查找
    • 对于目的地址D,对每个可能的前缀长度M (1~32, 32为特定主机路由 )
      • 提取D中的前M位,与路由表中的网络号匹配
      • 最坏情况32次
    • 提高路由查找效率
      • 线速100Gb/s,分组平均长度2000bits
        • 路由器处理能力应达到5000万分组/秒(50Mpps)
      • 通过良好的数据结构、快速查找算法