西行漫记 mobi 微盘:开放式最短路径优先 (本文侧重用于IPv4中的OSPFv2)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 21:21:43

 

 

http://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E5%BC%8F%E6%9C%80%E7%9F%AD%E8%B7%AF%E5%BE%84%E4%BC%98%E5%85%88

本页面最后修订于2010年11月28日 (星期日) 06:14

开放式最短路径优先

本文侧重用于IPv4中的OSPFv2

 

 

维基百科,自由的百科全书

跳转到: 导航, 搜索

跳过字词转换说明

汉漢▼▲

为了阅读方便,本文使用全文手工转换。转换内容:

显示↓关闭↑字词转换说明

字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。

如果您想对我们的字词转换系统提出一些改进建议,或者提交应用面更广的转换(中文维基百科全站乃至MediaWiki软件),或者报告转换系统的错误,请前往Wikipedia:字词转换请求或候选发表您的意见。

网络协议

应用层

DHCP · DNS · FTP · Gopher · HTTP · IMAP4 · IRC · NNTP · XMPP · POP3 · SIP · SMTP · SNMP · SSH · TELNET · RPC · RTCP · RTP ·RTSP · SDP · SOAP · GTP · STUN · NTP · SSDP · BGP · RIP · 更多

传输层

TCP · UDP · TLS · DCCP · SCTP ·

RSVP · PPTP · OSPF · 更多

网络层

IP (IPv4 · IPv6) · ICMP · ICMPv6 · IGMP ·

IS-IS · IPsec · 更多

数据链路层

Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) · ARP · RARP ·

ATM · DTM · 令牌环 · 以太网 · FDDI · 帧中继 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN ·STP · 更多

物理层

以太网 · 调制解调器 · 电力线通信(PLC) · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线 · 更多

本模板:查看 • 讨论 • 编辑 • 历史

 

开放式最短路径优先(英文Open Shortest Path First,OSPF)是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统(简称AS)内部(注:OSPF称为域Domain,请区别于在域内划分的区域Area)。著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。它使用“代价(Cost)”作为路由度量。链路状态数据库(LSDB)用来保存当前网络拓扑结构;它在同一区域中的所有路由器上是相同的。OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络。OSPFv2是由RFC 2328定义的,OSPFv3是由RFC 5340定义的。

OSPF协议是大中型网络上使用最为广泛的IGPInterior Gateway Protocol)协议。节点在建立邻接,接受链路状态通告(Link-state AdvertisementLSA)时,可以通过MD5,或者明文,进行安全验证。(注:MD5Message-Digest Algorithm 5(又译摘要算法、哈希算法)。MD5是输入不定长度信息,输出固定长度128-bits的算法,用于确保信息传输完整一致。但不适合用于高安全场合)

OSPF提出了“区域(Area)”的概念,一个AS网络可以由单一区域或者多个区域组成。其中,一个特别的区域被称为骨干区域(Backbone Area),该区域是整个OSPF网络的核心区域,并且所有其他的区域都与之直接连接。所有的内部路由都通过骨干区域传递到其他非骨干区域。所有的区域都必须直接连接到骨干区域,如果不能建立直接连接,那么可以通过虚拟链路(Virtual-link)和骨干区域建立虚拟连接

同一个广播域(Broadcast Domain)的路由器或者一个点对点(Point To Point)连接的两端的路由器,在发现彼此的时候,建立邻接(Adjacencies)[1]。对于多路访问网络以及非广播多路访问网络的路由器,为了降低了网络中的信息流量,选举指定路由器(Designated Router, DR)和备份指定路由器(Backup Designated Router, BDR),并以DR和BDR作为(分别作为第一、第二)网络的中心负责路由器之间的信息交换,从而降低了网络中的信息流量。OSPF协议同时使用单播(Unicast)和组播(Multicast)来发送Hello包和链路状态更新(Link State Updates)包,以加速更新。使用的组播地址为224.0.0.5和224.0.0.6。与RIPBGP不同的是,OSPF协议不使用TCP或者UDP协议,而是承载在IP协议之上;IP协议号为89,工作在OSI模型的传输层。

目录

