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

ospf协议(动态路由协议)

ospf基本概念

定义

OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。
目前针对 IPv4 协议使用的是 OSPF Version 2 RFC2328 );针对 IPv6 协议使用 OSPF Version 3 RFC2740 )。
运行 OSPF 路由器之间交互的是 LS Link State ,链路状态)信息,而不是直接交互路由。 LSA 信息是 OSPF 能够正常进行拓扑及路由计算的关键信息。
OSPF 路由器将网络中的 LSA 信息收集起来,存储在 LSDB 中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
每台 OSPF 路由器都采用 SPF 算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
OSPF 支持 VLSM Variable Length Subnet Mask ,可变长子网掩码),支持手工路由汇总。
多区域的设计使得 OSPF 能够支持更大规模的网络。

ospf基础术语-区域

OSPF Area 用于标识一个 OSPF的区域,使用十进制数或类似于IP地址方式,但是没有IP地址的意义。
区域是从逻辑上将设备划分为不同的组,每个组用区域号( Area ID )来标识。
两种区域类型
  • 骨干区域:区域0 存在并且唯一
  • 非骨干区域:非0区域
注意:
  • 区域的划分是基于接口的,不是基于路由器的,一个路由器可以属于不同的区域。
  • 非骨干区域必须与骨干区域相连接。

ospf基础术语-router-id

Router-ID Router Identifier ,路由器标识符),用于在一个 OSPF 域中唯一地标识一台路由器
Router-ID 的设定可以通过手工配置的方式,或使用系统自动配置的方式

Router-ID的选举规则:

  1. 手工配置最优;
  2. 选用路由器全局Router-ID:
    1.  最先配置的IP地址;
    2.  如果最先配置的IP地址被删除或修改,则优选最大的虚拟地址(loopback地址),再优选最大的物理地址
  3. ospf router-id不具备抢占特性,除非设备重启或重置ospf进程

ospf基础术语-度量值

OSPF使用Cost(开销)作为路由的度量值。 每一个激活了 OSPF 的接口都会维护一个接口 Cost 值,缺省时 接口 Cost = 100  Mbit / s除以 接口带宽。 其中100 Mbit/sOSPF 指定的缺省参考值,该值是可配置的
笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。

ospf路由器角色

区域内路由器(Internal Router-IR)-区域内路由器是 OSPF 自治系统中的基本路由器类型之一。它的所有接口都被分配到同一个 OSPF 区域内。通常情况下,这些路由器在网络拓扑中处于较低的层次,负责局部的路由选择和转发任务。

区域边界路由器(Area Border Router - ABR)-区域边界路由器连接了骨干区域和非骨干区域,因此它在 OSPF AS 中扮演着关键的角色。ABR 可以通过物理连接或逻辑连接连接到骨干区域。

骨干路由器(Backbone Router-BR)-骨干路由器在 OSPF AS 中扮演着核心的角色,负责连接整个自治系统并提供路由信息的交换。它至少一个接口必须连接到骨干区域,可以同时连接到其他区域。

自治系统边界路由器(Autonomous System Boundary Router - ASBR)-ASBR 负责将来自其他自治系统的路由信息引入本自治系统,并将本自治系统的路由信息传递到其他自治系统。它可能位于自治系统的边界,也可能位于自治系统内部。

链路状态路由协议的运算过程

链路状态路由协议有四个步骤
  • 第一步是建立相邻路由器之间的邻居关系。
  • 第二步是邻居之间交互链路状态信息和同步LSDB
  • 第三步是进行优选路径计算。
  • 第四步是根据最短路径树生成路由表项加载到路由表。

ospf中的三大表项

邻居表

对于OSPF的邻居表,需要了解:

  • OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
  • OSPF的邻居关系通过交互Hello报文建立。
  • OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。

链路状态数据库-LSDB

对于OSPF的LSDB表,需要了解:

  • LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1LSDB包含了三条LSA
  • Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
  • 使用命令行display ospf lsdb查看LSDB表。

ospf路由表

对于OSPF路由表,需要了解:

  • OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
  • OSPF路由表包含DestinationCostNextHop等指导转发的信息。
  • 使用命令display ospf routing查看OSPF路由表。

ospf的网络类型

  • 在学习DRBDR的概念之前,需要首先了解OSPF的网络类型。

  • OSPF网络类型是一个非常重要的接口变量,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文,以及是否需要选举DRBDR等。

  • 接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。

  • 如图所示,OSPF的有四种网络类型,BroadcastNBMAP2MPP2P

