热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

路由表(RIB表、FIB表)、ARP表、MAC表整理

在一些常见的网络设备中(如交换机、路由器),为了实现网络转发功能,各自通过维护一些表项来完成路由寻址及快速转发功能,其中比较重要的表项有&



在一些常见的网络设备中(如交换机、路由器),为了实现网络转发功能,各自通过维护一些表项来完成路由寻址及快速转发功能,其中比较重要的表项有:


  • 路由表
  • 转发表
  • Mac表
  • ARP表

本文对这网络中的最关键的四个表项做一个详细介绍。

目录

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地址的同时会将本设备的网关设置为直连的路由器。而后上网过程中所有的报文在查询路由时,由于没有其他路由,因此被直接发送到了网关设备,有网关设备进行后续转发功能。

而网络设备一般通过配置动态路由协议来更新路由表,除此之外也会设置默认网关。在收到数据包时如果路由表中有对应的路由表项,则通过此表项的出接口发送到下一跳网络设备,如果没有匹配到相应的路由表项,则需要发给默认网关,有网关进行后续转发处理工作。


  • 接口(Iface):

接口定义了针对特定的网络目的地址,路由器用于转发数据包的出接口。即用来确定数据包从哪个网口上发送到下一跳设备。


  • 跳数(Metric):

跳数用于指出路由的成本,通常情况下代表:到达目标地址所需要的总路由器个数一个跳数代表经过一个路由器IP数据报首部中的TTL字段就是该数据报所能存活的总跳数。跳数越少往往代表着该路由成本越低,跳数越多则说明成本越高。当具有多条达到相同目的网络的路由选项时,路由算法会选择具有更少跳数的路由。


  • 标志(Flag):

路由表中常见的flag标记有:

 (1) U:路由是动态的;

 (2) H:目标是一个主机;

 (3) G:路由指向网关;

 (4) R:恢复动态路由产生的表项;

 (5) D:由路由的后台程序动态安装;

 (6) M:由路由的后台程序修改;

 (7) !: 拒绝路由。

以前工作中经常查看思科设备路由表,它的标记位更加详细,明确标出了路由条目所属动态路由类型。


  • 引用次数(Refs):

Linux内核中未使用,一般是0;


  • 查询次数(Use):

此路由项被路由软件查找的次数。

路由表中有三类路由:


  • 直连路由(由链路层协议发现的路由)
  • 静态路由(由管理员手动配置的路由)
  • 动态路由(由动态路由协议发现的路由)

静态路由表特点:

静态路由是由管理员在路由器中手动配置的固定路由,由管理员负责维护工作,静态路由不会超时老化、也不会同网络拓扑结构的变化发生变化。静态路由由于完全需要管理员的维护,不能实时感知网络拓扑并进行调整,通常只用于小规模、拓扑简单的网络中。

动态路由表特点:

动态路由表由动态路由协议创建、更新、维护;常见的动态路由协议有: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树

 


 2. Mac表(Media Access Control Table




从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表中也存在出接口,两个表中的出接口在各自的表中的作用是什么?

 






推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 这篇文章 | 夕阳下的防火墙命令全解 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
author-avatar
小北甜甜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有