数据包格式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ospf 学习笔记

作者:小宝

e-mail:gyong_1223@

qq:1520619 ospf协议号是89,也就是说在ip包的protocol中是89,用ip包来传送

数据包格式:

在OSPF路由协议的数据包中,其数据包头长为24个字节,包含如下8个字段:

* V ersion number-定义所采用的OSPF路由协议的版本。

* Type-定义OSPF数据包类型。OSPF数据包共有五种:

* Hello-用于建立和维护相邻的两个OSPF路由器的关系,该数据包是周期性地发送的。

* Database Description-用于描述整个数据库,该数据包仅在OSPF初始化时发送。

* Link state request-用于向相邻的OSPF路由器请求部分或全部的数据,这种数据包是在当路由器发现其数据已经过期时才发送的。

* Link state update-这是对link state请求数据包的响应,即通常所说的LSA数据包。

* Link state acknowledgment-是对LSA数据包的响应。

* Packet length-定义整个数据包的长度。

* Router ID-用于描述数据包的源地址,以IP地址来表示,32bit

* Area ID-用于区分OSPF数据包属于的区域号,所有的OSPF数据包都属于一个特定的

OSPF区域。

* Checksum-校验位,用于标记数据包在传递时有无误码。

* Authentication type-定义OSPF验证类型。

* Authentication-包含OSPF验证信息,长为8个字节。

FDDI或快速以太网的Cost为1,2M串行链路的Cost为48,10M以太网的Cost为10等。

所有路由器会通过一种被称为刷新(Flooding)的方法来交换链路状态数据。Flooding是指路由器将其LSA数据包传送给所有与其相邻的OSPF路由器,相邻路由器根据其接收到的链路状态信息更新自己的数据库,并将该链路状态信息转送给与其相邻的路由器,直至稳定的一个过程。

当路由器有了一个完整的链路状态数据库时,它就准备好要创建它的路由表以便能够

转发数据流。CISCO路由器上缺省的开销度量是基于网络介质的带宽。要计算到达目的地的最低开销,链路状态型路由选择协议(比如OSPF)采用Dijkstra算法,OSPF路由表中最多保存6条等开销路由条目以进行负载均衡,可以通过"maximum-paths"进行配置。

如果链路上出现fapping翻转,就会使路由器不停的计算一个新的路由表,就可能导致路由器不能收敛。路由器要重新计算客观存它的路由表之前先等一段落时间,缺省值为 5 秒。在CISCO配置命令中"timers spf spf-delay spy-holdtime"可以对两次连续SPF计算之间的最短时间(缺省值10秒)进配置。

路由器初始化时Hello包是用224.0.0.5广播给域内所有ospf路由器,选出dr后在用224.0.0.6和dr,bdr建立邻接。

dr用224.0.0.5广播给drother lsa

bdr也是

drother用224.0.0.6广播lsa给dr和bdr

dr是在一个以太网段内选举出来的,如果一个路由器有多个以太网段那么将会有多个dr选举;DR的选择是通过OSPF的Hello数据包来完成的,在OSPF路由协议初始化的过程中,会通过Hello数据包在一个广播性网段上选出一个ID 最大的路由器作为指定路由器DR(如果设置优先级的话那么首先看优先级,优先级为0不参加选举)并且选出ID次大的路由器作为备份指定路由器BDR,BDR 在DR发生故障后能自动替代DR的所有工作然后重新选择BDR。当一个网段上的DR和BDR选择产生后,该网段上的其余所有路由器都只与DR及BDR建立

相邻关系。见下图

DR的选举过程:这里可以以选举村长为例

选举的时候用hello包中的dr字节来标识,开始的时候都是标识的自己,一旦选举出一个dr来那么即使后来再有优先级更高的进来也不重新选举(因为一旦重新选举那么所有的邻接关系都要重新建立)

ospf启动的过程:

down

init发送hello(224.0.0.5)dr字段为全零(因为还没有选出DR),单通状态,我能收到对端的hello报文,但对方没有收到我的报

文,怎么知道对端有没有收到我的报文呢,通过Neighbors Seen

2way2个ospf路由器从hello中发现互相的router id(本地路由器最大ip,一般是loopback)建立邻接

在这个阶段已经知道谁是dr了

exstart预启动状态,ospf路由器建立主从关系(看谁的routerid大)然后协商一个序列号(因为ip是不可靠的传输采用确认+超时重传

就可以)准备传送,头两个dd报文为空,不包含lsa的数据

Router 1:

DD seq=x,I=1,M=1,MS=1

I是第一个报文

M是more表示还有后续报文

MS是表示Router 1是Master

Router 2:

DD seq=y,I=1,M=1,MS=1

I是第一个报文

M是more表示还有后续报文

MS是表示Router 2 是Master

究竟谁是master呢,就会选一个router id大的作为master

谁当了master序列号就用谁生成的那个数,在这里应该是Router 2的y

exchange和dr开始交换数据,master先发送lsdb报文,此报文只是一个index(如同一本书的目录)不包含实际的路由数据,slave也发

送报文,看谁的序列号高,序列高的数据新,相邻路由器可以根

据数据库描述数据包的序列号与自身数据库的数据作比较,若发

现接收到的数据比数据库内的数据序列号大,则相邻路由器会针

对序列号较大的数据发出请求,并用请求得到的数据来更新其链

路状态数据库。

Router 1先发送dd报文序列号用master的并且MS字段为0

Router2回应报文把序列号加1表示已经收到了刚才的dd报文并

且也包含自己的dd报文,下一个Router 1的dd报文还用y+1

来表示因为slave无权把序列号加1。如果dd报文中的M=0

那么表示dd报文发送结束

loading装入状态,如果新加入的路由器的从dd报文中看出那个是自己需要的路由数据,则发送lsr报文,请求发送数据,对端发送lsu

报文,此报文包含所需的全部数据。

full 收到lsu报文后发送确认,完成充满状态。

hello包ttl值是1,在以太网中每10秒发送一次,而且不穿过路由器,通常ospf 协议报文的ttl都是1(虚连接除外)

link status包flood整个area(麦子说flood是由区域内所有路由器接力完成)一个dd报文可以含有很多个lsa的头部信息

从init――――loading是路由器第一次交换信息的时候才出现,到了full以后如果在有路由变化那么就只发送lsu

相关文档
最新文档