导读 本文对用于理解简单环境的Linux计算机的路由进行了非常简短的介绍。

linux 查看网络路由

连接到网络的每台计算机在离开本地主机时都需要针对网络TCP / IP数据包的某种路由说明。 这通常非常简单,因为大多数网络环境都非常简单,并且离开数据包只有两种选择。 所有数据包都发送到本地网络上的设备或其他远程网络上。

确保将“本地”网络定义为本地主机所在的逻辑网络,通常也定义为物理网络。 从逻辑上讲,这是指在其中为主机分配了本地子网IP地址范围之一的本地子网。 从物理上讲,这意味着主机已连接到一台或多台交换机,这些交换机也已连接到本地网络的其余部分。

TCP / 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网络模型在网络上发送数据时,会是什么样? 这是我对数据如何从一个网络移动到另一个网络的完整描述。 在此示例中,我的计算机正在向远程服务器发送网页请求。

  • 在应用程序层上,浏览器向远程主机www.example.com发起HTTP连接请求消息,以发送回包含网页内容的数据。 这是消息,它仅包含远程Web服务器的IP地址。
  • 传输层将包含网页请求的消息封装在以远程Web服务器的IP地址作为目标的TCP数据报中。 现在,该数据包与原始请求数据包一起包括发出请求的源端口,通常是一个非常大的随机端口,以便返回数据知道浏览器正在侦听哪个端口。 以及远程主机上的目标端口(在这种情况下为端口80)。
  • Internet层将TCP数据报封装在一个包中,该包还包含源IP地址和目标IP地址。
  • 数据链路层使用地址解析协议(ARP)来标识默认路由器的物理MAC地址,并将Internet数据包封装在包含源MAC地址和目标MAC地址的帧中。
  • 帧通过电线(通常是CAT5或CAT6)从本地主机上的NIC发送到默认路由器上的NIC。
  • 默认路由器打开数据报并确定目标IP地址。 路由器使用自己的路由表来标识将把该帧带入下一步的下一台路由器的IP地址。 然后,路由器将帧重新封装到一个新的数据报中,该数据报包含其自己的MAC作为源以及下一个路由器的MAC地址,然后通过适当的接口将其发送。 路由器在第3层(Internet层)执行其路由任务。
  • 请注意,对于第二层及第二层以上的所有协议而言,开关是不可见的,因此它们不会以任何逻辑方式影响数据的传输。 交换机的功能仅仅是提供一种简单的方法,即通过以太网电缆的长度将多个主机连接到单个物理网络中。

    您可以使用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部署指南》 。

    原文来自:

    本文地址://q13zd.cn/linux-route-check.html编辑:黑曜羽,审核员:逄增宝

    Linux命令大全:

    Linux系统大全:

    红帽认证RHCE考试心得: