路由表究竟是什么?

路由表里是否仅仅存储着从所有可到达的目的IP地址映射到本路由器输出端口的映射信息?
我的意思是,路由表里存储的内容是否包括 从本路由器 到达 所有目的IP地址的整个路由的宏观信息(应该是三维结构)?
如果不包括,从本路由器 到达 目的IP地址的整个路由 的宏观信息 是如何体现的?是否有特定的存储数据类型(类似于路由表)?
 
问题的答案,题主已经自己归纳出来了,而且归纳的还很干练,看得出题主应该是做软件开发的。路由表,其实就是将路由空间(所有潜在的目的地,上限为 232),映射为本地物理接口/软件接口。写完这句话,今天文章到这里应该就结束了,但是为了让读者彻底理解路由表,还得继续写。
如果要将232个IP一一映射为本地接口,那么路由表将变得异常庞大。仔细想想,其实真的没有必要一一映射。对于主机来说,通常就两个接口,一个硬件接口、一个软件接口。而这个软件接口的IP = 127.0.0.1/8,那么只需要一条路由即可到达目的地127.0.0.1/8,对应接口为软件接口,不是吗?
硬件接口的IP通常是由DHCP Server分配的,比如 192.168.1.2/24,系统根据这个IP立马就生成一条路由,指向192.168.1.0/24,对应接口为硬件接口。
除了以上两个目的地,如何用最干练的路由表来高度归纳,其实很简单:
0.0.0.0/0   ----- > 硬件接口
对于普通的主机来说,以上三条路由就可以映射整个232个IP地址空间。
如果一个主机拥有两块硬件出口,路由表又如何变化呢?
至少要增加一条0.0.0.0/0   ----- > 另外一个硬件接口
主机有两条0.0.0.0/0路由,分别映射接口A、B,谁是更优的接口?
这就完全要看主机的操作系统的选择了,通常可以根据路由表的metric大小来优选,谁小用谁。如果一样呢,那么就负载均衡。路由表对于主机就是这么简单,可是对于路由器来说,就没有那么简单了。
主机生成路由表的逻辑是根据接口的IP、网络掩码、以及缺省网关来动态生成的。路由器则没有那么简单,路由器为了与自己的邻居交换各自的路由表,运行了很多路由进程,比如OSPF路由进程、BGP路由进程。
每个进程都独立自主运行着,然后将路由进程认为最优的路由表,尝试写入全局路由表。全局路由表的监控进程也不是那么好糊弄的,如果有多个路由进程都试图写入同样的路由表,比如17.0.0.0/8,哪个进程的路由表更优呢?是OSPF进程还是BGP进程?
通常每个厂商的路由器优选名称也不一致,Cisco优选名称为AD,Juniper优选名称为Preference,谁的值越小,谁更优。
以Cisco为例,默认EBGP的AD=20,而OSPF的AD= 110,那么自然会优选BGP的路由条目。问题来了,来自BGP路由进程的17.0.0.0/8一定会进入全局路由表?
不一定!
为什么不一定?
因为BGP路由表的下一跳不是本地出接口,而是一个IP地址。如果这个下一跳可以通过全局路由表到达,那么这个BGP路由就可以进入全局路由器。否则就无法进入。
接下来会发生什么?
由于BGP的路由条目17.0.0.0/8下一跳不可达,就失去了与OSPF竞争的机会,那么够资格进入全局路由表的,就只剩下OSPF了,那么OSPF的路由条目进入全局路由表。
(0)

相关推荐