作者:小北甜甜 | 来源:互联网 | 2023-09-05 19:06
在一些常见的网络设备中(如交换机、路由器),为了实现网络转发功能,各自通过维护一些表项来完成路由寻址及快速转发功能,其中比较重要的表项有:
本文对这网络中的最关键的四个表项做一个详细介绍。
目录
1. 路由表(Routing Table)、转发表(Forwarding Table)
2. Mac表(Media Access Control Table)
2.1 地址学习线程:
2.2 报文转发线程:
3. ARP表(Address Resolution Table)
4. 小结
1. 路由表(Routing Table)、转发表(Forwarding Table)
在计算机网络中,路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。为了能够实现从众多路径中选择最佳的传输路径,路由器中保存了周边网络的拓扑信息和各种路径参数,我们将这张表称作路由表。路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表建立的主要目标是为了实现路由协议和静态路由选择。
在每一个路由器设备中,通常都维护了两张比较相似的表,分别为:
- 路由信息表(Routing Information Base),简称为RIB表、路由表
- 转发信息表(Forwarding Information Base), 简称为FIB表、转发表
其中,路由表(RIB表)用来决策路由;转发表用来转发分组。
由于路由器的核心工作便是为经过路由器的每一个数据包找到最佳路径。何为最佳? 当然是在众多路径中选择最快、质量最好、路径最短、…等指标选择最优的路径,并将到达不同网络的最优路径对应的路由组成一张新的表格,即FIB表(转发表)。
在我的Ubantu系统中可以分别通过route 、 route -F 来查询RIB表和FIB表。
由于是主机设备,路由表比较简单,且不存在多个出接口,因此FIB表和RIB是相同的。
需要说明的是:这两种表存在多种叫法,但是只要知道了这两个表的作用,那么见到其他的叫法时便也不再陌生。通常情况下,我们在网络转发中提到的路由表,是这两个表的统称,或者根本没有区分使用的哪张表。不同的网络设备也有可能采用不同的表作为路由、寻址、转发的依据。
路由表项内容:
在路由表中,每一项都包括如下内容:
- 目的网络地址(Destination) + 子网掩码(Genmask):
网络地址和网络掩码共同确定本机可以达到的目的网络范围,通常情况下,目的网络范围包含以下几种情况: (1) 主机地址:某个特定主机的网络地址; (2) 子网地址:某个特定子网的网络地址; (3)默认路由:所有未在路由表中指定的网络地址,用0.0.0.0统一匹配,用于配置默认网关(ubantu虚拟机中默认路由显示为default)
- 网关(Gateway)/下一跳(Next Hop):
一般终端设备如(PC,手机等)接入网络时,无需配置任何路由信息,而是通过路由器的DHCP协议分配IP地址,终端设备接收IP地址的同时会将本设备的网关设置为直连的路由器。而后上网过程中所有的报文在查询路由时,由于没有其他路由,因此被直接发送到了网关设备,有网关设备进行后续转发功能。
而网络设备一般通过配置动态路由协议来更新路由表,除此之外也会设置默认网关。在收到数据包时如果路由表中有对应的路由表项,则通过此表项的出接口发送到下一跳网络设备,如果没有匹配到相应的路由表项,则需要发给默认网关,有网关进行后续转发处理工作。
接口定义了针对特定的网络目的地址,路由器用于转发数据包的出接口。即用来确定数据包从哪个网口上发送到下一跳设备。
跳数用于指出路由的成本,通常情况下代表:到达目标地址所需要的总路由器个数,一个跳数代表经过一个路由器,IP数据报首部中的TTL字段就是该数据报所能存活的总跳数。跳数越少往往代表着该路由成本越低,跳数越多则说明成本越高。当具有多条达到相同目的网络的路由选项时,路由算法会选择具有更少跳数的路由。
路由表中常见的flag标记有:
(1) U:路由是动态的;
(2) H:目标是一个主机;
(3) G:路由指向网关;
(4) R:恢复动态路由产生的表项;
(5) D:由路由的后台程序动态安装;
(6) M:由路由的后台程序修改;
(7) !: 拒绝路由。
以前工作中经常查看思科设备路由表,它的标记位更加详细,明确标出了路由条目所属动态路由类型。
Linux内核中未使用,一般是0;
此路由项被路由软件查找的次数。
路由表中有三类路由:
- 直连路由(由链路层协议发现的路由)
- 静态路由(由管理员手动配置的路由)
- 动态路由(由动态路由协议发现的路由)
静态路由表特点:
静态路由是由管理员在路由器中手动配置的固定路由,由管理员负责维护工作,静态路由不会超时老化、也不会同网络拓扑结构的变化发生变化。静态路由由于完全需要管理员的维护,不能实时感知网络拓扑并进行调整,通常只用于小规模、拓扑简单的网络中。
动态路由表特点:
动态路由表由动态路由协议创建、更新、维护;常见的动态路由协议有:BGP协议、RIP协议、OSPF协议、ISIS协议、EIGRP协议等。动态路由协议最大的优势是:可以实时感知网络拓扑的变化,并对路由表做出相应的调整;网络扩展性好,适合大中型网络;
路由表匹配原则:
- 精确匹配算法
- 最长前缀匹配算法(Longest Prefix Matching, 简称LPM)
通常情况下,网络设备会同时实现这两种匹配算法,但是各家在实现上有所不同而已。路由匹配算法对于网络设备而言,非常重要。作为转发设备,如果路由条目达到一定数量(如十万条级别,百万条级别、千万条级别、…),就需要充分考虑匹配算法的性能问题。
除了要考虑算法检索效率问题,还需要考虑是否可以借助硬件实现查找加速。
典型的算法有:
- 以Linux的路由查找算法为代表的的哈希(桶)算法
- Linux的LC-Trie树查找算法
- BSD/Cisco的Radix查找算法
- BSD/Cisco的256叉树查找算法
- DPDK中采用的分段查找算法(类似多级页表查询方式)
如果需要详细了解路由表匹配原则,可以仔细阅读下面的文章。
Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树
从ISO网络模型上划分来说,路由表位于网络层,它用来进行路由和寻址功能。而Mac表则维护数据链路层,用来记录MAC地址-->端口之间的映射。说道MAC表,虽然每一台网络设备商都存在,但是更多的是在交换机中进行详细介绍。
MAC表项:
MAC表中包括的内容有:
- MAC地址
- 物理接口
- Mac条目类型(可能)
- 老化时间
- VLAN-ID(可能)
因为MAC表项也存在动态Mac和静态Mac之分,因此在Mac表中会有老化时间、类型。
静态MAC地址与静态路由一样,有管理员负责管理维护;而动态Mac表项则是通过学习而来。在交换机中一般存在两个重要线程:地址学习线程、报文转发线程。
2.1 地址学习线程:
- 源MAC学习法: 交换机从网络上收到报文后,利用数据包的源MAC地址进行学习,并建立MAC表项。
- 端口移动机制:交换机收到报文后,如果发现报文接收端口与MAC表中对应的端口不一致时,进行端口移动,将Mac地址重新学习到新的端口上。
- 地址老化机制:如果长时间没有收到某Mac表项对应的报文,则删除此表项。等下次报文来时重新进行学习。
2.2 报文转发线程:
- 交换机收到报文后,根据报文中的目的Mac查询Mac表。如果找到,则从相应的端口发出;如果没有找到,则向除入端口以外的所有端口发送(即传说中的泛洪);
- 如果交换机收到的报文目的Mac和源Mac所在端口相同,则丢弃此报文;
- 交换机收到的目的Mac为广播报文时,则向除入端口以外的所有端口转发广播报文。
注意:广播和泛洪是两个不同的概念,虽然有时两个都向所有的端口发送报文。
3. ARP表(Address Resolution Table)
在7层OSI模型中,IP地址工作在第三层(网络层),Mac地址工作在第二层(数据链路层),两者之间各行其道,互不干扰。在进行报文转发时,目的IP地址我们是明确的,但是目的Mac地址却不知道;在封装报文时,先封装IP头部,然后填充二层头部。但是由于不知道Mac地址,因此二层头部无法填充,此时便需要用到ARP协议,它通过查询指定IP地址对应的Mac地址,构建出一个Mac表项,我们通过查询此表项便可以知道:目的IP地址对应的Mac地址。因此在Mac表,本质上就是:IP地址和Mac地址间的映射。
4. 小结
上文中主要介绍了计算机网络中经常遇到的3类表(路由表、ARP表、Mac表)。其中路由表又可以细分为路由信息表(RIB)和转发信息表(FIB),RIB表用来维护网络的拓扑信息,而FIB则是从RIB表中选择最优的路由构成的转发表信息。在进行报文转发(发送)时:
- 先查询路由表,确定目的地址是否可达,如果可达则确定出接口和下一跳信息
- 再查询ARP表,获取到目的地址对应的Mac地址信息,构建完整的以太网报文。
- 最后查询Mac表,是为了确定报文的发送接口,确定了出接口,内核会将报文发送到对应的网卡驱动上,网卡在合适的时间会将报文发送到下一跳设备上。
忽然又想到一个问题:路由表中存在出接口,而Mac表中也存在出接口,两个表中的出接口在各自的表中的作用是什么?