ospf协议基础和邻居的建立

网络互通:

-交换,同网段之间的设备通信;使用的互联设备是,叫交换机;

           *核心工作表:MAC地址表

                                 - MAC地址    ~~~~    端口

-路由,不同网段之间的设备通信,使用的互联设备是,叫路由器;

            *核心工作表:路由表

                                  -网段   ~~~~  端口

            *路由器的类型:即路由表中的每个条目的学习方式

                         &直连路由

                         &非直连路由

                                    #静态路由

                                    #动态路由

                                              IGP(internal gateway protocol ):内部网关协议,即在一个公司内部运行的路由协议

                                                      % DV(distance vector):距离矢量。该协议在路由器之间互相发送的是路由

                                                                 1. RIP(routing information protocol):路由信息协议,适用于小型网络

                                                                  2. EIGRP:增强型的内部网关路由协议;该协议是Cisco的私有协议;

                                                        %LS(link state):链路状态。该协议在路由器之间互相发送的是‘链路状态信息’

                                                                   1. ISIS;当年提出是为了传递 CLNP 协议的路由;现在的ISIS也支持IPv4 / IPv6;

                                                                    2.OSPF:open shortest path first ,开放式最短路径优先级协议,对网络规模理论来说是没有任何限制的

                                         #EGP(external gateway protocol):外部网关协议,即运行在公司之间的路由协议

                                                                    1. BGP(border gateway protocol):边界网关协议

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

OSPF:

      - 概述:

             该协议属于IGP中的LS类型,位于OSI模型的第三层,即该协议的数据包时包含在IP头部 后面

              该协议运行在路由器之间,通过互相建立邻居,同步数据库的过程中,确保路由器之间的链路状态信息完全一致,从而可以计算出路由条目信息,实现不同网段之间的互                           通。

        -工作原理:

               1. 建立邻居表,包含的是邻居路由器;

               2. 同步数据库,包含的是链路状态信息;

               3. 计算路由表,包含的是每个路由器基于自己的数据库条目信息‘独立计算’出来的路由条目

          -报文类型:

                 1. 发送hello包,用于邻居的建立,维护和拆除

                 2. DD(database description),数据库描述报文。

                 3. LSR(link state  request),链路状态请求

                 4. LSU(link state  update),链路状态更新

                 5. LSACK(link state ack),链路状态确认报文,确保LSR和LSU的可靠传输;

实例:

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 display  ospf  peer  brief  //查看ospf的邻居表

结果如下:

OSPF Process 1 with Router ID 192.168.12.1
              Peer Statistic Information
----------------------------------------------------------------------------
Area               Id Interface                         Neighbor id                   State
0.0.0.0           GigabitEthernet0/0/0           192.168.12.2              Full
----------------------------------------------------------------------------

#process,表示OSPF的进程号,用于在同一个路由器上区分不同的 OSPF 协议;进程号不同的两个OSPF互相不能通信;
#router-id,表示OSPF协议为该路由器起的名字。作用:在一个企业内网中,唯一的表示一个OSPF路由器。
                    router-id的格式类似于IP地址,是“点分十进制” 的表示方法。确定方式有两种:
                                 --手动指定:手动指定的router-id,数值随意,比如1.1.1.1或2.2.2.2

                                 --自动选举:首先会选择设备上的接口IP地址最大的 loopback接口,如果没有这种接口,就选择一个IP地址大的物理接口

#area ID,表示OSPF的接口所在的区域号。OSPF协议为了支持将企业网络分为两层,所以引入了“区域”这个概念

                  OSPF协议可以将网络分为“骨干区域”和“非骨干区域”。每个不同的区域都有一个区域号,该字段是4个字节;

                   取值范围是0---4294967295.其中的区域 0  表示骨干区域。其中非 0 的区域,称之为非骨干区域。

                   不同区域之间的互联原则是:所有的非骨干区域,必须连着骨干区域

#interface,表示的是本地设备上用于和对方设备监理邻居时所使用的接口;

#neighbor ID ,表示的是邻居设备的router-id

#state ,表示的是邻居设备的状态。两个OSPF路由器之间的完美的状态,应该是FULL。此时两边的数据库完全同步!

              但是中间也有很多中间状态:down--->init --> two-way-->exstart -->exchange-->loading --> full

如何修改R1的router-id ?

例:修改R1的router id 为1.1.1.1,修改R2的route ID为2.2.2.2

        R1: ospf 1 router-id 1.1.1.1

        R2:ospf 1 route-id 2.2.2.2

        但是配置后使用display ospf peer brief 查看route id还是原来的route-id,配置并没有生效。

        需要重启OSPF协议进程分别在R1和R2路由器上的用户模式使用命令:reset  ospf  process  选择 Y,就可以了。

