Appearance
基础知识
部分内容便于理解可能存在过度简化的问题,请谅解
当未来的你发现这篇文章的内容存在瑕疵时,那么恭喜你,已经不再是网络小白了
网络层
众所周知,人们将网络分为 5 层,自下而上分别是物理层、链路层、网络层、传输层、应用层。在 DN11 我们主要和鲜有人提及的网络层打交道。
我们都知道,在默认情况下,输个密码连上 WIFI 或者插个网线就可以上网了。如果你自己配置过家里或者宿舍的网络,你可能会知道能上网是因为我们通过无线或者有线的方式连接到了路由器,再由路由器转发我们的数据包到公网。
在网络层,连接到路由器使用的是无线还是有线都无所谓,这些底层细节都被屏蔽了,我们直接视为它们在同一个局域网(二层网络)。在这个局域网里还有其他设备,连接到同一个路由器的你的手机或者你的平板他们都和你的电脑你的路由器在同一个局域网。
在同一个局域网内,设备和设备直接可以直接连接,无需经过路由器的转发。举个常见的局域网应用的例子,手机上的很多视频 APP 比如 bilibili 都自带投屏能力,可以把原来在手机播放的视频投到电视上进行播放。在这个过程中,手机就是通过局域网,将视频播放链接直接发送给电视。
bilibili 并不一定通过局域网投屏
如果电视上使用的是云视听小电视,bilibili APP 并不通过 DLNA 协议进行局域网投屏。因为显然即使用户确实在家里也不一定总是连接着局域网,这就会导致投屏失败。如果电视侧也是可控的,直接由 B 站中转到电视实际上是一个更可靠的选择。
这一点是怎么实现的呢,原来在局域网中,每一个设备都有一个唯一的 IP 地址来标识自身。IP 地址可以手动配置也可以自动配置,现实生活中的家庭网络一般都是通过一个名为 DHCP 的协议向路由器请求分配一个 IP 地址。
当需要访问到局域网外的内容时,就需要通过路由器进行转发,当你的设备发现一个要访问的目标地址不在这个局域网的范围内时,它就会通过路由表选择转发的目的地。一般来说大家的手机或者电脑的路由表都是一样的,一条局域网的路由和一条指向路由器的默认路由。他们的意义简单来说就是不在局域网的就交给路由器转发。
路由表是一个列表,列表里的每一项可以简化为一个目标地址范围和一个可选的转发的目标,这个转发目标我们称之为网关。上述提到的两条路由就分别是:在局域网范围内就转发到这个局域网和不在局域网范围内就转发到局域网内的指定路由器。
而你的路由器,其实也是同理,将数据包转发给上游的你的运营商,后面这个数据包如何抵达目的地就是他们的事情了。但在 DN11,这些全都是我们自己的事情,DN11 的配网在很大程度上实际上配的是这个路由器往后这部分的网络。
隧道
DN11 的大多数节点都通过隧道进行连接。在 DN11 的场景下,由于客观条件不允许我们真的在家家户户之间拉一条网线,因此借助了隧道技术实现连接。
隧道可以被简单地理解为一根虚拟的网线。数据包进入隧道后,会被封装进另一个数据包,有条件也会进行加密,再通过互联网发送到目的地,在目的地解密解包,送抵最终目的地。
后面的教程中会广泛提到 WireGuard 这个名词,WireGuard 是目前配置最简单的带加密的现代隧道协议。它会在你的设备上创建一个新的虚拟网卡,或者说虚拟网口。所有发送到这个网口的数据都会被 WireGuard 封装加密成一个 UDP 报文,发送到目的地解包解密,最终从目的地的虚拟网口进入目标设备。这其实和一根网线做的事情没有什么本质区别,无非网线是封装成电信号,隧道协议封装成了别的东西。
有了隧道后,就像插了一根网线到路由器一样有了进行通信的条件,但不要忘了,我们还需要分配 IP 地址来标识两端才能进行通信,这其实就是隧道 IP 的由来。由于我们这个 “局域网” 很简单,因此我们一般会手动指定一对固定的 IP,分别从我们自己的 IP 池里取一个对面从对面的 IP 池里取一个,这些都是后话了。
当然在一些更复杂的隧道协议中,比如 OpenVPN,他们也允许自动分配 IP 给客户端。
你已经完全理解隧道了,下面就翻到下一章来实操一下吧。
CIDR 与 IP 划分
在实操之前,请允许我再补充一点基础知识 —— 关于 IP 段的划分,以便于后续的配置教学。
CIDR 是一种 IP 地址划分方法,先举几个例子:
| CIDR | 实际范围 |
|---|---|
| 1.2.3.4/32 | 1.2.3.4 |
| 1.2.3.4/31 | 1.2.3.4-1.2.3.5 |
| 1.2.3.4/30 | 1.2.3.4-1.2.3.7 |
发现了吗,随着 / 后面的数字变小,CIDR 表示的 IP 范围越大,且每次乘以 2,这个数字叫做前缀长度。
如何理解前缀长度?
我们知道 IP 地址的范围是 0.0.0.0 - 255.255.255.255 ,从计算机的视角看问题写成二进制就是:
00000000.00000000.00000000.00000000 - 11111111.11111111.11111111.11111111
一共 32 位数字,前缀长度的意思在这里就很清楚了,即在二进制的视角里前多少位是固定的。
当前缀长度为 32 的时候,所有的数字都是固定的,此时范围内只有一个 IP;
当前缀长度为 31 的时候,前 31 位固定,最后一位可选 0 或 1,此时范围内有两个 IP;
当前缀长度为 30 的时候,前 30 位固定,最后两位可选 00 01 10 11,此时范围内有四个 IP;
...
当前缀长度为 0 的时候,前 0 位固定,后面 32 位可选任意值,此时范围内包含所有的 IP 地址。
你已经完全了解 CIDR 了,除了一个小细节。我们之前提到 1.2.3.4/31 包含 1.2.3.4 和 1.2.3.5 ,那么把这个 CIDR 写作 1.2.3.5/31 是不是可行的?
是有这种写法的,但这个写法的含义是 " 1.2.3.4/31 CIDR 中的 1.2.3.5 " 而不是 1.2.3.4/31 这个网段本身,需要注意区分,你会在很多地方看到这个写法。
我们在前文提到一个在局域网中的设备对于发现目标 IP 不是局域网时就走默认路由发给网关的行为只做了定性的讲解没有深入,对路由器如何分配一个局域网 IP 也没有深入。原来在一般情况下路由器会默认在一个前缀长度为 24 的 CIDR 所指定的 IP 地址范围(网段)中进行地址分配。在这个场景下最常见的网段是 192.168.0.0/24 这个网段里一共有 256 个 IP。
路由器在使用这个网段的时候也不是胡乱使用的,而是带有规划地使用的。
首先这个网段的第一个地址被保留用于表示这个网段,也就是说 192.168.0.0 不投入实际使用,仅仅在表示 192.168.0.0/24 这个网段的时候出现,我们称 192.168.0.0 为 192.168.0.0/24 这个网段的网络号。
除了这个地址,这个网段的最后一个地址 192.168.0.255 也会被保留,这个地址用于广播,简单来说,往这个地址发送的报文会送抵这个网段的所有设备。
剩下的地址就是用来分配给设备的地址了,一般来说路由器会拿走第一个 192.168.0.1 ,这就是路由器的地址的由来。
在最后我还要杀一个回马枪,虽然我们介绍了网络号、广播地址,但这不是 CIDR 标准的一部分,是 CIDR 在这个特定场景下的标准。我们后续会有机会不按照这个预留方法使用 IP 地址。
Q&A
问: 克劳德老师~我还记得你~~(感觉不如 AI 配网)
答: 现代互联网的大厦是前人们一层又一层地搭出来的,每上一层都需要下一层的可靠作为支撑。当前 AI 的应用其实非常依赖于通过互联网提供的大模型 API 服务。凡事都要讲究先后顺序,无法连接到互联网时就无法连接到 AI;无法连接到局域网时,就无法连接到局域网内的推理服务器;本机网络损坏时,就无法连接到本机部署的 AI。从网络人的视角来看,这种让低层级依赖于高层级的操作实际上在损害整体的稳定性。
当然,这也要看场景,毕竟大多数人都只是图个乐子,喜欢折腾,出事了大不了全部重置,找个 Agent 梭哈两把实际上也无可厚非。这个问题终究还是要归于责任,如果你配置的网络出了问题你需要承担相当的责任,一般来说还是不要让 AI 配个人能力之外的网。