Open iugo opened 3 years ago
先说 IPv4, 我们知道 IP 比如 8.8.8.8, 127.0.0.1, 192.168.1.1 这样.
8.8.8.8
127.0.0.1
192.168.1.1
首先将所有 IP 写为这种格式:
(0~255).(0~255).(0~255).(0~255)
之所以是 0 到 255 是因为储存的容器为 8 位(bit). 所以我们也能写成:
(2 ** 8).(2 ** 8).(2 ** 8).(2 ** 8)
网段的意思就是固定前面多少, 比如 127.0.0.0/8 就代表固定前 8 位, 前 8 位是 127,
即 127.(2 ** 8).(2 ** 8).(2 ** 8), 或者 127.*.*.*.
127.(2 ** 8).(2 ** 8).(2 ** 8)
127.*.*.*
那么 /8, /16, /24 就容易理解了.
/8
/16
/24
/36 呢? 就只代表自己.
/36
/19 呢? 我们就要拆 IP 细说了, 我们将 x 表示为 0 或者 1, 那么全部 IP 为:
/19
xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
此时我们就完全理解 IPv4 的地址是 32 位, 每 8 位一组共 4 组.
比如 119.27.0.0/19 就可以先写出 IP 的二进制形式, 然后固定前面 19 位:
119.27.0.0/19
01110111.00011011.00000000.00000000
01110111.00011011.000xxxxx.xxxxxxxx
因为是固定前面多少位, 所以如果出现如 119.27.0.1/19 这样的 IP 段则是没有意义的, 原因就是后面的 0 会被变量 x 替代, 但如果后面出现了 1, 这个 1 无法被保留.
119.27.0.1/19
我们说的 /24 这样的 IP 段表述并不能表述任意子网, 只是为了分配.
然后再说 IPv6, 地址上的不同就是共有 128 位, 每 16 位一组共 8 组. 为了区分, 写法上不用 . 隔开, 而是使用 :. 为了缩短写作长度, 使用 16 进制数而非 10 进制.
.
:
二进制所有地址可以写为:
xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx :xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx
16 位即 xxxxxxxxxxxxxxxx 表示的数为 0~65535, 如果使用 y 表示 0~f, 可以写为:
xxxxxxxxxxxxxxxx
yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy
这里有两个 16, 一个是地址每组为 16 位, 一个是使用 16 进制表示, 二者无关, 别搞混.
鉴于 IPv6 地址比较长, 我们可以使用 :: 表示四组为 0 的地址来简写.
::
比如 ::ffff:0.0.0.0/96 来表示所有 IPv4 地址映射.
::ffff:0.0.0.0/96
小工具: https://www.ultratools.com/tools/netMask
什么是 IP 网段
先说 IPv4, 我们知道 IP 比如
8.8.8.8
,127.0.0.1
,192.168.1.1
这样.首先将所有 IP 写为这种格式:
(0~255).(0~255).(0~255).(0~255)
之所以是 0 到 255 是因为储存的容器为 8 位(bit). 所以我们也能写成:
(2 ** 8).(2 ** 8).(2 ** 8).(2 ** 8)
网段的意思就是固定前面多少, 比如 127.0.0.0/8 就代表固定前 8 位, 前 8 位是 127,
即
127.(2 ** 8).(2 ** 8).(2 ** 8)
, 或者127.*.*.*
.那么
/8
,/16
,/24
就容易理解了./36
呢? 就只代表自己./19
呢? 我们就要拆 IP 细说了, 我们将 x 表示为 0 或者 1, 那么全部 IP 为:xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
此时我们就完全理解 IPv4 的地址是 32 位, 每 8 位一组共 4 组.
比如
119.27.0.0/19
就可以先写出 IP 的二进制形式, 然后固定前面 19 位:01110111.00011011.00000000.00000000
01110111.00011011.000xxxxx.xxxxxxxx
因为是固定前面多少位, 所以如果出现如
119.27.0.1/19
这样的 IP 段则是没有意义的, 原因就是后面的 0 会被变量 x 替代, 但如果后面出现了 1, 这个 1 无法被保留.我们说的
/24
这样的 IP 段表述并不能表述任意子网, 只是为了分配.然后再说 IPv6, 地址上的不同就是共有 128 位, 每 16 位一组共 8 组. 为了区分, 写法上不用
.
隔开, 而是使用:
. 为了缩短写作长度, 使用 16 进制数而非 10 进制.二进制所有地址可以写为:
xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx :xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxx
16 位即
xxxxxxxxxxxxxxxx
表示的数为 0~65535, 如果使用 y 表示 0~f, 可以写为:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy
这里有两个 16, 一个是地址每组为 16 位, 一个是使用 16 进制表示, 二者无关, 别搞混.
鉴于 IPv6 地址比较长, 我们可以使用
::
表示四组为 0 的地址来简写.比如
::ffff:0.0.0.0/96
来表示所有 IPv4 地址映射.小工具: https://www.ultratools.com/tools/netMask