OSPF(Open Shortest Path First)开放式最短路径优先
会使用到的cisco packet Trecer命令
#特权模式
show ip route
show ip ospf neighbor
#全局模式
route ospf "process"
#端口模式
net "ip" "mask" "area number"
- 链路状态协议
- 度量值cost=10^8/接口带宽
- 10秒发送一个Hello包
- 组播地址:224.0.0.5 & 224.0.0.6
- 管理距离:110
距离矢量协议和链路状态协议两大类路由协议区别。
一共有5种不同
- 算法不同。
- 距离矢量协议传递的是路由条目,链路状态协议传递的是数据库。(数据库非路由表)
- 链路状态协议,只宣告进阻,不通告路由。
- 链路状态协议通过数据库自己计算出路径。
- 链路状态协议知道所有的拓扑。
链路状态协议
这是一个内部网关协议,也是一个动态路由协议,也叫链路状态协议。
通过给邻居发送链路状态信息,每一个路由器再根据数据库中的拓扑结构计算出路由。
度量值
距离矢量协议通过累加经过的路由器来计算开销值,链路状态是通过端口的带宽来确定度量值。
- 计算方式:度量值=108/端口bit
- 例如:1 = 108/100000000bit
- 10000000bit=100Mb
- 累加端口方式:源路由器的出接口,以及目标路由器以及中间路由的入接口。
- 带宽更大的接口,理论上传输效率会更快,开销也更大。
组播地址
- 宣告端口网段为OSPF以后就会监听224.0.0.5接口
地址 | 作用 |
---|---|
224.0.0.5 | 发送Hello包、选举DR/BDR、DR/BDR对Other发送组播更新 |
224.0.0.6 | 只用于Other路由器给DR/BDR发送Update数据更新 |
224.0.0.5用于DR/BDR路由器发送更新消息给Other路由的IP地址,在OSPF进程中的路由器都会接受组播类的信息。这里路由还是由各个Other路由器自行计算,关于DR/BDR和Other路由器在下面会有介绍。
224.0.0.6是给Other路由器更新updata,只有DR/BDR收得到,所以就是给专门给Other路由器访问DR/DBR用的。
管理距离
管理距离也叫AD值,越小越优先。
OSPF的管理距离比RIP的管理距离要小,在拥有相同路由的时候,会优先使用OSPF。
OSPF路由协议的特性
- 没有自动汇总功能
- 无类路由
- OSPF协议号:89(在网络层)
- 五种数据报文:Hello,DBD,LSR,LSU,ACK
- 默认支持4条负载均衡,最大支持16条,并且只支持等价负债均衡。在开销相同时,出接口不同的链路会负载均衡。
自动汇总功能
OSPF传输的是数据库,所有路由条目都是自身计算出来的,无法进行自动汇总。
RIP传递的是路由表,本身不知道拓扑结构,通过自动汇总将子网掩码变短,将所有包含的路由一股脑放过去。
五种报文
从开始到建立路由使用五种报文
报文 | 说明 |
---|---|
Hello | 打招呼 |
Database Description | 数据库描述 |
Link-State Request | 链路状态请求 |
Link-State Update | 链路状态请求 |
Link-State Acknowledgement | 链路状态确认 |
数据包发送流程
- Hello:形成邻居状态
- Database Description:形成邻居关系以后,发送自身的数据库进行对比,再请求与自身不同的数据
- Link-State Request:发送请求更新数据包
- Link-State Update:回复更新数据包
- Link-State Acknowlegement:回复确认更新包
OSPF的八种状态(邻居状态)
状态 | 说明 |
---|---|
Down | 关闭 |
Attempt | 非广播网络状态 |
Init | 半连接状态 |
2-way | 连接状态 |
Exstart | 单播更新DBD |
Exchange | 发送请求和更新 |
Loding | 传递数据包 |
FULL | 结束 |
Down状态
启用OSPF后才会有这种状态
Init状态
- 在启用OSPF协议以后会监听组播接口,通过组播地址224.0.0.5发送Hello包
- 接收到Hello包的路由器会审核其中的内容
- 审核通过再将发送Hello包的路由器的Route-ID加入到邻居表中,并且将状态改为init
数据包需要审核的内容(除Route-ID外其余必须一致才能通过审核)
内容 | 说明 |
---|---|
Route-ID | 环回接口/活动的物理接口的最大值 |
区域号 | 0骨干区域,其余非骨干区域 |
认证类型 | 接口认证,区域认证 |
Hello时间 | 缺省值10s,单独修改死亡时间不影响 |
死亡时间 | 缺省值40s,Hello时间的固定4倍 |
Route-ID 是路由器与路由器之间的名字,可自己设计,如果没有设置就会选择IP最大的环回接口,若环回接口也为配置,就选择物理端口的最大IP地址,大小关系从左到右,且必须唯一。
区域号
因为网络越来越大,设备开销也越来越大,OSPF就有了区域的划分,相同的区域同步一样的数据库,可以减少路由器本身开销,可强核心弱分支。
区域号 | 说明 |
---|---|
0 | 骨干区域 |
其余(1-255) | 非骨干区域 |
- 非骨干区域必须和骨干区域相连,否则区域将会独立。
- 区域划分是根据接口来划分的,都是以链路为最小单位划分的,两边接口都是同一区域才能通信。
- 在同一路由器上有多个区域的路由器被叫做ABR也叫区域边界路由器
2-way
- 对方接受到Hello包,认证成功,将Route-ID加入邻居表
- 对方路由器将邻居表信息加入到Hello包,继续发送
- 路由器接收到对方路由器发送Hello包中包含自身的Route-ID,然后单播回复Hello包
- 确认双方都有信息后将状态转变成2-way
选举DR/BDR
DR(designate router)指定路由器
BDR(backup designate router)备份指定路由器
为了避免在Exstart状态DBD包发送量过大,如果有10台路由器就会发送10*10-1次DBD包,所以在2-way采取了措施。就是选举DR/BDR,在进入Exstart状态后每一个人只会去向DR/DBR交换数据库,没有被选举上的路由器叫做Other,Other路由器在建立到邻居就不用再继续交换了,转发量减小到两个包的转发量。
如何需要选举DR/DBR
-
查看优先级,列出能参选的DR/BDR的和声明自己就是DR/BDR
-
建立一个没有声明自己就是DR的子集。声明自己是DR的不能被选成BDR
-
在此子集中,优先级大、Router-ID大的成为BDR
-
然后选择DR。若无声明自己是DR的话,则新选的BDR成为DR
Hello包的作用:发现邻居,对一些数据的协商,保持邻居的- - keeplive状态,选举DR/DBR
224.0.0.6
选举流程
-
首先都发Hello包,判断出来以后最优的是BDR,然后等40秒,也就是Hello包的超时时间。
-
等待有没有路由器声明是DR,在第四个Hello包后,确认了在这个组播范围内没有DR,BDR就会成为DR。
-
在有DR以后,就算时间相差很短,有一个优先级更高的路由器,DR也不会变更了,之后再选一个BDR补上。
-
但是other路由器将会永远停留在2-way状态。
Exstart状态
需要发送DBD包,Other路由器只对DR/BDR发送,交换完成立刻进入Exchange状态。
Exchange状态
通过组播发送LSR和LSU,让各个路由器计算路由。
Loding状态
持续的进行组播更新,多个网段更新,通过泛洪式更新,都发送组播,不论广播域和邻居关系,实现数据库同步。
然后计算路由表。
所有人的状态都发完DR/BDR就变成FULL状态。
FULL
完毕