当前位置: 首页 > news >正文

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理

开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。
RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代。

1.1、开放式最短路径优先(OSPF)简介

在这里插入图片描述
OSPF是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。OSPF还利用区域间的连接规则保证了区域之间无路由环路。

OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。

OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF还可以同其他协议(比如多协议标记切换协议MPLS)同时运行来支持地理覆盖很广的网络。

OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。
优点:

  • 链路状态路由协议
  • 无环路
  • 收敛快
  • 扩展性好
  • 支持认证

1.2、 OSPF原理介绍

RIP是基于距离矢量算法的路由协议,应用在大型网络中存在收敛速度慢、度量值不科学、可扩展性差等问题,最多支持15台设备。

IETF提出了基于SPF算法的链路状态路由协议OSPF(Open Shortest Path First)。通过在大型网络中部署OSPF协议,弥补了RIP协议的诸多不足。

所谓Link State(链路状态)指的就是路由器的接口状态。在OSPF中路由器的某一接口的链路状态包含了如下信息:

  • 该接口的IP地址及掩码。
  • 该接口的带宽。
  • 该接口所连接的邻居。

OSPF与RIP不同:

  • 路由信息传递与路由计算分离。
  • 基于SPF算法。
  • 以“累计链路开销”作为选路参考值。

OSPF作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。

所有路由器各自维护一个链路状态数据库LSDB。邻居路由器间先同步链路状态数据库,再各自基于SPF(Shortest Path First)算法计算最优路由,从而提高收敛速度。

在度量方式上,OSPF将链路带宽作为选路时的参考依据。 “累计带宽”是一种要比“累积跳数”更科学的计算方式。

OSPF的工作过程:

  • 第1步:邻居建立
  • 第2步:同步链路状态数据库
    每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB(Link State Database)的同步。
  • 第3步:计算最优路由
    每台路由器基于LSDB通过SPF算法,计算得到一棵以自己为根的SPT(Shortest Path Tree),再以SPT为基础计算去往各目的网络的最优路由,并形成路由表。
    在这里插入图片描述
    OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始。

LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。

收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database),并在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。

1.2.1、OSPF协议介绍

OSPF(开放最短路径优先)属于IGP内部网关路由协议,协议基于链路状态算法。
OSPF直接运行于IP协议之上,使用IP协议号89。
在这里插入图片描述
在这里插入图片描述

1.2.2、OSPF报文类型

链路状态公告LSA(Link State Advertisement)路由或者拓扑信息在不同条件下产生不同类型的拓扑或路由信息,分为5种信息分别为Hello报文、DD报文、DD报文、LSR报文、LSU报文、LSACK报文。
在这里插入图片描述

报文类型说明
Hello报文发现并建立邻接系。224.0.0.5组播。每隔10秒发送,死亡时间40秒。邻居发现:自动发现邻居路由器。邻居保持:通过Keepalive机制,检测邻居运行状态。
DD报文DBD(数据库描述包):包含路由的摘要信息。目录型包含路由的摘要信息。
LSR报文向另一台路由器请求特定路由的完整信息。发给邻居的。
LSU报文(更新包)用于LSA的泛洪和回应LSR该条路由的完整信息。在OSPF中,只有LSU需要显示确认。如果LSU从DRother发出来,不发往组播地址,发往单播
LSACK报文对LSU做确认。ACK

OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。

  • Hello报文:最常用的一种报文,用于发现、维护邻居关系。并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)。

  • DD报文:两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。DD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量的一小部分,所以,这样就可以减少路由器之间的协议报文流量。

  • LSR报文:两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA,LSR只包含了所需要的LSA的摘要信息。

  • LSU报文:用来向对端路由器发送所需要的LSA。

  • LSACK报文:用来对接收到的LSU报文进行确认。

1.2.3、邻居和邻接关系建立

是指两个相邻OSPF路由器之间的关系,这两个路由器之间允许直接交换路由更新数据。
邻居状态变换
在这里插入图片描述

状态报文
Init初始状态相互发送hello包。
ExStart准启动状态选DR和BDR
Exchange交换状态发送DD报文
Loadin加载状态LSR报文和LSU报文,确认LSAck。
Full State 完全状态建立邻接关系。

思科邻接关系建立描述:
邻居(Neighbor)–>邻接(Adjacency)
在这里插入图片描述
1、上图中,DOWN状态是刚运行状态:路由器A发送hello包---->244.0.0.5(组播包)。

2、 init state 初始状态:

  • 路由器A进入init state 初始状态:路由器A发送hello包后。
  • 路由器B发送hello包进入init state。

3、 Two-Way State 双向状态建立邻居关系。
路由器A收到hello包进入Two-Way状态。表明收到邻居的Hello报文,报文中包含自己的router id,进入2-way,双方同时进入two-way表明邻居关系的建立,建立邻居关系(只是相互打招呼)。双向通信已经建立,但是自己不在所收到的Hello报文的邻居列表中,尚未与邻居建立双向通信关系。
在这里插入图片描述
4、Exstart State准启动状态
选主从:
比较Route-ID 谁大选谁,选大的。
路由器A发送first DBD(数据库描述包Route-ID 目录型)---->路由器B

路由器B回复first DBD(Route-ID目录型)---->路由器A
路由器B告诉路由器A我的Route-ID>你的Route-ID,我是主。