[隐藏]

  • 1 区域
    • 1.1 骨干区域
    • 1.2 末梢区域
    • 1.3 非纯末梢区域
    • 1.4 完全末梢区域
    • 1.5 完全非纯末梢区域
  • 2 OSPF路由器类型
    • 2.1 内部路由器
    • 2.2 骨干路由器
    • 2.3 区域边界路由器
    • 2.4 自治系统边界路由器
  • 3 OSPF网络类型
    • 3.1 点到点网络
    • 3.2 广播网络
    • 3.3 非广播多路访问网络
    • 3.4 点到多点网络
    • 3.5 虚链路
  • 4 指定路由器和备份指定路由器
  • 5 OSPF邻接关系
  • 6 OSPF数据包类型和格式
    • 6.1 Hello包
    • 6.2 数据库描述包
    • 6.3 链路状态请求包
    • 6.4 链路状态更新包
    • 6.5 链路状态确认包
  • 7 LSA类型
  • 8 OSPF路径选择
  • 9 注释
  • 10 参考文献
  • 11 外部链接

 [编辑] 区域

    

一个多区域OSPF网络,注意所有的非骨干区域都和骨干区域直接相连,并且R2和R3  ABR属于多个区域。

 

一个OSPF网络被分割成多个区域。区域将网络中的路由器在逻辑上分组并以区域为单位向网络的其余部分发送汇总路由信息。区域编号由一个长度为32 bits的字段所定义,区域编号有两种表示方法,一种为点分十进制(如Area 1.1.1.1,写法规则同IPv4地址);另外一种为十进制数字格式(如Area 1,注意Area 1不等于Area 1.1.1.1),通常使用十进制数字格式对区域进行编号。(注者认为,点分十进制更能反映域-区域-区域间的从属关系,以便路由)

区域是以接口(Interface 注意,不是节点。一个节点允许有多个接口,可以分属不同的区域)为单位来划分的,所以一台多接口路由器可能属于多个区域。同一区域内的所有路由器都维护一份相同的链路状态数据库(LSDB),如果一台路由器属于多个区域,那么它将为每一个区域维护一份LSDB。将一个网络划分为多个区域有以下优点:

  • 某一区域内的路由器只用维护该区域的链路状态数据库,而不用维护整个OSPF网络的链路状态数据库。
  • 将某一区域网络拓扑变化的影响限制在该区域内,不会影响到整个OSPF网络,从而减小SPF计算的频率。
  • 将链路状态通告(LSA)的洪泛(涵盖)限制在本区域内,从而降低OSPF协议产生的数据量。
  • 划分区域可以对网络进行层次化结构设计。

OSPF有多种区域类型,其中定义了几种特殊的区域:

[编辑] 骨干区域

骨干区域(Backbone Area)也即Area 0,是整个OSPF域的核心区域。所有其他非骨干区域必须和骨干区域直接相连。骨干区域的功能是 在不同的非骨干区域之间分发路由信息。

[编辑] 末梢区域(注:是一种用时间换数量的策略)

末梢区域(Stub Area)是一个不允许任何AS外部路由通告(AS External LSA,即 类型5 LSA)直接或间接在其内部进行洪泛扩散的区域。末梢区域的区域边界路由器(Area Border Router)ABR会通告一条默认路由(default route)到该区域内所有路由器,任何发往AS外部网络的数据流都将依据默认路由来转发。

[编辑] 非纯末梢区域(注:是一种用时间换数量的策略)

非纯末梢区域(Not-So-Stubby Area,NSSA)允许直接引入AS外部路由并且扩散到其他区域,但是NSSA仍旧不允许通过其他区域通告间接使AS外部路由进入该区域。为了使NSSA能够引入AS外部路由,OSPF定义了新的链路状态通告LSA的类型,即NSSA External LSA(类型7 LSA)。NSSA ASBR将产生类型7 LSA,并在NSSA区域内洪泛。NSSA ABR将会把类型7 LSA转换成类型5 LSA,并洪泛到其他区域。

[编辑] 完全末梢区域(注:是一种用时间换数量的策略)

