目前只考虑 IPv4 的情况.
1. 基本概念
IP 地址是一个 4 字节(32 位)的数据, 通常按每字节分成 4 段, 表示成类似于 192.168.0.1
的格式, 写成 16 进制是 C0.A8.00.01
, 二进制是: 11000000.10101000.00000000.00000001
.
- | 第一节 | 第二节 | 第三节 | 第四节 | 写出来 |
10 进制 | 192 | 168 | 0 | 1 | 192.168.0.1 |
16 进制 | C0 | A8 | 00 | 1 | C0.A8.00.01 |
2 进制 | 11000000 | 10101000 | 00000000 | 00000001 | - |
在这些地址当中, 全为 1 的为 广播地址 , 用于向所在网络的所有主机发送报文.
- | 第一节 | 第二节 | 第三节 | 第四节 | 写出来 |
10 进制 | 255 | 255 | 255 | 255 | 255.255.255.255 |
16 进制 | FF | FF | FF | FF | FF.FF.FF.FF |
2 进制 | 11111111 | 11111111 | 11111111 | 11111111 | - |
全为 0 的为 本网络地址 .
- | 第一节 | 第二节 | 第三节 | 第四节 | 写出来 |
10 进制 | 0 | 0 | 0 | 0 | 0.0.0.0 |
16 进制 | 00 | 00 | 00 | 00 | 00.00.00.00 |
2 进制 | 00000000 | 00000000 | 00000000 | 00000000 | - |
第一节为 127 的为 回送地址 , 其中的主机地址, 表示主机自己(无网络传输).
- | 第一节 | 第二节 | 第三节 | 第四节 | 写出来 |
10 进制 | 127 | 0 | 0 | 1 | 127.0.0.1 |
16 进制 | 7F | 00 | 00 | 01 | 7F.00.00.01 |
2 进制 | 01111111 | 00000000 | 00000000 | 00000001 | - |
127.0.0.0
是表示的网地址, 不是主机地址.
2. 网地址和主机地址
IP 地址当中, 有一层逻辑的划分, 就是 网地址 和 主机地址 . 前面一部分 N 位表示一个网, 后面剩下的表示网中的一台主机.
比如: 192.168.0.1
, 如果你把 192
看成是网地址, 那么剩下的 168.0.1
就是主机地址. 你把 192.168
规定是网地址, 那么剩下的 0.1
就是主机地址. 这个划分是人为定的规则, 表示这个规则的, 是 子网掩码 , 用以标示出 网地址 . 比如如果你是前两节为子网, 对应的子网掩码就是 255.255.0.0
.
- | 第一节 | 第二节 | 第三节 | 第四节 | 写出来 |
IP 10 进制 | 192 | 168 | 0 | 1 | 192.168.0.1 |
IP 2 进制 | 11000000 | 10101000 | 00000000 | 00000001 | - |
掩码 10 进制 | 255 | 255 | 0 | 0 | 255.255.0.0 |
掩码 2 进制 | 11111111 | 11111111 | 00000000 | 00000000 | - |
IP & 掩码 | 11000000 | 10101000 | 00000000 | 00000000 | 192.168.0.0 |
IP & 掩码
得到的就是网地址. 网段 IP 的第一个地址是网地址 , 网段 IP 的最后一个地址是广播地址 , 这两个地址是特殊的, 不分配给主机.
对于 IP , 192.168.0.1
, 如果掩码是 255.255.0.0
, 则它对应的网地址是 192.168.0.0
, 此网的广播地址是 192.168.255.255
.
对于 192.168.0.1
, 如果掩码是 255.255.255.0
, 则它对应的网地址是 192.168.0.0
, 此网的广播地址是 192.168.0.255
.
把一个 IP 中的哪部分定义成网地址, 哪部分定义成主机地址, 有一个影响, 就是在 IP 地址中所能表示的 网数量 和 主机数量 是不同的. 直观地不考虑一些特殊地址的情况下, IP 一共只有 32 位, 你用 8 位表示网, 那剩下的 24 位表示主机. 这种情况下, 网数量最大是 511 ( 2 ^ 9-1
) , 主机数量最大有 33554431 ( 2 ^ 25 - 1
) .
3. IP地址的分类
前面讲了 网地址 和 主机地址 的概念, 按 网地址 所占位数的不同, IP 地址整个被分成了 A, B, C, D, E 五类. D, E 类特殊, 我们主机会被分配到的地址是 A, B, C 类中的一种.
每类地址在其 网地址 部分都有额外格式规定, 以显示地表明这是哪一类的地址. 否则就会出现前面我们对于 192.168.0.1
这个地址的看法问题, 网地址 占几位是我们自己定的.
一共有 5 类地址, 直观地, 2 ^ 2 = 4
, 2 ^ 3 = 8
, 我们使用三位地址就可以区分它们了, 000, 001, 010, 011, 100. 但是这种平均分的方式, 对于 A 类地址这种, 消耗太大, 它一共网地址就只有 8 位可用, 标示就占去了 3 位, 肯定尴尬啊. 于是就用上了 进位两分 的方式.
种类 | 第一位 | 第二位 | 第三位 | 第四位 |
---|---|---|---|---|
A | 0 | - | - | - |
B | 1 | 0 | - | - |
C | 1 | 1 | 0 | - |
D | 1 | 1 | 1 | 0 |
E | 1 | 1 | 1 | 1 |
这种分法不是最有效率的, E 类要 4 位才能区分. 但是却是对短的网地址分类更有利, A 类只占用了一位网地址空间.
每类 IP 对网地址的表示定义.
分类 | 网地址位数 | 主机地址位数 | 十进制 | 二进制 |
---|---|---|---|---|
A | 8 | 24 | 10.10.0.1 | 00001010.00001010.00000000.00000001 |
B | 16 | 16 | 172.16.0.1 | 10101100.00010000.00000000.00000001 |
C | 24 | 8 | 192.168.0.1 | 11000000.10101000.00000000.00000001 |
3.1. A类地址
A 类地址使用 8 位空间表示网地址, 24 位表示主机地址. 网地址以 0 起始作为标示. 剩下能用来网地址有 7 位空间. 所以 A 类地址的网数总数量上能有 2 ^ 7 = 128
个.
A 类地址的 128 个网中, 有两个是特殊的, 0.0.0.0
的 0 网, 127.0.0.1
的 127 网. 所以实际可用的 A 类地址中, 有 126 个网.
A 类地址有 24 位的主机地址空间, 单网下的主机数量有 2 ^ 24 = 16777216
个, 除去第一个表示网本身的地址, 和最后一个用于广播的地址, 可用的主机地址有 16777214 个.
3.2. B类地址
B 类地址使用 16 位的网地址, 16 位的主机地址. 网地址以 10 起始作为标示. 剩下 14 位的网地址空间. B 类地址的网的总数量有 2 ^ 14 = 16384
个. 主机空间 16 位, 则单网的主机数量最多有 2 ^ 16 - 2 = 65534
个.
3.3. C类地址
C 类地址使用 24 位网地址, 8 位的主机地址. 网地址以 110 起始作为标示. 剩下 21 位网地址空间. C 类地址的网的总数量有 2 ^ 21 = 2097152
个. 主机空间 8 位, 单网主机数量 2 ^ 8 - 2 = 254
个.
3.4. D类和E类
D 类地址用于多点广播, 用于一次寻址一组主机.
E 类地址目前保留.
4. 网段表示方法
有时我们需要表示一段的 IP , 直观地, 可能会想到的形式是, 192.168.0.*
, 表示的网段是192.168.0.0 ~ 192.168.0.255
. 但是这种在十进制形式上表示的做法, 和 IP 的数据本质是有一些不匹配的. IP 的数据是 32 位二进制位, 我们只是为了方便可以写成 4 节十进制的形式. 但是在实际使用中, 我们自己规划的网络环境下, 网地址的位数不一定就是 8 的整数倍. 如果我们希望表示的 IP 段是, 前 6 位是 011111
, 后 26 位随意, 那按前面的 *
的形式就无能为力了.
于是, 我们使用 124.0.0.0/6
的形式来表示 "固定前 6 位". 这种情况通常是前 6 位作为网地址(和 IP 是哪类没关系).
- | 第一节 | 第二节 | 第三节 | 第四节 | 写出来 |
---|---|---|---|---|---|
第一个地址 | 01111100 | 00000000 | 00000000 | 00000000 | 124.0.0.0 |
最后一个地址 | 01111111 | 11111111 | 11111111 | 11111111 | 127.255.255.255 |
5. 私有地址
IP 地址是有限的, 而且每个设备很多时候都是需要一个 IP 地址的. 但是, 并不是所有设备都需要接入互联网. 为了规范 IP 地址的使用, 使那些私网自己分配的 IP 地址不和那些互联网公网 IP 地址冲突, 在 IP 地址的协议上, 每类 IP 中都预留了一段地址供私网自己使用, 这些地址不进行公开的分配.
这三段地址是:
类型 | 网段 | 范围 |
---|---|---|
A | 10.0.0.0/8 |
10.0.0.0 ~ 10.255.255.255 |
B | 172.16.255.255/12 |
172.16.0.0 ~ 172.31.255.255 |
C | 192.168.0.0/16 |
192.168.0.0 ~ 192.168.255.255 |