feat(WIKI): wiki 2025 BREAKING CHANGE: Older content is categorized into older folders
This commit is contained in:
147
2023旧版内容/9.计算机网络/9.2.3.2子网与无类域间路由.md
Normal file
147
2023旧版内容/9.计算机网络/9.2.3.2子网与无类域间路由.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# 子网与无类域间路由
|
||||
|
||||
在上一篇文章中,我们详细讲解了 IP 数据包的结构。一个 IP 数据包确实非常复杂,但现在请你忘掉他,仅在需要的时候翻看相关文章做参考。
|
||||
|
||||
你只需要知道一件事 —— IP 头里有一对 IP 地址,分别分别代表这个数据包从哪里来,到哪里去。
|
||||
|
||||
在组成一个比较大的网络前,我们需要给一个个孤立的 IP 地址分类。给 IP 分类可以让维护路由表变得更简单,CIDR(无类域间路由)是一种非常良好的分类方法。
|
||||
|
||||
## CIDR
|
||||
|
||||
我们先看看什么地方会出现 CIDR 这个东西。如果你正在使用 Linux 操作系统,你可以输入命令`ip addr`,他会打印出一串大概这样的内容
|
||||
|
||||
> windows 的 CIDR 采用点分十进制掩码,后续介绍
|
||||
|
||||
``` bash
|
||||
baimeow@server:~$ ip addr
|
||||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
|
||||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
||||
inet 127.0.0.1/8 scope host lo
|
||||
valid_lft forever preferred_lft forever
|
||||
inet6 ::1/128 scope host
|
||||
valid_lft forever preferred_lft forever
|
||||
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
|
||||
link/ether bf:17:21:ab:44:ba brd ff:ff:ff:ff:ff:ff
|
||||
inet 192.168.1.12/24 metric 100 brd 192.168.1.255 scope global dynamic ens18
|
||||
valid_lft 2458sec preferred_lft 2458sec
|
||||
inet6 fe80::bc57:71ff:febb:24b0/64 scope link
|
||||
valid_lft forever preferred_lft forever
|
||||
```
|
||||
|
||||
其中有 4 个 CIDR,分别是 `127.0.0.1/8` `::1/128` `192.168.1.12/24` `fe80::bc57:71ff:febb:24b0/64`我们以 `192.168.1.12/24`为例。
|
||||
|
||||
他由一个 IP 地址和一个数字组成,中间用正斜杠分割,IP 地址就是你的设备的 IP,这没有什么特别特殊的。而后面的这个 24 是掩码。这其实表达了很多层意思:
|
||||
|
||||
- 设备 IP 是 `192.168.1.12`
|
||||
|
||||
- 网络号是 `192.168.1.0`
|
||||
|
||||
- 掩码是 24
|
||||
|
||||
- 广播地址是 `192.168.1.255`
|
||||
|
||||
- 这个 IP 所在的子网拥有的范围的是 `192.168.1.0` - `192.168.1.255`
|
||||
|
||||
- 这个 IP 所在的子网可以分配的 IP 范围的是 `192.168.1.1` - `192.168.1.254`
|
||||
|
||||
为了理解上面这些东西都是怎么来的,我们需要理解这个掩码是如何作用在 IP 上的,我们先把 IP 地址写成二进制的格式(点分二进制)
|
||||
|
||||
`192.168.1.12` -> `11000000.10101000.00000001.00001100`
|
||||
|
||||
目前,我们的这个掩码值为 24,他的意思是把 IP 地址分成,前 24 位,剩下的 8 位,这两部分,被切除的部分用 0 来填充,于是我们得到了
|
||||
|
||||
- 网络号`11000000.10101000.00000001.00000000` -> `192.168.1.0`
|
||||
|
||||
- 主机号`00000000.00000000.00000000.00001100` -> `0.0.0.12`
|
||||
|
||||
这里由于 /24 刚刚好切到了点上,所以就被非常直观地分成了这样两部分。
|
||||
|
||||
在 CIDR 的规则中,将拥有同样的网络号和同样的掩码的 IP 的集合作为一个子网。比如网络号为`192.168.1.0`,掩码为 24 的所有 IP 就是 `192.168.1.0` - `192.168.1.255`这些个 IP,他们都在`192.168.1.0/24`这个子网里。
|
||||
|
||||
注意,“子网”并不是一个非常抽象或者特殊的概念,他只是从互联网这张大网里取了一段 IP 地址构成子网,就像集合的子集一样。只是我们现在正在使用 CIDR 的规则去划分子网,遵循着 CIDR 的规则用一个网络号和掩码去划分出这样一段 IP。
|
||||
|
||||
在这样的一个子网里,我们定义:
|
||||
|
||||
- 第一个地址是网络地址
|
||||
- 最后一个地址是广播地址
|
||||
- 剩下的地址可以分配给网络内的设备
|
||||
|
||||
以上定义是默认行为,其实是可以修改的,比如广播地址就可以不是最后一个地址。
|
||||
|
||||
严格意义上说,上面提到的子网一部分应该改称呼为网段,简单起见不细究了。
|
||||
|
||||
## 常见保留 IP
|
||||
|
||||
了解一下常见的保留 IP 吧,这些保留 IP 不会出现在公网,而是被用于其他特殊用途。
|
||||
|
||||
让我抄一下 Wiki 的表格。
|
||||
|
||||
| 地址块 ([CIDR](https://zh.wikipedia.org/wiki/无类别域间路由)) | 范围 | 地址数 | 效用域 | 用途 |
|
||||
| :----------------------------------------------------------: | :---------------------------: | :---------: | :------: | :----------------------------------------------------------: |
|
||||
| 0.0.0.0/8 | 0.0.0.0 – 0.255.255.255 | 16,777,216 | 软件 | 用于广播信息到当前主机。[[1]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-1) |
|
||||
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 | 16,777,216 | 专用网络 | 用于[专用网络](https://zh.wikipedia.org/wiki/专用网络)中的本地通信。[[2]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc1918-2) |
|
||||
| 100.64.0.0/10 | 100.64.0.0 – 100.127.255.255 | 4,194,304 | 专用网络 | 用于在[电信级 NAT](https://zh.wikipedia.org/wiki/电信级NAT)环境中服务提供商与其用户通信。[[3]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-3) |
|
||||
| 127.0.0.0/8 | 127.0.0.0 – 127.255.255.255 | 16,777,216 | 主机 | 用于到本地主机的[环回地址](https://zh.wikipedia.org/wiki/IPv4#环回地址(Loopback_Address))。[[4]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-4) |
|
||||
| 169.254.0.0/16 | 169.254.0.0 – 169.254.255.255 | 65,536 | 链路 | 用于单链路的两个主机之间的[链路本地地址](https://zh.wikipedia.org/wiki/链路本地地址),而没有另外指定 IP 地址,例如通常从[DHCP](https://zh.wikipedia.org/wiki/动态主机设置协议)服务器所检索到的 IP 地址。[[5]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-5) |
|
||||
| 172.16.0.0/12 | 172.16.0.0 – 172.31.255.255 | 1,048,576 | 专用网络 | 用于[专用网络](https://zh.wikipedia.org/wiki/专用网络)中的本地通信。[[2]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc1918-2) |
|
||||
| 192.0.0.0/24 | 192.0.0.0 – 192.0.0.255 | 256 | 专用网络 | 用于 IANA 的 IPv4 特殊用途地址表。[[6]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc5736-6) |
|
||||
| 192.0.2.0/24 | 192.0.2.0 – 192.0.2.255 | 256 | 文档 | 分配为用于文档和示例中的“TEST-NET”(测试网),它不应该被公开使用。[[7]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc5737-7) |
|
||||
| 192.88.99.0/24 | 192.88.99.0 – 192.88.99.255 | 256 | 互联网 | 用于[6to4](https://zh.wikipedia.org/wiki/6to4)[任播](https://zh.wikipedia.org/wiki/任播)中继。[[8]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-8)(已废弃[[9]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc7526-9)) |
|
||||
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | 65,536 | 专用网络 | 用于[专用网络](https://zh.wikipedia.org/wiki/专用网络)中的本地通信。[[2]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc1918-2) |
|
||||
| 198.18.0.0/15 | 198.18.0.0 – 198.19.255.255 | 131,072 | 专用网络 | 用于测试两个不同的子网的网间通信。[[10]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-10) |
|
||||
| 198.51.100.0/24 | 198.51.100.0 – 198.51.100.255 | 256 | 文档 | 分配为用于文档和示例中的“TEST-NET-2”(测试 - 网 -2),它不应该被公开使用。[[7]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc5737-7) |
|
||||
| 203.0.113.0/24 | 203.0.113.0 – 203.0.113.255 | 256 | 文档 | 分配为用于文档和示例中的“TEST-NET-3”(测试 - 网 -3),它不应该被公开使用。[[7]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc5737-7) |
|
||||
| 224.0.0.0/4 | 224.0.0.0 – 239.255.255.255 | 268,435,456 | 互联网 | 用于多播。[[11]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc1112-11) |
|
||||
| 233.252.0.0/24 | 233.252.0.0 - 233.252.0.255 | 256 | 文档 | 分配为用于文档和示例中的“MCAST-TEST-NET”,它不应该被公开使用 |
|
||||
| 240.0.0.0/4 | 240.0.0.0 – 255.255.255.254 | 268,435,455 | 互联网 | 用于将来使用。[[12]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc6890-12) |
|
||||
| 255.255.255.255/32 | 255.255.255.255 | 1 | 子网 | 用于受限广播地址。[[12]](https://zh.wikipedia.org/wiki/保留IP地址#cite_note-rfc6890-12) |
|
||||
|
||||
如果需要搭建自己的比如说家庭网络,寝室网络,一般会选择
|
||||
|
||||
- `10.0.0.0/8`
|
||||
- `192.168.0.0/16`
|
||||
- `172.16.0.0/12`
|
||||
|
||||
此外另外了解一下其他的特殊地址,避免冲突吧
|
||||
|
||||
- `169.254.0.0/16` DHCP 获取到 IP 前的临时 IP 地址
|
||||
- `192.18.0.0/16` 一些代理软件的透明代理模式会解析域名到这里
|
||||
- `172.17.0.0/16` Docker 默认网段
|
||||
|
||||
## 旧闻一则 —— ABCDE 类 IP
|
||||
|
||||
很久很久以前,一群自大的人给 IP 随意地划分了 ABCDE 类。很遗憾,我们仍需要了解一下这个历史包袱。
|
||||
|
||||
- A 类 0.0.0.0~126.255.255.255 大型网络
|
||||
|
||||
- B 类 128.0.0.0~191.255.255.255 中型网络
|
||||
|
||||
- C 类 192.0.0.0~223.255.255.255 小型网络
|
||||
|
||||
- D 类 224.0.0.1-239.255.255.254 多播
|
||||
|
||||
- E 类 240.0.0.0---255.255.255.255 保留段与广播地址
|
||||
|
||||
仅作了解,现今已经不具有实际意义了
|
||||
|
||||
## 正在消失的 —— 点分 10 进制掩码
|
||||
|
||||
当你在 windows 的 cmd 里执行 `ipconfig /all` 时,你可以看到一个点分十进制的掩码。
|
||||
|
||||
```cmd
|
||||
无线局域网适配器 WLAN:
|
||||
|
||||
连接特定的 DNS 后缀 . . . . . . . :
|
||||
描述. . . . . . . . . . . . . . . : Intel(R) Wi-Fi 6 AX200 160MHz
|
||||
IPv4 地址 . . . . . . . . . . . . : 192.168.0.102(首选)
|
||||
子网掩码 . . . . . . . . . . . . : 255.255.255.0
|
||||
获得租约的时间 . . . . . . . . . : 2023年8月20日 19:49:53
|
||||
租约过期的时间 . . . . . . . . . : 2023年8月21日 00:49:56
|
||||
默认网关. . . . . . . . . . . . . : 192.168.0.1
|
||||
```
|
||||
|
||||
上面的子网掩码是 `255.255.255.0`,其实就是`/24`
|
||||
|
||||
这种格式其实表达的信息更灵活,你可以在掩码的时候掩住前面一段后面一段,中间留一段做主机号,这是没有问题的。
|
||||
|
||||
问题在于有点过度设计的了,随意地掩盖住几位只会让网络运维人员心烦,久而久之用的越来越少,就算是用,也只会顺序掩盖前面几位,其实目前碰到的大多数这种格式的掩码他传达的信息 CIDR 也是可以表述的。了解一下,至少目前还是有很多人用这个写法的掩码的。
|
||||
Reference in New Issue
Block a user