完全末梢区域(Totally Stubby Areas)是Cisco私有的一种区域类型。完全末梢区域不仅不允许AS外部路由通告在其内部洪泛,还不允许区域间汇总路由(Network Summary LSA ,即类3 LSA)在其内部洪泛。同末梢区域一样,完全末梢区域ABR也会向该区域内所有路由器通告一条默认路由,任何发往其他区域以及AS外部网络的数据流都将依据默认路由来转发。将区域设置为完全末梢区域可以显著的降低路由表条目的数量。

[编辑] 完全非纯末梢区域(注:是一种用时间换数量的策略)

完全非纯末梢区域(NSSA Totally Stubby Area )也是Cisco私有的区域类型,该种区域除了拥有和NSSA相同的特性外,还不允许类型3 LSA在该区域内部洪泛。完全非纯末梢区域ABR也会向该区域内所有路由器通告一条默认路由。将区域设置为完全非纯末梢区域也会显著的降低路由表条目的数量。

[编辑] OSPF路由器类型 

新图:图中包括了四种类型的路由器,其中有的‘身兼数职’

R2既是骨干路由器,也同时是ABR和ASBR

(R2和R5之间运行了BGP,并且R2将BGP路由重分发进OSPF)。

R3是一台ABR,R1和R4是内部路由器。

 

OSPF定义了以下4种路由器类型:

  • 内部路由器(Internal Router)
  • 骨干路由器(Backbone Router)
  • 区域边界路由器(Area Border Router,ABR)
  • 自治系统边界路由器(Autonomous System Boundary Router,ASBR)

一台路由器可以同时属于多种类型,如右图所示,R2同时属于多种类型路由器。

每一台OSPF路由器都有一个路由器标识符(Identifier),一般写作路由器ID。路由器ID由一个长度为32 bits的字段所定义,通常用IPv4地址格式来表示(如1.2.2.2)。如果没有显式的设置路由器ID,则该路由器上已激活逻辑接口中最大的IP地址将成为路由器ID;如果路由器不存在逻辑接口,则已激活物理接口中最大的IP地址将成为路由器ID。注意,不要将路由器类型和指定路由器(Designated Router,DR)、备份指定路由器(Backup Designated Router,BDR)混淆,DR和BDR是路由器接口属性(它们属于ABR),而不是整个路由器的属性。

[编辑] 内部路由器 (Internal Router)

如果一台路由器上所有启用了的OSPF接口都在同一区域,那么这台路由器就是该区域的内部路由器。

[编辑] 骨干路由器 (Backbone Router)

骨干路由器是指至少有一个启用了OSPF的接口是和骨干区域(Area 0)相连的路由器。一台骨干路由器也可以同时是ABRASBR,如上图中的R2和R3。如果一台路由器上所有的接口都属于Area 0,那么这台路由器也是一台骨干区域的内部路由器。

[编辑] 区域边界路由器 ABR

区域边界路由器是指连接一个或者多个区域到骨干区域的路由器。区域边界路由器必须至少有一个接口属于骨干区域。区域边界路由器为每一个与之相连的区域维护一份链路状态数据库,因此区域边界路由器需要比内部路由器更多的内存资源和更高性能的处理器

[编辑] 自治系统边界路由器 ASBR

自治系统边界路由器(ASBR)用来把从其他路由协议(如BGPEIGRP等)学习到的路由以路由重分发的方式注入到OSPF进程中,从而使得整个OSPF域内的路由器都可以学习到这些路由(除了末梢区域内的路由器)。一台ASBR可以是OSPF域内非末梢区域的任何路由器,它可以是内部路由器、区域边界路由器、骨干路由器。

[编辑] OSPF网络类型

OSPF定义了以下5种网络类型:

  • 点到点网络(Point-to-point)
  • 广播网络(Broadcast)
  • 非广播多路访问网络(NonBroadcast MultiAccess,NBMA)
  • 点到多点网络(Point-to-multipoint)
  • 虚链路(Virtual links)

[编辑] 点到点网络

点到点网络,例如E1、SONET,是单独连接一对路由器的网络。点到点网络上的一对OSPF路由器形成完全邻接关系(Full Adjacency),并且不进行DR和BDR的选举。点到点网络上的路由器使用组播地址224.0.0.5发送OSPF协议数据包。

[编辑] 广播网络