一般情况下,链路两端的OSPF接口网络类型必须一致,否则双方无法建立邻居关系

OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景,例如可以将BMA网络类型修改为P2P

BMA(Broadcast Multiple Access,广播式多路访问)

  • BMA也被称为Broadcast,指的是一个允许多台设备接入的、支持广播的环境。
  • 典型的例子是Ethernet(以太网)。当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA

NBMA(Non-Broadcast Multiple Access,非广播式多路访问)

  • NBMA指的是一个允许多台网络设备接入且不支持广播的环境。
  • 典型的例子是帧中继(Frame-Relay)网络。

P2P(Point-to-Point,点对点)

  • P2P指的是在一段链路上只能连接两台网络设备的环境。
  • 典型的例子是PPP链路。当接口采用PPP封装时,OSPF在该接口上采用的缺省网络类型为P2P

P2MP(Point to Multi-Point,点到多点)

  • P2MP相当于将多条P2P链路的一端进行捆绑得到的网络。
  • 没有一种链路层协议会被缺省的认为是P2MP网络类型。该类型必须由其他网络类型手动更改。
  • 常用做法是将非全连通的NBMA改为点到多点的网络。

DR和BDR

MAMulti-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)非广播型多路访问网络(NBMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。

MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量

当拓扑出现变更,网络中的LSA泛洪可能会造成带宽的浪费和设备资源的损耗

为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DRDesignated Router,指定路由器)、BDRBackup Designated Router,备用指定路由器)和DRother路由器。

只允许DR、BDR与其他OSPF路由器建立邻接关系。DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。

BDR会监控DR的状态,并在当前DR发生故障时接替其角色。

DR和BDR的选举规则:

  • OSPF DR优先级值大的接口成为该MADR,第二大的成为BDR。
  • 如果优先级值相等(默认为1),则具有更大的OSPF Router-ID的路由器(的接口)被选举成DR,第二大的成为BDR,并且DR具有非抢占性。

注意:

  1. 只有在广播和NBMA 的链路上才会选举DR和BDR,在P2P 和P2MP 的链路上不会选举DR和BDR。
  2. DR 是针对一个网段内的设备选举的,对于一台路由器来说,可能它在某个接口上是DR,在其它接口上是BDR、DROther,或者因为是P2P 的链路而不参加DR 的选举。
  3. 在广播的网络上必须存在DR 才能够正常工作,但BDR 不是必需的。
  4. 一个网段中即使只有一台路由器,也要选举DR。
  5. 由于“终身制”的原因,网段中的DR 不一定是priority 最高的,但通常是“来的早”的路由器。

ospf协议的报文类型

OSPF使用5种不同的报文类型。每种类型用于支持不同的,专门的网络功能:

  • Hello报文:发现和维护邻居关系。
  • DD报文(数据库描述):交互链路状态数据库摘要。
  • LSR(链路状态请求):请求特定的链路状态信息。
  • LSU(链路状态更新):发送详细的链路状态信息。
  • LSACK(链路状态确认):对链路状态信息进行确认。

ospf的状态机

(1)邻居建立状态变化过程

1、Down状态:这是邻居的初始状态,表示没有从邻居收到任何信息。

启用了OSPF功能的链路默认成为down状态,并开始向外发送Hello报文(基于网络类型的不同发送方式也会不同,广播类型Hello为组播发送)。

注意:OSPF的每条链路都会经历状态机,每条OSPF链路的状态机互不影响。

启用OSPF的链路从Down状态开始,向外发送Hello报文。

2、Init状态:在此状态下,路由器已经从邻居收到了Hello报文。

在Init状态下的链路,如果接收到传来的Hello包中含有自己的router-id,则表示对端已经发现了自己,此时链路就能成为2-way状态了。

3、Attempt状态(NBMA)

该状态仅发生在NBMA网络中,表明该链路在发送Hello报文之后,到达了失效时间(dead interval)仍然没有收到对端回复Hello报文。如果Router Dead Interval间隔内未收到邻居的Hello报文,则转为Down状态。

处于该状态下的链路仍然会向对端发送Hello报文。

4、2-way状态:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

(2)邻接建立状态变化过程

5、ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文,主从关系是在此状态下形成的。初始DD序列号是在此状态下决定的,在此状态下发送的DD报文不包含链路状态描述。

6、Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。

7、Loading:相互发送LSRequest报文请求LSA,发送LSUpdate通告LSA。

