共计 4284 个字符,预计需要花费 11 分钟才能阅读完成。
导读 | 本文对用于理解简单环境的 Linux 计算机的路由进行了非常简短的介绍。 |
连接到网络的每台计算机在离开本地主机时都需要针对网络 TCP / IP 数据包的某种路由说明。这通常非常简单,因为大多数网络环境都非常简单,并且离开数据包只有两种选择。所有数据包都发送到本地网络上的设备或其他远程网络上。
确保将“本地”网络定义为本地主机所在的逻辑网络,通常也定义为物理网络。从逻辑上讲,这是指在其中为主机分配了本地子网 IP 地址范围之一的本地子网。从物理上讲,这意味着主机已连接到一台或多台交换机,这些交换机也已连接到本地网络的其余部分。
在进行路由选择之前,先了解一些有关数据包如何找到通往网络上正确主机的方式的帮助。TCP / IP 网络模型定义了一个五层堆栈,该堆栈描述了将数据包从一台主机移动到另一台主机所必需的机制,无论该主机是在本地网络上还是在世界范围内。在此模型的以下描述中,每个层都有编号,并且还包含该层处理的数据单元的名称。
5. 应用程序层:消息该层包括各种网络应用程序进行通信所需的连接协议,例如 HTTP,DHCP,SSH,FTP,SMTP,IMAP 等。当您从远程网站请求网页时,连接请求将发送到 Web 服务器,响应会发送回该层的主机,然后浏览器将在其窗口中显示该网页。
4. 传输层:TCP 段。传输层提供端到端数据传输和流管理服务,这些服务与数据和所传输协议的类型无关。它使用端口 80(例如 HTTP)和 25(SMTP)在发送主机和远程主机之间建立连接。
3. Internet 层:数据包。数据包路由在 Internet 层上执行。该层负责在两个或多个不同的网络上路由数据包,以到达其最终目的地。该层使用 IP 地址和路由表来确定将数据包发送到下一个设备。如果发送到路由器,则每个路由器仅负责将数据包发送到该系列中的下一个路由器,而不负责映射从本地主机到目标主机的整个路由。Internet 层主要是关于路由器与路由器进行对话,以确定链路中的下一个路由器。
2. 数据链路层:框架。链路层管理单个本地逻辑逻辑网络上硬件主机之间的直接连接。该层使用嵌入在网络接口卡(NIC)中的媒体访问控制(M AC)地址来识别连接到本地网络的物理设备。该层无法访问不在本地网络上的主机。
1. 物理层:位。这是硬件层,由 NIC 和物理以太网电缆以及用于在构成任何两个主机或本地连接的其他网络节点之间传输构成数据帧的各个位的硬件级别协议组成。
那么,当主机实际上使用 TCP / IP 网络模型在网络上发送数据时,会是什么样?这是我对数据如何从一个网络移动到另一个网络的完整描述。在此示例中,我的计算机正在向远程服务器发送网页请求。
请注意,对于第二层及第二层以上的所有协议而言,开关是不可见的,因此它们不会以任何逻辑方式影响数据的传输。交换机的功能仅仅是提供一种简单的方法,即通过以太网电缆的长度将多个主机连接到单个物理网络中。
您可以使用 arp [-n] 命令查看主机已在其 arp 表中存储的所有 MAC 地址。这些始终是本地网络上的主机。
所有网络设备,无论它们是主机,路由器还是其他类型的网络节点,例如网络连接的打印机,都需要决定将 TCP / IP 数据包路由到何处。路由表提供了做出这些决定所需的配置信息。与图 1 中非常简单的路由表类似,该路由表用于定义典型本地主机可用的单个路由,并确定是否将数据包发送到默认网关路由器。。route - n 命令列出了路由表;- n 选项仅将结果显示为 IP 地址,并且不尝试执行 DNS 查找,该 DNS 查找将使用主机名替换 IP 地址(如果可用)。使用 netstat – R N 命令产生的结果非常相似。
[root@host1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.254 0.0.0.0 UG 100 0 0 eno1
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
图 1:一个简单的路由表。
使用 - n 选项时,默认网关始终与目标 0.0.0.0 一起显示。如果未使用 -n,则单词“Default”出现在输出的 Destination 列中。网关列中的 IP 地址是出站网关路由器的 IP 地址。默认网关的网络掩码为 0.0.0.0 意味着,无论网络类别如何,路由表中未通过附加条目寻址到本地网络或另一个出站路由器的任何数据包都将发送到默认网关。
图 1 中的 Iface(接口)列是出站 NIC 的名称,在本例中为 eno1。对于充当路由器的主机,可能至少会使用两个,有时还会使用更多的 NIC。每个用作路由的 NIC 将连接到不同的物理和逻辑网络。“标志”列中的标志指示该路由为 Up(U),这是默认网关(G)。其他标志也可能出现。
对于大多数主机而言,路由决策非常简单:
如果目标主机在本地网络上,则将数据直接发送到目标主机。
如果目标主机位于通过路由表中列出的本地网关可访问的远程网络上,请将其发送到显式定义的网关。
如果目标主机位于远程网络上,并且没有其他条目定义到该主机的路由,则将数据发送到默认网关。
这些规则只是意味着,如果由于不匹配而导致所有其他操作失败,则将数据包发送到默认网关。
下面的图 2 中的路由表稍微复杂一点,因为它属于 Linux 主机,充当连接到三个网络的路由器,其中一个网络通向 Internet。本地 C 类网络(接口 eth1 上的 192.168.0.0/24、eth2 上的 192.168.25.0/24)在表中都有条目,以及在 eth0 上通往世界其他地区的默认路由。
[root@host2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
0.0.0.0 192.168.1.25 0.0.0.0 UG 0 0 0 eth0
图 2:具有多个网络的更复杂的路由表。
请注意,仍然只有一个默认网关,它位于接口 eth0 上。但是,除了直接指向路由器的 LAN 端 IP 地址的默认路由条目外,整个 192.168.1.24/30 网络也存在一个条目。该网络仅包含两个可用的 IP 地址,一个用于路由器 LAN 端,一个 192.168.1.25/30,一个用于主机本身,一个 192.168.1.26/30。
那么如何配置路由表?对于使用 DHCP 连接到网络的主机,DHCP 服务器提供该默认路由的配置信息以及 DNS,主机 IP 地址以及可能的其他信息(例如 NTP 服务器的 IP 地址)。对于静态配置,它通常很简单,但有时可能会有些复杂。
在大多数情况下,将默认路由添加到 / etc / sysconfig / network 文件会导致网络在路由表中配置默认路由。该条目类似于图 3 中的示例。
GATEWAY=192.168.0.1
图 3:网络文件中的网关条目。
使用网络文件只能配置默认网关。
在静态配置的环境中配置默认网关的另一种方法是将其添加到 / etc / sysconfig / network-scripts 目录中的相应接口配置文件中。要将网关添加到接口 eth0 的接口配置文件中,请将与上面图 3 相同的行添加到 ifcfg-eth0 文件中。如果这样做,则应从网络文件中删除该条目。
在更复杂的环境中,例如当主机使用多个 NIC 连接到多个网络时,以及至少需要在路由表中输入两条或更多条路由时,您应该考虑在其中使用路由文件。/ etc / sysconfig / network-scripts。对于 NIC enp7s1,该文件将是 route-enp7s1,它将包含图 4 所示的条目。
default via 192.168.0.1 dev enp7s1
图 4:enp7s1 的默认路由条目。
路由接口文件中的默认网关设置将覆盖网络文件中可能列出的所有网关。
当然,您始终可以使用 route 命令从命令行添加路由。如果您需要在每次系统引导时都执行此操作,则可能会花费一些时间,因此您可能要考虑使用上述方法,或创建在启动时运行的脚本。我为我的系统之一编写了一个脚本,其中包含以下两行,如图 5 所示。
route del default
route add default gw 192.168.0.1
图 5:从命令行设置默认路由的命令。
请注意,设备名称在所有这些命令中都是可选的,在图 5 中未使用。
除了这些非常简单的示例(非常常见)中显示的路由之外,路由还有很多其他内容。这里的信息应该使您入门。对于更复杂的环境,您可能希望参考 Craig Hunt 的《Inside TCP / IP,第二版》或《TCP / IP 网络管理》。您可能还需要参考发行版的文档以获取更多信息。对于基于 rpm 的发行版(例如 Fedora 和 CentOS),一个很好的参考是《Red Hat Enterprise Linux 7 部署指南》。