目录

前言
Network ID
Subnet Mask 子网络遮罩
Supernet
VLSM 可变长子网路遮罩
Private IP Address

前言

什麽是 IP Address 网络位址呢?相信就算对网络认识不深的朋友都知道,IP Address 就是一台电脑在网络上的地址。网络供应商甚至可以凭 IP Address 知道电脑的物理位置,就像香港 TVB 剧集一样,那些警探只要查到坏人的 IP Address 便立刻知道坏人的所在位置,衝上门拉人。另外我们在电脑除了看到 IP Address 外,还有 Subnet Mask 子网络遮罩,这又是什麽呢?本篇教学会详细讲解。

ipv4

Network ID

现在一般使用的 IP (Internet Protocol) 为版本 4,又称为 IPv4。IPv4 的 IP Address 由 32 位元组成,即 32 个 1 和 0,例如: 00001011110000100011111101100100,很明显,这只适合机器阅读,人类很难理解,於是我们便把 32 位元的 IP Address 分成 4 组,每组之间用一点隔开: 00001011.11000010.00111111.01100100,然後把每一组分别转换成十进数,所以这串 IP Address 就变成我们常见的格式: 11.194.63.100。理论上,任何一台连上网络的电脑、电话、平板电脑、隐闭镜头等等都要有一个独一无二的 IP Address,如果我的电脑需要与对方的电脑沟通,就必需要知道对方的 IP Address。问题是,我的电脑并不是和对方的电脑直接连线,我知道对方的 IP Address 之後又如何和对方沟通呢?答案是 Router 路由器,网络上有很多 Router 负责传送讯息。

Router 的责任是记录 IP Address 的和相应的接驳位置,当有讯息传来时,就按目的地位置把讯息交给另一只 Router,直至讯息传到目的地为止,有点像快递公司,收到快件後就由速递人员拿到最近的收发站,收发站的职员又把快件送到另一个最近目的地的收发站,如此类推,直至送到收件者手上。

ipv4

ipv4

当然这个例子只是电脑网络的一个浓缩版本,世界上有成千上万的 Router 去应付百万千万台电脑。问题来了,用以上这个方法,Router 岂不是要记录百万千万台电脑的 IP Address 和相对位置?(事实上有更多),例如 R1 除了要记著 167.42.36.12 和 5.90.13.28 在那里,还要记著 167.24.23.53、167.63.75.112、167.69.54.167、5.12.43.83、5.90.36.13......等等百万千万台电脑的 IP Address 纪录,这太为难 Router 了,於是我们想到了一个方法,就是尽量把头一组数字相同的电脑放在一起,这样,Router 只要纪录同一推电脑的第一组数字的位罝而不需要纪录世界上每一台电脑的 IP Address,这就成了网络的雏形。

ipv4

要用这个方法,我们就可把 IP Address 有系统地分派给不同公司或组织,这样 Router 就可以有效率地把目的地位置记录。为了清楚分辨,我们把首 8 Bits 称为 Network ID,尾 24 Bits 称为 Host ID。例如: 11.194.63.100,11 就是 Network ID,而 194.63.100 就是 Host ID。

00001011.11000010.00111111.01100100
Network ID                   Host ID

Network ID 也有另一个表示方法,就是把後面的部份写成 0,如: 11.0.0.0。

不过仔细计算一下,同一个 Network ID 之下的 IP Address 加起来有多少个呢?例如: 第一组数字是 11 的 IP Address 一共有多少个?

11.X.X.X  => 00001011.XXXXXXXX.XXXXXXXX.XXXXXXXX

不同的可能性有 2 的 24 次方,即 16,777,216 个可能性,於是,得到 11.0.0.0 这个网络的公司便可拥有一千六百多万个设备连上网络,如果是超大型公司如 Microsoft 或 IBM 这类当时的电脑强人还好,但如果是分派给小公司的话就似乎有点浪费。

另一方面,由 0 字头至 255 字头就只能分配给 256 家公司或组织,这肯定不够。於是当时的电脑专家决定把这样大的网络再分得细一点,他们的构思是这样的,想想看,如果把 Network ID 位元增加,Host ID 位元自然会减少,这样子, 一个网络所容纳的 IP Address 数量就会减少。例如:把 Network ID 增加至 16 Bits,Host ID 就会减少至 16 Bits,则 IP Address 数量就会减少至 2^16 = 65,536,但网络数量却会增加至 65,536。这就可以提供更多较小的网络给更多公司使用。就是这样,我们按 Network ID 的长度分成叁个不同的类别,分别是 Class A,Class B 和 Class C。

Class A

Network ID 首 Bit 为 0 的话,就拿首 8 Bits 做 Network ID,每个 Class A 容纳 2^24 = 16,777,216 个 IP Address。

Class B

Network ID 首两 Bits 为 10 的话,就拿首 16 Bits 做 Network ID,每个 Class B 容纳 2^16 = 65,536 个 IP Address。

Class C

Network ID 首三 Bits 为 110 的话,就拿首 24 Bits 做 Network ID,每个 Class C 容纳 2^8 = 256 个 IP Address。

ClassNetwork IDNetwork ID 长度Host ID 长度IP 位址数量
A 0XXXXXXX 8 24 16,777,216
B 10XXXXXX.XXXXXXXX 16 16 65,536
C 110XXXXX.XXXXXXXX.XXXXXXXX 24 8 256

我们也可以知道一个网络的 IP Address 範围,例如:11.0.0.0 这个网络,因为这是一个 Class A 的网络,Network ID 是 00001011,因此 00001011.XXXXXXXX.XXXXXXXX.XXXXXXXX 全部都属於这个网络,即是由 11.0.0.0 至 11.255.255.255 这些 IP Address 都属於此网络。

现在来学些名词,用这种方法分类的网络称为 Classful Network,而支缓 Classful Network 的 Routing Protocol 称之为 Classful Routing Protocol,例如: RIPv1 和 IGRP。

Subnet Mask 子网络遮罩

Classful 这个方法不错呀!还有什麽问题?话说,网络发展一日千里,要求接上网络的公司或组织越来越多,Network ID 很快又供不应求,此时电脑专家又出来了,他们又想到一个方法把这些 Class A、B 和 C 的 Network,切割成较细的网络去使用,称之为 Subnet 子网络。既然我们知道调校 Network ID 的长度可以调整 Network 的大小,那为何要规限只有 8、16 和 24 这叁种长度呢?让大家自由调校理想的长度不是更好吗?

比方说,200.52.62.0 (11001000.00110100.00111110.00000000) 这个 Class C 的 Network,Network ID 长度是 24,可容纳 256 个 IP Address,但如果把 Network ID 增加至 25,这个 Network 即可被切割成 2 个可容纳 128 个 IP Address 的 Network!

ClassNetwork IDNetwork ID 长度Host ID 长度IP 位址数量
原网络 11001000.00110100.00111110 24 8 256
子网络 A 11001000.00110100.00111110.0 25 7 128
子网络 B 11001000.00110100.00111110.1 25 7 128

所以子网络 A 所包含的 IP Address 是 11001000.00110100.00111110.0XXXXXXX
即是: 200.52.62.0 至 200.52.62.127

而子网络 B 所包含的 IP Address 是 11001000.00110100.00111110.1XXXXXXX
即是: 200.52.62.128 至 200.52.62.255

这般随心随意确是有型,但问题是,Classful Address 的规则已经崩坏!现在我们已无法凭 IP Address 的 Class 去知道 Network ID 的长度,也就没法知道 Network ID,怎麽辨?Subnet Mask 子网络遮罩来打救我们了,只要在 IP Address 後面加上一个 Subnet Mask,让大家可以藉此计算出 Network ID。Subnet Mask 同样为 32 Bits,再引用刚刚的例子,子网络 A 的 Network ID 长度为 25,把它变成 25 个 1,然後补上 7 个 0,因此 Subnet Mask 为 11111111.11111111.11111111.10000000,以十进数表示的话就是 255.255.255.128。如果要表示子网络 A 里面的一个 IP Address 200.52.62.86,就要连同 Subnet Mask 一併写出来,200.52.62.86 / 255.255.255.128。

要计算 Network ID,第一步是把 IP Address 和 Network Mask 变成二进数,然後把他们 "AND" 起来。

IP Address 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 0 0 1 1 1 0 0 0
Subnet Mask 
1 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
Network ID 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 0 0 0 0 0 0 0 0

得出 Network ID = 200.52.62.0

另一个例子:200.52.62.136 / 255.255.255.128

IP Address 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 1 0 0 0 1 0 0 0
Subnet Mask 
1 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
Network ID 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 1 0 0 0 0 0 0 0

得出 Network ID = 200.52.62.128

Subnet Mask 除了可以用二进位或十进位表示,还有另一个更加方便的表示方式,就是直接写出 Subnet Mask 的 Bit 1 数量,例如: 255.255.255.0 变成二进数的话一共有 24 个 1,就直接写成 /24,如果是 255.252.0.0 就写成 /14,非常方便,这种表示方式称为 Prefix。在香港,/24 用广东话会说成「骑」24,在中国大陆或台湾我就不知道怎样叫,如果你知道的话请告诉我。