广播网络即可以同时连接多于两台设备的网络,如以太网令牌环网FDDI。广播网络上的路由器发送的组播/广播数据包会被其他与之相连的路由器收到。在广播网络上的OSPF路由器会选举一台指定路由器(DR)和一台备份指定路由器(BDR)。所有始发于DR和BDR的OSPF数据包使用目的地址224.0.0.5,以组播方式发送到所有其他OSPF路由器,所有其他的路由器都将使用目的地址224.0.0.6,以组播方式发送OSPF数据包到DR和BDR。所有其他的路由器只与DR和BDR建立完全邻接关系。

[编辑] 非广播多路访问网络

NBMA网络,诸如X.25帧中继ATM等,可以同时连接两台以上的路由器,但是这种网络没有广播数据包的能力(可以单播多路转发)。一台处于NBMA网络上的路由器发送的组播/广播数据包将不能被其他与之相连的路由器收到。在NBMA网络上需要选举DR和BDR,并且所有的OSPF数据包都是单播发送的。

[编辑] 点到多点网络

点到多点网络是NBMA网络的一个特殊设置,可以看作是一群点到点链路的集合,因此在该种网络上不必选举DR和BDR。点到多点网络上OSPF的行为和点到点网络OSPF的行为一样,也使用组播地址224.0.0.5发送OSPF协议数据包。

[编辑] 虚链路

虚链路被路由器认为是没有编号的点到点网络的一种特殊设置,在虚链路上OSPF数据包是以单播方式发送的。不能人工设置一个接口的网络类型为虚链路。

此外还有一种特殊的网络类型,称之Loopback类型。OSPF路由器上的环回接口在默认状态下均为此类型。不能人工设置一个接口的网络类型为Loopback。

[编辑] 指定路由器和备份指定路由器

 

多路访问网络上OSPF邻接关系示意图

 

在广播多路访问网络和NBMA网络上会应选举DR和BDR路由器。所有该区域的其他路由器与DR和BDR指定建立完全邻居关系,其他路由器之间的邻居状态则停留在2-Way状态。所有其他路由器使用组播目的地址224.0.0.6向DR和BDR发送链路状态更新。

如果在多路访问网络中不选举DR,所有路由器之间都建立完全邻接关系,会产生很多不必要的LSA。假设一个多路访问网络上有n台路由器,那么就会建立n(n-1)/2个邻接关系。每台路由器都会产生n-1条LSA到与之建立邻接关系的路由器,再加上1条网络LSA,最终这个网络上会产生n²条LSA,并且其中很多都是重复的LSA副本。

DR完成以下工作:

  • 描述该多路访问网络和与其相连的路由器。
  • 管理该多路访问网络上的LSA洪泛扩散过程。

DR本后的概念是将整个多路访问网络看作一个“伪节点(Pseudo Node)”。当SPF进行计算的时候,把链路看作一个节点,与该链路相连的路由器也是连接到这个节点上的。从与伪节点相连的路由器到这个伪节点的代价是该路由器与这个多路访问网络相连的接口的出站代价,从伪节点到任何与之相连的路由器的代价都为0。一台路由器可能连接到多个多路访问网络,该路由器可能是它所连接的其中一个多路访问网络的DR,也可能不是它所连接的另一个多路访问网络的DR,也就是说,DR是路由器某个(些)接口的属性,而不是整个路由器的整体属性。

为了避免因DR失效导致的单点故障,多路访问网络上还将选举BDR。DR失效时,BDR将成为DR,由于网络上其他路由器已经和BDR形成了完全邻接关系,因此可以将DR失效对网络的影响降至最低。

DR和BDR按网络内路由器的接口优先级选举。其相关选举规则如下:(优先级是如何分配的?---根据Cost(代价,或译开销)的大小分成256级的相对值,越大越优先。Cost的另一度量值是默认带宽(Cisco定为100Mbit/s)与实际路径带宽之比---见下面‘[编辑] OSPF路径选择’一节)

  • 如果一台OSPF路由器的接口优先级(Priority)为0,那么这台路由器永远不能成为DR或BDR。
  • 具有最高优先级的路由器将会选举为DR,具有次高优先级的路由器将会选举为BDR。
  • 如果同时有多台路由器具有相同的优先级,那么具有最高路由器ID的路由器将会选举为DR。
  • 当DR失效时,BDR将成为DR,并将重新选举一个BDR。
  • 优先级的取值范围为0-255,更高的优先级意味着路由器有更大的机会成为DR。
  • 如果一台具有更高优先级的路由器在选举完DR和BDR之后接入网络,该路由器将不会成为DR或BDR,直到DR或BDR失效。即DR和BDR的选举不是抢占式的。

