ospf(开放最短路径优先协议)

分类

1.范围igp

2.设计原理,链路状态性协议。

3.无类,cidr。

ospf封装

ospf封装在ip报文中,协议号89.

组播地址224.0.0.5一般用,224.0.0.6.

邻居建立

周期发送hello包,

建立邻居表

传递lsa链路状态通告,

6中lsa。

存放进lsdb,链路状态数据库。存放一条条的lsa

通过spf算法算出最短路径,得出路由表。

树形结构,最短路径优先算法。

在ospf中每台路由器就作为树根,找到最短路径。cost值最小的。

三张表

neighbor table

topology table:lsdb,不仅仅包括路由,还包括拓扑信息。

routing table

链路状态和dv协议比较

1pv协议时传闻路由,ospf不光包括路由还包括拓扑描述出来。

2每台路由器都有一个整网的拓扑

3链路状态协议一定要分层,在ospf中分两大区域,骨干区域和非骨干区域。

ospf 区域

1减小了路由表的条目。域间汇总。

2本拓扑的变化最会影响本区域,不会影响其他区域。

3.lsa不止是路由信息,还包括拓扑信息。某些lsa仅仅只在一个区域泛红。

4.通过接口来划分区域

backbone routers骨干路由器,所有在骨干区域的路由器。区域之间路由器叫abrs路由器。

ospf邻居建立。

ospf建立邻居要分网络类型

邻居:仅仅只交互的hello包

邻接:交互了lsa,交互完了路由信息。

网络类型:

1.点到点的网络类型:串口。所有路由器都会变成邻接。

2.ma

bma:以太网,支持发送广播组播

nbma:帧中继。不支持广播

ma网络有一些只可能到邻居,有一些到邻接

dr:指定路由器

bdr:备份指定路由器

1.在ma网络首先先把dr选举出来。为了减少lsa的频率,所有的邻居都会和dr和bdr形成邻接关系full,交互lsa。dr再把统一的信息传递给我们。drothers之间只可能到neighbor。2way

2.路由器的更新只可能传递在两个邻接的路由器。一旦邻接形成,lsa会互相同步。

opsf算法

spf

1.在同一区域的路由器都有一致的lsdb

2.每台路由器以自己为根算出最短路径,cost值最短,把最好的路由放进路由表。

触发更新,周期性的泛红,30分钟泛红1次,老化时间60分钟。

lsa过程:

本台路由收到lsla,查看本地有没有,如果没有就会收,向源端发送一个ack,说明我收到了,然后把lsa泛红到其他邻居,然后计算路由表,如果本地已经有了,那么我就会判断这个lsa是更新的还是我的更新,通过序列号判断是更新的还是我的更新,每一个lsa发起的时候都有一个序列号,它的比较越大越好,如果我的序列号是较小的,发来的是较大的。我就会认为是更新的,我就会放进lsdb,如果序列号是一样的,说明我已经有了,直接就忽略了,如果发来的没有我的序列号大,说明我自己的更新,我会把我的lsa发送到源端一份。

序列号是一个4byte,16进制数,第一个序列号 0x80000001-0x7fffffff。棒棒糖式增加。

ospf报文:

1hello

2dbd数据库的描述:dbd是lsa的摘要。节约链路带宽。

3lsr链路状态请求

4lsu链路状态更新

5lsack链路状态确认 仅仅只做lsu的确认

ospf包头的内容

version v2 ipv4 v3 ipv6

type:1-5 hello,dbd,lsr,lsu,lsack

packet length 整个包的长度

router id

选择方式:

1.手工指定(任意指定,确保唯一性)

2.先选环回口最大的ip地址

3.物理接口最大的ip地址

aera id 区域id

check-sum确保数据完整性

authen type 0 1 2 无,名,密。

authen-tication 密钥填写字段

data 看type是hello包还是dbd、lsr、lsu、lsack数据。

hello包内容

router id

hello and dead intervals *

neighbors

area id *(直连不能放入不同区域)

router priority

dr ip address

bdr ip address

authentication password *

stub area flag *(stub区域标识一致)

hello包10s 死亡时间4倍40s

hello包30s 死亡时间4倍120s

建立邻居过程

在没运行ospf就是down状态,当路由器的接口运行ospf就会主动发送hello包到224.0.0.5。然后进入init状态。当另一台路由器收到hello包就会回应。当我收到一个说看见我的hello包就会进入two-way状态。(drother只到two-way状态结束)

exstart状态时dbd交互,那个dbd选择出一个主从关系,比较route id,高的是主路由器,低的是从路由器,

dbd报文字段

第一个字段i字段,第二个字段m字段,第三字段m/s字段

init                              more                 master/slave

exchange状态,互相交换dbd完成dbd交互。

loading状态交换lsr和lsu

最后进入full状态。

总结:

init:发送hello包

2way:收到自己的rid

如果是ptp直接进入exstat状态。

如果是ma网络进入dr和bdr选择。通过hello包选举。

exstat:通过交互第一次dbd报文选择主从关系,谁先发dbd

exchange:dbd交互。

loading:交互lsr和lsu交互lsack确认。

full:完成。

dbd包中的mtu不一致邻居也建立不起来。

cost=10^8/bw(单位bit)

在ospf中如果是换回口被通告进ospf中,不管环回口配置多少位掩码,邻居收到的都是32位路由。

还原成配置多少位,邻居收到多少位。

int lo0

ip ospf network point-to-point(更改网络类型)

修改hello包时间

ip ospf hello-interval 30

ip ospf dead-interval 120

两边hello包不一致邻居为down。

dr和bdr选举:

在ma网络中,dr和bdr监听,224.0.0.6.drother监听224.0.0.5,一旦选出dr和bdr,drother就会发送到224.0.0.6.点到点所有人都发到224.0.0.5

dr选举方式:

1.先看较大的优先级(默认是1)

2.较大的route-id

更改ospf接口优先级

int e0

ip ospf priority 2(默认是1)

<0-255> 0代表drother

dr特点:

1.dr不抢占。除非网络发生变化

2.bdr也不会抢占。

3.当dr down,bdr直接升为dr,然后重新选举bdr.

4.dr/bdr/drother是接口概念

5.不同网段分别选dr/bdr/drother