网络建设与运营维护
OSPF网络类型:
1.点到点
T1链路:1.544Mbps,是链接单独一对路由器的。在这种类型的链路上总是可以形成邻居关系的。在这种网络上的OSPF使用组播地址进行通讯。
2.广播型网络
比如以太网,DR与BDR使用AllSPFRouters(224.0.0.5)与非DR/BDR进行通信,而非DR/BDR使用AllDRothers(224.0.0.6)与DR/BDR进行通信。
3.NBMA网络
比如帧中继网络,这样多路访问网络没有广播能力,需要选举DR和BDR,并且OSPF数据包是以单播进行通信的,必须要使用neighbor手工指定邻居。
4.点到多点网络
是NBMA网络的特殊配置,可以看做是一群点到点链路的集合。不需要选举DR/BDR,OSPF数据包以单播进行传输。
5.虚链路
OSPF数据包以单播方式发送。
除了以上5中网络类型,也可以将网络归纳为以下两种网络
传送网络:与两台及以上的路由器相连的网络。
末梢网络:仅仅和一台路由器相连。
如果没有DR/BDR的话,那么网络上将产生n²个:LSA通告,显得太乱了,于是就选举DR。
1.首先根据端口优先级(缺省为1,ip ospf priority),越大越优先。0表示没有资格选举为DR。
2.优先级相等,再根据RID,越大越优先。
注意DR/BDR具有稳定性,指的是:路由器的优先级可以影响一个选举过程,但是一旦选举完毕,即使更高的优先级加入后也不会替换DR/BDR。这点与RID类似。
DR是一个伪节点的概念,即任从伪节点到任何与之相连的路由器的代价都有0,通过这种方式,所有代价都不会受到伪节点的影响。并且DR是接口特性。
Process ID:这个是思科私有的,可以依赖这个属性让Cisco路由器运行多个OSPF进程。不同进程之间相当于不能类型的协议。
OSPF Hello Interval:在广播型网络上为10s(点到点或者广播),非广播上为30s(点到多点或NBMA)
OSPF RouterDeadInterval:广播型网络上为40s,非广播为120s。(注意是4倍关系)
Wait Timer(等待计时器)在开始选举DR和BDR之前,路由器等待邻居路由器通告自己为DR、BDR的时间,等待长度就是RouterDeadInterval的时间。
RxmtInterval(重传时间):路由器发送OSPF数据包后没得到回复之前将要等待多长时间重传。5s
Neighboring Router:只有建立起了邻接关系的路由器之间,才会在这个字段中显示出邻居路由器的RID。
以上信息可以通过:show ip ospf interface f0/0中查看到。
OSPF接口状态机:
1.Down
2.点到点:这个状态仅适用于点到点,点到多点,以及虚链路网络中,接口处于这个状态后,该接口就开始起作用了。此时每隔HelloInterval的时间发送一次Hello数据包,并尝试和接口链路另一端相连的邻居路由器建立邻接关系。
3.Waiting:这个是MA网络中会出现的,开始发送Hello包,并且试图去选举DR和BDR或者去发现网络中的DR或BDR。
4.DR:这样状态就代表该路由是DR
5.Backup:该路由器是 BDR。
6.DRother:既不是DR也不是BDR的路由器。
7.Loopback:环回口。
邻接关系的四个阶段:
1.邻居发现阶段;
2.双向通信阶段;
3.数据库同步阶段;
4.Full完全邻接阶段;
邻居状态机,邻居之间形成完全邻接关系的过程:
1.失效状态(Down):邻居会话的初始状态,指明在最近的RouterDeadInterval的时间内还没有收到来自邻居路由器的Hello数据包。除非在NMBA网络中,否则Hello包是不会发给哪些失效的邻居路由器的,并且在NBMA网络中,是以每个隔PollInterval(120s)的时间发送一次。
2.尝试状态(Attempt):仅适合NMBA中,哪些具有DR选举这个的路由器和其邻居路由器的相连的接口开始变得有效(Active),这台具有DR选举资格的路由器将邻居路由器的状态设为Attempt状态,并使用HelloInterval时间代替PollInterval的时间来向邻居发送Hello包。
3.初始状态(Init):在最近的RouterDeadInterval的时间内,收到的邻居的Hello包。
4.双向通信阶段(2-way):在来自邻居路由器的Hello包中看到了自己的RID。(只有在这个状态或者更高状态时才有资格被选作该网络上的DR或BDR,如果在Init收到一个DBD数据包,也可以引起邻居状态直接转换成2-way状态)。
5.信息交换初始状态(ExStart):开始建立主从关系和协商DBD的序列号。并且具有最高RID的路由器成为”主“路由器。注意:主从关系的协商也是靠DBD包的,只是此时交换的DBD包中的I位(初始位)置1.
6.信息交换状态(Exchange):在这个状态先双方开始交换DBD,并且根据DBD形成LSR,并向对方发送链路状态请求数据包。
7.信息加载状态(Loading):这个状态下,收到邻居发送的LSR,并且返回LSU进行交换链路状态通告信息(LSA)。
8.完全邻接状态(Full):邻居路由器之间具有相同的链路状态数据库,达到完全邻接关系。
在交换LSA之后必须对其进行确认,LSA的确认有两种:
1.显示确认:直接返回含有LSA头部的LSAck消息;以前已经收到过了。
2.隐式确认:返回收到LSA的相同实例的LSU;第一次收到。
注意OSPF对LSA的确认可以使用单个链路状态确认多个LSA通告。这个链路状态确认数据包不需要携带完整的LSA信息,而只是需要携带LSA的头部就可以了。没收到确认的LSA会被放进链路状态重传列表中,并且每个RxmtInterval(5s)时间就会重新传输一次,知道该LSA得到确认为止。其中LSAck可以被延时发送,但是延时时间必须小于RxmtInterval时间。
OSPF采用直接确认的两种情况:
1.从邻居不断的收到重复的LSA,可能表明邻居还没有收到这个LSA的一链路状态数据库里已经没有这个LSA的实例。
可靠泛洪:序列号,校验和,老化时间
当路由器收到相同的LSA的多个实例,路由器如何确定哪个是最新的:
1.比较序列号,拥有最大的序列号的LSA就是最新的LSA;
2.假如相等,比较谁拥有最大的无符号校验和。
3.校验和也相等的话,就比较老化时间谁的大谁是最新的LSA。
4.如果这些LSA的老化时间之差多余15min(MaxAgeDiff),那么拥有较小的老化时间的LSA将是最新的LSA。
5.如果还比较不出来那么就无法区分谁是最新的LSA,那么这两个LSA就被认为是相同的。
OSPF定义了以下3种
域内通信(Intra-Area Traffic)
域间通信(Inter-Area Traffic )
外部通信(External Traffic)
被分割的区域(或称为分段区域,Partitioned Area):由于链路失效而使一个区域的一部分和其他部分隔离开来的情形。非骨干区域变成分段区域,此时并不会中断通信,他们之间的通信会被认为是区域间的通信。但是如果骨干区域分段了,那么会把骨干区域隔离成两部分区域,并在两部分区域上创建两个单独的OSPF域。
我们解决的办法就是利用虚链路(Virtual Links)
1.通过非骨干区域连接一个区域到骨干区域。
2.通过 一个非骨干区域连接一个分段的骨干区域两边部分区域。
配置虚链路注意事项:虚链路不能是一个末梢区域,必须是传送区域(即必须拥有全部的路由信息),并且必须配置在两台ABR之间。
OSPF采用 LSA组步调(group pacing)的机制:每一个LSA通告都有属于自己的重新刷新计时器,但是当它们独自使用的重刷新计时器超时(30min)的时候,会引入一个时延来延迟这些LSA通告的泛洪扩散。通过时延可以让更多的LSA通告共同编成一组,从而可以让跟新数据包携带大量的LSA通告,默认情况下足步调时间为4min。
OSPF数据包类型:
1.Hello包:周期性发送,用来发现和维持OSPF邻居关系的 。这个是依赖于计时器的,比如在 高速链路上Hello Interval:10s,死亡时间是40s;低速链路30s,死亡时间120s。(这个高速与低速是本很被评级而不是实际的带宽。)
1.Hello包:周期性发送,用来发现和维持OSPF邻居关系的 。这个是依赖于计时器的,比如在 高速链路上Hello Interval:10s,死亡时间是40s;低速链路30s,死亡时间120s。(这个高速与低速是本很被评级而不是实际的带宽。)
2.DBD包:描述本地LSDB中每条LSA的摘要信息,和DR与BDR的选举(2-way状态)包含一些字段:I初始为、M后继位、MS主从,发生在ExStart状态、DC(用于按需链路上的do not age位)
3.LSR包:向邻居请求特定的LSA。
4.LSU包:包含LSA。
5.LSAck:确认收到的LSA。(确认DBD和LSU两种数据包。)
OSPF邻接的条件:
1.区域ID
2.hello/dead time
3.认证类型
4.末节区域标记
5.物理直连(否则怎么可能是邻接的呢!!!)
OSPF数据库同步
OSPF无论网络类型都是使用组播地址发送更新的,只有在发送确认包的时候使用单播地址。(224.0.0.5allspfrouter,224.0.0.6alldrouter),不过有时候在非广播网络中我们使用neighber命令则使用的是单播,我们这里讲的是默认方式。
同步数据库过程:
1.Down(失效状态):邻居会话的初始状态,在一个RouterDeadInterval的时间内没有收到来自邻居的Hello包。
2.Init(初始状态):当一台路由器发送Hello包后其状态变成Init状态。注意这里使用的是组播(224.0.0.5)发送Hello包,这是因为在刚开始其邻居表是空的,不可能以单播发送Hello包。当其邻居路由器收到这个组播包后,就知道对方的IP地址了,然后以单播反馈hello包,然后就达到下一种过程w-way。
3.Two-Way(双向通讯):收到邻居发送的Hello包中看到自己的RID。(DR/BDR的选举在这个阶段,前提是需要选,在广播 和NBMA网路中需要选。注意DR的概念是限于端口的,是一个多路访问环境一个DR,DR是用过路由器的优先级选择的(0~255,默认是1,0表示没有资格被选举为DR,可在接口下通过:ip ospf priority修改,优先级相等再根据RID,都是越大越优先。))
4.ExStart(信息交换的初始状态):路由器和其邻居路由器建立主从关系(确定谁先发送DBD包)并确定DBD包的序列号。
5.Exchange(信息交换状态):双方交换DBD信息,并根据收到的DBD与本地链路状态数据库作比较然后形成LSR包。
6.Loading(信息加载状态):向邻居发送LSR请求最新的LSA链路状态通告信息,此状态双方正在同步链路状态数据库。
7.Full(完全邻接状态):当邻居路由器之间具有相同的LSDB时,就达到了完全邻接状态。
通过:debug ip ospf adj可以观察到邻接关系建立的过程。