8、Full:两台路由器的LSDB已经同步。

OSPF的3种稳定状态:

什么是稳定的状态?即链路状态会长时间所处的状态机。

在OSPF状态机中,有三个稳定的状态机状态:Down、2-way、Full

  • Down:启用OSPF功能的链路默认所处状态机或者邻居失效后的状态。
  • 2-way:在交互了Hello报文建立邻居之后所处的状态,DR-Other与DR-Other之间所处的状态。
  • Full:在邻接建立成功之后的状态,也是OSPF的最终状态。

ospf邻接关系建立过程

OSPF完成邻接关系的建立有四个步骤,即建立邻居关系、协商主/从、交互LSDB信息,同步LSDB

建立邻居关系

当一台 OSPF 路由器收到其他路由器发来的首个 Hello 报文时会从初始 Down 状态切换为 Init 状态。
OSPF 路由器收到的 Hello 报文中的邻居字段包含自己的 Router ID 时,从 Init 切换 2-way 状态。

协商主/从、交互LSDB信息

邻居状态机从 2-way 转为 Exstart 状态后开始主从关系选举:
R1 R2 发送的第一个 DD 报文内容为空,其 Seq 序列号假设为 X
R2 也向 R1 发出第一个 DD 报文,其 Seq 序列号假设为 Y
选举主从关系的规则是比较Router ID,越大越优 R2 Router ID R1 大, 因此 R2 成为真正的主设备。主从关系比较结束后, R1 状态从 Exstart 转变为 Exchange
R1 邻居状态变为 Exchange 后, R1 发送一个新的 DD 报文,包含自己 LSDB 的描述信息,其序列号采用主设备 R2 的序列号。 R2 收到后邻居状态从 Exstart 转变为 Exchange
R2 R1 发送一个新的 DD 报文,包含自己 LSDB 的描述信息,序列号为 Y+1
R1 作为从路由器需要对主路由 R2 发送的每个 DD 报文进行确认,回复报文的序列号与主路由 R2 一致。
发送完最后一个 DD 报文后, R1 将邻居状态切换为 Loading

同步LSDB

邻居状态转变为 Loading 后, R1 R2 发送 LSR 报文,请求那些在 Exchange 状态下通过 DD 报文发现的,但是在本地 LSDB 中没有的 LSA
R2 收到后向 R1 回复 LSU 。在 LSU 报文中包含被请求的 LSA 的详细信息。
R1 收到 LSU 报文后,向 R2 回复 LS ACK 报文,确认已接收到,确保信息传输的可靠性。
此过程中 R2 也会向 R1 发送 LSA 请求。当两端 LSDB 完全一致时,邻居状态变为 Full ,表示成功建立邻接关系。

虚链路

为了避免区域间的环路,OSPF规定不允许直接在两个非骨干区域之间发布路由信息只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此,每个非骨干区域都必须连接到骨干区域,同时骨干区域也必须连续
        但由于网络设计、升级、合并、改造等因素,从而造成不规范区域架构,最终导致路由学习不完整,解决方法就是使用虚链路

ospf支持一种名叫虚链路(virtual link)的特性,当非骨干区域与骨干区域之间没法建立物理连接的情况下,可利用该特性来建立逻辑连接,虚链路的用途如下:

  • 当非骨干区域与骨干区域之间无法通过物理链路直连时,可让两者之间通过这种逻辑链路互连。
  • 可用来防止骨干区域的“分裂”,或可用来把发生“分裂”的骨干区域合并。

虚链路使用场景:

场景一:

在上图中,区域2只能与区域1直连,而无法与骨干区域直连,在这种情况下,由于area 2没有与骨干区域直连,最终导致area 2无法学习到其他区域的路由信息,在这种情况下,需要通过OSPF虚链路将骨干区域的范围扩展到相邻的区域1,如下图:

在进行OSPF虚链路扩展后,区域1被虚拟成了骨干区域,而这时的R3等同于连接骨干区域和区域2的ABR(因为有一个virtual接口在区域0,因此变成了ABR),所以可以将自己所有的LSA发进区域2。在扩展OSPF虚链路时,是通过连接R2(ABR)与R3(ABR)的Router-ID 来建立的。

场景二:

因为OSPF虚链路(Virtual Link)能将骨干区域扩展到相邻的常规区域,从而将常规区域虚拟为骨干区域,所以在某些情况下,如公司合并,或者为了备份骨干区域,可能出现骨干区域被常规区域所隔离,如下图:

