路由协议的分类
什么是路由?
定义:路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。
路由协议的分类按不同标准有很多分类方法,常见的有如下几种:
按工作机制分类:
距离矢量
RIP、EIGRP、
链路状态
OSPF、ISIS、
按使用范围分类:
内部网关协议
RIP、EIGRP、OSPF、ISIS
外部网关协议
BGP
动态路由协议:
即让路由器能够相互之间进行对话,动态地学习到路由并储存在路由表之中。
(相关知识:路由表的三个来源:直连、静态、动态)
下面我们来讨论两个典型的动态路由协议。
RIP 路由信息协议—–属:距离矢量路由选择协议
道听途说的路由协议
路由信息协议RIP(Routing Information Protocol)是基于距离矢量算法的路由协议,利用跳数来作为计量标准。在带宽、配置和管理方面要求较低,主要适合于规模较小的网络中。
RIP是应用及开发较早的路由协议,是典型的距离矢量路由协议
适用于小型网络,最大跳数15跳(16跳视为不可达)
RIP是基于UDP的(所以不会保证发送信息的送达与否),使用端口号520(来去都是520,这是比较特殊的)
在CISCO IOS平台上的管理距离为120
RIP的版本:V1/2/ng
V1
已经淘汰,缺陷太明显。
有类协议,传递更新时不携带子网掩码。
不支持认证。
不支持手工汇总。
在有类边界上自动汇总,而且无法关闭。
V2
有些小型网络中会使用
无类协议,传递更新是会携带子网掩码
支持认证
支持手工汇总和自动汇总
在有类边界上自动汇总,可以手动关闭。
RIPng
NG 为 next generation 下一代。因为该版本支持IPv6。此处不做讨论
相关概念:
RIP度量值:
回顾一下昨天的内容,有个东西叫 管理距离/度量值。
其中,管理距离一般是厂商设置的,而且不会影响别的路由器。所以不同品牌的路由器可以协同工作,可以百度得知各厂商的设置。但是大家都认为AD越小越好。
遇上什么牌子就去查查官方的指南先就好。
而度量值则是各个协议规定不同:
RIP是以跳数,即经过的节点数作为度量值的。
当路由每经过一个节点时,跳数增加1,当跳数变为16的时候则丢弃不使用。
这种判定方式容易导致RIP选择一条不是很“快”的路线。
如果有一条带宽为10M一个节点的路由、一条带宽为1G两个节点的路由,RIP会仅仅因为节点少而选择前者。
工作机制:
- 首先,每台路由器会把自己的直连端口放到路由表里,然后互相通信告诉附近的路由器
- 然后,每台路由器在更新周期到来时,会将自己的路由表中参与对应协议的部分完全发给所有运行距离矢量协议的邻居。
- 如果有某个网络down了,在下一次更新的时候知道这个网络挂了的路由器就不会再发送该条路由,其他人就会知道这个网络可能挂了。
- 当网络中所有节点的路由表都稳定不变了,我们称之为网络收敛完成。网络在收敛之前无法正常工作(即到达所有地址)
RIP更新:
更新周期:30s
HoldTimer:180s
FlushTimer:240s
- 每30s更新一次,大家重新交换路由
- 如果在HoldTimer间隔之内都没有收到某条路由的更新,RIP就会将该条目判定为可能down。当某个条目处于可能down的状态下,RIP不会将该路由更新给其他邻居。
- 在某条路由被判断为可能挂了之后,虽然不会外传,但该路由器还会认为它仍旧可以通信。但当到达FlushTimer间隔的时候,会将所有可能down状态的路由彻底删除.
(为了不等这么长时间我们有命令”R2#clear ip route *”星号别忘!可以直接全clear掉)
存在的典型问题:
失真:
因为RIP是一个“道听途说的协议”,所以在路由传递过程中非常可能会出现失真。
比如说路由汇总:
我们假设R1,2,3连成一条线。当R2从R3那里接收到 192.168.23.6,而R2本身又有一个192.168.23.4,因为它自带的路由汇总,如果你还不关的话,那么这两条会合并称为192.168.23.0发给R1。
也就是说,R3到R2的时候是详细信息,到R1变成个大概的了。失真。
产生环路:
如图,当连在R3上的那条路由挂掉之后,R3的路由表中关于这个路由的信息在被删除之后。
下次更新时,R2告诉R3本来从R3那里学来的那条路由。
此时就已经在R2、R3之间产生了环路。
下面是常用的6个放环机制:
RIP防环机制
- 定义最大跳数:一条路由,最多可以传递15跳,第16跳的时候就认为他已经失真了,就会直接丢掉。这一方法极大程度地限制了RIP网络的规模。
- 水平分割: 在更新路由的时候,不会将从某个接口学习到的条目,再从这个接口更新出去。它会挑出来。
- 毒性路由: 在某个路由失效的时候,路由器在更新的时候会产生一条跳数为16的条目更新出去,且会往下传递这样所有的邻居就会从自己的路由表将该条目立即删除,不用等待240秒。
- 毒性逆转: 当某个接口收到某条路由更新的时候,会同时产生一条该路由的Hop为16的更新,从接收端口发出。
- 抑制计时器:30s、180s、240s
- 触发更新: 当路由表有任何变化的时候,会立即的产生更新,不用等待周期的到来。
RIP的配置
1、配置接口IP地址
略
2、激活RIP协议
R1(config)#router rip
3、版本的选择
R1(config-router)#version 1|2
4、配置需要接收和发送更新的接口所在网段,以及配置需要参与RIP更新的路由条目。
R1(config-router)#network 192.168.12.0
配置需要接收和发送更新的接口所在网段,以及配置需要参与RIP更新的路由条目。
R1(config-router)#network 192.168.12.0
这条命令有两个含义:
- 第一个意思:这个接口要参与接受发送;
- 第二个意思:通过rip告诉外界这里有这样一个端口
RIP常见检查命令
show ip route rip
show ip protocols \\查看当前路由运行的协议相关的信息
Routing Protocol is "rip"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set \\出入更新过滤列表没有设置
Sending updates every 30 seconds, next due in 25 seconds \\30s周期更新一次,下一更新的到来在25s之后
Invalid after 180 seconds, hold down 180, flushed after 240 \\失效计时器和刷新计时器
Redistributing: rip
Default version control: send version 1, receive any version \\版本相关的信息
Interface Send Recv Triggered RIP Key-chain
FastEthernet0/0 1 1 2
Loopback0 1 1 2
Automatic network summarization is in effect \\自动汇总行为是不是生效,这里生效着。
Maximum path: 4
\\负载均衡路径数。两条路AD和度量值都一样,都可以走,叫负载均衡,这个参数表示支持这样的最大条数。
Routing for Networks: \\参与RIP的路由条目
1.0.0.0
192.168.12.0
Routing Information Sources: \\路由信息来源的状态
Gateway Distance Last Update
192.168.12.2 120 00:00:27
Distance: (default is 120) \\默认管理距离的值
R2#sh ip route 100.0.0.0 \\查看100.0.0.0路由详细信息
R2(config)#no ip cef \\关闭cisco特快转发
R2#clear ip route * \\删除所有的路由,重新学习,有助于快速应用RIP的最新变化
RIP手工汇总:
在路由更新出接口上配置汇总命令
R2(config-if)#ip summary-address rip 172.16.0.0 255.255.0.0
R2#sh ip rip database \\查看RIP更新数据库
OSPF 开放最短路径优先协议—–属:链路状态路由协议
链路状态协议:
每台路由在开始的时候会建立邻居关系
邻居互相之间会传递链路状态信息
通过链路状态信息数据库可以得到全网拓扑
通过SPF算法可以算出到达每个目的地的最短路径
通过算出的最短路径生成路由表
OSPF协议简介:
OSPF(Open Shortest Path First,开放最短路径优先)是典型的链路状态路由协议,是目前业内使用最广泛的IGP之一;
该协议中,路由器之间交互的是链路状态信息,而不是直接交互路由;
每台OSPF路由器都知晓网络拓扑结构(rip协议是做不到这一点的)
会采用SPF算法计算达到目的地的最短路径;
支持VLSM,支持手工路由汇总;
多区域的设计使得OSPF能够支持更大规模的网络。
Router-id
相当于路由器的名字,不能出现重复。
你在告诉人家你附近哪个端口有哪个路由的时候,总该自报家门吧?
Router-id的设置有如下规定:
- 如果路由器存在loopback接口,那么选择loopback接口的IP地址中最大的作为Router-id
- 如果路由器不存在loopback接口,那么选择物理接口最大的IP地址作为Router-id
- 如果路由器不存在可用IP地址,那么将会报错。
- 可以手工指定,但是为了稳定性,手工指定的Router-id不会立即生效,会等到下次OSPF进程启动的时候生效。所以我们常见的做法是,先设置环回接口来保证id名是自己想要的,然后再去设别的。如果后配环回接口,这时候routerid已经选了物理接口,改不回来了。要么手工配,要么重启。
这里的最大就是数学上的大小,192比178大。
OSPF metric
其实就是他的度量值啦。。
ospf使用cost来作为度量值。该值与带宽有关。
参考带宽÷接口带宽=Cost
因为路由表哪里那个度量值是不支持浮点数的,如果一个接口的带宽很大,算出来的会是个小数,0.01会变成1。所以会出现100M和10M的带宽算出来一样大。所以ospf支持手工修改参考带宽值,
建议将参考带宽值改成网络中最大的带宽
一条路由的Cost由该路由从起源到本路由沿途所有入站接口的Cost值累加。
R2#show interfaces f0/0(查看接口信息)
OSPF Packet
ospf在工作时需要使用五种数据包:
- Hello:
用于建立和维护邻居关系,每隔10s从参与OSPF协议的接口发出一次,发出的hello包中IP目的地址为224.0.0.5
如果40s中没有收到Hello则认为邻居失效,删除邻居以及从这个邻居那里得到的所有信息。 - DD:
是链路状态的摘要信息,由于直接发送数据库信息量过于庞大,会占用太多资源。在正式交换数据库之前,会先交换摘要,确认自己需要数据库的哪一部分。 - LSR:
- 链路状态请求,请求你把什么什么发送给我
- LSU:
链路状态更新报文,你好这是你的快递。 - LSACK
对需要保障可靠传输信息的一个确认。我收到了之后会给你一个回复。
OSPF三张表
- 邻居表
邻居表可以查看和邻居的关系状态,所有的邻居都会被放在这里。
邻居表会40s倒计时,当收到对方发来的Hello包时,会将40s计时器重置 - 链路状态数据库
里面会保存着所有从邻居那里收到的所有LSA(链路状态)信息,即使是自己认为不可用的也会保存 。 - 路由表
通过SPF算法算出的最优路线的下一跳会生成对应的路由条目,放进路由表。也就是说只存最优路径。
OSPF的配置:
三台直连路由器R1、R2、R3
R1
en
conf t
int f0/0
ip add 192.168.12.1 255.255.255.0
no sh
int lo0
ip add 1.1.1.1 255.255.255.0
router ospf 1 \\激活OSPF,进程号为1,进程号仅用于本地区分不同OSPF实例
network 1.1.1.0 0.0.0.255 area 0 \\宣告1.1.1.0/24网络属于区域0,并且设置1.1.1.0/24所在的接口启用OSPF信息的接受和发送
network 192.168.12.0 0.0.0.255 area 0
=======================================
R2
en
conf t
int lo0
ip add 2.2.2.2 255.255.255.0
ip ospf 1 area 0 \\在loopback0接口激活OSPF,并且将该接口放入区域0,并将该接口的链路状态信息加入数据库,并且在需要的时候更新。
int f0/0
ip add 192.168.12.2 255.255.255.0
no sh
ip ospf 1 area 0
int f0/1
ip add 192.168.23.2 255.255.255.0
no sh
ip ospf 1 area 0
======================================
R3
en
conf t
int lo0
ip add 3.3.3.3 255.255.255.0
ip ospf 1 area 0
int f0/0
ip add 192.168.23.3 255.255.255.0
no sh
ip ospf 1 area 0
常见检查命令
R2#show ip ospf neighbor \\查看OSPF邻居表
R2#show ip route ospf \\查看OSPF路由表
R2#show ip ospf database \\查看OSPF数据库
R2#show ip protocols
Routing Protocol is "ospf 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 2.2.2.2
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
Routing on Interfaces Configured Explicitly (Area 0):
FastEthernet0/1
FastEthernet0/0
Loopback0
Reference bandwidth unit is 100 mbps
Routing Information Sources:
Gateway Distance Last Update
3.3.3.3 110 00:00:51
1.1.1.1 110 00:01:23
2.2.2.2 110 00:01:51
Distance: (default is 110)
OSPF工作机制:
- 第一步:邻居建立。我们知道RIP是用UDP实现通信的,用的是组内广播的形式。所以它并不知道自己发出去的东西是否被收到也不知道哪些人是自己的邻居。但ospf有一个发现邻居的机制,通过发送hello包来建立连接
- 第二步:链路泛洪。邻居建立之后把所有自己有的链路状态发出去。
- 第三步:日常检查邻居是否存活。日常发hello打招呼,如果发现邻居挂了,从邻居那里学到的所有东西都会被删除。
ospf从开启到完成工作有七个状态:
- down
未开启OSPF - Init
收到对方发来的Hello但是没有在对方发来的Hello中看到自己的Router-id - 2-Way
在收到对方发来的Hello中看到自己的Router-id ,这样才保证我们之间发生了通信。 - ExChange
选举由谁主导信息交换过程,Router-ID大的作为主导,在发送的信息中,会携带控制内容,l位表示是否选举结束,M位表示是否存在后续内容,MS位表示时候为Master - ExStart
互相交换数据库摘要,由被主导方先发 - Loading
开始发送LSU - Full
同步完成
DR和BDR
在一个局域网中,会有很多台路由器中间通过交换机连接到一起,这样的话,互相都会收到发送的hello包,就会形成很复杂的拓扑模型,他们之间的交换是无穷无尽的。。
所以我们规定了这样一个机制:
在一个局域网中,优先级最大(网上翻配置命令~~)的会成为DR,
如果优先级都一样会选举Router-ID最大的那台路由器在本局域网的接口作为DR,
除了DR以外的接口,会选举出Router-ID最大的路由器在本局域网的接口做为BDR。
- 在一个局域网中,所有的角色需要发送任何的更新信息,需要先发给DR和BDR,再有DR发给所有的成员。
- 局域网中的所有成员都必须和DR、BDR建立全毗邻(就是状态是Full)的邻居关系、而DRother之间只需要2-way的邻居关系即可。
- DR和BDR会监听224.0.0.5和224.0.0.6这两个组播地址,而DRother只会监听224.0.0.5
- 当任何成员需要发送更新消息,会发送给224.0.0.6这个地址。然后DR会将消息发给224.0.0.5这个地址。
R5#show ip ospf interface f0/0 \\查看该接口OSPF相关信息
R3(config-if)#ip ospf priority 10 \\修改接口的DR选举优先级
R5#clear ip ospf process \\让OSPF进程重启
注:!
优先级:
配置的时候设大的话会毫无悬念地成为DR,设成0的话就会根本不参与选举。
必须要有一个DR,如果没有的话,所有的路由会卡在two way的状态,连路由摘要信息都发不了
邻居表里有你,但你就是没法通信。
为了稳定,如果之后加入了一个更大的,也只能靠边站。
当DR挂掉之后,BDR将成为DR,剩下的重新选举一个BDR才轮得上那个新来的更大的。
如果原DR回来了,那也只能靠边站。
稳定是首先需要考虑的。。。
选举过程示例:
OSPF多区域的配置
因为每一个接口都会产生很多的链路更新,如果路由器数目多,则最后产生的链路将非常负复杂,更新和维护就会很困难。为了应对这个问题。有 区域 这个概念。
因为我们在链路交换时发送的都是原始信息,而不是汇总过的。因为汇总是对路由表的操作,而我们交换的又不是路由表。
但在多区域的情势下。汇总就称为可能了。你可以在区域边界做汇总。减小路由表规模。
“OSPF多区域的设计减小了LSA洪泛的范围,有效地把拓扑变化的影响控制在区域内,达到网络优化的目的。”
有如下规定:
- 区域分骨干区域和非骨干区域,骨干区域标注为 0 ,非骨干区域必须和骨干区域相连。
- 其他区域的路由,在路由表中会标注为O IA
- 本区域会标O
- area不一样,不能建立邻居
- 两台设备的两个端口,进程号不一样,是可以建立邻居的。
- 在同一台路由器上,不同进程号的OSPF端口之间信息不互通。不能完成资源共享。
- 区域号不会随数据传输,所以如果有两个同名非骨干区域,大家是分的清楚的。
注:这里的区域是在 端口 上讨论的!!!!
P.S.
等价的负载平衡:
注意那两个1 ,表示这两条负载均衡的线在发数据的时候会这边一个那边一个。
等价负载均衡。
星号在哪里就表示下一次发数据的时候走哪条线。
泛洪:
泛洪(Flooding)是交换机和网桥使用的一种数据流传递技术,将某个接口收到的数据流从除该接口之外的所有接口发送出去。
交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写 入MAC地址表中。交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。
VLSM:可变长子网掩码
VLSM(Variable Length Subnet Mask)规定了如何在一个进行了子网划分的网络中的不同部分使用不同的子网掩码。这对于网络内部不同网段需要不同大小子网的情形来说很有效。
其实就是相对于类的IP地址来说的。A类的第一段是网络号(前八位),B类地址的前两段是网络号(前十六位),C类的前三段是网络号(前二十四位)。而VLSM的作用就是在类的IP地址的基础上,从它们的主机号部分借出相应的位数来做网络号,也就是增加网络号的位数。各类网络可以用来再划分子网的位数为:A类有二十四位可以借,B类有十六位可以借,C类有八位可以借(可以再划分的位数就是主机号的位数。实际上不可以都借出来,因为IP地址中必须要有主机号的部分,而且主机号部分剩下一位是没有意义的,所以在实际中可以借的位数是在上面那些数字中再减去2,借的位作为子网部分)。
最早的时候是ISIS,但是它站错了阵营,不支持TCP/IP。后来RIP抄袭了它,支持TCP/IP。后来因为TCP越来越火,其他的协议死了。
RIP是主流,ISIS是过去,也会是未来、因为ISIS不依赖任何体制,所以他啥都可以用