Linux 网络路由介绍

六月份的时候我们讨论了基础网络配置,其中有一点我没提到的是路由。这篇文章将简洁明了的介绍下Linux网络下的路由,来方便理解一些简单的网络环境。

每台网络中相连的计算机当他们离开本地主机的时候,TCP / IP数据包需要某种类型的路由指令。这通常是非常简单的,因为多数网络环境非常简单,那些离开包只有两个选择。所有数据包被发送到设备在本地网络上或其他网络,远端网络。


"本地"网络被公认为逻辑网络,通常也被认为是在本地主机上的物理网络。从逻辑上来说这意味着主机被分配一个本地子网IP范围内的IP地址。从物理上来说这意味着主机连接到一个或多个那些连接其他本地网络的交换机。

TCP/IP 网络模型

在我们学习路由之前,它(代指TCP/IP网络模型)能够帮助我们理解关于数据包是如何在网络中寻找到正确的主机。TCP/IP网络模型定义了一个五层堆栈,描述了将数据包从一个主机到其他主机所需的必要机制,无论这台其他主机实在本地网络或这世界的任何一方。接下来将按数字编号介绍TCP/IP网络模型的每一层,及该层处理的数据单元名称。


5. 应用层: 消息 这一层由各种网络应用程序进行通信所需的连接协议,如HTTP、DHCP、SSH、FTP、SMTP、IMAP及其他。当你从远程网站上请求一个网页时,一个连接请求被发送到web服务器,响应被发回到主机所在层, 然后浏览器就可以显示这个网页。

4. 传输层: TCP 字节段. 传输层提供端到端的数据传输和流管理服务,是独立的传输协议数据和类型的。它使用的端口就像HTTP的80端口和SMTP的25端口一样使发送主机和远程主机之间建立连接。


3. 网络层: 包. 数据包的路由机制在网络层执行. 网络层负责数据包在两个或多个网络间的穿行提供路径,以使数据包到达最终目的地. 网络层使用 IP Addresses 和路由表来确定哪个设备将数据包发送出去. 如果发送给路由器, 每个路由器负责将数据包发送到该级中的下一个路由器,而不是将整个路由从本地主机映射到目标主机. 网络层中主要是路由器在交换数据,以确定链路中的哪台设备将发送数据。



2. 数据链路层: 帧. 链路层管理一个单一的,局部的,逻辑的,物理网络硬件主机之间的直接连接. 链路层使用嵌入在网络接口卡(NIC) (MAC) 地址 地址来识别连接到本地网络中的物理设备。 链路层不能访问本地网路之外的其他主机.

1. 物理层: 位. 这是硬件层,它由NIC和物理以太网电缆以及数据帧硬件级别协议组成,用来为任何与本地计算机连接的其他网络节点传输由位组成的数据帧。


一个简单的例子

那么当主机实际上是利用TCP/IP网络模型在网络上发送数据是什么样子呢?接下来是我自己对数据是如何从某个网络移动到另一个网络中的猜想。在这个例子中,我的电脑将向远端服务器发送web页面的请求。

  1. 应用层, 浏览器发送HTTP连接请求消息给远端主机,www.example.com 发回的数据包含web页面的内容。这条消息数据只包含远程web服务器的IP地址。

  2. 传输层封装那些包含与远程web服务器的IP地址作为目的地址的TCP数据包的网页请求消息。 加上原始请求包,现在这个数据包包含初始请求的源端口,通常是一个数字较大的随机端口,以便知道返回的数据是由哪个端口监听;远程主机上的目的端口,本次案例中使用80端口。

  3. 网络层封装了TCP报文分组中的源和目的IP地址。

  4. 数据链路层使用地址解析协议(ARP)确定默认路由器的物理MAC地址,并将包含有源和目的MAC地址的网络数据包封装。

  5. 物理层,通过线缆发送数据帧,(线缆)通常使用CAT5或CAT6,从本地主机的网卡发送到默认路由上的主机的网络。

  6. 默认路由打开数据包并决定目的IP地址。路由使用路由表来确定下一个路由的IP地址,开始帧到下一跳的旅程。然后路由重新封装一个新的数据帧,包含自己的MAC地址作为源地址和下一个路由的MAC地址,然后通过一个合适的接口发送。路由将在第三层,网络层执行路由任务。


