在 TCP/IP 体系中,IP 地址是一个基本概念。
每一个联网的设备都有一个自己的 IP 地址,类似于现实中快递单上的快递地址的作用。
IP地址的表示
一般情况下,我们讨论的 IP 地址是一串 32 位的二进制数字(IPv4 协议下的,IPv6 协议下的会更长128 位)。
比如:
10000000 00001011 00000011 00011111
表示一个 IP 地址。
通过计算,可以发现 32 位的 IP 地址有 2^32
(大约是 43 亿)个。
为了方便人类记忆和交流,增强可读性,我们会每隔 8 位放一个点隔开(8 位等于 1 字节,因此这样分隔是很合理的),这样 32 位的 IP 地址就划分为 4 段。
再将每一段转化为我们人类习惯使用的十进制数字。最后的 IP 地址表示为 4 个十进制的数字以点隔开。
这就是 点分十进制记法(dotted decimal notation)。
例如,上述的数字可根据此转化成:128.11.3.31
。
进制转换计算:
懒人可以使用计算器大法
我们在电脑召唤计算器(win+r=>
cmd=>
calc),切换到程序员模式,使用方法举例如下:
DEC表示十进制,BIN表示二进制。
每个都算完的结果:
10000000 => 128
00001011 => 11
00000011 => 3
00011111 => 31
目前通用的是IPv4协议,因此,一般我们讨论的 IP 地址按照 32 位(4个字节)。
网络号 子网号 主机号
除此以外,我们还会经常看到类似于 255.255.255.0
192.168.2.1/20
等格式的数字,它们有何含义?
IP地址虽说是一串 32 位的数字,但根据其含义和作用,IP的组成可划分为两级结构。
IP ::={<网络号>,<主机号>}
(::=
表示“定义为”)这是互联网发展早期采用的分类编址方式,IP地址划分成ABCDE五类。ABC是单播地址,A类地址网络号是前8位,B类地址网络号是前18位,C类地址的网络号是前24位。但这种编址方式造成IP地址分配不合理而浪费的结果。(0
开头属于A类,10
开头属于B类,110
开头属于C类)
后来就流行了无分类编址CIDR方式,他把<主机号>进一步划分成<子网号>+<主机号>,把<网络号>和<子网号>并在一块,合成<网络前缀>。
稍微详细一点的介绍可以参考下面的链接:
IP 地址和子网掩码(从分类编址到无分类编址CIDR)
更具体的知识可查找教材或搜索相关资料。
这样一来,就有了:IP ::={<网络前缀>,<主机号>}
。
而网络号,子网号,主机号之间的划分界限,则是通过子网掩码(或斜线记法斜线/
后面的数字)以及各类 IP 定义得出的。
我们还需要知道的是,主机号全0表示该主机的网络地址,主机号全1表示该网络的广播地址,这两个地址都是保留的,不可指派使用。
例题
下面举个例子:
以 C类IP地址: 210.2.2.0
,子网掩码:255.255.255.224
为例:
210.2.2.0 ============== 11010010.00000010.00000010.00000000
255.255.255.224 ======== 11111111.11111111.11111111.11100000
该IP地址是110
开头,因此它属于C类IP地址,前24位是网络号。通过子网掩码发现,它有27个1,因而其网络前缀是27位,子网号就是 27-24=3
位。剩余的5位就是主机号了。
按位AND进行运算(和1对齐的保留数字,和0对齐的变为0) 。
得到:
C 类网络地址==============11010010.00000010.00000010.00000000
但是其作为主网络地址,不可指派给用户使用,除此以外,主网络广播地址也不可指派。(容易引发二义性)
参考:子网号能不能为全0或全1
子网号有 3 位,减去主网络的网络地址和广播地址,可用子网数量为:2^3-2 =6
个。
主机号有 5 位,减去全 0 和全 1 的情况,每个子网可用主机数为:2^5-2 = 30
个。
我们讨论第一个和最后一个子网地址:
第一个(可用)子网:
网络地址 =============
11010010.00000010.00000010.00100000
广播地址 =============11010010.00000010.00000010.00111111
第一可用IP地址 ========11010010.00000010.00000010.00100001
最后一个可用IP地址=====11010010.00000010.00000010.00111110
最后一个(可用)子网:
网络地址 ===============
11010010.00000010.00000010.11000000
广播地址 ===============11010010.00000010.00000010.11011111
第一可用IP地址 ==========11010010.00000010.00000010.11000001
最后一个可用IP地址 =======11010010.00000010.00000010.11011110
总结:
- 主机号全0表示网络地址,全1表示广播地址。
- 分类编址下的可用子网数量需要舍去子网号全0和全1的情况。
- 无分类编址CIDR下的可用子网数量则无需考虑子网号全0和全1的情况。