router-id的特点:

      稳定,即一旦OSPF进程的router-id确定了,那么就不会再改动。除非设备重启或者OSPF协议重启

OSPF建立的影响因素:

@确保两边的IP地址可以互通

      *可以ping通

@确保设备可以发送OSPF报文

      *设备互联接口网段进行了network

      *设备之间的互联接口没有被配置为“被动接口”/“静默接口”

             #命令:ospf 1 

                           silent-interface GigabitEthernet 0/0/0 //配置g0/0/0为静默接口

@确保设备之间发送的方式相同

      *要么都是组播,要么都是单播【单播的邻居,只有在“NBMA”环境下才会有!】

@确保设备可以接收OSPF报文

     *设备互联接口网段进行了network

      *设备之间的互联接口没有被配置为“被动接口”/“静默接口”

      *设备之间配置的ACL没有拒绝OSPF报文

@比较hello报文参数。

        --router-id,必须不同

        --area ID,必须相同

        --认证必须成功

        --掩码必须相同(特殊情况下-即选举DR的情况下)

        --子网掩码必须相同

        --hello计时器必须相同(默认是10s发送一次hello包)

        --dead计时器必须相同(默认是40s)

        --特殊标记位必须相同

        --优先级不能全为0(两个同域的ospf接口不能同时为0)

                   特殊情况下-即选举DR的情况下优先级不能全为0

                     修改优先级命令:int g0/0/0

                                                  ospf dr-priority   0     //范围0-255,默认是1

 

 

hello计时器和dead计时器配置命令:

               查看hello计时器时间:display ospf  int g0/0/0   //就是ospf协议的出接口

                

 

 

                修改hello的时间使用命令:int g 0/0/0

 

                                                            ospf  timer  hello 5  //修改hello发送时间为5s,注意修改hello时间后 Dead (router dead  interval)时间也会被动改变

 

                                                                                              dead的时间总是hello时间的4倍,所以修改hello时间为5S后,dead时间被动变为20s。

 

                                                                                            *Dead(router dead interval):表示维护ospf邻居关系的超时时间,默认40s,超时后未收到对方发送                                                                                                                                                  的hello报文,邻居关系断裂。

 

                  修改dead的时间使用命令:int g0/0/0

 

                                                               ospf timer dead   15   // 单位为S,修改dead的时间不会影响hello的时间改变。                                            

 

OSPF的网络类型:

          任何一个运行了OSPF协议的链路,都对应这一个默认的网络类型。在不同的网络类型下,OSPF的工作方式不同的,并且,在数据库中表示这个链路的方式也是不相同的(即LSA也是不相同的)。

           但是,我们可以基于需要,人为的修改每个链路的OSPF网络类型。

类型分类:

          *broadcast,广播

          *nbma,非广播(non-broadcast mulit-access)

          *p2p,点到点(point to point)

          *p2mp,点到多点(point to multi-point)

OSPF有多个邻居的情况下:

OSPF路由器建立邻居之后,就会在不同的路由器之间“同步数据库”。

如果一个接口上同时连着多个OSPF路由器,那么就会认为建立了多个OSPF邻居。所以后面再进行同步数据库的时候,就会出现:

               &同网段中存在多个路由器的情况下,数据库的同步过程中,会出现大量的重复信息,降低了数据库的同步效率。

为了提高数据库的效率,我们可以:在多个路由器之间指定一个OSPF路由器,用来收集和扩散其他邻居设备的数据库信息,从而提高数据库的同步效率。

                &这个指定的OSPF路由器称之为:DR(designated router) 指定路由器,该网段中的所有路由器都仅仅和DR路由器同步数据库信息。

                &但是,如果DR故障了,那么数据库就无法同步了。所以为了安全,我们可以再次选举一个备份的DR出现,即BDR-backup DR。

如果在一个网段中存在多个OSPF路由器的情况下,我们选举DR和BDR,那么其他的设备,就只能称之为DRother。

那么他们的关系是:

                 &所有的设备都和DR/BDR 同步数据库,之间的状态时FULL

                          --224.0.0.5,表示的是所有的OSPF路由器;224.0.0.6,表示的是DR和BDR。即DRother发送数据库更新时,是给该地址

                 &DRother之间的状态时two-way

                          --DR指的并不是一个路由器,而是一个接口

DR的特点:

       即当一个网段中需要选举DR的时候,并且已经选定了DR.那么即使后续该网段中再次接入其他优先级更高的路由器,也不会抢占DR的身份,除非重启OSPF协议进程。

