23_路由(三),路由器,路由表和默
网络协议那些事儿
内容简介
- 前言
上一课我们演示了 Wireshark 这个极为强大的网络封包分析软件的安装,并用它做了一个小实践,演示了 OSI 第 2 层和第 3 层的数据包的头部信息。
这一课我们继续学习路由的知识点,我们要来看看第 3 层的关键硬件:路由器。
- 路由器
路由器是 OSI 第 3 层的硬件,可以连接多个网络。因此,对于所连接的每个网络,路由器都有一个对应的接口。
因此,路由器就是一个具有多个网络接口(对应多个网卡)的机器,每个接口连接到一个网络。它的作用是把接收到的数据包(packet)分发到不同的网络。
因此,如果一台电脑拥有两个或以上的网卡,是可以作为路由器使用的。
但是,普通的电脑和路由器之间有什么区别呢?
区别实际上很少。主要区别在于路由器会将不是发给自己的数据包准确地分发出去(起到中继(relay)的作用),而普通的电脑会将不是发给自己的数据包丢弃。
因此,连接到网络的任何机器都可以扮演路由器的角色。只需激活上面的路由功能,进行一些配置。我们将在之后的实践部分看看如何能办到。
举个例子
让我们想象自己是一台路由器,假设我们的 MAC 地址为 11:22:33:44:55:66,IP 地址为 192.168.0.1/24。
我们的其中一个接口收到了如下的以太网帧(帧中指明了 OSI 第 3 层的头部):

看着这个以太网帧,我们不禁有一些疑问。
答:“发送这个帧的机器的 IP 地址是源 IP 地址,就是 10.0.0.1。”
问:“发送这个帧的机器的 MAC 地址是什么?(当心陷阱!)”
答:“我们没法知道发送这个帧的机器的 MAC 地址!是的,如果你还记得 OSI 第 2 层,一个 MAC 地址是专属于一个局域网的。出了它所在的局域网,我们将没法得知。”
这个以太网帧到达 IP 地址为 192.168.0.1/24 的我们这个路由器的网络接口。我们的路由器所在的网络不包含 10.0.0.1 这个 IP 地址。因此,IP 地址为 10.0.0.1 的机器不属于我们的网络,我们不能知道它的 MAC 地址。
我们在这个帧里面看到的源 MAC 地址(02:3B:45:67:89:D4),其实是最后一个向我们发送此帧的路由器的 MAC 地址。我们之后会更深入聊这些知识。
现在来问一个重要的问题:“当我们这台路由器收到此帧时,会发生什么呢?”
让我们一起来寻找答案吧。
以太网帧(底层是 0 和 1 的二进制信息)到达我的网卡,我的网卡将帧发送给我的操作系统。
我的操作系统的第 2 层接收这些 0 和 1 的信息,解释它们,并提供帧的目标 MAC 地址给我。目标 MAC 地址正是我的 MAC 地址:11:22:33:44:55:66 !
因此,我读取帧头的其余部分,以了解是谁向我发送此帧,以及第 2 层应将消息发给第 3 层的哪个协议处理。
我读取到的第 3 层的协议是 IP 协议,因此我拿掉帧的以太网头部,得到 IP 数据报(datagram),并将其发送到第 3 层,更准确地说是发送给第 3 层的 IP 协议来处理。
第 3 层的 IP 协议从 IP 数据报的头部读取所有信息,因为我们知道此数据报是发给我们的。
不过,数据报中的目标 IP 地址(132.56.0.19)不是我们这台路由器的 IP 地址(192.168.0.1)呀…
这没关系,因为我们之前已经说过,路由器收到不是发给自己的消息是很正常的。因此,路由器此时的作用就是将数据报定向到它的目的地。
但是路由器是怎么做到的呢?
实际上,就和之前 OSI 第 2 层的交换机有一个 CAM 表一样,路由器也有一个表,该表指示要向其发送数据报的下一个路由器,以使其到达目的地。
有点像 “接力赛”,一个个路由器就好像一个个交棒的选手,而传递的消息就像接力棒。
路由器的这个表非常重要,它有一个好听的名字:路由表。
- 路由表
路由表的英语是 routing table,routing 是 “路由” 的意思,table 是 “表” 的意思。
因此,路由表将列出可以向其发送数据报以到达给定目的地的路由器。
给定的目标地址将不是某个机器的 IP 地址,而是一个网络的地址。因为如果路由表须要记录互联网上每台机器的 IP 地址,则路由表将过于庞大!
路由表的原理是在表的一列中记录要加入的网络的列表,另一列则记录必须向其发送数据报以加入这些网络的路由器的列表。这些路由器也被称为网关(Gateway),因为它们充当两个网络之间的 “关口”。
网关就表示 “网络的关口”,就好像古代的一个城的城门一样,你要进入一个网络(就像一个城),须要通过城门才能进去。你要出一个城,也得通过城门出去。
下面是一个路由表的示例:
| 要连接的网络的地址 | 网关的 IP 地址 |
|---|---|
| 192.168.1.0/24 | 10.0.0.253 |
| 192.168.122.0/24 | 10.0.0.47 |
| 192.168.8.0/24 | 10.0.0.254 |
因此,路由表将至少拥有这些基本信息。根据操作系统的不同,路由表的格式可能会稍微复杂一些,可能会包含其他列。
例如,下图是我的 macOS 操作系统中的路由表(在 macOS 的终端里输入 netstat -nr 命令就可以打印出路由表。在 Linux 操作系统里则用 route -n 命令。在 Windows 操作系统里则用 route print 命令):

我们在第一列中可以看到要加入的网络(Destination 表示 “目的地”),在第二列中可以看到要加入对应的网络必须经过哪个网关(Gateway)。我们对其他列暂时不感兴趣。
我们总结一下:
-
路由器是一种具有多个网络接口的机器;
-
路由器的每个接口都连接到一个网络,因此路由器将多个网络链接在一起;
-
任何具有多个网络接口的机器都可以扮演路由器的角色,甚至是几十年前的一台电脑;
-
路由器不同于普通的机器,因为它可以分发(起到中继(relay)的作用)不是发给自己的数据包;
-
路由器通过路由表来分发数据包;
-
路由表指明了要使用哪个网关(Gateway)来加入一个网络。
了解并记住上述内容非常重要,因为路由是互联网(Internet)得以运作的基础!
根据上述总结的最后一点:“路由表指明了要使用哪个网关来加入一个网络”。这给我们带来了一个新问题。
问:“如果我已连接到互联网,那我是否需要为互联网上数以亿记的网络中的每一个网络都记录一个对应的路由呢?”
为了回答这个问题,我们来看一个已经存在的简单机制:默认路由。
- 默认路由
在上面展示的我的 macOS 系统的路由表中,我们看到了一个重要信息:第一列第一行的信息,不是一个网络的地址,而是标注了 default(表示 “默认”)。
这被称为 Default Route,表示 “默认路由”。如果我要加入的网络地址不属于路由表中的任何网络,则必须使用默认路由中指示的网关。这可以解决与互联网上众多的网络有关的问题。对我来说,在表中指明一条默认路由就足够了,该默认路由将允许我连接到互联网,然后就可以加入其他的所有网络。
上面的理论仍然是非常抽象的,理解起来也比较复杂。因此在下一课中,我们会举一个生动的例子来巩固学到的知识点,会配有图示的。
路由的知识确实是我们本专栏的重点之一,我们还需要好几课才能讲完。
一起加油吧~
}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953