5、Exstchange State交换状态交换目录
主路由器B发送second DBD(数据库描述包含Route-ID、LSA链路状态通告)---->路由器A 送second DBD(数据库描述包含Route-ID、LSA链路状态通告)---->主路由器B
路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
在这里插入图片描述
6、Loading State 加载状态 同步数据库
路由器A从DBD(目录)中读取到路由器B中有一条172.16.6.0/24路由我没有
路由器A发送LSR(请求特定路由)---->路由器B 发送LSU(更新包)---->路由器A 确认LSAck ---->路由器B
相互发送LSR报文请求LSA,发送LSU报文通告LSA。
在这里插入图片描述
7、Full State 完全状态 建立邻接关系
就建立邻接关系(邻居之间相互走访)了。只有建立邻接关系才会将数据每隔30秒泛洪出去。

以较低频率(每隔30分钟对邻接关系泛洪)发送定期更新,被称为链路状态刷新。

网络变化时是触发更新。

DR泛洪(将从某个接口收到的数据流向除该接口之外的所有接口发送出去。)每隔30秒发送LSA给DRother用224.0.0.5。

术语:
Router ID是一个32位的值,它唯一标识了一个自治系统内的路由器。企业网中的设备少则几台多则几十台甚至几百台,每台路由器都需要有一个唯一的ID用于标识自己。
Router ID是一个32位的无符号整数,其格式和IP地址的格式是一样的,Router ID选举规则如下:

  • 手动配置OSPF路由器的Router ID(通常建议手动配置);
  • 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID;
  • 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID。
  • OSPF的路由器Router ID重新配置后,可以通过重置OSPF进程来更新Router ID。
    Router-ID 手工指定>活动loopback最大的地址>物理接口最大的。

邻接关系
运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系。

邻居(Neighbor)
OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系。

邻接(Adjacency)
形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。路由器在发送LSA之前必须先发现邻居并建立邻居关系。

1.2.4、OSPF基本配置

操作步骤:
1.执行命令system-view,进入系统视图。
2.执行命令ospf [ process-id ],配置OSPF进程
或者命令ospf [process id] [router-id ]既可以使能OSPF进程,还同时可以用于配置Router ID。在该命令中,router-id代表路由器的ID
3.执行命令area area-id,进入OSPF区域视图。
4、执行命令network ip-address wildcard-mask [ description text ],配置区域所包含的网段。
wildcard-mask OSPF使用反掩码,相当于将IP地址的掩码反转(0变1,1变0)。例如0.0.0.255表示掩码长度24位。
description text OSPF指定网段的描述信息。

接口下配置OSPF:
1、执行命令interface interface-type interface-number,进入接口视图。
2、执行命令ospf enable [ process-id ] area area-id,在接口上使能OSPF。

配置接口的网络类型:
执行命令interface interface-type interface-number,进入运行OSPF的接口视图。
执行命令ospf network-type { broadcast | nbma | p2mp | p2p [ peer-ip-ignore ] },配置OSPF接口的网络类型。
缺省情况下,接口的网络类型根据物理接口而定。
以太网接口的网络类型为广播;
p2mp点到多点,一台路由通过交换机连接多台路由设备时。
串口和POS口(封装PPP协议或HDLC协议时)网络类型为P2P;
ATM和Frame-relay接口的网络类型为NBMA。
如果同一网段内只有两台路由器运行OSPF协议,建议将接口的网络类型改为P2P网络。
注意:反掩码中,“0”表示此位必须严格匹配,“1”表示该地址可以为任意值。

基本配置:
在这里插入图片描述

R1:
sys
sysname R1
interface GigabitEthernet0/0/1ip address 10.0.12.1 255.255.255.248
#
interface GigabitEthernet0/0/2ip address 10.0.13.1 255.255.255.248
interface LoopBack0ip address 1.1.1.1 255.255.255.255
interface LoopBack1ip address 11.11.11.11 255.255.255.0qR2:
sys
sysname R2
int loop 0
ip add 2.2.2.2 32
int g0/0/0
ip add 10.0.12.2 29
interface Serial0/0/2link-protocol pppip address 10.0.23.2 255.255.255.248
R3:
sys
sysname R3
int loop 0
ip add 3.3.3.3 32
int g0/0/0
ip add 10.0.13.3 29
int s0/0/2
ip add 10.0.23.3 29
q

Ospf配置

ospf 100 router-id 1.1.1.1area 0.0.0.0network 10.0.12.0 0.0.0.7network 10.0.13.0 0.0.0.7
network 1.1.1.1 0.0.0.0R2
ospf 100 router-id 2.2.2.2area 0.0.0.0network 10.0.12.0 0.0.0.7network 2.2.2.2 0.0.0.0network 10.0.23.0 0.0.0.7
R3
[R3]ospf 100 router-id 3.3.3.3
[R3-ospf-100]a 0
[R3-ospf-100-area-0.0.0.0]network 10.0.23.0 0.0.0.7       //正掩码10.0.23.0 255.255.255.248,反掩码255-248=7
[R3-ospf-100-area-0.0.0.0]network 10.0.13.0 0.0.0.7	
[R3-ospf-100-area-0.0.0.0]network 3.3.3.3 0.0.0.0

Ping 2.2.2.2
查看配置命令:

<R1>dis curr | begin ospf
ospf 100 router-id 1.1.1.1area 0.0.0.0network 10.0.12.0 0.0.0.7network 1.1.1.1 0.0.0.0network 10.0.13.0 0.0.0.7

