Loading [MathJax]/jax/output/SVG/jax.js
MENU

网络层(四)划分子网

November 18, 2018 • Read: 10617 • 计算机网络阅读设置

引言展开目录

子网掩码(Subnet Mask)又叫网络掩码、地址掩码,它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和主机地址两部分

子网掩码的作用展开目录

利用子网掩码可以计算某 IP 地址所在网段
同一个网段的中的计算机子网掩码相同,计算机的网关就就是到其他网段的出口,也就是路由器接口地址。路由器接口使用的地址可以是本网段中任何一个地址,不过通常使用该网段的第一个可用的地址或最后一个可用的地址,这是为了尽可能避免和网络中的计算机地址冲突

分类 IP 地址编址方式的弊端展开目录

今天看来,在 ARPANET 的早期,IP 地址的设计确实不够合理,有以下三点原因:

IP 地址空间利用率低展开目录

每一个 A 类地址网络可连接的主机数超过 1000 万台、而每一个 B 类网络可连接的主机数也超过 6 万台。然而有些网络对连接在网络上计算机数目有限制,根本达不到这样的数值。例如以太网 10BASE-T 规定其最大节点数只有 1024 个。另外有些单位考虑今后发展,会尽量申请 B 类地址,而非一个足够用的 C 类地址。IP 地址的浪费,还会使 IP 地址空间的资源过早地被用完

路由表太大降低网络性能展开目录

每一个路由器都应当能够从路由表查处应怎样到达其他网络的下一跳路由器。因此,互联网中的网络数越多,路由器的路由表项目数越多,这样,即便我们拥有足够多的 IP 地址资源可以给每一个物理网络分配一个网络号,也会导致路由器中路由表中的项目数过多。这样不仅增加了路由器的成本(要求更多存储空间),而且使查找路由表耗时更多,同时使路由器之间定期交换路由信息量急剧增加,使路由器和整个因特网性能下降

两级 IP 地址不够灵活展开目录

有时情况紧急,一个单位需要在新的地点马上开通一个新的网络。但是在申请到一个新的 IP 地址之前,新增加的网络是不可能连接到因特网工作的。我们希望有一种方法,使一个单位能够随时灵活地增加本单位的网络,而不必事先到因特网的管理机构去申请新的网络号。原来的两级 IP 地址无法做得到这一点

划分子网的基本思路展开目录

为解决上述问题,从 1985 年起在 IP 地址中又增加了一个 “子网号字段”,使两级 IP 地址变成为三级 IP 地址,它能够较好的解决上述问题,并且使用起来很灵活,这种做法叫作划分子网(subnetting),或子网寻址子网路由选择。划分子网已成为因特网正式标准协议

思路展开目录

  1. 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网(subnet)划分子网纯属一个单位内部的事情,本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络
  2. 划分子网的办法是从网络的主机号借用若干位作为子网号 subnet,当然主机号也就减少了相应的位数。于是两级的 IP 地址在本单位内部就变成了三级 IP 地址:网络号、子网号、主机号。也可以用 IP地址 ::= {<网络号>, <子网号>, <主机号>} 来表示
  3. 凡是从其他网络发送到本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号找到本单位网络上的路由器。但此路由器在收到 IP 数据报后,再按目的网络号和子网号找到目的子网,把 IP 数据报交付目的主机

例子展开目录

下图表示某单位拥有一个 B 类 IP 地址,网络地址是 145.13.0.0(网络号是 145.13)。凡目的地址为 145.13.x.x 的数据报都被送到这个网络上的路由器 R1
现在把上图的网络划分为三个子网(下图)。这里假定子网号占用 8 位,因此在增加了子网号后,主机号只有 8 位。所划分的三个子网分别是:145.13.3.0、145.13.7.0 和 145.13.21.0。在划分完子网后,整个网络对外部仍然表现为一个网络,其网络地址仍为 145.13.0.0。网络 145.13.0.0 上的路由器 R1 在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网
概括讲,当没有划分子网时,IP 地址是两级结构,划分子网后 IP 地址变成了三级结构。划分子网只是把 IP 地址的主机号这部分进行再划分,而不改变 IP 地址原来的网络号

子网划分的实现 —— 子网掩码展开目录

子网掩码引入展开目录

现在剩下的一个问题就是:假定有一个数据报(其目的地址是 145.13.3.10)已经达到了路由器 R1。那么这个路由器如何把它转发到子网 145.13.3.0 呢?我们知道,32 位的 IP 地址本身及数据报首部都没有包含任何关于子网划分的信息,因此从 IP 数据报的首部是无法看出源主机或目的主机所连接的网络是否进行了子网的划分。必须,另想办法,这就是使用子网掩码(subnet mask)
图中第一行,IP 地址为 145.13.3.10 的主机本来是两级 IP 地址结构,第二行是同一地址的三级 IP 地址结构,也就是说现在从原来的 16 位主机号中拿出 8 位作为子网号,而主机号由 16 位减小到 8 位。现在子网号为 3 的网络地址为 145.13.3.0,不同于原来两级 IP 地址的网络地址 145.13.0.0

表示 R1 把三级 IP 地址的子网掩码和收到的数据报的目的 IP 地址 145.13.3.10 逐位相与,得出了所要找的子网的网络地址 145.13.3.0

