Files
fzu-product/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3.2子网与无类域间路由.md
2024-08-10 19:46:55 +08:00

148 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 子网与无类域间路由
在上一篇文章中,我们详细讲解了 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 也是可以表述的。了解一下,至少目前还是有很多人用这个写法的掩码的。