OSPF-1

    OSPF是IETF开发的做为RIP的替代路由协议,是IETF推荐IGP。OSPF version1作为实验版本,没用公开,现行使用的版本是version 2。

OSPF运行模式

  1. OSPF从所有运行OSPF运行的接口发送hello包。如果两个路由器共享一个共同的数据链路层并且同意一些hello包内的参数,那么他们将成为邻居;
  2. 邻接关系,在邻居之间形成(可以通过虚拟点对地链路)。OSPF定义了许多网络类型和路由器类型。邻接关系的建立,是基于路由器交换的hello包的类型和传递hello包的网络类型而确定的。
  3. 每个路由器发送链路状态通告(LSAs)给所有邻接关系路由器。LSAs描述了一个路由器所有的链路、接口和链路状态。这些链路也许是末梢网络(stub network,不连接其他路由器的网络),也许连接到其他路由器,连接到其他区域(area)的路由器,或者连接到外部网络(从其他路由进程学习到的网络)。因为有如此多种的链路状态信息,OSPF定义了多个LSA类型。
  4. 路由器将其从邻居收到的LSA记录在链路状态数据库中(link state database),同时复制一份发送给所有其他邻居。
  5. 通过在区域(area)内散布LSA,所有路由器将拥有完全一样的链路状态数据库(synchronized)。
  6. 当数据库完成以后,每个路由器使用SPF算法计算出一个以自己为root的无环路的SPF树。
  7. 每个路由器基于SPF树建立起自己的路由表。
  8. 此后OSPF将非常安静,仅发送Hello包用于keepalives和每30分钟重传LSA。

邻居和邻接

  1. 在发送LSA之前,OSPF路由器之间必须发现邻居然后建立邻接关系。邻居将会被记录在邻居表(neighbors table)内,里面包含与邻居相连的链路(接口)和其他相关信息用于维护邻居关系。跟踪维护OSPF需要每个路由器拥有一个router ID----- 一个在OSPF domain内唯一的IP 地址。
  2. Router ID的选择:
    a. 所有loopback接口中IP地址数字上最大的
    b. 如果没有loopback接口,则选择物理接口IP地址中数字上最大的,物理接口不必一定要运行OSPF,所有物理接口都参与选择。
    c.  使用loopback接口有两个好处:1。loopback接口比物理接口更稳定,只有当整个路由器fail了,才fail;2。更加方便管理员分配、识别、控制路由器ID。
    d. 当OSPF使用物理接口地址作为路由器ID时,如果接口fail了或者删除了,OSPF会继续使用此ID,所以用loopback接口作为路由器ID的主要优势,是更容易控制路由器ID。
    e. OSPF以发布包含路由ID的hello包开始建立邻居关系。

The Hello Protocol

     Hello包用于以下目的:

  1. 发现邻居;
  2. 发布多个在形成邻居前双方必须同意的参数;
  3. 作为keepalive;
  4. 确保邻居间双向通信;
  5. 在Broadcast和Nonbroadcast Multiaccess(NBMA)网络中选举指定路由器Designated Router(DR)和备份指定路由器Backu Designated Router(BDR)。

    路由器定期在运行OSPF的接口上发布Hello包,这个定期叫做HelloInterval,在每个接口上,可以使用命令 ip ospf hello-interval进行更改;cisco默认的hellointerval是10秒(30秒在NBMA网络);超出RouterDeadInterval还没有收到hello包,那么邻居将被认为是消失;cisco默认的RouterDealInterval为HelloInterval的4倍,可以使用命令 ip ospf dead-interval更改。

     每一个Hello包包含以下信息:

  1. 源路由器ID;
  2. 源路由器区域ID;
  3. 源接口子网掩码;
  4. 认证type和认证信息;
  5. 源接口的HelloInterval;
  6. 源接口的RouterDeadInterval;
  7. 路由器优先级;
  8. DR和BDR;
  9. 五个flag bit用于标记可选的功能;
  10. 源路由器邻居的路由器ID;只包含在上一个RouterDeadInterval内收到Hello包的邻居;

    当路由器收到Hello包,它会检查上面的2、3、4、5、6、9项是否与接收接口对应参数匹配,如果不匹配,则丢弃包,邻接关系也不会形成。如果匹配,那么这个Hello包被认为有效;如果源路由器ID已经在邻居表中了,那么RouterDeadInterval被重置;如果没有,则将这个邻居加入到邻居表中

    根据上面第10个Hello包信息,如果一个路由器收到一个有效的Hello包并且发现自己的路由器ID在其中,那么,路由器知道一个双向通信(two-way communication)已经建立。一旦双向通信建立了,那么就有可能建立邻接关系。但并不是所有邻居都会建立邻接关系,是否建立邻接关系是根据邻居间的网络类型而定的。网络类型同时也会影响OSPF包的传输。