ospf建立邻接的信息:

Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init)Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=2Way)Jan 17 2023 21:29:51-08:00(ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=AdjOk?, NeighborPreviousState=2Way, NeighborCurrentState=ExStart)Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=NegotiationDone, NeighborPreviousState=ExStart, NeighborCurrentState=Excha
nge)Jan 17 2023 21:29:51-08:00  (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=ExchangeDone, NeighborPreviousState=Exchange, NeighborCurrentState=Loading
)Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full)

1.2.5、OSPF三张表

1、邻居表
邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。
DR与BDR、DR与Drother、BDR与Drother之间都是FULL状态。

<R1>display ospf peer briefOSPF Process 100 with Router ID 1.1.1.1Peer Statistic Information----------------------------------------------------------------------------Area Id          Interface                      Neighbor id      State    0.0.0.0          GigabitEthernet0/0/1             2.2.2.2          Full        0.0.0.0          GigabitEthernet0/0/2             3.3.3.3          Full        
--------------------------------------------------------------------------
<R1>di ospf peerOSPF Process 100 with Router ID 1.1.1.1Neighbors Area 0.0.0.0 interface 10.0.12.1(GigabitEthernet0/0/1)'s neighborsRouter ID: 2.2.2.2          Address: 10.0.12.2       State: Full  Mode:Nbr is  Master主  Priority优先级: 1DR: 10.0.12.2  BDR: 10.0.12.1  MTU: 0    DR指定路由器和BDR备份路由器Dead timer due in 36  sec Retrans timer interval: 0 Neighbors Area 0.0.0.0 interface 10.0.13.1(GigabitEthernet0/0/2)'s neighborsRouter ID: 3.3.3.3          Address: 10.0.13.3       State: Full  Mode:Nbr is  Master  Priority: 1DR: 10.0.13.3  BDR: 10.0.13.1  MTU: 0    Dead timer due in 37  sec Retrans timer interval: 5 

Master主、Slave是从

2、链路状态数据库LSDB(Link State Database Description)
LSDB(Link-State DataBase)链路状态数据库,同一区域的所有路由器LSDB相同。
包含有来自同一区域接收的所有链路状态通告数据包中的信息。路由器使用来自拓扑数据库中的信息,作为Dijkstra算法的输入,并通过该算法为每个网络计算出最短路径。

<R1>display ospf lsdbOSPF Process 100 with Router ID 1.1.1.1Link State Database Area: 0.0.0.0Type      LinkState ID    AdvRouter          Age  Len   Sequence   MetricRouter    2.2.2.2         2.2.2.2            698  72    80000009    1562Router    1.1.1.1         1.1.1.1             89  60    80000010       1Router    3.3.3.3         3.3.3.3             93  72    80000012    1562Network   10.0.13.1       1.1.1.1             89  32    80000002       0Network   10.0.12.2       2.2.2.2            778  32    80000003       0

3、OSPF路由表
对LSDB应用SPF算法,选择到达目标地址的最佳路由放入路由表。

<R2>display ospf routingOSPF Process 100 with Router ID 2.2.2.2Routing Tables Routing for Network Destination        Cost  Type       NextHop         AdvRouter       Area2.2.2.2/32         0     Stub       2.2.2.2         2.2.2.2         0.0.0.010.0.12.0/29       1     Transit     10.0.12.2       2.2.2.2         0.0.0.010.0.23.0/29       1562  Stub       10.0.23.2       2.2.2.2         0.0.0.01.1.1.1/32         1     Stub       10.0.12.1       1.1.1.1         0.0.0.03.3.3.3/32         2     Stub       10.0.12.1       3.3.3.3         0.0.0.010.0.13.0/29       2     Transit     10.0.12.1       1.1.1.1

在这里插入图片描述

根据SPF算法从2.2.2.2–>10.0.12.13.3.3.3这条最优路径。

1.2.6、链路状态信息

链路信息主要包括:

  • 链路的类型;
  • 接口IP地址及掩码;
  • 链路上所连接的邻居路由器;
  • 链路的带宽(开销)。

每台运行OSPF协议的路由器所描述的信息中都应该包括链路的类型、接口IP地址及掩码、链路上的邻居、链路的开销等信息。

路由器只需要知道目的网络号/掩码、下一跳、开销(接口IP地址及掩码、链路上的邻居、链路的开销)即可,为什么要有链路的类型呢?

数据链路层协议类型多种多样,工作机制也各不相同。
为适配多种数据链路层协议,必须考虑各类链路层协议在组网时的应用场景。

1、网络类型:

1)、P2P网络

  • 仅两台路由互连。
  • 支持广播、组播。
    在这里插入图片描述
    P2P网络的例子:两台通过PPP(Point-to-Point Protocol)链路相连的路由器网络。
    2)、广播型网络
    两台或两台以上的路由器通过共享介质互连。
    支持广播、组播。
    在这里插入图片描述
    广播型网络支持两台及两台以上的设备接入同一共享链路且可以支持广播、组播报文的转发,是OSPF最常见的网络类型。
    广播型网络的例子:通过以太网链路相连的路由器网络。

3)、NBMA网络
两台或两台以上路由器通过VC互连。
不支持广播、组播。
NBMA(non-broadcast multiple access)型网络的例子:通过全互连的帧中继链路相连的路由器网络。