DR的选举原则:

         只有接口的DR优先级不为0的设备,才有资格参与。【优先级为0的设备,永远只能称之为DRother】

                  &首先比较设备的DR的优先级,数值越大越好;默认是1

                  &其次比较设备的router-id,越大越好

           并且,OSPF的工作方式完全取决于一个接口的“网络类型”,当接口的网络类型是:广播和非广播的时候,才会进行DR/BDR的选举。

网络类型:广播(broadcast)

是否要DR:是

是否发包:是

发包方式:组播,224.0.0.5

hello计时器:10s

dead计时器:40s

 

网络类型:非广播(NBMA)

是否要DR:是

是否发包:否

如果要发包,则发包只能是:单播

hello计时器:30s

Dead计时器:120s

 

网络类型:点到点(P2P

 是否要DR:否

是否发包:是

发包方式:组播,224.0.0.5

hello计时器:10s

Dead计时器:40s

 

网络类型:点到多点(P2MP)

是否要DR:否

是否发包:是

发包方式:组播,224.0.0.5

hello计时器:30s

Dead计时器:120s

OSPF网络类型配置命令:

        interface g0/0/0

         ospf  network-type  [ broadcast | nbma | p2p | p2mp ]

手动向邻居发送hello包:

        ospf 1

        peer  x.x.x.x     //x.x.x.x为邻居接口的IP地址

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

详细分析OSPF邻居的状态:

Down-表示邻居挂掉了或者“在Dead时间内”,没有收到对方发送过来的Hello报文;

init-初始化,表示能够收到对方设备发过来的hello报文,但是对方的报文中并没有自己的router-id;

Two-way:双向通信状态。表示能够收到对方设备发送过来的hello报文,并且该报文中还能看到自己的router-id;

                如果此时邻居之间需要选举DR,那么这个选举的过程,就是发生在“该状态”。此时选举但是选举不出来,两个路由器之间状态,就会卡在two-way(比如在广播和非广播环境下,两个DRother之                         间,就会卡在two-way)

Exstart:交换初始化状态。在该状态的事情,都是为了后续的exchange(交换)过程更加的高效和靠谱。

              所以会在这个阶段,双方互相发送“第一DD”报文,用于选举出‘主/从’路由器,目的就是为了确保在exchange状态发送的大量的DD报文,是按照可靠的方式发送的。

              选举主/从关系的原则:比较设备之间的route-id,越大越好

              选举出DR/BDR之后:从路由器发送的DD报文的序列号一定要跟随着主路由器发送DD报文的序列号的变化而变化。

              并且在这个阶段,我们还会比较DD报文的"MTU字段",如果两边相同,则继续进入下个状态;如果两边不同那么邻居之间的状态,就有可能卡在这里。【默认情况下,华为设备是不检查这个参数的

               ;但是可以人为打开该功能】

                              *在DD报文中,有三个重要的标记为:

                                       I(init)表示该DD报文是不是第一个DD报文;如果取值为1,表示为第一个DD,如果是0,表示不是第一个;

                                       M(more)表示该DD报文是不是最后一个DD报文;如果取值为1,说明后面还有更多DD,不是最后一个;如果取值为0,说明后续已经没有更多的DD报文了,即表示当前的DD报文

                                                           是最后一个DD报文;

                                       M/S (master/slave)表示发送这个DD报文的路由器的的身份,是“主”路由器,还是“从”路由器;

                                                               刚进入exstart状态的时候,大家发送的第一个DD报文中,都认为自己很牛,所以该标记位都是1.

                                                                经过route-id的比较之后,大的路由器发送的MS位就是1;小的路由器发送的MS位就是0;

exchange:交换状态。在该状态下就是依据上述的主从关系,进行大量的DD报文的发送,用于描述彼此的数据库条目信息。

                   当然我们在DD报文中包含的是自己的数据库中的每个条目的“摘要”信息,不是详细的。

                    当两边的DD报文全都传输完毕以后,就会进行DD报文的比较,从而找出两边的数据库的差异

loading:加载状态。基于上述数据库的比较结果,我们就知道两边数据库的差异。所以在这个阶段就开始向邻居设备发送LSR进行请求自己没有的数据库条目的详细信息。对方设备收到以后,就会回应一个                   LSU,里面包含的就是链路状态的详细信息。此时,每次发送LSR和LSU,两边都会发送LSACK对上述的两个报文进行确认。

full:一旦loading状态完成,说明邻居之间的数据库就已经完全一致了。从而进入到了FULL状态,此时称之为“邻接”!

 

 

 

 

posted @ 2021-05-19 17:55  园来是伱  阅读(1038)  评论(0编辑  收藏  举报