Files
fzu-product/9.计算机网络/9.2.3.2子网与无类域间路由.md
FallenYing c810fd1647 chore: add
2023-10-11 23:24:20 +08:00

11 KiB
Raw Blame History

子网与无类域间路由

在上一篇文章中,我们详细讲解了 IP 数据包的结构。一个 IP 数据包确实非常复杂,但现在请你忘掉他,仅在需要的时候翻看相关文章做参考。

你只需要知道一件事 —— IP 头里有一对 IP 地址,分别分别代表这个数据包从哪里来,到哪里去。

在组成一个比较大的网络前,我们需要给一个个孤立的 IP 地址分类。给 IP 分类可以让维护路由表变得更简单CIDR无类域间路由是一种非常良好的分类方法。

CIDR

我们先看看什么地方会出现 CIDR 这个东西。如果你正在使用 Linux 操作系统,你可以输入命令ip addr,他会打印出一串大概这样的内容

windows 的 CIDR 采用点分十进制掩码,后续介绍

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) 范围 地址数 效用域 用途
0.0.0.0/8 0.0.0.0 0.255.255.255 16,777,216 软件 用于广播信息到当前主机。[1]
10.0.0.0/8 10.0.0.0 10.255.255.255 16,777,216 专用网络 用于专用网络中的本地通信。[2]
100.64.0.0/10 100.64.0.0 100.127.255.255 4,194,304 专用网络 用于在电信级 NAT环境中服务提供商与其用户通信。[3]
127.0.0.0/8 127.0.0.0 127.255.255.255 16,777,216 主机 用于到本地主机的环回地址[4]
169.254.0.0/16 169.254.0.0 169.254.255.255 65,536 链路 用于单链路的两个主机之间的链路本地地址,而没有另外指定 IP 地址,例如通常从DHCP服务器所检索到的 IP 地址。[5]
172.16.0.0/12 172.16.0.0 172.31.255.255 1,048,576 专用网络 用于专用网络中的本地通信。[2]
192.0.0.0/24 192.0.0.0 192.0.0.255 256 专用网络 用于 IANA 的 IPv4 特殊用途地址表。[6]
192.0.2.0/24 192.0.2.0 192.0.2.255 256 文档 分配为用于文档和示例中的“TEST-NET”测试网它不应该被公开使用。[7]
192.88.99.0/24 192.88.99.0 192.88.99.255 256 互联网 用于6to4任播中继。[8](已废弃[9]
192.168.0.0/16 192.168.0.0 192.168.255.255 65,536 专用网络 用于专用网络中的本地通信。[2]
198.18.0.0/15 198.18.0.0 198.19.255.255 131,072 专用网络 用于测试两个不同的子网的网间通信。[10]
198.51.100.0/24 198.51.100.0 198.51.100.255 256 文档 分配为用于文档和示例中的“TEST-NET-2”测试 - 网 -2它不应该被公开使用。[7]
203.0.113.0/24 203.0.113.0 203.0.113.255 256 文档 分配为用于文档和示例中的“TEST-NET-3”测试 - 网 -3它不应该被公开使用。[7]
224.0.0.0/4 224.0.0.0 239.255.255.255 268,435,456 互联网 用于多播。[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]
255.255.255.255/32 255.255.255.255 1 子网 用于受限广播地址。[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 时,你可以看到一个点分十进制的掩码。

无线局域网适配器 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 也是可以表述的。了解一下,至少目前还是有很多人用这个写法的掩码的。