[编辑] OSPF邻接关系

在OSPF路由器之间互相交换信息之前,必须先建立邻接关系。

两台OSPF路由器要建立完全邻接关系,以下参数必须相同:

  1. Hello时间间隔       (执行同一协议)
  2. Dead时间间隔        (执行同一协议)
  3. 区域编号               (处于同一区域内)
  4. 认证(如果启用了认证)(执行同一协议)
  5. 链路MTU大小         (执行同一协议)
  6. 子网掩码               (在同一区域内符合CIDR协议分域规定)
  7. 子网号                 (在同一区域内符合CIDR协议分域规定)
  8. 末梢区域设置         (执行同一协议)

一般来说,建立OSPF完全邻接时会经历以下状态:

  1. 失效状态(Down):这是邻居会话的初始状态,表示最近没有从邻居收到信息。在NBMA网络上,可能仍然会以较低频率向处于Down状态的邻居发送Hello数据包。
  2. 尝试状态(Attempt):该状态仅仅适用于连接在NBMA网络上的邻居。该状态表示最近没有从邻居收到信息,但仍需要作进一步的尝试,来联系邻居。这时按某一特定间隔向邻居发送Hello数据包。
  3. 初始状态(Init):在此状态下,表示最近收到了从邻居发来的Hello数据包。但是,仍然没有和邻居建立双向通信(Bidirectional Communication),例如,路由器自身并没有出现在邻居发送的Hello数据包中。
  4. 双向通信状态(2-Way):此状态意味着两台路由器之间建立了双向通信。在此状态下还将进行DR和BDR的选举(只有处于2-Way状态的路由器才有资格参选DR和BDR)
  5. 信息交换初始状态(ExStart):这个状态是建立邻接关系的第一步。该状态的目标是决定信息交换时路由器的主从关系,并确定初始数据库描述(DD)数据包的序列号。具有最高路由器ID的路由器将成为主路由器。
  6. 信息交换状态(ExChange):在此状态的路由器通过向邻居发送DD数据包来描述其完整的链路状态数据库。每一个DD数据包都有一个序列号,并且需要被显式的确认。在任何时候,每次只能发送一个DD数据包。在此状态下,路由器也可以发送链路状态请求数据包,用来向邻居请求最新的LSA。实际上,这些状态的邻接关系完全有能力发送和接收所有类型的OSPF协议数据包。
  7. 信息加载状态(Loading):在此状态下,路由器将会向邻居路由器发送链路状态请求数据包,用来请求信息交换状态发现的最新的LSA。
  8. 完全邻接状态(Full):在此状态下,邻居路由器形成完全邻接关系。这些邻接关系将会在路由器LSA和网络LSA中被描述。

[编辑] OSPF数据包类型和格式

OSPF定义了以下5种协议数据包类型:

  1. Hello包
  2. 数据库描述包
  3. 链路状态请求包
  4. 链路状态更新包
  5. 链路状态确认包

[编辑] Hello包

Hello包的OSPF包类型为1。这些包被周期性的从各个接口(包括虚链路)发出,用来建立和维护邻居关系。另外,在支持组播或广播的物理网络上,Hello包使用组播地址发送。

Hello包的格式如下:

 

        0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version #   |       1       |         Packet length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Router ID                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Area ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |             AuType            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Network Mask                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         HelloInterval         |    Options    |    Rtr Pri    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     RouterDeadInterval                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Designated Router                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                   Backup Designated Router                    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Neighbor                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                              ...                              |

[编辑] 数据库描述包

数据库描述包(Database Description)的OSPF包类型为2。当邻接关系初始化后,便开始交换这些数据包。它们描述了链路状态数据库的摘要信息(只包含LSA的头部信息)。