请注意,在二层及以上协议层中,交换机是无形的,所以并不会影响数据以逻辑方式的传输。交换机的功能仅仅是提供一个简单的方法来连接多台主机到一个单一的物理网络,通过以太网线缆。

你可以使用arp [-n]命令来查看所有主机的MAC地址,存储在其ARP表中。通常这些主机都位于本地网络。

路由表

所有的网络设备,不论是主机,路由器,或其他类型的网络节点比如网络打印机,都需要决定TCP/IP数据包去向哪里。路由表提供了所需的配置信息来做出这些决定。路由表类似图1的一个非常简单的路由表用于定义一个典型的到本地主机的单一路由,并确定是否发送数据包到默认网关路由。route -n命令列出路由表,-n选项显示唯一的IP地址,不会尝试执行DNS查找可替代的IP地址和主机名称。 netstat -rn 命令显示相似的结果。


 
[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选项,输出的目的地址列表中将出现“默认这个词”。默认网关0.0.0.0意味着数据包不会寻址到本地网络或者通过路由表中的附加条目来发送到无网络分类的默认网关。

图1中的Iface(接口)是出站网卡的名称,在本例中,是eno1. 对于那些被称为路由的主机,至少有两个或以上使用的网卡。每块网卡都作为一个路由连接到不同的物理网络和逻辑网络。标识栏的标识表明该路由可达(U),默认网关(G)。或许也存在其他标识。


对于多数主机来说路由决策是相当简单的:

  • 如果目的主机在本地网络中,数据将直接发送到目标主机.
  • 如果目的主机在远程网络中,并且可以通过路由表中列出的本地网关到达,那么数据将被发送到其明确定义的网关.
  • 如果目的主机在远程网络中,并且没有任何路由条目定义其到该主机的线路,那么数据将被发送到默认网关。

这些规则说明,如果一条都不符合,那么数据包将被发送到默认网关。


下面图2中的路由表看上去有一点复杂,是因为它属于一个充当路由连接到三个网络的Linux主机,其中一个连接到互联网。本地C类网络,eth1接口IP192.168.0.0/24,192.168.25.0/24在eth2,各有各的表项,以及通向世界的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地址,一个192.168.1.25/30,为路由器的LAN网段,192.168.1.26/30为主机本身


路由配置

那么如何配置路由呢?当主机通过DHCP连接网络,DHCP服务器将提供默认路由信息,包括DNS、IP地址或许还有其他信息比如NTP服务器的IP地址。对于配置静态路由信息来说,通常很简单, 不过有时也有一点点复杂。

在多数情况下,添加默认路由信息到/etc/sysconfig/network 文件可以使网络自动配置路由表中的默认路由条目。该条目看起来就像图三中的示例。

 

 
GATEWAY=192.168.0.1

图3:网络文件中的网关条目

只有默认网关可以通过网络文件配置。

在静态配置环境中,配置默认​​网关的另一种方法是将它添加到在/etc/sysconfig/network中-scripts目录相应的接口配置文件。要添加网关到接口eth0的配置文件中,你可以添加在同一行,如图3所示的ifcfg-eth0文件。如果你这样做,你应当从网络中删除文件条目。

在更复杂的环境中,当主计算机使用多块网卡连接到多个网络,并且当如果有需要被加入到路由表中的至少两个及可能更多的路线,应该考虑使用在一个在/etc/sysconfig/network中的路由文件。对于网卡enp7s1而言,该文件应该是路由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中。

总结

(路由表)可以有更多的路由条目。比这些简单的例子中显示的多,这是很常见的。本例中信息仅仅只是一个开始。对于那些更复杂的网络环境,你可以参照 Inside TCP/IP, 第二版, 或者 TCP/IP Network Administration 作者是Craig Hunt. 如果你还想要更多信息请参阅不同的发行版本号。对于基于RPM的比如Fedora 和Centos, Red Hat Enterprise Linux 7 deployment guide 是一个好的参照读物。.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值