Supernet

除了把网络切割成细小的子网络,反过来说,我们也可把 Network 组合成一个更大的 Network,称为 Supernet。例如: 现在我们有四个相邻的网络,16.2.64.0 / 255.255.255.0、16.2.65.0 / 255.255.255.0、16.2.66.0 / 255.255.255.0 和 16.2.67.0 / 255.255.255.0,要把它们合併,方法很简单,首先把 IP Address 改成二进数:

00010000.00000010.01000000.00000000
00010000.00000010.01000001.00000000
00010000.00000010.01000010.00000000
00010000.00000010.01000011.00000000

请留意 Network ID 部份 (即首 24 Bits 中),其中首 22 Bits 都是相同的,换句话说,如果我们把 Network ID 缩短至 22 Bits,即可包含这 4 个网络,所以把这 4 个网络合併起来的 Network ID 将是: 00010000.00000010.01000000.00000000 亦即 16.2.64.0,而 Subnet Mask 是 22 Bits,即是 255.255.252.0。

VLSM 可变长子网路遮罩

这种自由自在可加可减的 Subnet Mask 长度又可称为 VLSM Variable Length Subnet Masking (可变长子网路遮罩),用了 VLSM 的 Network 称为 Classless Network,而支缓 Classless Network 的 Routing Protocol 称之为 Classless Routing Protocol,例如: OSPF 和 EIGRP。

不过有一件事要特别注意,就是每个网络中的第一个 IP Address 为 Network ID,不可使用,而最最後一个 IP Address 是 Broadcast Address 也不可使用。设定 VLSM 时要留意网络必需可容纳多於 2 个 IP Address 才有用,所以最小的 Subnet Mask 为 /30,/31 和 /32 是没有意义的。

Subnet MaskPrefixIP 数量实际可使用 IP备注
255.255.255.252 /30 4 2  
255.255.255.248 /29 8 6  
255.255.255.240 /28 16 14  
255.255.255.224 /27 32 30  
255.255.255.192 /26 64 62  
255.255.255.128 /25 128 126  
255.255.255.0 /24 256 254 传统 Class C
255.255.254.0 /23 512 510  
255.255.252.0 /22 1,024 1,022  
255.255.248.0 /21 2,048 2,046  
255.255.240.0 /20 4,096 4,094  
255.255.224.0 /19 8,192 8,190  
255.255.192.0 /18 16,384 16,382  
255.255.128.0 /17 32,768 32,766  
255.255.0.0 /16 65,536 65,534 传统 Class B
255.254.0.0 /15 131,072 131,070  
255.252.0.0 /14 262,144 262,142  
255.248.0.0 /13 524,288 524,286  
255.240.0.0 /12 1,048,576 1,048,574  
255.224.0.0 /11 2,097,152 2,097,150  
255.192.0.0 /10 4,194,304 4,194,302  
255.128.0.0 /9 8,388,608 8,388,606  
255.0.0.0 /8 16,777,216 16,777,214 传统 Class A
254.0.0.0 /7 33,554,432 33,554,430  
252.0.0.0 /6 67,108,864 67,108,862  
248.0.0.0 /5 134,217,728 134,217,726  
240.0.0.0 /4 268,435,456 268,435,454  
224.0.0.0 /3 536,870,912 536,870,910  
192.0.0.0 /2 1,073,741,824 1,073,741,822  
128.0.0.0 /1 2,147,483,648 2,147,483,646  
0.0.0.0 /0 4,294,967,296 4,294,967,294  

Private IP Address

最後还有一个要点要留意的,就是有些 IP Address 是保留用作测试或在内联网中使用,这些 IP Address 在 Internet 上是不会被处理的。或许大家对这些 IP Address 都已经耳熟能详:

10.0.0.0 - 10.255.255.255 (共 16,777,216 IP Address)
172.16.0.0 - 172.31.255.255 (共 1,048,576 IP Address)
192.168.0.0 - 192.168.255.255 (共 65,536 IP Address)

由於国际网络上的路由器不会处理这些 IP Address,所以如果正在使用 Private IP Address 的内联网内的电脑想与世界沟通,必需透过一个叫做 NAT (Network Address Translation) 的步骤把 Private IP Address 转换成 Public IP Address。一个十分普遍例子就是家用的无线网络分享器,家中电脑透过 Private IP Address 与 Router 连接,Router 把 Private IP Address 转换成 Public IP Address 与 Internet 上的电脑连线。

ipv4

图片来源