图中骨干区域被区域1分割为两部分,将使得骨干区域自己的路由无法相互传递,在使用OSPF虚链路后,可以将区域1也扩展为骨干区域,如下图:

在经过OSPF虚链路将区域1也扩展为骨干区域后,可见所有的区域都变成了骨干区域,从而使网络中骨干区域能够收到另外一边被分割的骨干区域的路由,并且最后骨干区域自己的路由都为Intra-Area Route。

参考:OSPF虚链路技术原理与注意点-CSDN博客

ospf各类LSA介绍

OSPF LSA 链路状态通告( Link status announcement),作用于向其它邻接OSPF路由器传递拓扑信息路由信息

OSPF路由器通过不同类型的LSA组建成LSDB数据库(链路状态数据库)再通过SPF算法计算出最优的OSPF路由加入到路由表中。

常见的LSA有:

  • 1类 Router-LSA:描述设备的直连拓扑信息、路由信息,该LSA只能在接口所属的区域内泛洪。
  • 2类 Network-LSA:网络LSA,该2类LSA只会在广播类型网络中出现,由DR产生,描述DR所在的MA网络中所有与之形成邻接关系的路由器,以及DR自己。
  • 3类 Summary-Network-LSA:网络汇总LSA,由ABR设备产生,描述区域内的路由信息。因为1类、2类LSA只能在区域内传递。故其它区域需要学习到另一个区域的1类2类就需要有新的LSA来统一描述1类2类的拓扑、路由信息。这个LSA就是3类LSA。
  • 4类 ASBR-summary-LSA:ASBR汇总LSA,由ABR产生,描述到ASBR的路由,服务于5类LSA。通告给除ASBR所在区域的其它区域。
  • 5类 AS-external-LSA:AS外部LSA,由ASBR产生,描述到OSPF域外的路由。OSPF引入的路由,如引入RIP、ISIS、BGP等路由,引入的路由就属于外部路。外部路由用5类LSA进行通告。
  • 7类 NSSA-LSA:用于特殊区域 NSSA 中的LSA。由ASBR产生,用于描述到达OSPF域外的路由。NSSA7类与5类功能一样,但泛洪范围不同。

各类LSA详解请参考:路由 OSPF LSA介绍、1~7类LSA详细介绍_ospf lsa类型详解-CSDN博客

ospf特殊区域

特殊区域类型:

  • Stub Area 末梢区域
  • Totally  Stub Area  完全末梢区域
  • NSSA(Not So Stub  Area)
  • Totally  NSSA 完全NSSA

各区域详情请参考:OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA-CSDN博客

相关文章:

ospf协议(动态路由协议)

ospf基本概念 定义 OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 ( RFC2328 );针对 IPv6 协议使用 OSPF Version 3 ( RFC2740 )。…...

【娱乐项目】竖式算术器

Demo介绍 一个加减法随机数生成器,它能够生成随机的加减法题目,并且支持用户输入答案。系统会根据用户输入的答案判断是否正确,统计正确和错误的次数,并显示历史记录和错题记录。该工具适合用于数学练习,尤其适合练习基…...

Qt中模拟鼠标消息并与系统鼠标消息进行区分

功能使用场景: 开发一个教学系统,包含了教师端、学生端,并且教师端支持示教功能。此时,学生端的鼠标、键盘不响应系统事件,但需要响应教师端发过来的鼠标移动、按下消息。 因为共享页面相同,为了提高局域…...

实时数据开发 | 一文理解Flink窗口机制

窗口操作在流处理和批处理之间起到了桥梁的作用。 Flink引擎本质上是流式引擎,认为批处理是流处理的一个特例。因此,通过窗口将流数据划分为有限大小的集合,使得在这些有界的数据集上可以进行批处理风格的计算。 通过配置窗口的参数&#xf…...

MFC 自定义树控件:树节点的样式与交互

在本教程中,将介绍如何在 MFC 应用程序中使用树控件 (CTreeCtrl) 进行高级定制,包括设置字体、颜色、徽章、图标、节点的高度等。通过这些自定义设置,可以显著提升用户界面的交互性和视觉效果。 1. 树控件基本设置 首先,我们需要…...

YOLOv8-ultralytics-8.2.103部分代码阅读笔记-loss.py

