路由表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习目标
(一)了解路由器的相关概念和基本知识
一、子网寻径及路由
标准的路由表表目是一个二维组(目的网络地址,下一站地址),其中不携带子网信息,不能满足子网寻径。
引入子网编址以后,路由表的每一表目中加入子网掩码,于是路由表表目变为三维组:子网掩码、目的网络地址、下一站地址。
表1 路由表结构及使用
二、路由算法、路由协议、寻径
路由器依据路由表来为报文寻径,路由表由路由协议建立和维护。
路由协议的设计则是依据某种路由算法。
1.什么是路由
路由器提供了将异构网互联的机制,实现将一个数据包从一个网络发送到另一个网络。
路由就是指导IP数据包发送的路径信息。
2.通过路由表进行选路
图2 查看路由表
路由器转发数据包的关键是路由表。
每个路由器中都保存着一张
路由表,表中每条路由项都指明数据包到某子网或某主机应通过路由器的哪个物理端口发送,然后就可到达该路径的下一个路由器,或者不再经过别的路由器而传送到直接相连的网络中的目的主机。
路由表中包含了下列关键项:
目的地址(Destination):用来标识IP包的目的地址或目的网络。
网络掩码(Mask)、输出接口(Interface)、下一跳IP地址(Nexthop)。
3.路由表中路由的来源
在路由表中有一个Protocol字段,指明了路由的来源,即路由是如何生成的。
路由的来源主要有3 种:
(1)链路层协议发现的路由(Direct)
它的特点是开销小,配置简单,无需人工维护,只能发现本接口所属网段拓扑的路由。
(2)手工配置的静态路由(Static)
静态路由是一种特殊的路由,它由管理员手工配置而成。
通过静态路由的配置可建立一个互通的网络,但这种配置问题在于:当一个网络故障发生后,静态路由不会自动修正,必须有管理员的介入。
静态路由无开销,配置简单,适合简单拓扑结构的网络。
3)动态路由协议发现的路由(RIP、OSPF等)
当网络拓扑结构十分复杂时,手工配置静态路由工作量大而且容
易出现错误,这时就可用动态路由协议,让其自动发现和修改路由,无需人工维护,但动态路由协议开销大,配置复杂。
4.路由优先级
到相同的目的地,不同的路由协议(包括静态路由)可能会发现不同的路由,但并非这些路由都是最优的。
事实上,在某一时刻,到某一目的地的当前路由仅能由唯一的路由协议来决定。
这样,各路由协议(包括静态路由)都被赋予了一个优先级,当存在多个路由信息源时,具有较高优先级(数值越小表明优先级越高)的路由协议发现的路由将成为最优路由,并被加入路由表中。
5.路由权
路由权(Cost)表示到达这条路由所指的目的地址的代价,通常路由权值会受到线路延迟、带宽、线路占有率、线路可信度、跳数、最大传输单元等因素的影响,不同的动态路由协议会选择其中的一种或几种因素来计算权值(如RIP只用跳数来计算权值)。
该路由权值只在同一种路由协议内有比较意义,不同的路由协议之间的路由权值没有可比性,也不存在换算关系。
路由表学习笔记
---------------------
作者:wangpeihuixyz
来源:CSDN
原文:https:///wangpeihuixyz/article/details/39481361?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
路由子系统的核心是转发信息库(Forwarding Information Base,FIB),即路由表。
路由表是用来存储这样一些信息的:一是用以确定输入数据是应该上传给本机的上层协议还是继续转发的信息;二是如果需要转发,为转发数据报提供所需要信息;三是输出数据报应该从哪个具体的网络设备输出的信息
路由表项的维护以及查找涉及以下文件:
include/net/ip_fib.h 定义路由表等结构、宏和函数原型
net/ipv4/fib_lookup.h 定义路由查找的相关函数原型
net/ipv4/fib_hash.c 实现路由表的查找和维护
net/ipv4/fib_frontend.c 实现操作路由表的接口函数和通知
net/ipv4/route.c 实现路由缓存项的操作函数
路由要素:
(1)路由表
路由表是一个由路由表项组成的数据库,并为诸如IPv4等其他子系统提供了多种接口,其中最重要的接口就是路由查找
(2)作用范围
IP地址和路由都有作用范围,用于说明它们在哪些情况下是有意义并可以被使用的。
IP地址的作用范围表示该IP地址距离本地主机由多远,而路由的作用范围表示到目的网络的距离。
IP地址的作用范围描述
Host 当一个地址只用于主机自身内部通信时,作用范围为Host,该地址在主机以外不可知并且不能被使用。
例如环回地址127.0.0.1
Link 当一个地址只在一个局域网(即每台计算机通过链路层互联的一个网络)内有意义且只在局域网内使用时,该地址的作用范围为Link。
例如子网的广播地址。
子网内一台主机发送到子网广播地址的数据报被送给同一子网内的其他主机
Universe 当一个地址可以在任何地方使用时作用范围为universe,这是大多数地址的默认 scope
路由的作用范围描述
Host 当一条路由使目的地址为本地主机时,作用范围为host
Link 当一条路由使目的地址为本地网络是,作用范围为Link
Universe 当一条路由使目的地址超过一跳时,作用范围为universe
(3)默认网关
默认网关通常是指0.0.0.0/0路由,当到一个目的地址不存在明确的路由项时使用该路由。
(4)特殊路由
当主机收到一个数据报后,路由子系统需要决定将它上传给本地上层协议还是继续转发出去。
因此在路由子系统中,有两张特殊的路由表:
一张表用于本地地址,存储了所有的本地地址,如果在该表中能查到匹配表项,则表明数据报是发给本机的
一张表用于所有其他的路由,路由表项由用户手工静态配置或由路由协议动态配置
在路由查找时先扫描本地路由表,只有当查找该表未果的情况下,才会去查找另一路由表,以确定是否可以转发。
路由缓存
一个路由表中的路由项数量,在一般的主机中可能只是几条而已,而在路由器中,这个数目可以达到数十万条。
因此很显然,在这种情况下维护一张更小的表来缓存路由查找结果是非常有必要的
路由缓存分为两部分:一部分是与协议(如IPv4等三层协议)相关的缓存,这就是缓存框架部分,每个元素被定义为一个由具体协议字段组成的集合;另一部分是与协议无关的缓存,通常被称为DST,嵌套在缓存框架中,只存储与协议无关的信息
路由表和路由缓存除了容量和结构不同之外,对象粒度也不同。
路由表使用连续地址的集合,即子网,而缓存项与单个IP地址相关联。
因此,路由表和路由缓存使用的查找算法也不同。
路由表结构
fib_table结构
对每个路由表实例创建一个fib_table结构,这个结构主要由一个路由表标识和管理该路由表的一组函数指针组成
struct hlist_node tb_hlist;
用来将各个路由表链接成一个双向链表
u32 tb_id;
路由表标识。
在支持策略路由的情况下,系统中最多可以有256个路由表,枚举类型rt_class_t 定义了保留的路由路由表ID
unsigned char tb_data[0];
路由表项的散列表起始地址。
在FIB_HASH算法中指向fn_hash结构,而在FIB_TRIE算法中则指向trie结构
fn_zone结构
一个zone是一组有着相同目的地址掩码长度的路由表项的散列表
struct fn_zone*fz_next;
将活动的(路由表项不为空)zone链接在一起的指针,该链表的头部存储在fn_hash数据结构的fn_zone_list字段中。
struct hlist_head *fz_hash;
指向存储该zone中路由项的散列表。
int fz_nent;
在该zone的散列表中fib_node实例的数目,用于检查是否需要改变散列表的容量。
int fz_divisor;
表示散列表fz_hash的容量,以及散列表桶的数目。
u32 fz_hashmask;
其值为fz_divisor - 1,用来计算散列表的关键值
int fz_order;
网络掩码的长度,255.255.255.0的网络掩码长度为24
__be32fz_mask;
网络掩码
fib_node结构
fib_node实例代表每一个唯一的目的网络的路由表项,即同一个子网中所有路由表项所共享的信息。
目的网络相同但其他配置参数不同的路由表项共享同一个fib_node实例,因此一个fib_node实例上存在着一个或多个路由表项。
struct list_head fn_alias;
fn_alias指向一个或多个fib_alias结构实例构成的链表
__be32fn_key;
由IP地址和路由项的netmask与操作后得到,被用作查找路由表时的搜索条件
fib_alias结构
fib_alias实例代表一条路由表项,目的地址相同但其他配置参数不同的表项共享fib_node实例
struct list_head fa_list;
将共享同一个fib_node实例的所有fib_alias实例链接在一起
struct fib_info*fa_info;
指针指向一个fib_info实例,该实例存储着如何处理与该路由相匹配数据报的信息
u8 fa_tos;
路由的服务类型比特位字段
u8 fa_type;
路由表项的类型,如RTN_UNICAST、RTN_LOCAL等
u8 fa_scope;
路由表项的作用范围
u8 fa_state;
一些标志的位图
fib_info结构
fib_node结构和fib_alias结构的组合用于标识一条路由表项,同时存储相关信息,更多信息,比如下一跳网关等重要的路由信息则存储在fib_info结构中。