精华内容
下载资源
问答
  • IS-IS邻接关系建立过程

    千次阅读 2021-01-13 21:17:59
    Hello 报文中除了包含发送路由器的System-ID之外,还包含了发送端全局和接口的一系列参数,这些参数如果被邻居路由器接受了,那么就能形成邻接关系,否则不建立邻接关系。 在LAN (广播网络)和P2P (点对点网络)中形成...

    概述:

    路由器的接口一旦启动IS-IS进程,就会发出Hello报文,用以发现邻居并形成邻接关系。Hello 报文中除了包含发送路由器的System-ID之外,还包含了发送端全局和接口的一系列参数,这些参数如果被邻居路由器接受了,那么就能形成邻接关系,否则不建立邻接关系。

    在LAN (广播网络)和P2P (点对点网络)中形成邻接关系的过程稍有不同,使用的Hello报文也有些区别,下面是三种IIH(ISIS Hello):

    1. 点到点IIH:用于点到点网络。
    2. L1 LAN IIH:用于广播网络Level-1邻接。
    3. L2 LAN IIH:用于广播网络Level-2邻接。

    邻接关系建立前提:

    IS-IS协议作为一种链路状态路由协议,每台路由器都会生成LSP,然后将其泛洪到网络中,所有路由器都会将LSP(本地和其他路由器通告的)存放至LSDB,再基于LSDB利用SPF算法计算出最优路由。泛洪LSP之前需要跟相邻路由器形成邻接关系。只有邻接关系形成后,LSP 才能在相邻路由器之间互相交换,进而更新自己的LSDB。

    建立邻接关系需要满足如下条件:

    1. 两台L1路由器必须在同一区域才能建立邻接关系。
    2. 两台L2路由器建立L2邻接关系不要求在同一区域。
    3. 一台L1路由器和一台L1/2路由器在相同区域时才能形成L1邻接关系。
    4. 一台L2路由器和一台L1/2路由器不管是同区域还是不同区域,都能形成L2邻接关系。
    5. 两台L1/2路由器,同区域内可形成L1和L2邻接关系,不同区域只能形成L2邻接关系。
    6. 链路两端的IS-IS接口的网络类型必须一样。
    7. 华为设备还要求链路两端的IP地址位于同一个子网,P2P可以配置忽略网段检查,华为设备命令接口下:isis peer-ip-ignore。
    8. IS-IS要求整个域内路由器使用的System-id长度必须一致,在华为的实现中,System-id长度固定使用6Byte;该规则用于P2P邻接。
    9. 两台路由器使用的最大区域地址数要相同,华为默认支持最大区域地址数是3;该规则用于P2P邻接。
    10. 如果配置了认证,要求两台路由器的认证信息要一致(认证类型和密钥信息)。
    11. 要求链路两端的接口MTU值要一致。在华为的实现中,不管是P2P链路还是广播链路,发送的Hello都是填充至接口MTU大小,用以检查链路两端的接口MTU。

    整体来说IS-IS邻接关系建立的过程更简单,仅通过IIH报文便可以完成。邻接关系建立完成后,再同步LSDB(链路状态数据库),这里和OSPF的顺序不同。

    广播环境下邻接关系建立过程:

    在这里插入图片描述
    在广播网络中,IS-IS 使用LAN IIH来建立邻接关系,L1的LAN IIH发送到组播地地址:01-80-c2-00-00-14, L2的LAN IIH发送到组播地址: 01-80-c2-00-00-15。 当路由器发送Hello报文时(默认hello时间为10s,保持时间为Hello报文发送时间的3倍),它会根据接口的层级决定发送出的是L1的Hello还是L2的Hello。接口的层级可以在接口下配置,跟全局的层级是没关系的,接口默认的层级是L1/2。

    当路由器收到Hello报文后,检查跟发送Hello报文的路由器的邻接情况,如果已经建立好邻接关系,则在邻居表中重置和此邻居关联的保持定时器;如果邻接关系没有建立,则通过发送过来的Hello报文中的参数决定是否建立新的邻接关系。上图所示为在广播链路上L2邻接关系的建立过程(L1类似)。

    IS-IS邻接状态机分为down、initiated和established。

    具体步骤:

    1. 双方路由器首先都使能IS-IS,此时处于down状态,假设都是L2类型的路由器,RouterA广播发送Level-2 LAN IIH,此报文中包含一个LAN ID,也就是DIS,另外报文中的IS Neighbors TLV字段没有邻居的SNPA地址,因此还没有收到邻居的Hello报文。
    2. RouterB收到此报文后首先会进行系列的校验动作,如System长度是否匹配、Max Area Address是否匹配、验证密码是否正确等,通过验证(或者双方没有配置验证),将自己和RouterA的邻居状态标识为Initialized。然后,从获得的Hello报文中Source字段中获取Router A的System ID,添加到邻居表中,RouterB再向RouterA回复Level-2 LAN IIH,此报文中标识RouterA为RouterB的邻居。
    3. RouterA收到此报文后,发现有自己的SNPA地址,于是将自己将自己与RouterB的邻居状态标识为Up,将Router B的system ID天交到自己的邻居表中,标识RouterB为自己的邻居。然后RouterA再向RouterB发送一个标识RouterB为RouterA邻居的Level-2 LAN IIH。
    4. RouterB收到此报文后,发现有自己的SNAP地址,将自己与RouterA的邻居状态标识为Up。这样,两个路由器成功建立了邻居关系。

    DIS(指定IS):
    为保障LSP泛洪的准确性和及时性,要求在拓扑发生变化时,立即泛洪新的LSP,在网络稳定时也要周期性泛洪LSP, 这就提高了带宽和处理资源开销。

    在广播型多路访问网络中,IS-IS协议需要在所有路由器之间建立邻接关系,网络中邻接关系越多,为确保LSP泛洪的可靠性而带来的网络资源开销就越大。为降低在多路访问网络中邻接关系的复杂性,提高带宽利用率,IS-IS协议将整个多路访问网络本身看作一台路由器或一个伪节点。IS-IS协议在多路访问网络中需要DIS(指定IS),由DIS来抽象出并发挥伪节点的作用。有了DIS后,多路访问网络中的邻居间泛洪LSP后,通过DIS的SNP (序列号报文)来确保LSP泛洪的可靠。LSP 泛洪过程会在后续笔记中分析。

    所以在邻居关系建立后,路由器会等待两个Hello报文间隔,再进行DIS的选举。Hello报文中包含Priority字段,Priority值最大的将被选举为该广播网的DIS。若优先级相同,具有最大的Subnetwork Point of Attachment(SNPA)的路由器将当选DIS:

    1. 在LAN中,SNPA指的是MAC地址。
    2. 在帧中继网络中,SNPA 是Local Data Link Connection Identifier (DLCI)。

    如果SNPA是一样的,具有最大的System-ID的路由器将当选为DIS。

    注意点:

    1. Level-1和Level-2的DIS是分别选举的。
    2. 同一台路由器在不同level的DIS选举中可以设置不同的优先级。
    3. 优先级为0的路由器也参与DIS的选举,且DIS选举支持抢占。
    4. 同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系,但LSDB的同步仍然依靠DIS来保证。
    5. DIS用来创建和更新伪节点,并负责生成伪节点的LSP,用来描述这个网络上有哪些网络设备。
    6. 华为路由器接口的优先级的范围是0~127,默认的接口的优先级是64, 可以通过isis dis-priority命令修改接口的优先级。
    7. 没有备份的DIS。

    IS-IS协议中DIS与OSPF协议中DR(Designated Router)的区别:

    1. 在IS-IS广播网中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举。
    2. 在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,原有的伪节点被删除。此更改会引起一组新的LSP泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
    3. 在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。而在OSPF中,路由器只与DR和BDR建立邻接关系。
    4. IS-IS广播网上所有的路由器之间都形成邻接关系,但LSDB的同步仍然依靠DIS来保证。在OSPF中只需要和DR建立邻居关系,邻居对减少。
    5. OSPF中有备用的BDR,而IS-IS网络中没有DIS的备用设备。

    另外,不论是L1还是L2,DIS在LSP泛洪过程中都很重要,但是都没有选举备份DIS。 这样的话,当网络中的DIS发生故障后不会产生什么问题吗?答案是不会的,原因包括以下两个方面:

    1. 在广播型多路访问网络中,路由器会跟其他所有路由器都建立邻接关系,它们都会定期进行LSP的泛洪,即使DIS失效了,也不会影响其他所有路由器的IS-IS协议的正常运行,这样在没有备份DIS的情况下不会产生什么问题。
    2. 如果当前DIS失效,网络中其他路由器检测到该故障,然后重新选举新的DIS,这个过程所花的时间是非常短的,因为DIS发送Hello报文的频率是其他路由器的1/3倍,DIS发送Hello报文的间隔时间是3.3333s, 其他路由器检测DIS失效的时间只需10s,相比于OSPF更快。

    对于IS-IS协议来说,如果一台优先级高或Mac地址高的路由器加入到现有网络中,那么这台新路由器会抢占现有DIS而成为新的DIS,这一点也与OSPF的DR不同。在OSPF中,DR和BDR都是不允许被抢占的。IS-IS 协议这样处理会对网络的稳定性产生影响吗?

    如前面所讲,在广播多路访问网络中,选举出一台新的DIS, 不会对其他路由器IS-IS的正常运行产生影响,只需要路由器泛洪扩散一组新的LSP出来就可以了。当初ISO在设计IS-IS 协议时,为什么要这样选择呢?当时是基于以下两方面的考虑:

    1. 向正在运行的广播型网络中添加路由器的情况是比较少见的,由此带来的影响可以忽略。
    2. 现在的路由器处理性能很好,即使重新选举和计算也是非常快的。

    伪节点:
    在这里插入图片描述

    1. 伪节点是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和一个字节的Circuit ID(非0值)标识。
    2. 使用伪节点可以简化网络拓扑,方便利用SPF算法进行拓扑计算。
    3. 当网络发生变化时,需要产生的LSP数量较少,减少进行SPF运算时的资源消耗。

    如下是广播网络中一台IS-IS路由器的邻居表(华为设备):

    在这里插入图片描述

    1. 表中第一列显示了邻居路由器的System-ID。
    2. 第二列表示本地到邻居路由器的接口。
    3. 第三列标识了邻居路由器的电路ID,电路ID用于唯一标识一个IS-IS接口,如果该接口是和一个广播网络相连的,那么这个电路ID是该广播网络上的DIS设置的,000.00000020是DIS的System-ID,01 表示伪节点ID,这时电路ID也称作LAN ID。
    4. 第四列表示邻接关系状态,正常状态为UP。
    5. 第五列表示对邻居的保持时间,如果该邻居是DIS,那么保持时间为10秒,否则为30s(默认)。
    6. 第六列表示邻接类型。
    7. 最后一列表示邻居接口的DIS优先级。

    P2P环境下邻接关系建立过程:

    由于当初在设计IS-IS的时候,根据ISO10589的定义,点对点Hello报文不包括ISNeighbor TLV (类型6),因此,在P2P网络中无法像广播网络那样使用“三次握手”机制来建立邻接关系,而只能使用“两次握手”机制,这导致的后果前面已经说过。直到在后来的集成IS-IS协议中才支持通过“三次握手”机制建立邻接关系。

    无论是P2P还是广播环境下,L1和L2邻接关系区分,都是在Hello报文中通过通用报头所带有字段circuit type确定的,0x01–L1、0x02–L2、0x03–L1/2。

    两次握手机制:
    在这里插入图片描述

    1. RouterA接口启动IS-IS后,首先向RouterB发送一份P2P IIH,报文中携带了自己的System-Id和其他信息,但报文并没有IS Neighbor邻居列表。
    2. RouterB 接收到Hello报文后,直接将RouterA的邻接状态设置为UP。
    3. 同第2步,RouterA也在收到RouterB的Hello报文后将邻接状态直接设置为UP。

    两次握手机制存在明显的缺陷。当路由器间存在两条及以上的链路时,如果某个接口收到对端的IIH报文,本端变为UP状态,而对端没有收到本端的IIH报文,仍为Down状态。SPF在计算时会使用状态为UP的链路上的参数,这就导致没有检测到故障的路由器在转发报文时仍然试图通过状态为Down的链路。三次握手机制解决了上述不可靠点到点链路中存在的问题。这种方式下,路由器只有在知道邻居路由器也接收到它的报文时,才宣布邻居路由器处于Up状态,从而建立邻居关系。

    三次握手机制:
    在这里插入图片描述
    为支持在P2P网络中使用“三次握手”机制建立邻接关系,集成IS-IS协议的Hello报文增加了一个新字段,叫P2P邻接状态(也就是类型240的TLV),使用该TLV携带邻居的信息。考虑到向后兼容性,如果一台比较老的路由器不支持该TLV,接收到后可以忽略它,按照老的方式一“两次握手”机制建立邻接关系。华为的实现是在P2P网络默认使用“三次握手”机制,在说邻接关系建立之前,先来了解一下类型240的TLV包含的内容:

    1. 类型:OxF0。
    2. 长度:5~ 17Byte。
    3. 值:1Byte, 表示邻接状态,一共有3种状态,UP (=0), Initializing (=1), Down(=2)。
    4. 扩展的本地电路ID: 4Byte, 本端对点对点网络接口的标识。
    5. 邻居System-ID:邻居系统ID。
    6. 邻居扩展的本地电路ID:0或4Byte,邻居端对点对点网络接口的标识。
      在这里插入图片描述

    有了类型240的TLV后,路由器在接收到的Hello 报文中,通过确认NeighborSystemID字段是否包含自己的System-ID, 从而实现“三次握手”机制。同时,本地的邻接状态基于当前状态和收到的类型240TLV中显示的邻接状态值进行设置。具体步骤如下:

    1. RouterA接口启动IS-IS后,首先发出邻接状态为Down的P2P IIH。
    2. RouterB 接收到Hello后,根据里面邻接状态字段将RouterA邻接状态设置为Initializing, 并在回复给RouterA的Hello报文中将邻接状态字段设置成Initializing。
    3. RouterA 从RouterB 接收到的邻接状态为Initializing, 并且NeighborSystemID中包含了自己,立刻将RouterB 的邻接状态设置为UP状态;并且在发给RouterB的下一Hello 报文中,将邻接状态字段设置为UP。
    4. RouterB 接收到RouterA 的邻接状态为UP的Hello 报文后,立刻将RouterA的邻接状态设置为UP。至此,RouterA 和RouterB的邻接关系建立完成。

    P2P三次握手和广播网络三次握手的区别在于,P2P三次握手在交互的报文中携带了邻接状态,而广播环境中则是通过机制完成。

    握手方式配置:(华为设备)
    在PPP接口下执行命令:isis ppp-negotiation { 2-way | 3-way [ only ] },指定接口使用的协商模型。
    缺省情况下,使用3-way协商模式。

    整理资料来源:《HCIE路由交换学习指南》、华为hedex文档

    展开全文
  • ISIS 邻接关系

    2021-04-23 13:53:58
    1.握手报文: 点到点IIH L1 LAN IIH ...3.在TLV字段携带了一个Point-to-Point adjacency state,携带发送端路由器所有邻居System-id及其邻接状态;LAN对用位置IS Neighbor字段,发送端路由器所有邻居的

    1.握手报文:

    点到点IIH

    L1 LAN IIH

    L2 LAN IIH

    P2P 和LAN中IIH差异:

    1.P2P Hello报文中没有Priority 和System-ID{DIS}字段,原因是P2P链路不需要DIS

    2.新增了一个Local Circuit ID,用来标识发送端接口

    3.在TLV字段携带了一个Point-to-Point adjacency state,携带发送端路由器所有邻居System-id及其邻接状态;LAN对用位置IS Neighbor字段,发送端路由器所有邻居的MAC

    2.邻接关系的建立

    邻接关系建立的条件:

    1.链路两端ISIS接口的网络类型必须一样

    2.链路两端的IP地址处于同一个子网(华为)

    3.如果配置认证,认证信息要一致

    4.链路两端接口MTU要一致;在华为实现中HELLO包都是填充至接口MTU大小,用于检查链路两端接口的MTU

    4.ISIS整个域内路由器使用System-id 长度必须一致,在华为实现中System-id长度固定6B,P2P环境中

    5.两台路由器使用最大地址数要相同。华为默认为3,该规则用于P2P环境

    3.广播网络的邻接关系建立

    BM网络中使用的组播地址:

    L1 01 80 c2 00 00 14  

    L2  01 80 c2 00 00 15

    三次握手机制:广播网络中Hello中使用IS Neighbor这个TLV类型6,路由器如果在接收到的Hello报文中看到自己的System-id,那么就宣告邻接关系建立。避免单通故障导致邻居之间,一边宣告邻接关系UP,另一边down状态

    <R1>dis isis peer

     

                              Peer information for ISIS(1)

     

      System Id     Interface          Circuit Id       State HoldTime Type     PRI

    -------------------------------------------------------------------------------

    0000.0000.0002  GE0/0/0            0000.0000.0002.01 Up   9s       L2       64

     

    DIS选举:

    DIS产生原因:在广播型多路访问网络中,ISIS协议需要在所有路由器之间建立邻接关系,网络中邻接关系越多,为确保LSP泛洪的可靠性而带来的网络资源的开销就越大。

    目的:为了降低多路访问中关系的复杂性,提高带宽利用率,ISIS将整个多路访问网络本身看成一个伪节点

    选举规则:只有邻接状态UP的路由器才有资格选举

    ·选举基于接口优先级,优先级高的当选(0~127,默认64)

    ·最大MAC地址当选

    与OSPF DR的不同点:

    1.ISIS中优先级为0的接口也可以参与选举

    2.没有备份DIS. (那么如何保障BM网络中的稳定新?在广播型多路访问网络中,路由器会跟其他所有路由器都建立邻接关系,会定期进行LSP泛洪,即使DIS失效,也不影响其他路由器的运行;网络中其他路由器检测到故障,会重新选举DIS,DIS发送hello报文的时间是其他路由器的1/3倍,其他路由器检测到DIS失效只需要10s)

    3.对于ISIS协议,一台优先级较高/MAC地址较大的路由器加入到现有网络,会抢占DIS

    DIS功能:

    1.模拟出伪节点,生成伪节点LSP,用来描述这个网络上有哪些路由器

    2.确保网络中LSP泛洪的可靠性

    3.完成L1和L2的LSP扩散和路由计算

    展开全文
  • 一、OSPF邻接关系状态 二、OSPF邻接关系建立过程 一、OSPF邻接关系状态 1.Down:在没有检测到活动邻居的状态。 2.Init:此时收到邻居发送的Hello分组。 3.双向:在收到邻居发送的Hello分组中看到自己的路由器ID...

    目录

    一、OSPF邻接关系状态

    二、OSPF邻接关系建立过程


    一、OSPF邻接关系状态

    1.Down:在没有检测到活动邻居的状态。

    2.Init:此时收到邻居发送的Hello分组。

    3.双向:在收到邻居发送的Hello分组中看到自己的路由器ID。

    4.预启动:确定了主/从角色。

    5.交换:发送DBD(LSBD摘要)

    6.加载:交换LSR和LSU以填充LSDB。

    7.完全邻接(Full):邻居处于完全邻接状态。

     

    二、OSPF邻接关系建立过程

    OSPF建立邻接关系的图解过程:

    建立OSPF邻接关系过程

    1.Down状态:在没有与其他路由器交换信息时,路由器的初始状态是Down的;

    2.Init状态:在所有运行OSPF协议后,R1会发送Hello组播分组给所有接口,R2收到后,就把相应的邻居信息放到邻居表,这时就处于Init状态;

    3.双向通信状态:R1收到R2发送一个包含R1本身的RID Hello单播应答分组时,就会处于双向通信状态,它把R2的邻居信息放到邻居表,这时R1与R2都处于双向通信关系状态中;

    4.预启动状态:R1与R2发送DBD分组,以选举出DB与BDR的主/从路由器,在交换过程中,路由器ID在的路由器成为主路由器;

    5.交换状态:主路由器与从路由器之间开始发送一个或多个DBD分组(也称为DDP,DBD中包含有关LSDB中LSA条目的摘要信息,相当于书本的目录),这时就处于交换状态;

    6.加载状态:R1与R2之间发送LSR与LSU用来填充自身的LSDB,这里的LSU是需要使用LSAck分组来确认的;

    7.完成邻接状态:当完成加载行为时就处于此状态。

     

    注意:

    1.LSA条目是关于链路或网络的内容,摘要信息包括链路状态类型、通告LSA的路由器IP地址、链路的开销与序列号

    2.OSPF路由器是根据序列呈来判断收到的链路状态信息的新旧程度;

    3.每条LSA都会有一个序列号,相同的LSA它们的序列号是不一样的,路由器会选择LSA中序列号大的放到LSDB中;

    4.只有在NBMA、广播类型的网络中才会选举DB与BDR,选举出DR后,其他的路由器都为DRother; 

    5.只有DR与BDR才会建立完全双向邻接关系;

    6.LSU与LSAck分组是采用多播地址发送的,但是重传或通过虚拟链路发送以及在非广播网络中发送时除外;

    7.存在LSBD的LSA最大寿命时间为60分钟;

    8.序列号是一个循环值来的(0x80000001~0x7FFFFFFF); 

    9.使用DR发送路由更新可以减少路由更新流量;

    10.在收到DBD时,路由器会比较自己LSDB,若存在更新的LSA条目,它就会发送LSR请求,否则不会发送;

    11.想要看到OSPF的邻接关系建立过程,可以使用命令Debug ip ospf event来查看;

    12.邻接路由器要建立邻接关系的充分条件是:

    1)Hello间隔

    2)失效间隔

    3)区域ID

    4)身份验证密码

    5)末节区域标记

     

    展开全文
  • OSPF邻接关系建立简介

    2015-11-09 23:33:51
    简要介绍了OSPF邻居状态机的变化和邻接的建立过程
  • OSPF邻接关系建立过程

    千次阅读 2020-12-23 20:58:29
    Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的router-id不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己重新产生的Hello报文中,并且发送。...

    一.邻居发现与建立阶段

    在这里插入图片描述
    通过双方交互Hello报文完成邻居发现。一共有三个状态机:

    1. Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
    2. Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的router-id不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己重新产生的Hello报文中,并且发送。
    3. 2-Way:收到了带有自己RID的Hello包进入的状态。在此状态下,两台路由器已确认可以双向通信,邻居关系已经建立;但是还没有建立邻接关系。这是建立邻接关系以前的最高级状态。如果网络为广播网络或者NBMA网络则选举DR/BDR。如果是P2P和P2MP网络中,则直接进入ExStart状态。

    在形成邻居关系过程中,需要对Hello报文携带的参数进行协商,否则无法正常建立邻居关系:

    1. 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段,因为NCP协商阶段会生成对端IP的32位路由。
    2. 所接收的Hello报文中的HelloInterval和RouterDeadInterval字段必须和接收端口的配置保持一致。
    3. 所接收的Hello报文中的认证字段需要于本机配置一致。
    4. 区域类型,所接收的Hello报文中的Options字段中的E和N位(表示是否接收外部路由信息)必须和接收端口的相关区域配置保持一致。
    5. 区域ID,包含在OSPF头部之中。
    6. 所接收的Hello报文中的区域字段必须和接收端口的配置一致。
    7. 网络类型最好设置为相同,不是极大可能出现问题,具体在网络类型的章节分析。
    8. MA网络中不能所有设备优先级都为0,DR选举会不成功。

    hello报文抓包内容:
    带有hello时间,dead时间,并且有接口的接口优先级用来选举DR和BDR,也有属于的区域和自己已知的邻居路由器。
    在这里插入图片描述
    在广播网络或者NBMA网络中普通路由器需要和DR、BDR建立OSPF邻接关系,普通路由器之间只需要建立邻居关系即可。在P2P和P2MP网络中,设备间建立的都是邻接关系。

    补充:DR和BDR的相关内容

    选举DR和BDR的作用:

    1. DR和BDP只会在多路访问环境中存在,也就是NBMA和Broadcast环境中产生,目的是在同一网段中减少链路状态报文泛洪的数量,因为在点到点或者点到多点中,在同一个链路中只需要和很有限的设备建立邻居关系即可,在P2P中只还只需要和对方一个人建立邻居关系,但是在多路访问的环境中,那就完全不一样的了,一个广播网段中可以通过交换机连接很多的设备,这样的话一个网段中交互的链路信息可能会变得很大,严重占用了链路的带宽,所以为了杜绝这件事情的发生,我们选举出DR和BDR作为整个网段中的老大哥和老二哥,其他小弟只需要和老大哥同步LSDB即可,当老大哥出现问题时,再由老二哥进行填补,这样的话就很好的解决了链路状态信息过多的问题。小老弟之间只需要建立普通的邻居关系即可。另外需要注意的是DR和BDR也需要建立LSDB的完全同步。
    2. SPF算法需要将多路访问链路抽象为点到点的类型进行计算,如下图:
      在这里插入图片描述
      其中N1就是抽象出来的DR,由DR发送出2类LSA来描述和他相连的真实接口。

    DR/BDR选举规则:

    1. DR/BDR由OSPF的Hello协议选举,选举是根据端口的路由器优先级(Router Priority)进行的,也就是比较同一网段中不同路由器的相连接口的优先级。
    2. 如果Router Priority被设置为0,那么该路由器将不允许被选举成DR或者BDR,默认为1,最大为255。(三层比大,二层比小)
    3. Router Priority越大越优先。如果相同,Router ID大者优先。
    4. DR/BDR不能抢占。
    5. 如果当前DR发生故障,当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR。

    DR/BDR选举算法:

    1. 路由器接口数据结构中维持三个集合,分别是:
      • DR集合:通过Hello报文学习到的所有DR路由器。
      • BDR集合:通过Hello学习到的所有 BDR 由器。
      • DRother集合:没有被选举为DR和BDR的路由器(优先级不为0)。
    2. 算法工作时,在DR集合中选择最好的路由器,使其成为 DR 。在BDR集合中选择最好的路由器,使其成为BDR。
      • DR的选举应用以下规则:
      如果DR集合为非空,则从中选择最好的路由器成为 DR。
      如果DR集合为空,则把当前BDR提升为DR; 而如果BDR集合为空,则要先从DRother集合中选出BDR再将其提升为DR。
      • BDR 的选举应用以下规则:
      如果BDR集合为非空,则从中选择最好的路由器为BDR。
      如果 BDR 集合为空 ,则从DRother集合中选择最好的路由器成为BDR路由器。

    DR/BDR选举的过程:

    1. OSPF路由器在DR/BDR未选举出来之前,Hello报文中关于DR/BDR的字段为 0.0.0.0 。选举完成后, DR/BDR的字段记录已知的DR/BDR的RouterID。路由器接口根据听到的Hello报文,生成邻居表并在接口维持三个集合:
      • DR 集合{ }
      • BDR 集合{ }
      • DRother (非DR/BDR 但是有资格成为DR和BDR的路由器)集合{ }
    2. OSPF接口开启后,在 Hello 报文中设置 DR/BDR 字段为全0 ,此时 DR/BDR未知。同时,Wait timer启动,时长为4倍的Hello间隔,也就是40s。
    3. 当整个网络中设备都是同时启动的时候,所有发送的hello报文是没有DR和BDR字段的。
    4. 在waiting阶段,如果收到Hello报文中有DR和BDR,说明这个网络中在本设备接入之前就已经选举了DR和BDR,则不论它的Router ID有多大,都会承认现网中已有的DR和BDR,而不会触发选举。直接离开waiting状态,开始邻接关系同步。
    5. 在waiting阶段,路由器会将优先级在1-255的设备加入DRother集合中。只有在Wait 计时器超时后,仍未学习到 DR/BDR,才开始 DR/BDR选举。
    6. 如果 BDR 集合为空,则从DRother集合选举BDR;如果DR集合为空,则从BDR 集合选举DR。据此,如果在没有 DR和BDR的网络上,Wait 计时器超时后,网络上的每台路由器都会先从DRother集合选择BDR再把BDR提升为DR; 再重新从DRother集合选择BDR。至此DR和Dother之间选举结束开始邻接关系建立。

    二、邻接关系建立过程

    在这里插入图片描述
    分为两个子阶段:主从关系建立阶段和数据库同步阶段。

    子阶段一:主从关系确定阶段

    通过双方交互DD(DBD)报文完成。一共有两个状态机,Exstart和Exchange:

    1. 邻居状态机变为ExStart以后,R1向R2发送第一个空的DD报文,在这个报文中,DD序列号被设置为552A(假设)。其中DB description字段为0x07:Initial比特为1表示这是第一个DD报文,More比特为1表示后续还有DD报文要发送,Master比特为1表示R1宣告自己为主路由器。
    2. 同样,R2也向R1发送第一个空的DD报文,在这个报文中,DD序列号被设置为5528(假设)。
    3. R1发现对端Router ID比本端大,所以R2应当为主路由器,这时便确定自己的身份,R1会产生一个NegotiationDone的事件,成为Slave设备,并进入Exchange状态。邻居状态机变为ExStart以后,R1向R2发送第一个带有自己数据库信息(LSA头部内容)的DD报文,在这个新的报文中包含LSDB的摘要信息,序列号设置为R2在第二步里使用的序列号为5528(假设),和Master的一样,目的是做隐式确认。More比特为0表示不需要另外的DD报文描述LSDB,Master比特为0表示R1宣告自己为从路由器。收到这样一个报文以后,R2会产生一个NegotiationDone的事件,因此R2将邻居状态改变为Exchange。
    4. 邻居状态变为Exchange以后,R2发送一个新的DD报文,该报文中包含LSDB的描述信息,DD序列号设为5529(上次使用的序列号加1)。即使R1不需要新的DD报文描述自己的LSDB,但是做为从路由器,R1需要对主路由器R2发送的每一个DD报文进行确认。所以,R1向R2发送一个新的DD报文,序列号为5529,该报文内容为空。
    5. 当本端所有LSDB摘要信息被发送完成后,如果本端没有对端的一些LSDB信息,则进入Loading状态,如果都存在,则直接进入Full状态。

    隐式确认机制: 也就是通过序列号进行确认,主设备每发送一个DD报文,备设备都会发送同样序列号的DD报文进行确认,保证DD报文不会丢失。

    抓包内容: 带有LSA的head字段,DB Description字段、Interface MTU字段等
    在这里插入图片描述
    此阶段中,需要对DD报文携带的MTU参数进行协商,否则无法正常建立邻居关系(也可以忽略检查):
    默认情况下,DD报文的interface MTU值为0,表示不执行一致性检查。在华为设备上使用命令ospf mtu-enable后,可以开启接口填充及检查MTU。如果检查MTU值,整个过程协商过程,小的一方停留在Exstart状态,另一方停留在Exchange阶段。

    子阶段二:数据库同步阶段

    通过双方交互LSR、LSU、LSAck报文完成。一共有两个状态机loading和Full:

    1. 邻居状态变为Loading之后,R1开始向R2发送LS request报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息。
    2. R2收到LS Request报文之后,向R1发送LS Update报文,在LS Update报文中,包含了那些被请求的链路状态的详细信息。R1收到LS Update报文之后,将邻居状态从Loading改变成Full。
    3. R1向R2发送LS Ack报文,确认R2发送的LSA已被R1正确接收。LS Ack用来确保信息传输的可靠性。

    显式确认机制: LSU对LSR确认,LSAck对LSU确认,具体是通过{type、ls id、advrouter} 字段来判断是否是一条LSA。
    隐形确认机制: LSU对于LSU的确认,在MA网络中使用这种方式进行确认,原因是因为DR需要将DRother发送来的LSU,重新通过224.0.0.5这个组播地址发送到整个网段中,此LSU的产生者当然也会收到,就可以当做确认了,否则在MA网络中,DR使用LSAck报文进行确认就太过于繁琐。

    抓包内容:
    LSR报文:带有需要请求的具体LSA的信息{type、ls id、advrouter}
    在这里插入图片描述
    LSU报文:带有具体的LSA信息
    在这里插入图片描述
    LSAck报文:带有LSA的头部信息
    在这里插入图片描述

    补充:LSA泛洪机制

    泛洪的原因:
    泛洪的过程是路由器把自己产生或学来的LSA向所有其他邻居或路由器通告的过程。OSPF在区域内通过LSDB中的LSA计算出拓扑和路由信息,为了保证没有环路,每一个区域内的LSDB的内容是相同的,LSDB的一致性及快速同步直接影响OSPF路由的收敛性能。

    泛洪的机制:
    数据库包含所有LSA,数据库中任何LSA的变化都会触发当前路由器通告该变化给邻居路由器并泛洪至所属区域;如果没有变化,默认每30min会进行一次泛洪。

    OSPF的LSU/LSAck可以携带多份LSA,通过在邻居之间泛洪LSU/LSAck,最终通告到全网络。在点到点网络,更新以组播方式发送到224.0.0.5,在点到多点(NBMA)类型和Vlink类型链路上则以单播方式泛洪给邻居。

    每台路由器在一个接口收到泛洪的LSA报文,会继续向其他接口泛洪。例如,在MA网段上,若DRother向DR/BDR泛洪,则DR会以组播方式将LSU (包含LSA)向其他DRother泛洪。NBMA网络,上DRother单播给DR/BDR,DR再单播给DRother。泛洪过程是个可靠过程,有确认机制。其中每份泛洪的LSA都必须被确认,确认包括显式或隐含确认, 使用

    当一份LSA被泛洪出去,当前路由器会记录在该接口的所有邻居数量并为之维护重传列表,没有收到显示或隐含确认的LSA会在5s后单播重传更新(不管网络类型是什么)。

    具体步骤:
    每台路由器都有相似的工作行为以生成一致的LSDB。

    1. 一个接口收到LSA,存放到LSDB后,再从“其他接口”重新泛洪出去,泛洪也有“水平分割”的行为,例外是DR会把从一个DRother收到的LSA通过原接口重新通告给其他DRother路由器。
    2. 重新通告的LSA和收到的LSA除Age增加1外,其他内容一致, 如checksum等。
    3. LSA会泛洪到区域的边界。
    4. 每台接收路由器先判断LSDB中是否已有该LSA,或者是判断本地储存的有没有接收到的新,没有或者接收到的LSA更新则存储且转发,否则忽略。
    5. 如果接收时没有判断是否已拥有该LSA,或路由器没有停止转发,则会致LSA,在Area内无休止地传递。
    6. 当1类和2类LSA到达区域边界是不会传输到另外一个区域。

    如何判断本地是否存在该LSA:
    LSDB中每份LSA都有唯一的身份证ID,由三个参数构成:LSA类型、链路状态ID (Link State ID)和通告路由器的RouterID。如果这三个参数相同,表示是通一个LSA。

    如和判断LSA的新旧:
    判断相同ID的“新的”LSA要依次比较以下内容:LSA序列号( Sequence Number)、LSA报文校验和(Checksum)和LSA年龄(LSA Age)。

    序列号:有符号32位整数,采用线性递增的序列号,初始序列号从08000001到最大值0x7FFFFFF,序列号越大代表越新,LSA会周期(30min) 产生新的LSA,每次产生的LSA序列号都会增加1。到了最大值0x7FFFFFFF会发送AGE标记为60min的lsa,然后全部删掉重新从最小开始0x00000001开始。

    Checksum: 16 位数,对刚收到的LSA做计算,Age 字域不在计算内。即使LSA存放在LSDB中,路由器也会每5分钟重新计算一次。

    Age: 16 位无符号整数。LSA的最大年龄是3600s,LSA在路由器间泛洪时每经过一跳年龄增加1,在LSDB中存放时年龄也增加1。若LSA的年龄达到3600s(即Maxage),路由器会从LSDB中清除该LSA。在拓扑稳定的场合下,每份存放在LSDB中的LSA间隔30min都会被周期产生的新LSA刷新。

    判断LSA新旧的规则如下:

    1. 序列号越大代表越新。
    2. 若序列号相同,则Checksum数值越大代表越新。
    3. 上述一致的情况下,继续比较Age。
      • 若LSA的Age为MaxAge,即3600s,则该 LSA被认定更“新”,这是撤销LSA的信息。
      • 若LSA间Age差额超过15min,则Age小的LSA被认定更“新”。若LSA Age差额在15min以内,则二者视为相同“新”的LSA, 只保留先收到的一份LSA。

    判断LSA是否相同和新旧的参数都在LSA的报头中:
    在这里插入图片描述

    参考资料:华为hedex文档、HCIE学习指南

    展开全文
  • OSPF和OSPF邻接关系的建立过程

    千次阅读 2019-11-30 19:18:12
    二、OSPF的基本概念 2.1 基本原理 2.2 Router-ID 2.3 OSPF的三张表 三、报文类型及其格式 3.1 OSPF报文头格式 3.2 Hello报文 3.3 DD报文 3.4 LSR报文 3.5 LSU报文 3.6 LSAck报文 四、邻接关系及其建立 4.1 邻接关系 ...
  • OSPF之协议基础以及邻居、邻接关系

    千次阅读 2020-02-27 20:28:39
    如果两个邻居之间需要同步链路状态数据库(LSDB),就需要建立邻接关系,因此如果有邻接关系,那么LSDB肯定是同步的状态,LSA只能在存在邻接关系的路由器之间进行传递。 Hello报文的内容: OSPF支持的网络类型...
  • IS-IS 邻接关系一,原理概述二,实验(照着书做的)(一)实验目的(二)实验内容(三)实验拓扑(四)配置1,基本配置2,配置IS-IS路由协议并查看ISIS邻接关系 一,原理概述 ISIS中有3种不同的接口类型或级别: Level-1...
  • OSPF中的邻居、邻接关系详解: 1、邻居关系概念: 考虑一种最简单的网络拓扑:两台路由器通过网线直连,在双方互联的接口上激活OSPF,路由器的接口激活OSPF后开始发送及侦听OSPF报文,在通过Hello报文发现彼此并确认...
  • OSPF邻接关系的建立步骤

    千次阅读 2020-06-30 12:03:30
    OSPF邻接关系建立过程剖析 在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 邻居关系:OSPF设备启动后,会通过OSPF接口向外...
  • NP、OSPF邻居邻接关系

    2020-11-07 22:42:54
    OSPF网络中,路由器在发送任何链路状态信息之前,必须先建立起正确的OSPF邻居、邻接关系。OSPF路由器是使用Hello报文来建立邻居关系的。OSPF路由器会检查所收到的Hello报文中的各种参数,如Router-ID、Area-ID、认证...
  • 路由邻接关系的建立

    2021-01-02 14:40:48
    文章目录一、路由形成过程二、邻接关系建立 一、路由形成过程 建立邻接关系-----链路状态数据库------最短路径树---------路由表 二、邻接关系建立 1.Down-OSPF路由器启动后开始向外发Hello,但是没有收到对方的...
  • 在现网中很少见 P2MP 多个P2P网络的集合 DR/BDR的选举 DR(Designated Router)指定路由器 一个OSPF区域内选举一个DR,用来与其他非DR设备进行邻接关系建立与数据库的同步 BDR(Backup Designated Router) 备份DR...
  • 4. DR/BDR以及邻接关系

    2020-07-11 21:50:07
    DR/BDR以及邻接关系1.1 报文类型2. 邻接:开始交互LSA。2.1 很关键的邻居状态机:2.2 状态含义2.3 建立过程:2.4 DBD报文2.5 DR/BDR作用3. 端口状态变化--广播型网段和NBMA网段3.1 DR与BDR选举作业: 1. DR/BDR以及...
  • 对于很多学习网络的同学来说,可能对于如何在路由器上配置OSPF比较熟悉了,但是OSPF邻接关系是如何建立起来的呢?本文将介绍OSPF邻接关系从初始状态到最后完成建立的全过程,通过学习这一部分,可以深入了解OSPF协议...
  • OSPF协议之邻居关系与邻接关系

    千次阅读 2019-07-02 01:50:42
    OSPF协议之邻居关系与邻接关系 什么是邻居关系? 1、在OSPF协议中邻居关系就是指在两台路由器中进行完两次Hello报文交互之后,建立起来的关系叫邻居关系。 2、该关系在OSPF状态机里显示的是2-way的状态。 详细邻居...
  • OSPF的邻接关系和LSA

    2019-08-28 10:47:04
    在R3上查看邻居就 可以发现R3和R4之间仅存在邻居关系,而没有邻接关系。   在R5使用dis ospf lsdb命令查看路由器的ospf数据库信息   可以看到由于在区域1中仅存在2台路由器,所以在R5的LSDB...
  • 如图所示,在广播网络中建立OSPF邻接关系的过程如下: 建立邻居关系 RouterA的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器...
  • OSPF邻居和邻接关系建立的过程  Down:这是邻居的初始状态,表示没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。  Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期...
  • OSPF邻居邻接关系建立

    千次阅读 2019-04-27 22:13:25
    Hello 用于发现直连链路上的OSPF邻居,以及维护OSPF邻居关系。 DD/DBD(数据库描述) 用于描述LSDB,该报文仅携带LSDB中LSA的头部信息(摘要),并非完整信息。 LSR(链路状态请求) 用于向OSPF邻居请求LSA。 LSU(链路状态...
  • 如果LSA与自己的相同则直接从exchange变为full Full 邻接状态 两端LSDB同步 对比摘要,发现有我没有的则从loading再变成full 达到full状态的前提 两端MTU一致 支持的最大的数据包大小 不一致则...
  • OSPF的邻接关系建立需要经历7种状态

    千次阅读 2019-09-27 15:03:12
    OSPF的邻接关系建立需要经历7种状态 OSPF的邻接关系建立需要经历7种状态 DOWN—>INIT—>TWO WAY—>EXSTART—>EXCHANGE—>LODING—>FULL 下面具体描述这7个状态的发生过程: D...
  • Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系。本博文将详细介绍这2种关系建立及工作原理。 如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),...
  • 作者:地理小子 ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...我现在有一个区域内的点和线的矢量信息,点位于线的交点上,想得到整个图的邻接矩阵。 比如这个图中: 有...
  • Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系。本博文将详细介绍这2种关系建立及工作原理。如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且...
  • OSPF是一个动态路由协议,运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前首先需要建立邻接关系邻接关系用来交换链路状态及路由信息。 注意:并非所有的邻居关系都可以成为邻接关系,...
  • Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系。本博文将详细介绍这2种关系建立及工作原理。 如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且...
  • ospf邻居邻接关系 原理概述 1.ospf网络中,路由发送的任何链路信息必须建在ospf邻居邻接关系之上 2.hello报文: 1)Router-ID 2)Area-ID 3)认证信息 4)网络掩码 5)Hello时间间隔 2.ospf路由器建立邻居关系建立...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,998
精华内容 15,599
关键字:

邻接关系