loss.py ultralytics\utils\loss.py 目录 loss.py 1.所需的库和模块 2.class VarifocalLoss(nn.Module): 3.class FocalLoss(nn.Module): 4.class DFLoss(nn.Module): 5.class BboxLoss(nn.Module): 6.class RotatedBboxLoss(BboxLoss): 7.class KeypointLoss(n…...

像素流送api ue多人访问需要什么显卡服务器

关于像素流送UE推流,在之前的文章里其实小芹和大家聊过很多,不过今天偶然搜索发现还是有很多小伙伴,在搜索像素流送相关的问题,搜索引擎给的提示有这些。当然这些都是比较短的词汇,可能每个人真正遇到的问题和想获取的…...

字符型注入‘)闭合

前言 进行sql注入的时候,不要忘记闭合,先闭合再去获取数据 步骤 判断是字符型注入 用order by获取不了显位,select也一样 是因为它是’)闭合,闭合之后,就可以获取数据了 最后就是一样的步骤...

评分规则的建模,用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分

子夜(603***854) 15:11:40 和各位讨论一下设计问题: 有个有业务场景: 有一组产品共4个产品(数目用户可自定义), 需要一套规则,比如如果用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分 又比如另一组产品 产品有个必选属性,如果选了其中所有的必选则5分, 其他项每1…...

Elasticsearch与NLP的深度融合:文本嵌入与向量搜索实战指南

Elasticsearch与NLP的深度融合:文本嵌入与向量搜索实战指南 引言 在当今信息爆炸的时代,如何从海量文本数据中快速准确地检索出相关信息,成为了一个迫切需要解决的问题。自然语言处理(NLP)技术的发展为这一挑战提供了新的解决方案。Elasticsearch,作为一个强大的搜索引…...

4. STM32_定时器

概述 什么是定时器: 定时器核心就是计数器,是使用精准的时基,通过硬件的方式,实现定时功能的器件。 定时器的工作原理: 主频时钟CLK通过PSC进行分频后产生定时器时钟TIM CLK,计数器CNT根据TIM CLK的频率…...

Mysql 深度分页问题及优化方案

Mysql 深度分页问题及优化方案 一、为什么 MySQL 深度分页慢?二、优化方案三、补充 一、为什么 MySQL 深度分页慢? 在数据量大时,深分页查询速度缓慢,主要原因是多次回表查询。 前言:N个条件为索引,id为主…...

前端性能优化技巧

前端性能优化技巧 1. 介绍 前端性能优化是确保网站或应用程序快速、响应迅速和流畅的关键。本文档将详细探讨提升前端性能的各种策略和最佳实践。 2. 资源加载优化 2.1 资源压缩 代码压缩:使用 Webpack、Terser 等工具压缩 JavaScript、CSS 文件文件大小压缩&a…...

taro使用createAsyncThunk报错ReferenceError: AbortController is not defined

解决办法: 1,安装这俩包:yet-another-abortcontroller-polyfill,event-target-polyfill 2,app.js import: import ‘event-target-polyfill’; import ‘yet-another-abortcontroller-polyfill’; 补充 但…...

Linux:systemd进程管理【1】

整体理解 要快速掌握Linux的systemd并覆盖80%的使用场景,以下是最重要的20%知识点: Systemd简介与核心功能: Systemd是一个系统和服务管理器,作为Linux系统的PID 1进程,负责启动和管理其他系统组件。它提供并行启动服…...

【Maven】继承和聚合

5. Maven的继承和聚合 5.1 什么是继承 Maven 的依赖传递机制可以一定程度上简化 POM 的配置,但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本,且这些模块之间不存在依赖关系,这就导致同一个依赖…...

【线上问题记录 | 排查网络连接问题】

问题描述 现在有我们程序是部署在服务器A的,A链接的是B。程序从B的redis进行存储和取数据的。 我们的业务是: 信息展示,也就是如果发现机器有异常了,实时进行监控。突然发现有一天,信息显示延迟了。 然后我们就开始排查究竟什么原…...

springboot车辆管理系统设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足,创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…...

独家|京东调整职级序列体系

原有的M、P、T、S主序列将正式合并为新的专业主序列P。 作者|文昌龙 编辑|杨舟 据「市象」独家获悉,京东已在近日在内部宣布对职级序列体系进行调整,将原有的M、P、T、S主序列正式合并为新的专业主序列P,合并后的职级体系将沿用原有专业序…...

Arrays.copyOfRange(),System.arraycopy() 数组复制,数组扩容

Arrays.copyOfRange() 当需要将数组中的 长度扩容时, 数组复制 使用 需要用到Arrays 类提供的的 参数解析 * param original the array from which a range is to be copied * param from the initial index of the range to be copied, inclusive * param to the final ind…...