网络类型

    OSPF定义了5种网络类型:

  1. 点对点(point-to-point networks):点对点网络,仅连接一对路由器。有效的邻居在此网络将形成邻接关系。OSPF包的目标地址将始终是 224.0.0.5----叫做AllSPFRouters地址。
  2. 广播(Broadcast):以太网、令牌环、FDDI,更精确定义应该是广播多路访问网络。广播网是multi-access,他们可以连接多于两个的设备,并且只用传输一次包所有连接设备都可以收到。OSPF在此种网络中将选举DR和BDR。所有的Hello包和所有DR/BDR产生的包使用地址224.0.0.5,所有其他包使用地址224.0.0.6 AllDRouters。
  3. 非广播多路访问NBMA:X.25、帧中继、ATM,可以连接两个以上的设备,但没有广播的能力。OSPF在这种网络上仍然选举DR/BDR,所有OSPF包都用单播。
  4. 点对多点(point-to-point):作为NBMA的一种特殊形式,网络被当做点对点网络的集合。路由器不用选举DR和BDR,正因为网络被视为点对点,所以使用组播。
  5. 虚拟链路(virtual link):路由器作为点对点连接,使用unicast。

   DR & BDR

  1. 广播网络中选举DR和BDR。只有DR将发送LSA到其他路由器。
  2. DR只是一个路由器接口的属性,不是整个路由器的属性。一个路由器可以在一个网络是DR,在另一个网络不是。
  3. 所有路由器跟DR和BDR发生邻接关系,同时DR和BDR之间也邻接。
  4. 为了使DR、BDR顺利选举,必须满足以下前提:
    a. 路由器上每一个multi-access接口有8 bit 的 Router Priority (0-255)。在cisco路由器上面默认是1,0意味着没有资格选举DR或者BDR。在multi-access接口下使用命令ip ospf priority可以更改。
    b. Hello包中包含Router Priority和它认为是DR和BDR的路由器的本网络接口地址。
    c. 当一个接口第一次激活连接到multi-access网络时,它设定DR和BDR地址为0.0.0.0,同时设定wait timer值等同于RouterDeadInterval值。
    d. 已在multi-access网络的接口,将DR和BDR地址记录在interface data structure内。
  5. DR、BDR选举过程如下:
    a. 在2-2way通信建立起来过后,检查邻居Hello包中的prioryt,DR,BDR字段(优先级大于0,邻居关系式2-way);所有路由器申明自己是DR和BDR(将hello包中DR、BDR字段写上自己的接口地址)。
    b. 从所有合法候选路由器中,列出不申明自己是DR的路由器(申明自己是DR的路由器不能被选为BDR)。
    c. 如果多于1个路由器申明自己是BDR,那么优先级最高的邻居将被选举为BDR,如果优先级一样,有最高Router ID的被选为BDR。
    d. 如果没有路由器申明自己是BDR,则有最高优先级的将成为BDR。如果优先级一样,有最高Router ID的被选为BDR。
    e. 如果多于1个路由器申明自己是DR,那么优先级最高的邻居将被选举为DR,如果优先级一样,有最高Router ID的被选为DR。
    f. 如果没有路由器申明自己是DR,则最新选举出来的BDR成为DR。
    g. 如果进行这个就是的路由器是新选出来的DR或者BDR,或者没有DR、BDR,则重复b-f步骤。
  6. Priority会影响选举,但不会影响现有的激活的DR和BDR。
  7. 如果只有一个路由器有资格选举DR,则所有其他路由器只和它建立邻接关系;如果没有一个路由器有资格选举DR,则没有邻接关系可以建立,路由器直接的邻居关系维持在2-way。

 OSPF 接口数据结构