4)、P2MP网络
多个点到点网络的集合。
支持广播、组播。
在这里插入图片描述
将一个非广播网络看成是一组P2P网络,这样的非广播网络便成为了一个点到多点(P2MP)网络。在P2MP网络上,每个路由器的OSPF邻居可以使用反向地址解析协议(Inverse ARP)来发现。P2MP可以看作是多个P2P的集合,P2MP可以支持广播、组播的转发。

没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其他的网络类型强制更改为P2MP。常见的做法是将非完全连接的帧中继或ATM改为P2MP的网络。

2、OSPF的度量方式
某接口cost=参考带宽/实际带宽。
更改cost的两种方式:

  • 直接在接口下配置;
  • 修改参考带宽(所有路由器都需要修改,确保选路一致性)。
  • RTA到达192.168.3.0/24的“累计cost”=G1’s cost+G3’s cost
    在这里插入图片描述
    OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和,以RTA访问RTC Loopback 1接口192.168.3.3为例,其
    cost=G1’s cost+G3’s cost。
    从路由器出接口---->下一跳路由器出接口---->目的路由器IP的接口
    cost的总和=计算去往目的地沿途数据层面出方向接口的总和

OSPF在计算接口的cost时,cost=参考带宽/实际带宽,默认参考带宽为100M。当计算结果有小数位时,只取整数位;结果小于1时,cost取1。

OSPF Cost = 10^8/BW (bps) =100M 参考带宽/接口的物理带宽
bps=bit/s 10^8就是100M=10010001000bit/s(bps)
由于cost值是100000000/bw带宽,通过计算100M和1000M都是近似值是1,没有什么区别。

调整接口cost值有两种方式:查看dis ospf routing

调整接口cost值备注
在接口直接调整int g0/0/1
ospf cost 1 //修改OSPF cost值为1
修改参考带宽ospf 100 router-id 1.1.1.1
bandwidth-reference 1000 //修改参考带宽为1G 单位是Mbit/s

1.2.7、OSPF协议报文类型及作用

在这里插入图片描述
Version Number:IPv4 版本2; IPv6 版本3
Type:1、Hello;2、DBD;3、LSR;4、LSU;5、LSAck。
Packet Length长度:
Router ID 手工指定
Area ID 区域号
Check-sum 校验和
Authentication type 明文或MD5
Data:网络掩码、IP、网络类型等等。

1、OSPF协议报文头部
在这里插入图片描述
RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,协议号为89。

  • 在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部:
  • Version :对于当前所使用的OSPFv2,该字段的值为2。
  • Type:OSPF报文类型。
  • Packet length:表示整个OSPF报文的长度,单位是字节。
  • Router ID:表示生成此报文的路由器的Router ID。
  • Area ID:表示此报文需要被通告到的区域。
  • Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
  • Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
  • Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。

2、OSPF报文类型
DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router 、LS Sequence Number、LS Checksum。
LSR中包含LS Type 、LS ID和Advertising Router 。
LSU中包含完整的LSA信息。
LSAck中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。

Hello报文
hello数据包和链路状态通告(LSA)共同用于建立维护拓扑数据库。hello数据包使用的是组播地址224.0.0.5。

  • Hello Intervals:10S/30S
  • Dead Interval:4*Hello =40S
    在这里插入图片描述
    在这里插入图片描述
    OSPF的邻居发现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下:
    1)、Network Mask:发送Hello报文的接口的网络掩码。
    2)、HelloInterval:发送Hello报文的时间间隔,单位为秒。
    3)、Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能已超出这里的讨论范围。
    4)、Router Priority:发送Hello报文的接口的Router Priority,用于选举DR和BDR。
    5)、Router Dead Interval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍HelloInterval。
    6)、Designated Router设置为0.0.0.0,表示未选举DR路由器。
    7)、Backup Designated Router:发送Hello报文的路由器所选举出的:发送Hello报文的路由器所选举出的DR的IP地址。如果BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
    8)、Neighbor:邻居的Router ID列表,表示本路由器已经从这些邻居收到了合法的Hello报文。
    在这里插入图片描述
    验证一个接收到的Hello报文是否合法包括:
  • 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
  • 所接收的Hello报文中Hello Interval字段时间间隔必须和接收端口的配置一致;
  • 所接收的Hello报文中Router Dead Interval字段失效时间必须和接收端口的配置一致;
  • 所接收的Hello报文中Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致。
    在这里插入图片描述
    OSPFv2中Option字段
    在OSPFv2的Option中,各字段功能如下:
    DN:用于防止环路
    O:支持Opaque LSA
    DC:为虚链路使用
    EA:表示该路由器为ASBR
    N/P:用于表示该路由为7类LSA,用于7类LSA和5类LSA的转化,NSSA使用
    MC:用于组播相关
    E:允许泛洪AS-External LSA
    MT:表示是否支持多拓扑OSPF

DD报文
在这里插入图片描述
在此状态下发送的DD报文不包含链路状态描述。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,
I-bit设置为1,表示这是第一个DD报文;
M-bit设置为1,表示后续还有DD报文要发送;
MS-bit设置为1,表示RTA宣告自己为Master。主/从位(Master/slave bit) 如果始发路由器是Master,则该位置1 。
在这里插入图片描述
LSR报文
包含LS Type 、LS ID和Advertising Router 。
在这里插入图片描述
LSU报文
完整的LSA信息。
在这里插入图片描述
LSAck报文
包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
在这里插入图片描述