数据库描述包的格式如下:

        0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version #   |       2       |         Packet length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Router ID                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Area ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |             AuType            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Interface MTU         |    Options    |0|0|0|0|0|I|M|MS
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     DD sequence number                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +-                                                             -+
      |                                                               |
      +-                      An LSA Header                          -+
      |                                                               |
      +-                                                             -+
      |                                                               |
      +-                                                             -+
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                              ...                              |

 

[编辑] 链路状态请求包

链路状态请求包(Link State Request)的OSPF包类型为3。在交换数据库描述包之后,路由器便知道其自身链路状态数据库缺少哪些LSA,以及哪些LSA是过期的。这时就可以发送链路状态请求包来请求对方发送缺少的LSA和最新的LSA。

链路状态请求包格式如下:

        0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version #   |       3       |         Packet length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Router ID                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Area ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |             AuType            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          LS type                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Link State ID                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Advertising Router                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                              ...                              |

[编辑] 链路状态更新包

链路状态更新包(Link State Update)的OSPF包类型为4。LSA的洪泛就是由此类型的包实现的。每一个链路状态更新包可能包含多条LSA信息。这里的LSA信息是完整的,而不像数据库描述包只包含LSA的头部信息。

链路状态更新包的格式如下:

        0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version #   |       4       |         Packet length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Router ID                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Area ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |             AuType            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            # LSAs                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +-                                                            +-+
      |                             LSAs                              |
      +-                                                            +-+
      |                              ...                              |

[编辑] 链路状态确认包

链路状态确认包(Link State Acknowledgement)的OSPF包类型为5。为了确保LSA的洪泛是可靠的,LSA信息必须被显式的确认。

链路状态确认包的格式如下:

        0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version #   |       5       |         Packet length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Router ID                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Area ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |             AuType            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +-                                                             -+
      |                                                               |
      +-                         An LSA Header                       -+
      |                                                               |
      +-                                                             -+
      |                                                               |
      +-                                                             -+
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                              ...                              |

[编辑] LSA类型

OSPF定义了11种LSA,所有类型的LSA都以一个20字节的通用LSA头部开始。这些不同类型的LSA共同描述了OSPF域内的网络拓扑结构。所有的LSA都保存在LSDB中。SPF算法根据LSDB中的信息计算出最佳路径。

  1. 路由器LSA(Router-LSA):路由器LSA的类型为1。每一台OSPF路由器生成一条路由器LSA。该LSA描述了路由器的接口状态,以及每一个接口的出站代价。路由器LSA只能在始发他们的OSPF区域内进行洪泛,不能洪泛到其他区域。
  2. 网络LSA(Network-LSA):网络LSA的类型为2。网络LSA是DR为了描述连接到多路访问网络并且和DR建立了完全邻接关系的路由器而生成的,包括DR本身。和路由器LSA一样,网络LSA也只能在始发这条LSA的区域内进行洪泛。
  3. 汇总LSA(Summary-LSA):汇总LSA的类型为3。此类LSA描述了区域间的网络,由ABR生成。对于末梢区域,汇总LSA同样被用于描述默认路由。
  4. ASBR汇总LSA(ASBR Summary-LSA):ASBR汇总LSA的类型为4,也是由ABR生成。ASBR汇总LSA通告的是一台区域外部的ASBR路由器,而不像汇总LSA通告的是区域外的网络。
  5. 自治系统外部LSA(AS-External-LSA):自治系统外部LSA的类型为5,由ASBR生成。此类LSA描述AS外部的网络,并可以洪泛到所有非末梢区域中去。
  6. 组成员LSA(Group-Membership-LSA ):组成员LSA类型为6。组成员LSA是对标准OSPF的一个扩展,使其支持组播路由功能,扩展后的OSPF称之Multicast Open Shortest Path First(MOSPF)。
  7. NSSA外部LSA(NSSA-External-LSA):NSSA外部LSA类型为7。此类LSA由NSSA区域内的ASBR生成,也用来描述AS外部的网络。NSSA外部LSA仅仅在始发他们的NSSA区域内进行洪泛,而不像自治系统外部LSA可以洪泛到所有非末梢区域。
  8. 链路本地LSA(Link-Local LSA):链路本地LSA类型为8。该LSA专门用于OSPFv3(用于IPv6网络的OSPF)。链路本地LSA包含了每一个接口的链路本地地址和一个IPv6地址列表。

