Linux IP 路由背后的原理及其工作原理
可能您知道如何在 Linux 上使用 route 或 netstat 命令检查现有路由(甚至添加/修改路由)。您可能在不了解 IP 路由的工作原理的情况下完成了这项工作。
本文将帮助您了解 IP 路由背后的原理及其工作原理。
IP路由涉及IP数据报的转发。它是一个简单的过程,如果目标主机已连接,则主机将 IP 数据报直接发送到目标。例如,通过点对点链接或通过共享网络。如果目标主机没有直接连接,则主机将 IP 数据报发送到默认路由器,并让路由器决定将 IP 数据报进一步发送到何处。
路由原则
普通主机和路由器之间的根本区别在于,主机永远不会将数据报从一个接口转发到另一个接口,而路由器可以转发数据报。
今天,大多数多用户系统都可以配置为充当路由器。因此,可以指定路由器和主机都可以使用的通用路由算法。当主机可以像路由器一样工作时,通常说该主机具有嵌入式路由器功能。这种具有嵌入式路由器功能的主机不应该转发数据报,除非配置为这样做,即配置为像路由器一样工作。
IP 层维护一个路由表,它在决定如何处理接收到的数据报时使用该路由表。当从网络接收到数据报时,IP 层首先检查其 IP 地址以查看该 IP 地址是否属于自己。
如果数据报中的目标 IP 地址是它自己的,那么数据报将被发送到传输层的适当协议,但如果目标地址不是它自己的,那么如果主机被配置为像一个路由器,否则数据报将被丢弃。
路由表中的数据一般都是条目的形式。典型的路由表条目包含以下主要条目:
- 目标 IP 地址:此字段表示目标的 IP 地址。该 IP 地址可以是单个主机的地址,也可以是网络的地址。如果该条目包含主机的 IP 地址,则它由地址中的非零主机 ID 表示,而如果该条目包含网络的 IP 地址,则它由主机 ID 值 0 表示。
- 下一个路由器的 IP 地址:为什么我们使用术语“下一个”是因为这并不总是最终路由器,但它很可能是一个中间路由器。该条目给出了下一个路由器的 IP 地址,该地址决定如何进一步发送在其接口上接收到的 IP 数据报。
- 标志:此字段提供另一组重要信息,如目标 IP 地址(如上指定)是主机地址或网络地址。此外,标志传达下一个路由器(上面指定)是真正的下一个路由器还是直接连接的接口。
- 网络接口规范:关于网络接口的一些规范,应传递数据报以进行进一步传输。
基本路由如何工作?
因此,如果我们现在简单地尝试可视化路由过程,那么我们会看到,一旦在主机的 IP 层(配置为像路由器一样)接收到来自网络的数据报,然后在验证目标 IP数据包中的地址不是该主机的地址,则查询路由表。
任何第一个字段与目标 IP 地址完全匹配(主机)或部分匹配(网络)的条目都会发出下一个路由器的 IP 地址的信号。这是主机(充当路由器)转发数据包所需的重要信息,因为该信息直接告诉数据报应转发到哪个下一个路由器。条目中的所有其他字段通过提供更多路由信息来支持决策。
在上面的段落中,我们建立了一个基本的理解,但是如果我们尝试更深入地了解,那么以下几点给出了有关路由表算法的详细信息:
- 首先,在路由表中搜索其“目标 IP 地址”字段与数据报目标 IP 地址完全匹配的条目。完全是指IP 地址的主机ID 和网络ID 匹配。如果找到,则将数据报发送到该接口或中间路由器。
- 如果未找到完全匹配,则完成对匹配网络 ID 的搜索。如果找到,则将数据报转发到指定的路由器。所以我们看到这个网络上的所有主机都由路由表中的这个单一条目管理。
- 如果以上两个都不为真,则数据报被转发到“默认路由器”。
- 如果上述步骤也失败,即没有默认路由器,则数据报最终无法传递。任何无法传递的数据报都会产生一个ICMP 主机不可达或ICMP 网络不可达错误,并且这个错误会返回给生成这个数据报的应用程序。
有时有人会问为什么路由表中有两种类型的条目,或者更准确地说,为什么路由器中需要与网络相关的条目?好吧,在路由表中拥有与网络相对应的条目具有很大的优势。优点是通过拥有一个与完整网络相关的条目,避免了该网络上每个主机的大量单独条目的需要。这将路由表的大小降低到一个很好的水平。
列出路由表的命令
您可以使用netstat 命令列出路由表,如下所示。
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
输出提供了目标 IP 地址及其网关的详细信息。标志“U”表示路由已启动,标志“G”表示路由器连接到网关(路由器)。如果未设置此标志,则可以假定目的地是直接连接的。
- 点赞
- 收藏
- 关注作者
评论(0)