OSPF路由器使用根据存储在接口的数据生成Hello包,来向邻居介绍自己

 

  1. IP address and mask:发出去的OSPF包将以此作为源地址;
  2. Area ID:区域号;
  3. Process ID:不是公开的标准,cisco可在路由器上同时运行多个OSPF进城,此ID用来区分不同OSPF进城;
  4. Router ID:
  5. Networ Type:5种类型之一;
  6. Cost:从此接口出去的包的cost;16bit(1-65535);默认使用10的8次方/BW, 上面列子是100000000/128K=781;cost可以在接口模式下面使用ip ospf cost更改;使用命令ospf auto-cost reference-bandwidth更改默认的参考带宽;
  7. InfTransDelay:LSAs离开接口是会增加age,这个增加的age就是InfTransDelay,默认是1秒,使用命令ip ospf transmit-delay 更改;
  8. State: 接口状态机;
  9. Router Priority:接口优先级,用于选举DR和BDR,由于上面是点对点接口,不需要DR和BDR选举,所以看不到,默认是1,范围是0-255,使用命令 ip ospf priority 更改;
  10. HelloInterval:  默认10秒,使用命令ip ospf hello-interval 更改,NBMA上默认30秒;
  11. RouterDeadInterval: 默认为4倍hellointerval,使用命令 ip ospf dead-interval 更改;
  12. Wait Timer: 在开始进行DR和BDR选举之前,路由器等待邻居申明DR和BDR的时间;此时间更RouterDeadInterval一样;在此列中,由于是点对点链路,所以此timer不会用到;
  13. RxmtInterval: 在没收到一个包的acknowledge之前,路由器重传等待时间;默认5秒,使用命令 ip ospf retransmit-interval 更改;
  14. Hello Timer: timer到期时,从此接口发送一个hello包;
  15. Neighboring Routers:与接口相连网络的有效邻居列表(在dead interval内收到hello包),只有形成邻接关系的邻居才会显示; 
  16. AuType: 认证形式,包括Null(没有认证)、Simple Password和Cryptographic;使用Null时候,用show ip ospf interface命令不会有任何显示;

接口状态机:

  OSPF运行接口在进入全工作状态前,在几种状态直接切换:

  1. Down. 接口初始化状态;接口没有运行,所有接口参数处在初始状态,没有协议数据发送/接收;
  2. Point-to-Point. 这个状态只会出现在point-to-point, point-to-multipoint, virtual link 网络类型上;这个状态时全面工作状态,发送hello并且尝试与链路对端建立邻接关系;
  3. Waiting. 只适用于广播或者NBMA网络类型;此状态可以发送和接收Hello包,设定wait timer;路由器将在此阶段确定DR和BDR;
  4. DR. 路由器在此网络是DR角色,将负责与其他路由器建立邻接关系;
  5. Backup. 路由器在此网络是BDR角色,将负责与其他路由器建立邻接关系;
  6. DRother. 路由器既不是DR也不是BDR,将只与DR和BDR建立邻接关系;
  7. Loopback. 接口被软件或者硬件looped back;虽然包不能通过此接口发出,但是接口地址任然被LSA发布出去,以便测试包能够到达此接口;

 OSPF邻居:

   邻居关系的最终目标是形成邻接以便交换路由信息,一个邻接通常由4个阶段形成:

  1. 邻居发现;
  2. 双向通信;
  3. 数据库同步;数据库描述,链路状态请求,链路状态更新都被交换使得所有邻居都有完全相同的链路数据库信息。邻居将形成一个master和slave关系,master将控制数据库描述包的交换;
  4. 完全邻接;

    ★ 在广播和点对点网络,使用地址224.0.0.5(AllSPFRouters);

     ★在NBMA、点对多点、虚拟链路上使用单播;使用单播意味着路由器首先必须通过手工配置或者底层机制学习到邻居。

     ★在所有网络类别里,路由器都会在HelloInterval时发送Hello包,有一个列外:在NBMA网络,会向邻居状态为down的邻居每隔60秒(cisco默认)(PollInterval)发送Hello包。

邻居数据结构:

路由器将从邻居学习到的信息,存储在邻居数据结构内,这个双向的信息交换可以理解成一个对话。

 

  1. Neighbor ID:邻居的路由器ID;
  2. Neighbor IP Address:邻居连接到这个网络的接口地址,如果OSPF使用单播通信,那么这个就是OSPF包的目的地;
  3. Area ID:两个路由器要成为邻居,area ID必须一致;
  4. Interface:连接到这个邻居的本地接口;
  5. Neighbor Priority:邻居的Router Priority,用于DR/BDR选择;
  6. State:邻居的功能状态;
  7. PollInterval:只在NBMA网络有用;
  8. Neighbor Options:
  9. Inactivity Timer:跟RouterDeadInterval相同的timer,每次收到hello包,这个timer将被重置。

以下是一些命令show ip ospf neighbor不会显示的邻居数据结构:

  1. Designated Router:在邻居发送hello包里的DR信息;
  2. Backup Designated Router:在邻居发送hello包里的BDR信息;
  3. Master/Slave:master、slave关系在邻居ExStart状态下协商产生,用于确定哪个邻居控制数据同步;
  4. DD Sequence Number:最近的Database Description(DD)包的sequence number;
  5. Last Received Database Description Packet:最后收到的DD包的信息,用于确认下一个收到的DD包是否重复;
  6. Link State Retransmission List:发送出去尚未收到acknowledge的列表;
  7. Database Summary List:
  8. Link State Request List::

OSPF邻居状态机:

  1. Attempt:只用于邻居手动配置的NBMA网络 ;一个有资格选举DR的路由器当其接口第一次变成active时或者路由器是DR/BDR,将会标记邻居为Attempt状态;在这个状态下,路由器使用HelloInterval发送包,不使用PollInterval;
  2. Init:在最近一个RouterDeadInterval内收到从邻居的Hello包,但2-way通信尚未建立起来;路由器将在这个状态或者这个状态之上将RouterID包含在Hello包中;
  3. 2-Way:路由器在邻居发送的Hello包内看到自己的RouterID,意味着一个双向的通信建立起来了;在mulit-access网络,邻居必须在这个状态或者这个状态以上才能进行DR/ BDR选举;收到DD包也能转换成这个状态;
  4. ExStart:路由器和邻居之间形成Master/Slave关系;确定初始DD包的sequence number,为交换DD包做准备;路由器ID高的成为Master,与接口优先级无关;
  5. Exchange:路由器发送DD包,将其所有连接的链路发送出去;路由器也可以发送Link State Request包,要求获得更新的LSAs;
  6. Loading:路由器发送Link State Request包给邻居,要求收到更新的,在ExChange状态下发现但并未学习到的LSAs;
  7. Full:邻居完全邻接;

建立一个邻接

     ★邻居在点对点、点对多点,虚拟链路上面总是建立邻接关系的,除非Hello包中的信息不匹配。

    ★在广播和NBMA上面,DR、BDR跟所有邻居建立邻接关系,但DRouters之间没有邻接关系。

    ★邻接关系的建立过程使用3中OSPF包类型:

  1. Database Description packets(type 2)
  2. Link State Request packets ( type 3 )
  3. Link State Update packets ( type 4 )

     ★Database Description packet在邻接建立过程中非常重要。DD包包含了每条LSA的总结描述,这个描述不是完全的LSA,但提供了足够的信息给接收方来决定是否在自己的数据库中包含了此LSA。此外,DD包还是用3个flags来管理邻接建立的过程:

  • I-bit,Initial bit,表明发送的第一个DD包;
  • M-bit,More bit,表明这个不是最后一个DD包;
  • MS-bit,Master/Slave bit, master发送的DD包;

    ★所有在Update包中发送的LSA,都必须单独的确认。

   ★Master控制同步过程,是为了保证每次只有一个DD包在交换。当slave收到master发送的DD包,slave会回复一个与刚刚接收到的DD包使用相同sequence number的DD包;如果master在RxmtInterval时间内没有收到ack,master将重发。

   ★Flooding 使用以下两种OSPF包:

  • Link State Update packet ( type 4 )
  • Link State Acknowledgement packet ( type 5 )

    ★可靠传输:Sequencing, Checksums,Aging
           

你可能感兴趣的:(职场,休闲,ospf,CCIE)