指路明灯 – IP 路由技术

TCP/IP 的目标是实现网络与网络之间的互连,即将各种(异构)的网络“整合”成一个统一的网络。针对“整合”后的复合系统,必须要解决的两个关键问题:

  • 怎么“划网” – 系统中各个要素标识(命名)体系的问题

    首先,必须要对复合系统中的各个要素进行区分,这就要求各个互连的网络本身、各个网络中的通讯节点(计算机)在复合系统中都需要有自己的标识,而且标识应唯一;

  • 怎么“找路” – 网际互连后,节点间通讯路径建立的问题

    进行网际互连之前,各个网络都有自己内部的节点间通讯方式;网际互连之后,更大的复合网络中两个节点之间如何通讯,而通讯的首要问题就是:复合网络中各个节点有了自己的标识后,两个通讯节点之间如何“找到”通讯路径问题;

两个问题,都是通过 IP 技术来解决。

针对问题一,采用将 IP 划分为“网络号 + 主机号”的方案解决。由此,也衍生出相关的 IP 网络号及主机号划分方法。

针对问题二,采用 IP 路由转发技术来解决。

IP 路由转发原理

互连网络上两个节点间的通讯,本质上是两个节点之间 IP 数据包的发送与接收。IP 数据包由起始节点到达目的节点,可能要经历多个中间节点,而且可能的路径不只一条,必须有一种机制,指导 IP 数据包由起点到终点的这条路该怎么走。IP 技术采用路由表机制来解决这一问题。

IP 数据包在起始节点到目的节点的过程中,需要整个路径中的所有节点“接力传输”。每个节点的任务职责很明确 — 只负责完成整个传输路径中的“一步”。为此,IP 技术在互连网络中的每个 主机节点 和每个网络之间的 连接枢纽节点(路由器) 中都为 IP 数据包设置了一张路径选择的指南表 — 路由表。由路由表作为指导,来完成接力传输的指导工作,告诉 IP 数据包下一步该怎么传。当 IP 数据包由通讯起始节点发出时,IP 数据包要参照起始节点的路由表,选择传输中的下一个节点;到了下一个节点后,继续查看本节点的路由表,进而选择再下一个节点;重复上述过程,直至 IP 数据包到达最终的目的节点。

20191104-1

由此可见,路由表本质就是“下一步”的信息表,根据不同的目的地,给出不同的下一步信息。

  • 当目的地和 IP 转发节点在同一个网络时,直接交付数据包;
  • 当目的地和 IP 转发节点不在同一个网路时,需要将数据包发给“下一个”接力节点;

路由表的主要内容

每个节点都有属于自己的路由表,路由表在操作系统内核中维系。系统产生的或转发的每份 IP 数据包都要搜索路由表。

Linux 系统中,可通过 routenetstat -r 查看内核路由表。

20191104-2

内核路由表将目标地址相关信息、下一跳相关信息等内容全面呈现出来。

目标地址相关信息

  • Destination
    • 目标网络 或 目标主机
    • 当 Destination 为 default(0.0.0.0)时,表示这是默认路由项。当 IP 数据包与路由表中所有其他的目的地址都不匹配时,则选择默认路由这一项进行转发。可以说,默认路由项是数据包转发最后的底牌
  • Genmask
    • Destination 字段的网络掩码
    • Destination + Genmask,构成了完整明确的目标(网络或主机)
    • 当 Destination 是主机时,设置为 255.255.255.255;当 Destination 是默认路由时,为 0.0.0.0

下一跳相关信息

  • Gateway
    • IP 数据包下一跳的地址,即指明 IP 网关(路由器)的地址,这个地址通向 Destination
    • 当 Gateway 为 0.0.0.0 时,表明本项路由记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关,该路由直接由本机传送
    • 当 Gateway 为一个具体 IP 时,表明本项路由需要经过网关(路由器)的协助才能发送出去。下一跳网关的地址即为具体的 IP 地址
  • Iface
    • 该路由表项对应的数据包输出接口

综合信息

  • Flags
    • 标志位,说明本条路由的相关信息
    标志值 说明
    U 路由项整体状态。该路由是活跃的,可以使用,U 代表 up
    H 表中 Destination 项的说明。表明路由表中 Destination 项的内容是一个主机。 没有该标志,表明 Destination 项的内容是一个网络,Destination中的值应为 一个网络号
    G 表中 Gateway 项的说明。表明路由表中 Gateway 项的内容是一个网关(路由器)。 没有该标志,说明目的地址是与本机直接相连的,IP 数据包可以不通过路由器直接 交付,这种情况下,Gateway 一般设为 0.0.0.0


    标志 G 至为重要,它区分了直接送达(直接路由)和路由转发(间接路由)。G 一旦置位,就表明路由表中 Gateway 中是一个路由器地址。

    在配置网络信息时,都会添加默认网关,实际上就是在本机路由表中添加了默认路由项。

路由表的构建

路由表是 IP 数据包转发的真正“指挥官”,决定着 IP 数据包转发的正确性与效率。如何高效构建路由表则成为基于 IP 数据包转发网络高效运行的关键要素。

路由表构建主要有两种方式,静态构建和动态构建。与传统的静态和动态技术一样,静态构建指路由表中的路由项由静态(人工)设置生成,设置完成后,路由规则是固定的,在没有人为干预的情况下,不会变化;动态路由表则相反,它会主动感知网络的变化(如利用 ICMP 数据包),自动的创建或修改路由表中的路由项,进而实现“自治”。

静态路由对于结构简单的网络优势明显,针对这种网络的路由表一般比较简单,一经确定,可以保持状态高效运行;而对于大型复杂网络,尤其是不断变化的网络,如 Internet,静态方式显然不能满足其要求,需要采用动态路由方式,为此,也产生很多动态路由生产方法,如 RIP、OSPF、BGP 等。

路由工具链

1) route

route 工具为静态展示和操作系统路由表提供了便利。

  • 显示路由表

    route -n

  • 添加路由

    route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

    添加到主机的路由
    
    route add -host 192.168.1.2 dev eth0 
    注: 不添加网关gw内容,默认为直接交付,网关为 0.0.0.0
    route add -host 10.20.30.148 gw 10.20.30.40  
    
    添加到网络的路由
    
    route add -net 10.20.30.40 netmask 255.255.255.248 eth0   
    route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 
    route add -net 192.168.1.0/24 eth1
    
    添加默认路由
    route add default gw 192.168.1.1
    
  • 删除路由

    route del [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

    route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0
    注: 删除路由主要为了删除 Destination 项的目标,因此删除路由项时需要将相关信息写全
    

Reference:

  1. 《计算机网络》,第五版
  2. 《TCP/IP Illustrated》, Volume 1
  3. 《Internetworking with TCP/IP》, Volume 1
  4. 《鸟哥的私房菜(服务器篇)》
  5. https://blog.csdn.net/kikajack/article/details/80457841
  6. https://www.cnblogs.com/baiduboy/p/7278715.htm

发表评论

电子邮件地址不会被公开。 必填项已用*标注