1.2.8、影响OSPF建立邻居的条件

1.router id

  • 同一个区域相邻的设备router-id不能相同
  • 同一个区域不相邻的设备,router-id可以相同,但是会影响路由的接收
  • 不同的区域,不相邻的设备,router-id可以相同,也不会影响路由的接收。

2、区域ID
直连的接口区域ID一定要相同

3、掩码

  • 默认情况下以太链路(网络类型为broadcast)掩码长度必须相同
  • 默认情况下串行链路掩码长度可以不同或者(网络类型为P2P链路掩码长度可以不同)
  • 网络类型P2MP,掩码长度必须相同,(也可以不相同,但是必须通过OSPF P2MP-netmask-ignore忽略对网络掩码的检查)
interface Serial4/0/1
ospf network-type p2mp          //修改OSPF网络类型为P2MP
ospf p2mp-mask-ignore          //忽略对网络掩码的检查

4.hello 及dead time 必须相同
不同的OSPF的网络类型hello time 和dead time时间不一样。

  • 默认情况下,dead time 是hello时间的4倍
  • 当修改hello time,dead time会自动发生变化
  • 如果只修改dead time,hello time不会自动发生变化
interface Serial4/0/1
ospf timer hello 15          //修改hello时间15s
相邻邻居失效的时间
ospf timer dead 45         //修改dead 时间45s

5.认证
帐号密码要相同。

6.option 选项 E/N位
E:允许泛洪AS-External LSA,ospf 3的N位。

7.MTU值 DD报文
华为设备默认是不检测MTU的,可以通过命令配置检测MTU(思科设备默认是检测MTU)。
如果从设备的MTU小于主设备的MTU,两端都会卡在Estart状态。

