经常在论坛上看到路由选择问题,为什么路由选择这样的路径?有人说是ad(administrative distance ),有人说是度量值(metric),有人说最长掩码匹配,这些说法说的既对也不对(或者说不完全对),路由器为什么选择这样的路径发送packet呢?其实是从2个方面来说的

路由选择分为2个层面:

1、Control 层面

2、data 层面

 

 

所谓的control层面就是路由器手工配置的路由表项与路由器经过路由学习获得的(就是配置static,或者经过ospf,eigrp,is-is,bgp,rip学习而来的),主要是比较1、ad,2、metric

这里借用xx的红头发老师的举的例子,

1、ad

你从成都到北京

有飞机(static),火车(ospf),汽车(eigrp),轮船(is-is)等等,哪个到北京(destination)的代价最小,或者说该路径可信度大小(0-255),谁的ad就越小,比如说做飞机只要2个小时,最快,而且打x折,只要300多,而坐火车需要10个小时,要400多,你肯定选择飞机做为旅行工具(放进topology tabel或者route tabel里面 )

2、metric

同样是从成都要北京,你发现飞机有多条走法:

1、直飞         (最快,2小时)(这里把时间做为metric,实际中是hop,cost,bandwidth,delay等等)

2、从西安转机   (稍快,5小时)

3、从武汉转机   (6小时)

你比较完后,肯定将直飞做为旅行工具(route tabel里面)

好了,control层面比较完了,你会发现你行程已经通过旅行社或者机场等等得到去(dentination)的路了(routing)了,那要你怎么走(去发送packet)呢

1、相与

 

相与就类似你要想去那里,好比,你知道了一个堆怎么去上海,北京,南京,广州的信息,你自己想去那里,比如你想去北京的中关村,你一比较,到北京可以到达。

你把要去dentinstion的ip address与netmask进行相与操作(这里是host地址啊,你别说你要访问一个网段),举个例子:你要与2.2.2.2/24进行通信:

路由表为

D: 2.2.2.0/24  S0

O:2.2.2.2/32  S1

D:192.168.1.0/24 S0

IS-IS:172.16.1.0/24 Fa0/0

.....

你是怎么知道走哪条路,先相与2.2.2.2与/24相与,得到2.2.2.0,在路由表一查:

D: 2.2.2.0/24  S0

O:2.2.2.2/32  S1

有2条,你为难了,我信谁了,要是一条,我就发送packet了

2、最长掩码匹配

 

最长匹配就类似,上个例子,你去中关村,有几条路,有到北京,有到北京朝阳区,当然到朝阳区的离中关村更精确了。

当然信任最长掩码的了

/24与/32谁长些,当然是/32了,我从s1口发送。(有人疑惑,不是说ad么,ospf110比eigrp90大啊,eigrp更可信啊,嘿嘿,这里是data层面了,不比较ad和metric了,只是选择从路由表找best的路径,如果有多条,就是负载均衡了)

本来是用gns3实验的拓扑,可惜4台路由器配置完2台,cpu就100%,然后挂了,所以用pt来完成吧,什么时候gns3能向pt学学少占点mem与cpu。(负载太高了)

 

R1与R2是12.1.1.0/24网段

R2与R3是23.1.1.0/24网段

R1与R3是13.1.1.0/24网段

R3与R4是34.1.1.0/24网段

 

R4上面起一个loopback 0口,ip地址为4.4.4.4,R1与R2,R4起eigrp,宣告12.1.1.0/24、23.1.1.0/24、4.4.4.4/24(我这里都是精确匹配)

R1与R2,R4起ospf,宣告13.1.1.0/24 、34.1.1.0/24 、4.4.4.4/32(注意ospf中loop口都是/32位的)

 

在去R1上面看看路由表:

 

 
  
  1. do show ip route 
  2. Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP 
  3.        D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
  4.        N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 
  5.        E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP 
  6.        i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area 
  7.        * - candidate default, U - per-user static route, o - ODR 
  8.        P - periodic downloaded static route 
  9.  
  10. Gateway of last resort is not set 
  11.  
  12.      4.0.0.0/8 is variably subnetted, 2 subnets, 2 masks 
  13. D       4.4.4.0/24 [90/2809856] via 12.1.1.2, 00:07:00, Serial0/0 
  14. O       4.4.4.4/32 [110/129] via 13.1.1.3, 00:01:05, Serial0/1 
  15.      12.0.0.0/24 is subnetted, 1 subnets 
  16. C       12.1.1.0 is directly connected, Serial0/0 
  17.      13.0.0.0/24 is subnetted, 1 subnets 
  18. C       13.1.1.0 is directly connected, Serial0/1 
  19.      24.0.0.0/24 is subnetted, 1 subnets 
  20. D       24.1.1.0 [90/2681856] via 12.1.1.2, 00:07:20, Serial0/0 
  21.      34.0.0.0/24 is subnetted, 1 subnets 
  22. O       34.1.1.0 [110/128] via 13.1.1.3, 00:01:15, Serial0/1
  23.  

看有2条到4.4.4.0的路由啊,

D       4.4.4.0/24 [90/2809856] via 12.1.1.2, 00:07:00, Serial0/0

O       4.4.4.4/32 [110/129] via 13.1.1.3, 00:01:05, Serial0/1

注意这2个不是一个网段啊

 

看看R1的数据库:(1类lsa(RLSA))

 

 
  
  1. do show ip ospf database 
  2.             OSPF Router with ID (1.1.1.1) (Process ID 110) 
  3.  
  4.                 Router Link States (Area 0) 
  5.  
  6. Link ID         ADV Router      Age         Seq#       Checksum Link count 
  7. 1.1.1.1         1.1.1.1         1156        0x80000002 0x00365c 2 
  8. 3.3.3.3         3.3.3.3         999         0x80000004 0x000c80 4 
  9. 4.4.4.4         4.4.4.4         999         0x80000003 0x00b971 3 

让我们看看,我去ping4.4.4.4,他是怎么走

没有抓包软件,只能看看pt自己的

 

 

 

 

看好了,packet是从R1发送到R3,而不是R2.source地址是13.1.1.1,destination地址是4.4.4.4.

这就是最长掩码匹配。

 

完毕