8.1 OSPF的hello协议
Hello协议的目的:
1.用于发现邻居
2.在成为邻居之前,必须对Hello包里的一些参数协商成功
3.Hello包在邻居之间扮演着keepalive的角色
4.允许邻居之间的双向通信
5.它在NBMA(Nonbroadcast Multi-access)网络上选举DR和BDR
Cisco路由器上Hello包默认的发送间隔(HelloInterval)是10秒;NBMA网络是30秒,
通过ip ospf hello-interval 来修改;
如果在4倍于这个时间间隔里(40秒和120秒)内仍然没有收到来自邻居的新的Hello包,这个邻居将被宣告为无效(dead)
通过命令ips ospf dead-interval 来修改
Hello Packet包含以下信息:
1.源路由器的RID
2.源路由器的Area ID
3.源路由器接口的掩码
4.源路由器接口的认证类型和认证信息
5.源路由器接口的Hello包发送的时间间隔
6.源路由器接口的无效时间间隔
7.优先级
8.DR/BDR
9.五个标记位(flag bit)
10.源路由器的所有邻居的RID
8.2 OSPF的网络类型:
OSPF定义的5种网络类型:
1.点到点网络 2.广播型网络 3.NBMA网络 4.点到多点网络 5.虚链接(virtual link)
8.2.1 点到点网络,
比如T1线路,是连接单独的一对路由器的网络,点到点网络上的有效邻居总是可以形成邻接关系的,在这种网络上,OSPF包的目标地址使用的是224.0.0.5,这个组播地址称为AllSPFRouters
8.2.2 广播型网络,
比如以太网,Token Ring和FDDI,这样的网络上会选举一个DR和BDR,DR/BDR的发送的OSPF包的目标地址为224.0.0.5,运载这些OSPF包的帧的目标MAC地址为0100.5E00.0005;而除了DR/BDR以外的OSPF包的目标地址为224.0.0.6,这个地址叫AllDRouters
8.2.3 NBMA网络,
比如X.25,Frame Relay,和ATM,不具备广播的能力,因此邻居要人工来指定,在这样的网络上要选举DR和BDR,OSPF包采用unicast的方式]
8.2.4 点到多点网络
是NBMA网络的一个特殊配置,可以看成是点到点链路的集合. 在这样的网络上不选举DR和BDR
8.2.5 虚链接:
OSPF包是以unicast的方式发送
所有的网络也可以归纳成2种网络类型:
1.传输网络(Transit Network)
2.末梢网络(Stub Network )
8.3 OSPF的DR及BDR
而且在多址网络中,还存在自己发出的LSA 从邻居的邻居发回来,导致网络上产生很多LSA的拷贝,所以基于这种考虑,产生了DR和BDR。
DR将完成如下工作
1. 描述这个多址网络和该网络上剩下的其他相关路由器
2. 管理这个多址网络上的flooding过程
同时为了冗余性,还会选取一个BDR,作为双备份之用
8.3.1 DR BDR选取规则:
DR BDR选取实在接口状态机的方式触发的。
1. 路由器的每个多路访问(multi-access)接口都有个路由器优先级(Router Priority),8位长的一个整数,范围是0到255,Cisco路由器默认的优先级是1优先级为0的话将不能选举为DR/BDR.优先级可以通过命令ip ospf priority进行修改
2. Hello包里包含了优先级的字段,还包括了可能成为DR/BDR的相关接口的IP地址
3. 当接口在多路访问网络上初次启动的时候,它把DR/BDR地址设置为0.0.0.0,同时设置等待计时器(wait timer)的值等于路由器无效间隔(Router Dead Interval)
8.3.2 DR BDR选取过程:
1. 在和邻居建立双向(2-Way)通信之后,检查邻居的Hello包中Priority,DR和BDR字段,列出所有可以参与DR/BDR选举的邻居.所有的路由器声明它们自己就是DR/BDR(Hello包中DR字段的值就是它们自己的接口地址;BDR字段的值就是它们自己的接口地址)
2. 从这个有参与选举DR/BDR权的列表中,创建一组没有声明自己就是DR的路由器的子集(声明自己是DR的路由器将不会被选举为BDR)
3. 如果在这个子集里,不管有没有宣称自己就是BDR,只要在Hello包中BDR字段就等于自己接口的地址,优先级最高的就被选举为BDR;如果优先级都一样,RID最高的选举为BDR
4. 如果在Hello包中DR字段就等于自己接口的地址,优先级最高的就被选举为DR;如果优先级都一样,RID最高的选举为DR;如果没有路由器宣称自己就是DR,那么新选举的BDR就成为DR
5. 要注意的是,当网络中已经选举了DR/BDR后,又出现了1台新的优先级更高的路由器,DR/BDR是不会重新选举的
6. DR/BDR选举完成后,DRother只和DR/BDR形成邻接关系.所有的路由器将组播Hello包到AllSPFRouters地址224.0.0.5以便它们能跟踪其他邻居的信息,即DR将洪泛update packet到224.0.0.5;DRother只组播update packet到AllDRouter地址224.0.0.6,只有DR/BDR监听这个地址
8.4 OSPF的接口:
使用show ip ospf interface
命令查看接口
Process ID: 进程号,cisco特有
特有 RID:路由器的router-id
Network Type : P2P,P2MP,...
InfTransdelay:LSA通告从路由器接口发送后经历的时间,以Transmit Delay显示,缺省值为
1sec
ip ospf transmit-delay 可以修改
Router Priority:缺省值为 1
可以通过 ip ospf priority修改,0为不参与选举
Cost:1到65535之间的一个整数,Cisco默认cost的算法是100000000/BW,BW为接口带宽.如果带宽大于100M的话,将产生1个小于1的小数,这是不允许的.因此从IOS版本11.2之后,可以使用命令ospf auto-cost reference-bandwidth 来修正这个问题,允许管理者更改缺省的参考带宽
Wait Timer:选举DR/BDR之前,等待邻居路由器宣告DR/BDR的Hello包的时间长度,这个时间长度等于无效时间(RouterDeadInterval)
RxmtInterval:没有得到确认的情况下,重传OSPF packet所等待的时间长度,默认为5秒,可以使用命令ip ospf retransmit-interval 修改
Hello Timer:由HelloInterval设置的,当它超时后,将从接口发送一个Hello包,上图显示Hello Timer将在3秒后超时
AuType:认证类型,OSPF的认证类型可以是null(无认证),简单口令或者MD加密.如果使用null认证方式,show ip ospf interface将不会显示认证类型和钥匙(key)信息
8.5 OSPF的状态机:
IE1:低层协议指明接口可操作
IE2:低层协议指明接口不可操作
IE3:网络管理系统或低层协议指明接口loop up
IE4:网络管理系统或低层协议指明接口loop down
IE5:收到Hello包
IE6:Wait Timer超时
IE7:选举为DR
IE8:被选举为BDR
IE9:没有被选举为DR/BDR,成为DRothers
IE10:邻居路由器发生了变化
8.6 OSPF邻居关系
邻接关系建立的4个阶段:
1.邻居发现阶段
2.双向通信阶段:Hello报文都列出了对方的RID,则BC完成
3.数据库同步阶段:
4.完全邻接阶段: full adjacency
邻居关系的建立和维持都是靠Hello包完成的,在一般的网络类型中,Hello包是每经过1个HelloInterval发送一次,有1个例外:在NBMA网络中,路由器每经过一个PollInterval周期发送Hello包给状态为down的邻居(其他类型的网络是不会把Hello包发送给状态为down的路由器的).Cisco路由器上PollInterval默认60s
Hello Packet以组播的方式发送给224.0.0.5,在NBMA类型,点到多点和虚链路类型网络,以单播发送给邻居路由 器。邻居可以通过手工配置或者Inverse-ARP发现
使用show ip ospf neighbor命令查看邻居的信息,如下:
Poll interval:
这个参数只用于NBMA网络,因为在NBMA网络中邻居无法自动发现.如果邻居状态是down,那么路由器将经PollInterval长的时间发送Hello包给这个状态为down的邻居 Dead timer due in 00:01:40:Dead Timer将在100秒后超时,超时之前没收到新的Hello包的话将被宣告无效还有些未显示的信息:DR/BDR
Master/Slave:
在ExStart状态,邻居之间协商的主/从(Master/Slave)关系将控制数据库的同步 DD(Database Description) Sequence Number: 正向邻居发送的数据库描述序列号 Last Received Database Description Packet: 这个packet记录了Initialize,More和Master位和可选项,以及最后收到的数据库描述包的序列号.这个信息可以确定下一个数据库描述包是否重复
Link State Retransmission List: 没有得到确认的LSA列表 Database Summary List: 数据库同步期间,数据库描述包中向邻居发送的LSA列表,当路由器进入exchange状态后,这些LSA将组成LSDB Link State Require List:这个列表记录了来自邻居的数据库描述包的LSA,这些LSA比LSDB中的LSA更新.链路状态请求(Link State Require,LSR)发送给邻居来请求LSA的拷贝,当这些请求的LSA通过链路状态更新(Link State Update,LSU)收到后,请求列表将会减少直至清空
OSPF路由器在完全邻接之前,所经过的几个状态:
1.Down: 初始化状态
2.Attempt: 只适于NBMA网络,在NBMA网络中邻居是手动指定的,在该状态下,路由器将使用HelloInterval取代PollInterval来发送Hello包
3.Init: 表明在DeadInterval里收到了Hello包,但是2-Way通信仍然没有建立起来
4.two-way: 双向会话建立
5.ExStart: 信息交换初始状态,在这个状态下,本地路由器和邻居将建立Master/Slave关系,并确定DD Sequence Number,接口等级高的的成为Master
6.Exchange: 信息交换状态,本地路由器向邻居发送数据库描述包,并且会发送LSR用于 请求新的LSA
7.Loading: 信息加载状态,本地路由器向邻居发送LSR用于请求新的LSA
8.Full: 完全邻接状态,这种邻接出现在Router LSA和Network LSA中
在一个邻接关系的创建过程中,OSPF协议使用如下3种报文
Database Description packets—DD (type 2) Link State Request packets—LSR (type 3) Link State Update packets—LSU (type 4)
1. RT1首先变为有效状态,发送Hello包给RT2,由于刚开始没有学习到任何邻居,虽然Hello包里Neighbor字段的值是空的,DR/BDR字段设置为0.0.0.0
2. RT2收到来自RT1的Hello包以后,将RT1状态设置为Init,并发送Hello包给RT1,Neighbor字段设置为RT1的RID,并把DR字段设置成自己接口地址
3. RT1收到RT2的Hello包并看到里面的RID以后,RT1为了能够进行Master/Slave协商,将把RT2设置成ExStart状态.接着,RT1将产生一个空的数据库描述包(DDP),并设置序列号为x,同时设置Init位为1,表示该DDP是用于本次信息交换的最初的DDP,并设置More位为0表示这个DDP不是最后一个DDP;设置Masrer/Slave位为1声明自己为Master
4. RT2收到RT1发来的这个DDP以后,设置RT1状态为ExStart,并响应一个DDP.序列号设置为y,假设RT2的RID高于RT1的RID,因此它设置MS位为1
5. Master/Slave协商完成,RT2为Master,RT1把RT2的状态设置为Exchange状态,并发送DDP给RT2,序列号使用y,MS位设置为0声明自己是Slave,I位设置为0,M位设置为1
6. RT2收到RT1的这个DDP以后,把RT1的状态设置为Exchange,并发送DDP给RT1,把序列号增加1,这个DDP包含了RT2的Link State Summary List中的LSA头部信息
7. RT1收到这个DDP以后,将响应一个序列号相同的DDP,这个过程将一直持续,然后RT2将发送一个单独的DDP直到RT1以相同的序列号响应,直到RT2发出包含最后1个LSA Summary的DDP,并设置M位为0
8. Exchange状态完成,但是RT1的LSR列表中仍然还有未请求的LSA条目,因此RT1进入Loading状态
9. 当RT2收到最后1个DDP以后,RT2设置RT1的状态为Full,因为RT1的LSR列表中没有要请求的LSA条目了
10. RT1发送LSR给RT2,RT2以LSU来响应这个请求,这个过程持续到RT1的LSR列表成为空列表,此时RT1也把RT2的状态设置为Full
可以使用命令debug ip ospf adj查看邻接关系的建立情况
8.7 OSPF泛洪
Flooding采用2种报文 LSU Type 4---链路状态更新报文 LSA Type 5---链路状态确认报文
如下图所示:
个链路状态更新报文和确认报文都可以携带多个LSA。LSA本身可以floodin到整个互联网络,但更新报文和确认报文只能在具有邻接关系的两个节点之间传送。
在P-P网络,路由器是以组播方式将更新报文发送到组播地址224.0.0.5 在P-MP和虚链路网络,路由器以单播方式将更新报文发送至邻接邻居的接口地址 在广播型网络,DRother路由器只能和DR&BDR形成邻接关系,所以更新报文将发送到224.0.0.6,相应的DR以224.0.0.5泛洪LSA并且BDR只接收LSA,不会确认和泛洪这些更新,除非DR失效 在NBMA型网络,LSA以单播方式发送到DR BDR,并且DR以单播方式发送这些更新
LSA的洪泛是可靠的,所以必须对每1个发送的LSA进行确认,确认分隐式确认(Implicit Acknowledge)和显式确认(Explicit Acknowledge)
当路由器要发送LSA的时候,会把LSA的拷贝放在链路状态重传列表中,这个LSA每隔RxmtInterval重传1次,直到该LSA得到确认,或邻接关系中断.无论哪种网络类型,重传的LSA总是以unicast的方式发送的
确认可以是delayed或direct,前者可以使用1个LSAck确认多个LSA,当然这个延迟的时间必须小于RxmtInterval;后者的确认是立即发送,采用单播的方式.当出现下面2种情况的时候将采用直接确认:
1.从邻居那里收到了重复的LSA
2.LSA的老化时间(Age)达到最大生存时间(MaxAge)
查看LSDB信息,使用show ip ospf database命令,如下:
LSA通过序列号,校验和,和老化时间保证LSDB中的LSA是最新的
Seq: 序列号(Seq)的范围是0x80000001到0x7fffffff
Checksum: 校验和(Checksum)计算除了Age字段以外的所有字段,每5分钟校验1次
Age: 范围是0到3600秒,16位长.当路由器发出1个LSA后,就把Age设置为0,当这个LSA经过1台路由器以后,Age就会增加1个由InfTransDelay设定的时间(默认为1秒,这个时间可以通过命令ip ospf transmit-delay 修改).LSA保存在LSDB中的时候,老化时间也会增加
当收到相同的LSA的多个实例的时候,将通过下面的方法来确定哪个LSA是最新的:
1. 比较LSA实例的序列号,越大的越新
2. 如果序列号相同,就比较校验和,越大越新
3. 如果校验和也相同,就比较老化时间,如果只有1个LSA拥有MaxAge(3600秒)的老化时间,它就是最新的
4. 如果LSA老化时间相差15分钟以上,(叫做MaxAgeDiff),老化时间越小的越新
5. 如果上述都无法区分,则认为这2个LSA是相同的
8.8 OSPF区域
区域长度32位,可以用10进制,也可以类似于IP地址的点分十进制分3种通信量
1. Intra-Area Traffic:域内间通信量
2. Inter-Area Traffic:域间通信量
3. External Traffic:外部通信量
8.8 OSPF
1. Internal Router:内部路由器 2. ABR(Area Border Router):区域边界路由器 3. Backbone Router(BR):骨干路由器 4. ASBR(Autonomous System Boundary Router):自治系统边界路由器
虚链路(Virtual Link)
1. 通过一个非骨干区域连接到一个骨干区域
2. 通过一个非骨干区域连接一个分段的骨干区域两边的部分区域
虚链接是一个逻辑的隧道(Tunnel),配置虚链接的一些规则: 1. 虚链接必须配置在2个ABR之间 2. 虚链接所经过的区域叫Transit Area,它必须拥有完整的路由信息 3. Transit Area不能是Stub Area 4. 尽口的避免使用虚链接,它增加了网络的复杂程度和加大了排错的难度
8.9 LSD链路状态数据库
使用 show ip ospf database 可以查看LSDB的信息。LSA驻留在LSDB中,age会加大,当超过MaxAge后,这些LSA将被清除掉,因此出现链路刷新(LSR)机制来防止这个问题,每30min(LSRefreshTime),发出这条LSA的源路由器将再次发送这个LSA的拷贝,并把序列号加1,把Age设置为0,来替换邻居LSDB中的较老的LSA
8.9.1 LSA类型
1.类型1:Router LSA 2.类型2:Network LSA 3.类型3:Network Summary LSA 4.类型4:ASBR Summary LSA 5.类型5:AS External LSA 6.类型6:Group Membership LSA 7.类型7:NSSA External LSA 8.类型8:External Attributes LSA 9.类型9:Opaque LSA(link-local scope,) 10.类型10:Opaque LSA(area-local scope) 11.类型11:Opaque LSA(AS scope) 使用 show ip ospf database database-summary可以看到LSDB中的LSA类型
8.9.2 Router LSA
每个路由器都将产生Router LSA,这种LSA只在本区域内传播,描述了路由器所有的链路和接口,状态和开销
此种LSA可以通过 show ip ospf database router查看
8.9.3 Network LSA
在每个多路访问网络中,DR都会产生这种Network LSA,它只在产生这条Network LSA的区域泛洪描述了所有和它相连的路由器(包括DR本身)
Show ip ospf database network可以看到Network LSA
8.9.4 Network Summary LSA
ABR路由器始发,用于通告该区域外部的目的地址,
可以使用show ip ospf database summary查看LSA
如果ABR知道有多条路径可以到达目标地址,但是它仍然只发送单个的Network
mmary LSA,并且是开销最低的那条;同样,如果ABR从其他的ABR那里收到多条Network
mmary LSA的话,它会只选择开销最低的,并把这条Network Summary LSA宣告给其他区域
当其他的路由器收到来自ABR的Network Summary LSA以后,它不会运行SPF算法,它只简单的加上到达那个ABR的开销和Network Summary LSA中包含的开销,通过ABR,到达目标地址的路由和开销一起被加进路由表里,这种依赖中间路由器来确定到达目标地址的完全路由(full route)实际上是距离矢量路由协议的行为
8.9.5 ASBR Summary LSA
由ABR发出,ASBR汇总LSA除了所通告的目的地是一个ASBR而不是一个网络外,其他同NetworkSummary LSA
使用 show ip ospf database asbr-summary可以看到
8.9.6 Autonmous System External LSA
发自 ASBR路由器,用来通告到达OSPF自主系统外部的目的地,或者OSPF自主系统那个外部的缺省路由的LSA。这种LSA将在全AS内泛洪
可以使用 show ip ospf database external
8.9.7 NSSA External LSA
来自非完全Stub区域(not-so-stubby area)内ASBR路由器始发的LSA通告它只在NSSA区域内泛洪,这是与LSA-Type5的区别
Show ip ospf database nssa-external
8.9.8 External Attributes LSA
被提议为作为iBGP的另一种选择,用来传输BGP协议信息穿越一个OSPF域。
8.9.9 Opaque LSA
特殊应用,透明LSA,基于MPLS。暂时没有实现
8.10 OSPF末梢区域
由于并不是每个路由器都需要外部网络的信息,为了减少LSA泛洪量和路由表条目,下图中的Area 2可以配置成为Stub区域
位于Stub边界的ABR将宣告一条默认路由到所有的Stub区域内的内部路由器,
8.10.1 Stub区域限制:
a) 所有位于stub area的路由器必须保持LSDB信息同步, 并且它们会在它的Hello包中设置一个值为0的E位(E-bit),因此这些路由器是不会接收E位为1的Hello包,也就是说在stub area里没有配置成stub router的路由器将不能和其他配置成stub router的路由器建立邻接关系
b) 不能在stub area中配置虚链接(virtual link),并且虚链接不能穿越stub area
c) stub area里的路由器不可以是ASBR
d) stub area可以有多个ABR,但是由于默认路由的缘故,内部路由器无法判定哪个ABR才是到达ASBR的最佳选择
Cisco提出了Totally Stubby Area,和stub area相比,它连LSA类型3(Network Summary LSA)也阻塞掉了
NSSA允许外部路由被宣告OSPF域中来,同时保留Stub Area的特征,因此NSSA里可以有ASBR,ASBR将使用type7-LSA来宣告外部路由,但经过ABR,Type7被转换为Type5。 7类LSA通过OSPF报头的一个P-bit作Tag,如果NSSA里的ABR收到P位设置为1的NSSA External LSA,它将把LSA类型7转换为LSA类型5.并把它洪泛到其他区域中;如果收到的是P位设置为0的NSSA External LSA,它将不会转换成类型5的LSA,并且这个类型7的LSA里的目标地址也不会被宣告到NSSA的外部NSSA在IOS11.2后支持。
8.10.2 几种特殊的区域
Stub 过滤Type5LSA 并自动产生默认路由O*IA但不过滤掉域间路由
Stub-No Summary 只放入Type 2&6类的路由,即域间路由被过滤掉,同时产生O *IA的默认路由 NSSA ASBR使用Type 7LSA 通告外部路由,路由条目由O E2改为O N2,
NSSA不会自动产生默认路由,除非加入area 2 nssa default-information-originate.且默认路由仅用在ASBR,ABR上,产生一条O *N2的路由。同时过滤掉骨干区域来的Type5路由.
NSSA-No redistribution 如下图所示,B上使用 area 1 nssa no-redistribution, B上将不会把EIGRP做为Type7LSA通告,所以C上原本会收到的2条O N2路由将会消失
NSSA-No summary 即在路由器B上 area 1 nssa no-summary 过滤域间路由,并在自动产生一条O *IA的默认路由
8.11 OSPF路由表
路由选择表是根据LSDB中LSA条目,使用SPF算法生成的。OSPF是基于接口带宽进行度量的一种路由协议使用10^8/BW计算。
命令 ip ospf cost 1~65535 可以修改端口的成本 不推荐ip ospf cost的方式修改 使用auto-cost reference-bandwidth bandwidth(1~4296967Mb)修改默认的参考值,以便识别1000M和10G的interface两个不同的区域可以使用不同的参考带宽
8.11.1 Destination Type
每一个路由条目都可以被归类到目的类型中去网络条目(Network Entry)是数据包药转发的目的网络:
路由器条目(Routers Entry)记录的是如何到达ABR/ASBR,这些路由器条目被单独存放在一个内部的路由表里,使用命令show ip ospf border-routers来查看这个信息,如下:i代表区域内路由, I代表区域间路由
到达目标网络的路径可以分为4类: Intra-area path(区域内路由) inter-area path(区域间路由), Type 1 external path(类型1的外部路径,E1) Type 2 external path(类型2的外部路径,E2)
路由标记如下:
1. O 区域内路由
2. O IA 区域间路由
3. O N1 O N2 Nssa区域通告的Type7LSA生成的路由
4. O E1 O E2 外部路由 区别在于后者计算时会不必加上到达ASBR的Metric
路由选择表的查找顺序
1. 路由器读取目的地址,并查找路由表,选择和目的地址最长匹配的路由进行转发
2. 如果存在2条相同的路由,查看管理距离
3. 根据 O > O IA > O E1 > O E2 的优先级顺序转发
4. 如果此时还存在等Cost路径,则作负载均衡转发
OSPF默认 4条路径负载均衡, 可以通过 maximum-paths 6修改,最多6条路径负载均衡
8.12 OSPF按需电路
OSPF over Demand Circuits:在X.25 SVC,ISDN,PSTN等即用即连的电路上,OSPF在按需电路设计上具有抑制Hello Packet和LSA-reflush的功能,最初会执行LSDB的同步,随后指挥激活此条链路去flooding 某些变化的LSA,具体配置方法:将ISDN做为备份链路,并在接口上启用ip ospf demand-circuit
8.13 OSPF报文格式
OSPF报文有多重封装构成,如下图,分为IP 头, OSPF 报头,LSA 头等
转载于:https://blog.51cto.com/86612/413622