[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ospf mtu-enable        //开启MTU检测

8.silent-interface 禁止接收和发送OSPF报文
一般配置在连接终端的接口,不会影响路由的通告, 注意:千万不要配置在路由器之间相连的接口。

ospf 1 router-id 11.1.1.1
silent-interface all                    //所有使能OSPF的接口都会被变成静默接口
undo silent-interface Serial4/0/1      //排除S4/0/1接口交换机
ospf 1 router-id 11.1.1.1
silent-interface Vlanif15

9.过滤 OSPF报文

acl number 3000
rule 10 deny ip
interface Serial4/0/1
traffic-filter inbound acl 3000           //接口调用ACL

10.NBMA
单播指定邻居

1.2.9、LSDB同步过程

状态含义:

  • ExStart准启动状态:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。

  • Exchange交换状态交换目录:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。

  • Loading加载状态(同步数据库):在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
    在这里插入图片描述
    LSDB同步过程如下:

  • RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为ExStart准启动状态后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。

  • 当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
    在这里插入图片描述

Exstart State准启动状态–>Exstchange State交换状态交换目录。

当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。

当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为Master。
在这里插入图片描述

虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。
在这里插入图片描述
Loading加载状态
在这里插入图片描述
LSR用于向对方请求所需的LSA。
LSU用于向对方发送其所需要的LSA。
LSACK用于向对方发送收到LSA的确认。

1.2.10、DR与BDR作用

MA网络中的问题
n×(n−1)/2个邻接关系,管理复杂。
重复的LSA泛洪,造成资源浪费。
在这里插入图片描述

邻居间LSA的泛洪扩散混乱,相同的LSA会被复制多份,如RTA向其邻居RTB、RTC、RTD分别发送一份自己的LSA,RTB与RTC、RTC与RTD、RTB与RTD之间也会形成邻居关系,也会发送RTA的LSA。
这样的工作效率显然是很低的,消耗资源的。作为高级的路由协议,OSPF是怎样解决这些问题的呢?

1.2.10.1、DR与BDR的作用

DR(Designated Router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。

DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源。

DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步。此时就需要重新选举DR,再与非DR路由器建立邻接关系,完成LSA的同步。为了规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。

  • 减少邻接关系。
  • 降低OSPF协议流量。
    在MA网络中,才会涉及DR和BDR的选举,建议使用广播(更推荐)。
    在这里插入图片描述
    每一个含有至少两个路由器的广播型网络和NBMA网络都有一个DR和BDR。

一个既不是DR也不是BDR的路由器只与DR和BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播型网络和NBMA网络中的邻接关系数量。在本例中,所有路由器之间有6个邻接关系。当指定了DR后,所有的路由器都与DR建立起邻接关系,DR成为该广播网络上的中心点。

BDR在DR发生故障时接管业务,一个广播网络上所有路由器都必须同BDR建立邻接关系。本例中使用DR和BDR将邻接关系从6减少到了5,RTA和RTB都只需要同DR和BDR建立邻接关系,RTA和RTB之间建立的是邻居关系。

此例中,邻接关系数量的减少效果并不明显。但是,当网络上部署了大量路由器时,比如100台,那么情况就大不一样了。

伪节点
是一个虚拟设备节点,其功能需要某台路由器来承载。
在这里插入图片描述

1.2.10.2、DR&BDR选举:

选举规则:DR/BDR的选举是基于接口的。DR和BDR是指设备的物理口,而不是指路由器。

  • 接口的DR优先级越大越优先。接口优先级。
  • 接口的DR优先级相等时,Router ID越大越优先
    在这里插入图片描述
    在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。优先级取值范围为0-255,值越高越优先缺省情况下,接口优先级为1。如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。

为了给DR做备份,每个广播和NBMA网络上还要选举一个BDR。BDR也会与网络上所有的路由器建立邻接关系。

为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,则新添加RTD进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。

  • 如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;
  • 如果当前BDR发生故障,则DR不变,重新选举BDR。

配置接口的OSPF优先级
在这里插入图片描述

[RouterA]int g0/0/0           
[RouterA 1-GigabitEthernet0/0/0]ospf dr-priority 100
[R1-GigabitEthernet0/0/0]q
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] ospf dr-priority 0
[RouterA]reset ospf process       //清除OSPF 1进程
< RouterB >reset ospf 1 process    //清除OSPF 1进程
<R3>reset ospf 100 process

[RouterD] dis ospf peer查看DR 及BDR

[RouterD] display ospf peerOSPF Process 1 with Router ID 4.4.4.4NeighborsArea 0.0.0.0 interface 192.168.1.4(GigabitEthernet1/0/0)'s neighborsRouter ID: 1.1.1.1      Address: 192.168.1.1
State: Full  Mode:Nbr is Slave邻居是从路由器  Priority: 100
DR: 192.168.1.1  BDR: 192.168.1.3  MTU: 0Dead timer due in 35  secRetrans timer interval: 5Neighbor is up for 00:07:19Authentication Sequence: [ 0 ]Router ID: 2.2.2.2      Address: 192.168.1.2
State: 2-Way  Mode:Nbr is Master邻居是主路由器  Priority: 0
DR: 192.168.1.1  BDR: 192.168.1.3  MTU: 0Dead timer due in 35  secRetrans timer interval: 5Neighbor is up for 00:07:19Authentication Sequence: [ 0 ]Router ID: 3.3.3.3      Address: 192.168.1.3
State: Full  Mode:Nbr is Slave邻居是从路由器  Priority: 2
DR: 192.168.1.1  BDR: 192.168.1.3  MTU: 0Dead timer due in 37  secRetrans timer interval: 5Neighbor is up for 00:07:17Authentication Sequence: [ 0 ]

总结:

  • 选举规则 : 在选举期内 two- - way 40s

  • DR/BDR的选举是基于接口的,而不是基于路由器。

  • 在2way阶段选举接口的DR优先级越大越优先。

  • 优先级0-255接口的DR优先级相等时,Router ID越大越优先。

  • 接口优先级为0时不可以被选举为DR

  • DR不能抢占

  • DR失效,则BDR成为DR。

DR 指定路由器
BDR 备份指定路由器 为了防止DR挂掉,起到备份作用。当DR挂掉时候,BDR成为DR
DRother 普通路由器
DR和所有的路由器建立邻接关系

注意:
建议使用广播(更推荐),点对点不选DR。
p2p点到点<---->p2mp点到多点,不影响装载路由。

网络类型Hello时间选举DR/BDR建立邻居方式
P2P点到点10秒自动
P2MP点到多点30秒自动
broadcast广播型网络宽10秒自动
NBMA网络30秒手工单播发现邻居
Int g0/0/1
ospf network- type broadcast

OSPF特征:

  • 链路状态协议
  • 基于IP协议,协议号 89
  • 等价负载多路径协议(负载均衡)
  • 多区域配置
  • 所有的路由器使用组播地址224.0.0.5 还有224.0.0.6 – DR
  • 或单播地址
  • 安全措施:认证

相关文章:

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议&#xff0c;存在着收敛慢、易产生路由环路、可扩展性差等问题&#xff0c;目前已逐渐被…...

Migrate your data into databend with DataX

现在互联网应用越来越复杂&#xff0c;每个公司都会有多种多样的数据库。通常是用最好的硬件来跑 OLTP&#xff0c;甚至还在 OLTP 中进行分库分表来满足业务&#xff0c;这样对于一些分析&#xff0c;聚合&#xff0c;排序操作非常麻烦。这也有了异构数据库的数据同步需求&…...

ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

【ansible 设置host为localhost&#xff0c;执行ping命令报错】 [eniq-slocalhost ansible]$ ansible all -m ping -i inventory localhost | UNREACHABLE! > { "changed": false, "msg": "Failed to connect to the host via ssh: Perm…...

有限元中三角形的一些积分公式

文章目录有限元中三角形的相关积分公式有限元中三角形的相关积分公式 在 xyxyxy 平面中&#xff0c; 通过三个点 (xi,yi),(xj,yj),(xm,ym)(x_i, y_i), (x_j, y_j), (x_m, y_m)(xi​,yi​),(xj​,yj​),(xm​,ym​) 定义一个三角形&#xff0c; 令坐标原点位于其中心(或者重心)…...

【docker-compose】安装mongodb

1. 安装方式 压缩包容器安装docker&#xff08;推荐&#xff0c;一分钟安装&#xff09; 2. 环境 linux服务器已安装好 docker docker-compose &#xff08;不了解的客官&#xff0c;请点击进入&#xff09; 3. 步骤&#xff1a; Step 1&#xff1a; linux下建立如下目录…...

【ClickHouse源码】物化视图的写入过程

本文对 ClickHouse 物化视图的写入流程源码做个详细说明&#xff0c;基于 v22.8.14.53-lts 版本。 StorageMaterializedView 首先来看物化视图的构造函数&#xff1a; StorageMaterializedView::StorageMaterializedView(const StorageID & table_id_,ContextPtr local_…...

.NET 使用NLog增强日志输出

引言 不管你是开发单体应用还是微服务应用&#xff0c;在实际的软件的开发、测试和运行阶段&#xff0c;开发者都需要借助日志来定位问题。因此一款好的日志组件将至关重要&#xff0c;在.NET 的开源生态中&#xff0c;目前主要有Serilog、Log4Net和NLog三款优秀的日志组件&…...

一道阿里类的初始化顺序笔试题

问题很简单&#xff0c;就是下面的代码打印出什么&#xff1f; public class InitializeDemo {private static int k 1;private static InitializeDemo t1 new InitializeDemo("t1" );private static InitializeDemo t2 new InitializeDemo("t2");priv…...

cuda找不到路径报错

编译C文件时出现&#xff1a;error: [Errno 2] No such file or directory: :/usr/local/cuda:/usr/local/cuda/bin/nvcc 在终端输入&#xff1a; export CUDA_HOME/usr/local/cuda...

Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)

