一、划分子网

从两级 IP 地址到三级 IP 地址

  • 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
  • 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。

  • 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
  • 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
  • 最后就将 IP 数据报直接交付目的主机。



划分子网后变成了三级结构

  • 当没有划分子网时,IP 地址是两级结构。
  • 划分子网后 IP 地址就变成了三级结构。
  • 划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。

子网掩码

  • 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
  • 使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。

规则是:

  • 子网掩码长度=32位
  • 某位=1:IP地址中的对应位为网络号和子网号
  • 某位=0:IP地址中的对应位为主机号



  • 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
  • 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
  • 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。

子网划分方法

B 类地址的子网划分选择(使用固定长度子网):

举个例子:

已知 IP 地址是 141.14.72.24,子网掩码是 255.255.192.0。试求网络地址。

上例中,若子网掩码改为255.255.224.0,求网络地址。

可以看到结果是相同的,但是不同的掩码的效果是不同的(子网数目和每个子网的主机数不同)。

二、使用子网时分组的转发

  • 在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。
  • 因此分组转发的算法也必须做相应的改动。

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

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

举个例子:

已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。

  • 要发送的分组的目的 IP 地址:128.30.33.138,因此 H1 首先检查主机 128.30.33.138 是否连接在本网络上如果是,则直接交付;否则,就送交路由器 R1,并逐项查找路由表。
  • 主机 H1 首先将 本子网的子网掩码 255.255.255.128 与分组的 IP 地址 128.30.33.138 逐比特相“与”(AND 操作)
  • 因此 H1 必须把分组传送到路由器 R1 然后逐项查找路由表
  • 路由器 R1 收到分组后就用路由表中第 1 个项目的 子网掩码和 128.30.33.138 逐比特 AND 操作

  • 255.255.255.128 AND 128.30.33.138 = 128.30.33.128 不匹配!(因为128.30.33.128 与路由表中的 128.30.33.0 不一致)
  • 255.255.255.128 AND 128.30.33.138 = 128.30.33.128 匹配! 这表明子网 2 就是收到的分组所要寻找的目的网络。