Tags

路由表 (Routing Table)

一句话概括:路由表是给人看的!这好像听起来很奇怪,但仔细想想确实如此,一般路由表的条目是这样的:
S 1.1.1.0 255.255.255.0 G1/0 2.2.2.2
想必有点网络基础都能看的懂这个条目的含义,用户界面非常友好,可以方便用户来检查、排错。
如果只有这一张表,看看如何工作?

进程转发 (Process Forward)

假设路由器接收到一个 IP 包,目的 IP= 1.1.1.1,恰好匹配到这条路由,需要将该 IP 包从 G1/0 转发出去,下一跳是 2.2.2.2,需要将 IP 包用以太网帧格式封装,可是需要知道 2.2.2.2 的 MAC,那还要去检查 ARP cache 是否存在,如果不存在,还需要经过 ARP 广播去发现对方的 MAC,这个过程是很缓慢的,效率低下。这整个过程 Cisco 命名为进程转发 (Process Forward)。

快速转发 CEF (Cisco Express Forward)

既然在转发过程中,需要知道下一跳的 MAC、或必要的封装信息(比如 PPP),为何要等到包来了之后才去发现下一跳的 MAC 呢?是否可以未雨绸缪?比如一旦生成路由表,立马就主动发现下一跳的 MAC,缓存在 ARP Cache 表中,流量来了直接就可以封装了,无需再发 ARP 广播了。
这是一个好主意,于是 Cisco CEF 创建了另外一张表:adjacency table,用于收集二层 MAC 地址信息,然后再根据 routing table + adjacency table 创建 CEF table ,这张表里拥有转发所需要的一切必要信息,甚至把发往下一跳的二层头构建好了,转发时用二层头 + IP 包 就可以扔出 G1/0 接口了(当然要 TTL -1,重新计算 IP CRC)。

转发表 FIB (Forward Information Base)

以上都是基于软件 CPU 转发,转发效率低下,相比硬件转发至少一个数量级的差距。所以我们需要将 CEF Table 下发到硬件芯片上,硬件芯片只对二进制的 0、1 敏感,为了提高转发效率需要将 CEF Table 转换为硬件友好界面,所以需要 CEF Table 进行十进制转二进制;此外硬件也不认识接口 G1/0,需要用 IfIndex 代替 (Interface Index,将所有路由器接口编号,用二进制 0、1 识别)生成的全新的表:FIB Table,将 FIB 表下发配置到硬件芯片,然后芯片就静静地等待 IP 流量的到来… 所以转发表 FIB 是给硬件芯片看的!
 
路由表是如何生成的?
路由表或由路由协议(RIP/OSPF/ISIS/BGP)、或静态配置、或直连路由竞争(依据 AD 值大小)产生路由表是一切转发表的源头,巧妇难为无米之炊,路由表就是那个米,没有米一切都是浮云,路由表的收敛会触发转发表的更新,所以保证路由表的稳定与快速收敛是关键中的关键。
寻路 Routing最优路径)是路由协议动态进行的,路由协议的输出就是路由表,依据路由表产生硬件转发表,然后硬件转发表负责流量的转发。简图如下:路由协议收集链路 LSA / update —> Routing Table —> CEF Table —> FIB Table。

 
路由器的基本功能就是路径的选择与数据包的转发。路由就是路径的选择,转发就是将数据包从选定的路径发送出去
如果把 “路由” 当成构成路由表的过程的话,那么就属于控制层面的操作,其包含两个功能:
  • 构造分布式系统(即获得拓扑信息),比如构成邻居表
  • 计算路径(在拓扑信息上基于某种规则计算),最后该路径被放入路由表中
构成路由表之后,会通过本地比较,形成一张转发表。

牛博恩
题主提问里提的 “路由” 和“转发”应该都是动词,那么对应的英文分别是 “routing” 和“forwarding”,routing 不严谨的翻译是 “路由” 严谨的翻译是“路由转发”,
这样说答主的疑问也就没有了,“路由转发” 专指根据目的 IP 进行转发的动作,“转发” 泛指路由转发或其他类型的转发,视上下文而定。
建议学习网络选用英文教材。
网件 NETGEAR​
互联网网络中路由器是必不可少的网络设备,路由转发也就是路由器最主要的功能。
在网络通信中,“路由” 一词是一个网络层的术语,它是指从某一网络设备出发去往某个目的地的路径;而路由表则是若干条路由信息的一个集合体。
notion image
路由表中每一行就是一条路由信息,通常情况下,一条路由信息由三个要素组成:目的地 / 掩码(2.1.0.0/16)、下一跳 IP 地址 (12.0.0.2)、出接口 (GigabitEthernet1/0/1)。目的地 / 掩码顾名思义就是最终需要到达的地点;下一跳 IP 地址就好比是你从起始站坐公交到终点站,如果你刚从起始站出发,那么第二站就是你的下一跳 IP 地址,如果你从第二站开往第三站,那么第三站就是你的下一跳 IP 地址;出接口就好比是公交车起始站。
notion image
转发是建立在路由表基础上进行的,当路由器收到一个数据包后,会与路由表中的路由信息相比对,如果能匹配对应的路由信息,那么就会将收到的数据包按照预定的路由信息发送出去,如果没有匹配的路由信息,那么该数据包会被丢弃掉。
假设有个快递从上海寄到北京,快递员取走包裹送到中转站,然后由中转站运输到下一个中转站,最终送达客户手中。该快递就好比数据包,快递公司提前指定的送达路线图就是路由信息,而整个快递公司就是转发者。
综上所述,路由和转发的区别就在于路由是指具体的数据包发送的路径信息,而转发则是一个发送的动作,并且这个发送是需要优先匹配路由信息的!
参考
《HCNA 网络技术学习指南》
Loading...