Elasticsearch进阶之&#xff08;核心概念、系统架构、路由计算、倒排索引、分词、Kibana&#xff09; 1、核心概念&#xff1a; 1.1、索引&#xff08;Index&#xff09; 一个索引就是一个拥有几分相似特征的文档的集合。比如说&#xff0c;你可以有一个客户数据的索引&…...

Android包体积缩减

关于减小包体积的方案&#xff1a; 一、所有的图片压缩&#xff0c;采用webp 格式。 &#xff08;当然有些图片采用webp格式反而变大了&#xff0c;可以仍采用png格式&#xff09; 二、语音资源过滤 只保留中文 resConfigs "zh-rCN", "zh” 可以减少resourc…...

【华为OD机试】 网上商城优惠活动(C++ Java Javascript Python)

文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 某网上商场举办优惠活动,发布了满减、打折、无门槛3种优惠券,分别为: 每满100元优惠10元,无使用数限制,如100199元可以使用1张减10元,200299可使用2张减20元,以此类推;92折券,1次…...

GWT安装过程

1:安装前准备 &#xff08;可以问我要&#xff09; appengine-java-sdk-1.9.8 com.google.gdt.eclipse.suite.4.3.update.site_3.8.0 gwt-2.5.1 eclipse-jee-kepler-SR2-win32-x86_64.zip 2&#xff1a;安装环境上 打开eclipse Help –Install New Software… 选择Add –…...

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

Leetcode 704 二分查找题目链接&#xff1a;704二分查找介绍给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。思路先看看一个…...

office@word@ppt启用mathtype组件方法整理

文章目录将mathtype添加到word中ref查看office安装路径文件操作法Note附PPT中使用mathtype将mathtype添加到word中 先安装office,再安装mathtype,那么这个过程是自动的如果是先安装mathtype,再安装office,那么有以下选择: 重新安装一遍mathtype(比较简单,不需要说明)执行文件操…...

计算机大小端

我们先假定内存结构为上下型的&#xff0c;上代表内存高地址&#xff0c;下代表内存低地址。 电脑读取内存数据时&#xff0c;是从低位地址到高位地址进行读取&#xff08;从下到上&#xff09;。 1、何为大小端 大端&#xff1a;数据的高位字节存放在低地址&#xff0c;数据…...

Matplotlib绘图从零入门到实践(含各类用法详解)

一、引入 Matplotlib 是一个Python的综合库&#xff0c;用于在 Python 中创建静态、动画和交互式可视化。 本教程包含笔者在使用Matplotlib库过程中遇到的各类完整实例与用法还有遇到的库理论问题&#xff0c;可以根据自己的需要在目录中查询对应的用法、实例以及第四部分关于…...

C语言 入门教程||C语言 指针||C语言 字符串

C语言 指针 学习 C 语言的指针既简单又有趣。通过指针&#xff0c;可以简化一些 C 编程任务的执行&#xff0c;还有一些任务&#xff0c;如动态内存分配&#xff0c;没有指针是无法执行的。所以&#xff0c;想要成为一名优秀的 C 程序员&#xff0c;学习指针是很有必要的。 …...

Nacos2.x+Nginx集群配置

一、配置 nacos 集群 注意&#xff1a;需要先配置好 nacos 连接本地数据库 1、拷贝三份 nacos 2、修改配置文件&#xff08;cluster.conf&#xff09; 修改启动端口&#xff1a; nacos1&#xff1a;8818 nacos2&#xff1a;8828 nacos3&#xff1a;8838 当nacos客户端升级为…...

Android源码分析 - InputManagerService与触摸事件

0. 前言 有人问到&#xff1a;“通过TouchEvent&#xff0c;你可以获得到当前的触点&#xff0c;它更新的频率和屏幕刷新的频率一样吗&#xff1f;”。听到这个问题的时候我感到很诧异&#xff0c;我们知道Android是事件驱动机制的设计&#xff0c;可以从多种服务中通过IPC通信…...

python库--urllib

目录 一.urllib导入 二.urllib爬取网页 三.Headers属性 1.使用build_opener()修改报头 2.使用add_header()添加报头 四.超时设置 五.get和post请求 1.get请求 2.post请求 urllib库和request库作用差不多&#xff0c;但比较起来request库更加容易上手&#xff0c;但该了…...

美团前端二面常考react面试题及答案

