通过前面的学习,咱们讲解了路由器的启动和基本配置,今天咱们就看一下路由器中的一个重要内容,IP路由。在整个网络中路由和交换是重要的两个部分,今天开始来讨论一下路由。
什么是路由?路由是指导IP数据报文发送的路径信息。如图所示:
选择一个将数据包发往某个目标网络段或主机的路径就是路由的过程。用户产生的数据流比较文件,视频,Email等应用被从一个源地址转发到另一个目标地址,用来表示源和目的地的是IP地址,因此我们认为路由的过程就是将不同的IP地址网段的IP包进行转发。就相当于我们一个地方出发去另一个地方一样,会有很多路,那么你就需要从中选择一条你认为比较合适的路。那么实现这一功能的设备我们就称之为路由器。所以我们称路由器是数据包的运输工具。
路由器中有个路由表,作用是表明你从源地址到目标地址应该怎么走,相当是一个导航仪,路由器只要根据这个路由表就知道这个数据包应该转发到哪个地方?路由器如果要想管理这些路由表必须使用路由协议,所以路由协议的作用是:进行路由选择以及管理路由表。也就是说如果一个数据包交给了路由器,路由器会利用路由协议来检查自己的路由表:从源到目标有没有相应的路径,一旦选择了一条合适的路径后,路由器就会路由被路由协议。
其中这里出现了两个比较容易混淆的概念:路由协议和被路由协议:许多人刚开始接触的时候分不清楚,其实并不难,听我慢慢道来:
路由协议:是路由器中用来进行路径选择以及管理路由表所使用的协议,如:RIP,OSFP,EIGRP,IS-IS等。
被路由协议:以最终选择的路径为基础,将数据从一个设备发送到另一个设备提供服务的第3层协议
“杜氏”总结:路由器可以使用RIP,OSFP,EIGRP,IS-IS等路由协议来学习最佳路径,并进行路由选择,而被路由协议负责将来自上层的数据及最佳路径封装到IP数据包中进行传输。
也就是说像IP,IPX是支持路由的协议,所以称为可路由协议或被路由协议,那么有不可以被路由的数据包吗?有啊,如:NETBIOS就不能被路由,
那么路由器进行选路也就是路由器转发数据包的关键,起指导性的一个东西就是路由表。可以说路由表是一切的基础,如图所示:
我们的操作系统中也有路由表,如在windows中显示路由表的命令是:route print,显示结果如下图所示:
我们路由器中显示路由表的命令是:show ip route 显示如图所示:
虽然windows中的路由表和路由器中的路由表长的不一样,但有两项必须要有就是目标地址和下一个接口,也称为下一跳。所以路由表的主要作用就是决定了到什么地方的数据包,怎么走!当然我们讨论的是路由器的路由表,包含以下重要内容:
协议类型:创建路由条目的协议!
目的地址:数据包的目的地!单播,广播路由都关心的是目的地址,只有组播才关心源地址。
下一跳:怎么走!数据包应该交给谁!下一跳可以是本地接口也可以是下一跳路由器接口地址。
总结:路由表的作用:路由表中的每一个路由条目都指明了数据包到某个子网或者是网个主机应该通过路由器的哪个物理端口发出去,然后再到达下一个路由器或者是不再经过其他的路由器而是发送到与本路由器直接相连的目的主机。
我们结合图例来说明:
在上图中,如果10.120.2.0中的一台主机想发一个数据包到172.16.2.0中的一个主机上,首先这个数据包出来之来将给第一个路由器A,这个路由器会检查一下自己的路由表发现,发现这个数据包的目标网络是172.16.2.0这个网段,这个网段的数据包是通过自己的S0端口送出去的,于是通过自己的S0口送到了路由器B,此时路由器B再检查自己的路由表来决定下一跳的地址,当送到路由器C的时候也一样,一直转发到D上,D再检查自己的路由表会发现172.16.2.0是和自己直连的网络,于是就直接通过自己的相应端口把数据包送给目标主机。
这里所谓直连的意思是说:某个网段直接和路由器的某个端口连在一起。不再经过其他的路由器,可以直接发给目标主机。如我们在一个房间里。我可以直接看到你,直接和你交流,不需要说我现在不知道你在哪儿,我把我所说的话再交给另一个,由另一个人再传给你!
但是一个路由器如果能能力发送数据包,将数据包从一个网段发给另一个网段,从一个地方发给另一个地方,路由器必须要知道以下几个东西:
目标地址:这毫无疑问是最重要的,我们前面已经介绍了。
源地址: 这个数据包是从哪儿发过来的。
所有可能的路径: 从源到目标所有可以使用的路由信息,一般情况下都不止一条路。这和我们目常生活差不多,可以是火车,汽车,飞机,轮船等。
最佳路径:从所有可能的路由信息中找出一个最佳的路由项。
管理路由信息:涉及到如何选路的问题,这中间肯定会有一个标准:日常生活中肯定考虑到时间,费用,那么路由器中需要考虑的是:管理距离这个东西,我们来介绍一下管理距离
想了解管理距离就要先了解一下路由条目的三种学习方式,也就是说路由器知道路由信息的三种方式:
1 静态路由 在简单拓扑结构的网络里,网络管理员手动输入路由信息,由管理员手动设置,告诉路由器,去往某个主机或者某个网段的数据包应该怎么办!这种方法好处是无开销,配置简单,但只适合于简单拓扑的网络。
2 动态路由 在大型网络环境下,依靠路由协议,比如RIP,OSPF,BGP等路由协议来学习路由条目。特点就是开销大,配置复杂,但适合复杂网络拓扑结构的网络。
3 直接路由 路由器会自动学习周边网络的情况 无需人工维护,但只能发现本接口所属网络的路由。
那如果在一个路由器中发现到达对方有多个路由条目同时存在,那可怎么办呢?不可能说同时使用多个,就像我每天从回龙观的住处到中关村的培训机构ITET,不可能说我同时又坐公交,又坐地铁。那这个数据包的转发也同样,必须选择一个最优的路由条目,在选择最优路由条目的过程中有两个关键条件需要考虑:
1 比较不同路由条目产生的方式是否最可靠
比如是由直连路由自动发现的,还是静态路由产生的,还是由路由协议产生的,再比如是由什么路由协议产生的,这都制约着这个路由条件能否被选中做为最佳路由来使用。比较路由条目产生方式的值在华为的路由器上我们称为路由优先级,在思科路由器上我们称为Distance。当然我们在此只讨论思科路由器。
Distance 在这里称为管理距离,Cisco路由器比较的就是这个Distance管理距离,什么意思,其实很简单,当一个路由表中有多个到达对方的路由条目时,思科路由器是从管理距离最低的协议获取的路由条目最先被选中,作为最佳路由使用,如默认OSPF的管理距离是110,EIGRP是90,IGRP是100,RIP是120,IS-IS是115,静态路由是0或者是1,直连路由是0,那么路由器就会查看路由条目的产生方式,如果有直连就走直连,否则就会采用静态路由配置的路径,依次类推。就相当于我从北京到安徽坐火车比坐船的路程要短,所花的时间也少,那么我肯定是坐火车!所以管理距离用于不同路由协议间之间的路由选择!
2 在相同产生方式的情况下比较不同的链路的代价
比较同一产生方式的不同链路的值,思科称为度量值(metric),华为称为路由权(cost)表示到达这条路由所指向的目的地址的代价,通过以下因素会影响到路由的权值:延迟、带宽、线路占有率、线路可信度、路数、最大传输单元。
直连路由很简单,在此不作解释,我们来看一下静态路由与动态路由,我们把静态与动态放在一起讨论,是为了容易对比
静态路由:管理在路由器上手动添加的路由信息以实现路由的目的。
动态路由:根据网络结构或数据流量的变化,路由协议会自动调整路由信息以实现路由。
但是要注意一点的是,我们说静态路由需要管理员手动添加,但并不意味着动态路由就不需要管理员配置,同样也需要进行配置,只是当网络规模较大的时候,使用静态路由会使管理员的工作量很大,而使用动态路由可以让路由器之间自动学习路由信息!如现在规定我从北京到安徽只有一条路可以走,我们可以把它当成静态路由,但是如果有一天这条路不通了,由就无法通讯了,但是如果使用的是动态路由,如果这条路不通了,它可以根据网络变化来自动调整路由信息。
静态路由相对来说还是比较简单的,我们先摆平它再讨论动态的,静态路由只适合于小型网络,而且没有过大的扩充准备,这是比较适合使用静态路由的。
大家看这个图就比较适合使用静态路由,因为总共数据器的数量就两个,当然只要按照我这个图进行操作,当你把IP地址都配好之后,默认情况下,每个路由器上都会有两个直接路由,我们来查看一下:
我们在路由器1上查看它的路由表情况:输入: show ip route
我们可以看到此路由器上有两个直连路由,那么我们来测试一下网络的连通性:
我们可以看到路由器1到其他网络都是通的,是因为它知道查路由表发现有到达对方的直接路由,但是ping 10.10.20.1不通,是因为它不知道该如何到达这里!
既然没有直连路由,这里就只能使用静态,默认或者是动态路由,我们这里讨论的是静态路由,所以我们就给它们配置上一个静态路由
配置语句很简单:
(Config)# ip route 目标网络 子网掩码 下一跳 [distance] [permanent]
注意:
目标网络可以是一个网段也可以是一个IP,但一般都不用IP,因为这样的话,就是到一个具体的主机,而不是到一个网段了,也就是说只能和某一个主机通讯,其他主机不能通讯。
下一跳可以是本路由器的接口也可以是下一个路由器的接口地址(接口上所配置的IP地址。)
Distance:可以指定管理距离
Permanent 永久生效,不论下一跳接口是否UP,都会路由表中显示这个路由条目。
那么如果我们上图中的路由器1如果希望转发10.10.20.0网段的数据包就需要配置一个静态路由,我们看一下如何配置:
Router(config)#ip route 10.10.20.0 255.255.255.0 10.10.1.2
将去往10.10.20.0的数据包送给10.10.1.2也就是与本路由器所直连的那个路由器的接口IP。
现在还不能使用,对方还必须设置一个回来的路由如在路由器2上:
Router(config)#ip route 10.10.10.0 255.255.255.0 10.10.1.1
这时双方就可以进行通讯了:当然PC机上还需要将网关指向相应路由器的接口地址。
此时在pc2上再ping pc1就一切都OK了!
反之也一样!不再测试!那么如果想删除静态路由,则只需要在配置语句的前面加上no即可!如:
Router(config)#no ip route 10.10.10.0 255.255.255.0 10.10.1.1
也可以不用下一跳!
在有的时候我们还会用到一个比较特殊的路由条目,我们可以认为是静态路由的一个特例,叫缺省静态路由,又称为默认路由!
默认路由:是没有找到任何匹配的路由条目的情况下使用的路由,即没有任何合适的路由时,才会使用默认路由,也就是默认路由的优先级是最低的,就是规定最低,老天爷规定的,还不够你臭屁的!
默认路由一般在家庭或是最终用户用的是比较多的,因为现在互联网上的路由信息太多,有几百万,甚至上千万,如果我们希望访问这些地方,那我们最终用户是不可能把存放这么多的路由项的。所以一般就设置一个默认路由,我不管外网有多少个地址,我统统交给它,至于说怎么到其他地方,就是它的事情了。所以咱们的PC机一般也有一个默认路由就是modem的地址!
默认路由的设置更简单:
(config)#ip route 0.0.0.0 0.0.0.0 本路由器接口或是下一跳地址
所以刚才那个例子,我们也可以使用默认路由来实现,但是注意在两端路由器上相互配置默认路由,否会出现路由环路的现象。
路由器1的配置我们还是使用静态路由,路由器2我们改为默认路由,使用命令如下:
Router(config)#ip route 0.0.0.0 0.0.0.0 fa 0/0
此时再来测试即可:
刚才咱们花了一点时间介绍了一下静态路由和默认路由,从下一篇开始咱们学习路由中的重头戏,是什么呢?明天再说……