Python学习37天

# 魔术方法 # 创建类Monster,默认为object的子类 class Monster: name None age None gender None def __init__(self, name, age, gender): self.name name self.age age self.gender gender # 重写魔术方法__str__输出实例对象信息…...

flask的第一个应用

本文编写一个简单的实例来记录下flask的使用 文章目录 简单实例flask中的路由 简单实例 flask的依赖包都安装好之后,我们就可以写一个最简单的web应用程序了,我们把这个应用程序命名为first.py: from flask import Flaskapp Flask(__name__)app.route(/…...

【论文格式】同步更新中

1横向和纵向坐标的坐标密度不能太大,显示太多看起来不好看,本课题组采用emf,目前使用页面内紧凑,600dpi 2Force(kN):k小写 3涉及到变量的,变量本身斜体...

Java-GUI(登录界面示例)

简述: 步骤: (1)构造界面(将组件对象加入容器对象,注意:应设定对容器对象的布局策略) (2)为界面加入事件响应处理(如单击按钮) 实现: 两种方式实现,只有用户名为"admin"且密码为…...

看华为,引入IPD的正确路径

目录 前言 引发重视 作者简介 前言 华为将 IPD 的引入过程归结为三步: 先僵化、后优化、再固化。 如果只是单纯模仿,在不清楚底层逻辑的情况下, 就开始走先僵化的流程,去搞削足适履式的引入。 开始执行后,你就…...

计算机毕业设计Spark+大模型知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

pcb线宽与电流

三十年一路高歌猛进的中国经济, 中国经历了几个三十年? 第一个三十年:以计划为导向。 第二个三十年:以经济为导向。 现在,第三个三十年呢? 应该是以可持续发展为导向。 传统企业摇摇欲坠, 新兴企…...

w~视觉~合集26

我自己的原文哦~ https://blog.51cto.com/whaosoft/12663170 #InternVL 本文设计了一个大规模的视觉-语言基础模型(InternVL),将视觉基础模型的参数扩展到60亿,并逐步与LLM对齐,利用来自不同来源的网络规模的图像-文…...

Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制

一、前言 之前做的监控系统,已经实现了在windows上硬解码比如dxva2和d3d11va,后续又增加了linux上的硬解vdpau的支持,这几种方式都是跨系统的硬解实现方案,也是就是如果都是windows系统,无论X86还是ARM都通用&#xf…...

【Qt】图片绘制不清晰的问题

背景 实现一个图片浏览器&#xff0c;可以支持放大/缩小查看图片。主要组件如下&#xff1a; // canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget>class CanvasWidget : public QWidget {Q_OBJECT public:explicit CanvasWidget(QImag…...

网赌网站怎么做的/灰色关键词怎么做排名

函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void *calloc(s…...

如何用虚拟主机做网站/百度首页快速排名系统

一、API简介 Thread.sleep()是Thread类的一个静态方法&#xff0c;使当前线程休眠&#xff0c;进入阻塞状态&#xff08;暂停执行&#xff09;&#xff0c;如果线程在睡眠状态被中断&#xff0c;将会抛出IterruptedException中断异常。。主要方法如下&#xff1a; 【a】sleep…...

营销型网站模板展示/百度公司简介介绍

php读取文件内容的三种可行方法示例介绍发布于 2015-01-09 09:57:52 | 121 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特…...

网站连接怎么做/seo排名资源

众所周知&#xff0c; 临时表的特性如下&#xff0c;生命周期跟连接有关。 /* 1、局部临时表&#xff08;#开头&#xff09;只对当前连接有效&#xff0c;当前连接断开时自动删除。 2、全局临时表&#xff08;##开头&#xff09;对其它连接也有效&#xff0c;在当前连接和其…...

太原商城网站建设/国外域名注册平台

1. 禁止MySql以管理员账号权限运行MySql应该使用非管理员账号运行&#xff0c;以普通账户安全运行mysqld加固方法&#xff1a;在my.cnf配置文件中配置usermysql2. 设置root用户口令并修改登录名&#xff0c;且不存在空密码账户修改root用户密码&#xff0c;在MySql控制台中执行…...

服务好的企业做网站/百度网盘搜索

定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式的用途 用电器做例子&#xff0c;笔记本电脑的插头一般都是三相的&#xff0c;即除了阳极、阴极外&#xff0c;还有一个地…...