使用子网掩码的好处就是:不管网络有没有划分子网,只要把子网掩码和 IP 地址进行逐位于运算,就立即得出网络地址来,这样在路由器处理到来的分组时就可以采用同样的算法

从网络 145.13.0.0 外面看,这就是一个普通的 B 类网络,其子网掩码为 16 个 1 后面跟上 16 个 0。但进入这个网络内部后(即到了路由器 R1),就看到了还有许多网络(即划分了子网后的许多网络),其网络地址是 145.13.x.0(这里 x 表示不同的数值),而这些网络的子网掩码都是 24 个 1 和 8 个 0。总之,这个 B 类网络的外部和里面,看到的网络是不一样的。其实就好像路标,到具体十字路口,再具体标明该去哪个乡镇。这里只有到 R1, 存储三级子网掩码才有意义

默认的子网掩码展开目录

在不划分网络时,既然没有子网,为什么还有使用子网掩码?这就是为了便于查找路由表。现在因特网标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。默认子网掩码中 1 的位置和 IP 地址中的网络号字段 net-id 正好相对应。因此,若使用默认子网掩码和某个不划分子网的 IP 地址逐位相 “与”(AND),就应当能够得出该 IP 地址的网络地址来

其他划分方式展开目录

由于是由主机号中拿出一部分,构成子网号,故若使用较少位数的子网号,则每一台子网上可连接的主机数就多。若使用位数较多的子网号,则子网数目较多,但是每个子网上可连接的主机数就少。因此,我们可以根据网络的具体情况,选择合适的子网掩码。

我们以一个 B 类网络为例,说明有多少种子网划分的方法。在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的
在上图中,子网数是根据子网号 subnet-id 计算出来的,若 subnet-id 有 n 位,则共有 2n 种可能的排列,除去全零和全 1 这两种情况,就得出表中的子网数。另外计算每个子网中主机数为 216n2

判断 IP 地址所属的网段展开目录

IP 地址中主机位归 0 就是该主机所在的网段。

判断 192.168.0.101/26 所属的子网。
判断 192.168.0.101/27 所属的子网

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

当划分子网后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。在划分分组情况下,路由器转发分组的算法如下:

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

* 超网合并网段展开目录

某企业有一个网段,该网段有 200 台计算机,使用 192.168.0.0/24 网段,后来计算机数量增加到 400 台
有没有更好的办法,让这两个 C 类网段的计算机认为在一个网段?这就需要将 192.168.0.0/24 和 192.168.1.0/24 两个 C 类网络合并

判断两个子网能否合并展开目录

实际上任何两个子网都能合并,只要使其与设置好的子网掩码相 “与” 得到的结果相同即可,这里所说的 “能否合并”,更准确的定义应该是能否在只包含这些子网的情况下合并,举个例子,192.168.0.0192.168.1.0 就能刚好合并,设置子网掩码为 255.255.254.0,但是 192.168.1.0192.168.3.0 能否合并呢?

首先写出 13 的八位二进制表示

  • 1 -> 00000001
  • 3 -> 00000011

如果要这两个子网合并,需要设置子网掩码为 11111111 11111111 11111100 00000000,但是这样一来,192.168.1.0192.168.1.2 也和他俩同一网段了,所以 192.168.1.0192.168.3.0 不能合并

结论:判断连续的 2 个网段是否能够合并,只要第一个网络号能被 2 整除,就能够通过左移 1 位子网掩码合并

网段合并的规律展开目录

子网掩码左移 1 位能够将能够合并两个网段,左移 2 位,能够合并四个网段,左移 3 位,能够合并 8 个网段

判断一个网段是超网还是子网展开目录

通过左移子网掩码合并多个网段,右移子网掩码将一个网段划分成多个子网,使得 IP 地址打破了传统的 A 类、B 类、C 类的界限

判断一个网段到底是子网还是超网,就要看该网段是 A 类网络、还是 B 类网络、还是 C 类网络,默认 A 类子网掩码 / 8,B 类子网掩码是 / 16,C 类子网掩码是 / 24

如果该网段的子网掩码比默认子网掩码长,就是子网,如果该网段的子网掩码比默认子网掩码短,则是超网

思考展开目录

  • 12.3.0.0/16 这是 A 类网络还是 C 类网络呢?是超网还是子网呢?

IP 地址的第一部分是 12,这是一个 A 类网络,A 类地址默认子网掩码是 / 8,该网络的子网掩码是 / 16,比默认子网掩码长,所以说这是 A 类网的一个子网

  • 222.3.0.0/16 这是 C 类网络还是 B 类网络呢?是超网还是子网呢?

IP 地址的第一部分是 222,这是一个 C 类网络,C 类地址默认子网掩码是 / 24,该网络子网掩码是 / 16,比默认子网掩码短,所以这是 C 类网的一个超网

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 阿鲁
  • 颜文字

4 Comments
  1. Capella Capella

    水一下,默默走人。。话说 WordPress 没有 QQ 头像的接口,要搞这个得自己写,然而不会 PHP 好伤。。

    1. mathor mathor

      @Capella 不光头像,我还有评论邮件提醒功能

    2. Capella Capella

      @mathor666

  2. 1111111 1111111

    不错