RFC2370定义了3种新的LSA,称作不透明LSA(Opaque LSA)。这3种新的LSA为OSPF的扩展性提供了通用的机制。它们可以携带用于OSPF的信息,也可以直接携带应用的信息。目前有以下3种不透明LSA,它们的区别主要是洪泛范围不同:

  • 类型9不透明LSA:洪泛范围仅仅是本地链路。
  • 类型10不透明LSA:洪泛范围是始发该LSA的区域。
  • 类型11不透明LSA:洪泛范围是整个OSPF域。

[编辑] OSPF路径选择

OSPF使用“代价(Cost)”作为路由的度量值(Metric),路径的度量值越低,说明该路径越好,具有最低度量值的路径将装入路由表。代价是根据接口所配置的带宽来计算的,带宽越高,代价越低。在Cisco路由器上,默认情况下使用公式10^8/带宽(10^8是基准值,可以调整;带宽的单位是bit/s)来计算代价。例如,接口带宽为100Mbit/s,则代价为1;接口带宽为1000Mbit/s,计算所得的代价还是1(如果计算所得的代价小于1,则按1计算)。 OSPF有以下4种路由类型,优先级由高到低排序如下:

  1. 内部路由:去往区域内部网络的路由。
  2. 区域间路由:去往不同区域网络的路由。
  3. 类型1的外部路由:去往OSPF域外的路由,类型1的外部路由的度量值包括了外部路由的度量值和到ASBR的度量值。
  4. 类型2的外部路由:去往OSPF域外的路由,类型2的外部路由的度量值只包括了外部路由的度量值。

因此如果有多条去往相同目的地的路由具有相同的度量值,那么将比较它们的路由类型。假设有两条去往相同目的地的路由A和路由B的度量值都是30,A是内部路由,B区域间路由,则A将会被装入路由表。如果有多条去往相同目的地的路由具有相同的类型,相同的度量值,则它们都将被装如路由表,并在不同路由之间进行负载均衡。

OSPF新版本指出,使用OSPF路由策略来构建路由表;路由策略受制于开销因素(外部度量),而开销因素则与每一个路由接口相关联。开销因素可以是路由器的距离(往返时间),一个链路的网络吞吐量,或链路的可用性和可靠性。用简单的无量纲数表示。这就提供了一种,通过平衡路由路间相等的开销值,来动态处理流量负荷的方法。

[编辑] 注释

  1. ^ 注:实际上,广播网路中的路由器彼此之间并不一定建立邻接,这取决于网络中指定路由器的选举结果,所有的路由器都与同一个广播网络中的指定路由器以及备份指定路由器建立邻接,而非指定路由器之间彼此仅仅纪录对方为双工通信可能而不建立邻接。

[编辑] 参考文献

  1. Jeff Doyle,Jennifer Carroll. Routing TCP/IP,Volume I,Second Edition. America: Cisco Press. October 19,2005 (英文)

[编辑] 外部链接

  • IETF OSPF Working Group
  • Zebra free router software which supports OSPF
  • Quagga a fork of Zebra
  • OSPF Design Guide On Cisco.com
  • RFC 5187 OSPF Version 3 Graceful Restart, Juni 2008
  • RFC 2740 OSPF Version 3, Dezember 1999
  • RFC 2370 OSPF Opaque LSA Option, Juli 1998
  • RFC 2328 OSPF Version 2, April 1998
  • RFC 1850 OSPF Version 2 MIB, November 1995
  • RFC 1793 Extending OSPF to Support Demand Circuits, April 1995
  • RFC 1587 OSPF NSSA Option, März 1994
  • RFC 1253 OSPF Version 2 MIB, August 1991, ersetzt durch RFC 1850
  • RFC 1247 OSPF Version 2, Juli 1991, ersetzt durch RFC 2370
  • RFC 1131 OSPF Version 2, Juli 1991, ersetzt durch RFC 1247

来自“http://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E5%BC%8F%E6%9C%80%E7%9F%AD%E8%B7%AF%E5%BE%84%E4%BC%98%E5%85%88

3个分类: 路由协议 | 网际协议 | 互联网标准