什么原因会促使你脱离 create-react-app 的依赖 当你想去配置 webpack 或 babel presets。 React 16中新生命周期有哪些 关于 React16 开始应用的新生命周期&#xff1a; 可以看出&#xff0c;React16 自上而下地对生命周期做了另一种维度的解读&#xff1a; Render 阶段&a…...

环境搭建04-Ubuntu16.04更改conda,pip的镜像源

我常用的pipy国内镜像源&#xff1a; https://pypi.tuna.tsinghua.edu.cn/simple # 清华 http://mirrors.aliyun.com/pypi/simple/ # 阿里云 https://pypi.mirrors.ustc.edu.cn/simple/ #中国科技大学1、将conda的镜像源修改为国内的镜像源 先查看conda安装的信息…...

【C++进阶】四、STL---set和map的介绍和使用

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 四、set的介绍及使用 4.1 set的介绍 4.2 set的使用 五、multiset的介绍及使用 六、map的介绍和使用 6.1 map的介绍 6.2 map的使用 七、multimap的介绍和使用 一、关联式容器 前面已经接触过 STL 中的部分…...

JavaSE学习进阶 day1_01 static关键字和静态代码块的使用

好的现在我们进入进阶部分的学习&#xff0c;看一张版图&#xff1a; 前面我们已经学习完基础班的内容了&#xff0c;现在我们已经来到了第二板块——基础进阶&#xff0c;这部分内容就不是那么容易了。学完第二板块&#xff0c;慢慢就在向java程序员靠拢了。 面向对象进阶部分…...

苹果笔可以不买原装吗?开学必备性价比电容笔

在当今的时代&#xff0c;电容笔日益普及&#xff0c;而且相关的功能也逐渐完善。因此&#xff0c;在使用过程中&#xff0c;怎样挑选一款性价比比较高的电容笔成为大家关心的焦点。随着电容笔的普及&#xff0c;更好更便宜的电容笔成为了一种趋势。那么&#xff0c;哪个品牌的…...

数据库连接与properties文件

管理properties数据库&#xff1a; 现在pom文件中加入Druid的坐标&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency>配置文件中添加相应的数据&…...

Linux上的校验和验证

校验和&#xff08;checksum&#xff09;程序用来从文件中生成相对较小的唯一密钥。我们可以重新计算该密钥&#xff0c;用以检查文件是否发生改变。修改文件可能是有意为之&#xff08;添加新用户会改变密码文件&#xff09;&#xff0c;也可能是无意而为&#xff08;从CD-ROM…...

杂记——14.git在idea上的使用及其实际开发介绍

这篇文章我们来讲一下git在idea上的使用&#xff0c;以及在实际开发过程中各个分支的使用及其具体的流程 目录 1.git在idea上的使用 1.1 idea上的git提交 1.2 idea上的分支切换 2.git在实际运用时的分支及其流程 2.1分支介绍 2.2具体流程 3.小结 1.git在idea上的使用 …...

记一次Nodejs减低npm版本的踩坑日记

使用了npm install -g npm6.4.1指令之后&#xff0c;把npm版本减低了&#xff0c;让后悲催的就来了。 由于npm 6.4.1 已经过时&#xff0c;导致运行npm时出现 npm does not support Node.js v18.14.2 版本不兼容问题 升级npm版本&#xff0c;npm install -g npmlatest 没用还是…...

网站建设 软件开发/百度推广服务费一年多少钱

下面的操作都是在linux下进行的&#xff0c;我用的Ubuntu。切换到su超级用户。 1.下载源码&#xff0c;有各种方法&#xff1a; ①你如果能访问谷歌的话&#xff0c;直接用git下载。 ②不能访问谷歌&#xff0c;那就搜索下载源码压缩包&#xff08;搜不到的可以联系我&#…...

wordpress写书typecho主题/推广普通话的意义

collection   定义命名元祖,让元祖的每个元素可以通过类似对象属性的方法用".属性"及其方便的取值.  定义可前后拿取值且可迭代的双端队列  定义有顺序的字典  定义有默认值的字典ps:  队列 &#xff1a;先进先出  堆栈 &#xff1a;先进后出具体用到的或…...

企业网站开发费是固定资产吗/网站友情链接自动上链

近日&#xff0c;不少《王者荣耀》玩家反映&#xff0c;收到人脸识别验证弹窗提醒。据了解&#xff0c;腾讯已经开始在包括《王者荣耀》《和平精英》在内的100多款手机游戏产品中进行人脸识别验证&#xff0c;旨在解决“孩子冒用家长身份信息绕过监管”的问题。登录过程中拒绝或…...

大连网站策划/站长工具官网

转载请注明来源&#xff1a; http://blog.csdn.net/milado_nju/article/details/7300058 WebKit和Chromium的代码量很大(这两个项目都是几百万行代码的级别&#xff0c;不包括它们依赖的第三方库&#xff09;&#xff0c;读起来是相当的不容易。但是良好的代码组织结构很好的帮…...

用vue做pc端网站好吗/线上营销活动案例

经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响&#xff0c;我的直觉是没有影响&#xff0c;因为如果这个顺序有影响&#xff0c;Oracle应该早就能够做到自动优化&#xff0c;但一直没有关于这方面的确凿证据。在网上查到的文章&#xff0c;一般认为在RBO优…...

一个新网站要怎么做seo/西部数码域名注册官网

jsp使用jdk8时&#xff0c;需要tomcat7以及以上版本&#xff0c;jsp在使用jdk7的时候&#xff0c;tomcat使用tomcat6即可...