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

数据通信网络之OSPFv3基础

文章及资源归档至【AIShareLab】,回复 通信系统与网络 可获取。

文章目录

  • 一、目的
  • 二、拓扑
  • 三、需求
  • 四、步骤

一、目的

  1. 掌握路由器的IPv6 基础配置。
  2. 掌握OSPFv3(单区域)的基础配置。

二、拓扑

如图1 所示,三台路由器R1、R2 和R3 分别通过相应物理接口进行连接,其中,R1 及
R3 各自下联一个网段,简单起见,此处只体现了这些网段中的两台计算机PC1 和PC2,PC1
与PC2 分别使用R1 及R3 作为自己的默认网关。其中,路由器R1、R2 和R3 推荐使用
AR2220 及以上设备。

在这里插入图片描述

图1 OSPFv3 基础实验拓扑图

三、需求

在R1、R2 及R3 上完成OSPFv3 配置(三台路由器都属于Area 0),使得PC1 与PC2
所在网段能够相互通信。

四、步骤

(1)完成R1、R2 及R3 的基础配置
①在R1 上完成如下配置:

<Huawei> system-view
[Huawei] sysname R1
[R1] ipv6
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ipv6 enable
[R1-GigabitEthernet0/0/0] ipv6 address fc00:12::1 64
[R1-GigabitEthernet0/0/0] quit
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ipv6 enable
[R1-GigabitEthernet0/0/1] ipv6 address FC00:1::FFFF 64
[R1-GigabitEthernet0/0/1] quit

在这里插入图片描述

图2 R1配置过程

② 在R2 上完成如下配置:

<Huawei> system-view
[Huawei] sysname R2
[R2] ipv6
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ipv6 enable
[R2-GigabitEthernet0/0/0] ipv6 address fc00:12::2 64
[R2-GigabitEthernet0/0/0] quit
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ipv6 enable
[R2-GigabitEthernet0/0/1] ipv6 address fc00:23::2 64
[R2-GigabitEthernet0/0/1] quit

在这里插入图片描述

图3 R2配置过程

③ 在 R3 上完成如下配置:

<Huawei> system-view
[Huawei] sysname R3
[R3] ipv6
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ipv6 enable
[R3-GigabitEthernet0/0/0] ipv6 address fc00:23::3 64
[R3-GigabitEthernet0/0/0] quit
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ipv6 enable
[R3-GigabitEthernet0/0/1] ipv6 address FC00:2::FFFF 64
[R3-GigabitEthernet0/0/1] quit

在这里插入图片描述

图4 R3配置过程

(2)在R1、R2 及R3 上完成OSPFv3 配置
①启动抓包:在R1 的GE0/0/0 接口上单击鼠标右键,按图2 所示开始抓包,以试图捕获R1
的GE0/0/0 接口上的入向与出向数据包。

②在R1 上完成如下配置:
[R1] ospfv3 1 #系统视图下使用的命令,其作用是创建OSPFv3进程,并进入
OSPFv3视图,其中,1是进程标识符,进程标识符仅具有本地意义。
[R1-ospfv3-1] router-id 1.1.1.1 #OSPFv3视图下使用的命令,其作用是为
运行的OSPFv3协议配置一个唯一的、以IPv4地址格式表示的路由器标识符,这里,1.1.1.1
是IPv4地址格式表示的路由器标识符。
[R1-ospfv3-1] quit
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ospfv3 1 area 0 #接口视图下使用的命令,其
作用是在指定接口(这里是接口GigabitEthernet 0/0/0)启动OSPFv3路由协议,并指定接
口所属的区域,这里,1是进程标识符,在创建OSPFv3进程时指定,0是区域标识符,
表示指定接口属于区域0。注意,接口只有在启动IPv6功能后,才能使用该命令。
[R1-GigabitEthernet0/0/0] quit
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ospfv3 1 area 0

在这里插入图片描述

图5 R1配置过程

③在R2 上完成如下配置:

[R2] ospfv3 1
[R2-ospfv3-1] router-id 2.2.2.2
[R2-ospfv3-1] quit
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ospfv3 1 area 0
[R2-GigabitEthernet0/0/0] quit
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ospfv3 1 area 0

在这里插入图片描述

图6 R2配置过程

④ 在R3 上完成如下配置:

[R3] ospfv3 1
[R3-ospfv3-1] router-id 3.3.3.3
[R3-ospfv3-1] quit
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ospfv3 1 area 0
[R3-GigabitEthernet0/0/0] quit
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ospfv3 1 area 0

完成上述配置后,三台路由器即开始启动OSPFv3 协议报文交互,并进行路由计算。

在这里插入图片描述

图6 R3配置过程

阶段性验证:
⑴在R1 上查看OSPFv3 邻居关系,具体命令格式为display ospfv3 peer,验证R1 是否已与
R2 建立邻接关系。
备注:运行结果示例如下:
display ospfv3 peer
OSPFv3 Process (1)
OSPFv3 Area (0.0.0.0)
Neighbor ID Pri State Dead Time Interface Instance ID
2.2.2.2 1 Full/Backup 00:00:38 GE0/0/0 0
以上输出的内容是R1 的OSPFv3 邻居表,从表中可以看出R1 发现了邻居R2,并且当前该
邻居的状态为“Full”,这意味着两者以建立全毗邻的邻接关系。

在这里插入图片描述

图7 R1 OSPFv3 邻居关系
验证可知, R1 已与R2 建立邻接关系。
⑶ 在R2 上查看OSPFv3 邻居关系,具体命令格式为display ospfv3 peer,验证R2 是否已与R1 和R3 建立邻接关系。

在这里插入图片描述

图8 R2 已与R1 和R3 建立邻接关系

⑷ 在R3 上查看OSPFv3 邻居关系,具体命令格式为display ospfv3 peer,验证R3 是否已与R2 建立邻接关系。

在这里插入图片描述

图9 R2 已与R3 建立邻接关系

(4)在R1 上查看路由表,具体命令格式为display ipv6 routing-table,验证R1 是否已通过
OSPFv3 学习到了去往远端网络的路由。
在这里插入图片描述

图10 R1 已通过OSPFv3 学习到了去往远端网络的路由
由上图可知, R1 通过 OSPFv3 学习到了去往 FC00:23::/64 及 FC00:2::/64 的路由, 这两条路由的“Protocol”字段都为“OSPFv3”,这表示路由是通过 OSPFv3 获知。

⑸在 R2 上查看路由表,具体命令格式为 display ipv6 routing-table,验证 R2 是否已通过 OSPFv3 学习到了去往远端网络的路由并标明相应的表项, R2已通过 OSPFv3 学习到了去往远端网络的路由。
在这里插入图片描述

图11 R2路由表
⑹在 R3 上查看路由表,具体命令格式为 display ipv6 routing-table,验证 R3 是否已通过 OSPFv3 学习到了去往远端网络的路由并标明相应的表项,如图12所示,R2已通过 OSPFv3 学习到了去往远端网络的路由。

在这里插入图片描述

图12 R3路由表

(3)观察OSPF 报文交互过程
①捕获数据包,查看协议栈。
在Wireshark 界面中,查看前面开启抓包后所捕获的信息,如图3 所示,R1、R2 和R3
配置完成后网络中产生了多个OSPF 报文交互。

在这里插入图片描述

图13 R1、R2 和R3 接口OSPFv3 配置完成后,R1 GE 0/0/0 所捕获的数据包
以实际捕获数据为准,回答下列问题:
结合捕获信息,说明OSPF 数据包自下而上的协议栈及封装结构。

OSPF(Open Shortest Path First)是一种内部网关协议(IGP),用于在单一自治系统(AS)中的路由器之间交换路由信息。OSPF 数据包在传输过程中会经过自下而上的协议栈,并在每一层添加特定的头部和尾部,以实现数据的封装和解封装。OSPF 数据包自下而上的协议栈及封装结构如下:
数据链路层(Data Link Layer):OSPF 数据包在数据链路层使用的协议通常是以太网(Ethernet)。在这一层,OSPF 数据包会添加以太网帧头和帧尾。以太网帧头包括源地址和目标地址等信息,帧尾包括校验和等信息。
网络层(Network Layer):OSPF 数据包在网络层使用的协议为 IP(Internet Protocol)。在这一层,OSPF 数据包会添加 IP 数据包头和尾。IP 数据包头包括源 IP 地址和目标 IP 地址等信息,IP数据包尾包括校验和等信息。
OSPF 层:OSPF 数据包在 OSPF 层使用 OSPF 协议。在这一层,OSPF 数据包会添加 OSPF 报文头和尾。OSPF 报文头包括版本号、报文类型、区域 ID 等信息,报文尾包括校验和等信息。OSPF 报文类型包括:Hello 报文、数据库描述报文、链路状态请求报文和链路状态更新报文。
应用层(Application Layer):OSPF 数据包在应用层没有特定的协议。但是,OSPF 数据包中包含 OSPF 路由信息,这些信息可以被路由器的路由表使用,以决定最佳的路由路径。

综上所述,OSPF 数据包自下而上的协议栈及封装结构包括以太网帧头和帧尾、IP 数据包头和尾、OSPF 报文头和尾等。在每一层,都会添加相应的协议头和尾,以实现数据的封装和解封装。

备注:OSPF 是IETF 组织开发的一个基于链路状态的内部网关协议。目前,针对IPv4 使用的是OSPF Version 2 (OSPFv2),针对IPv6 协议使用OSPF Version 3 (OSPFv3)。OSPFv3 在OSPFv2 基础上进行了增强,是一个独立的路由协议。OSPFv3 具有如下特点:在区域划分、状态机、泛洪机制、支持的网络类型(Broadcast、NBMA、P2P 和P2MP)、报文类型(Hello报文、DD 报文、LSR 报文、LSU 报文和LSAck 报文)和路由计算等方面的工作原理与OSPFv2 保持一致;把自治系统划分成逻辑意义上的一个或多个区域,通过LSA(Link StateAdvertisement)的形式发布路由;依靠区域内各设备间交互OSPFv3 报文来达到路由信息的统一;OSPFv3 报文封装在IPv6 数据报内,可以采用单播和组播的形式发送;OSPFv3 基于链路运行,设备只要在同一链路,则可以建立邻居关系;链路支持多实例,具体的,一个OSPFv3 物理接口可以与多个实例绑定,并用不同的实例标识(Instance ID 区分),即OSPFv3的单个链路支持运行多个OSPFv3 实例,运行在同一条物理链路上的多个OSPFv3 实例,分别和链路对端设备建立邻居及发送报文,且互不干扰;OSPFv3 报文和LSA 报文中去掉了IP地址的意义,且重构了报文格式和LSA 格式;OSPFv3 通过Router ID 标识网络设备,Router ID 是一个OSPFv3 设备在自治系统中的唯一标识,其长度为32 位,作为本地标识符,与IPv6 地址无关,用点分十进制表示法表示;OSPFv3 使用链路本地地址(FE80::/10)作为发送报文的源地址和路由的下一跳。OSPFv3 主要包含五种报文类型,相应的名称和作用如表1 所示。

在这里插入图片描述

表1 OSPFv3 报文类型

②分析单一数据包格式。
以实际捕获数据为准,回答下列问题:
a.在实际捕获结果中出现的OSPF 报文分别是什么,共有多少类型?与表1 所列的OSPF 报
文类型是否一致?
答: 在实际捕获结果中出现的OSPF 报文分别是Hello报文、DD报文、LSR报文、LSU报文、LSA报文,共有5种类型,与表1所列的 OSPF 报文类型一致.
b.查看各OSPF 报文,包含不同OSPF 报文的IPv6 数据报中,Next Header 取值是多少?不
同报文中该字段是否相同?
答:如图14所示, 包含不同OSPF 报文的IPv6 数据报中,Next Header 取值OSPF IGP (89), 不同报文中该字段相同.

在这里插入图片描述

图14 OSPF 报文

c.选中一个Hello Packet 报文并查看,包含该报文的IPv6 数据报源地址和目的地址分别是
多少?包含该报文的以太网帧源地址和目的地址分别是多少?
答: 如图15所示,选中一个Hello Packet 报文并查看,包含该报文的IPv6 数据报源地址fe80: :2e0:fcff:fec7 :6622 和目的地址ff02: :5, 包含该报文的以太网帧源地址HuaweiTe_ c7:66:22 (00:e0:fc:c7:66:22) 和目的地址IPv6mcast 05 (33:33: 00: 00:00:05).

在这里插入图片描述

图15 Hello Packet 报文

d. 选中一个LS Acknowledge 报文并查看,包含该报文的IPv6 数据报源地址和目的地址分
别是多少?包含该报文的以太网帧源地址和目的地址分别是多少?报文中是否包含发送者
的IPv6 地址?
答: 如图16,选中一个LS Acknowledge 报文并查看,包含该报文的IPv6 数据报源地址fe80: :2e0: fcff:fec7:6622 和目的地址ff02::5, 包含该报文的以太网帧源地址 HuaweiTe_ c7:66:22 (00:e0:fc:c7:66:22) 和目的地址IPv6mcast_ 05 (33: 33:00: 00:00:05), 报文中包含发送者的IPv6 地址.

在这里插入图片描述

图16 LS Acknowledge 报文

(4)在PC1 及PC2 上完成配置
①静态配置PC1 的IPv6 地址、前缀长度和网关信息,具体的参数如图17所示。
在这里插入图片描述

图16 LS Acknowledge 报文

(4)在PC1 及PC2 上完成配置
①静态配置PC1 的IPv6 地址、前缀长度和网关信息,具体的参数如图17 所示。
在这里插入图片描述

图17 PC1 的IPv6 静态地址配置
②静态配置PC2 的IPv6 地址、前缀长度和网关信息,具体的参数如图18所示。

在这里插入图片描述

图18 PC2 的IPv6 静态地址配置

(5)联通性测试
在PC1 上ping PC2,具体命令格式为ping PC2 的IPv6 地址 -6,验证PC1 是否可与
PC2 成功通信。

在这里插入图片描述

图19 PC1 可与 PC2 成功通信

如图19,PC1可与 PC2 成功通信.

相关文章:

数据通信网络之OSPFv3基础

文章及资源归档至【AIShareLab】&#xff0c;回复 通信系统与网络 可获取。 文章目录 一、目的二、拓扑三、需求四、步骤 一、目的 掌握路由器的IPv6 基础配置。掌握OSPFv3&#xff08;单区域&#xff09;的基础配置。 二、拓扑 如图1 所示&#xff0c;三台路由器R1、R2 和R…...

FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive

FPGA-结合协议时序实现UART收发器&#xff08;五&#xff09;&#xff1a;串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive 串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive&#xff0c;功能实现。 文章目录 FPGA-结合协议时序实现UART收发器&#xff08;五&…...

我学编程全靠B站了,真香-国外篇(第三期)

你好&#xff0c;我是Martin。 今天来点猛料&#xff0c;给大家推荐点我的压箱收藏-国外知名大学的公开课。 我推荐的不多&#xff0c;本着少就是多的原则&#xff0c;只给大家推荐我看过最好的五门视频&#xff0c;主要是来自两所国外高校&#xff1a;MIT美国麻省理工、CMU卡…...

c++ 变量常量指针练习题

Q1:在win32 x86模式下&#xff0c;int *p; int **pp; double *q; 请说明p、pp、q各占几个字节的内存单元。 p 占 4 个字节 pp 占 4 个字节 q 占 4 个字节 Q2常量1、1.0、“1”的数据类型是什么&#xff1f; 1 是 整形 int 1.0 是 浮点型 double “1” 是 const char * Q3 语句&…...

Linux底层基础知识

一.汇编&#xff0c;C语言&#xff0c;C&#xff0c;JAVA之间的关系 汇编&#xff0c;C语言&#xff0c;C可以通过不同的编译器&#xff0c;编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统&#xff0c;Java虚拟机是由汇编&#xff0c;C&#xff0c…...

JUC并发编程--------线程安全篇

目录 什么是线程安全性问题&#xff1f; 如何实现线程安全&#xff1f; 1、线程封闭 2、无状态的类 3、让类不可变 4、加锁和CAS 并发环境下的线程安全问题有哪些&#xff1f; 1、死锁 2、活锁 3、线程饥饿 什么是线程安全性问题&#xff1f; 我们可以这么理解&#…...

机器视觉之Basler工业相机使用和配置方法(C++)

basler工业相机做双目视觉用&#xff0c;出现很多问题记录一下&#xff1a; 首先是多看手册&#xff1a;https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例&#xff0c;实际上在使用过程中&#xff0c;大部分都是这些源码&#xff0c;具体项目选择对应的…...

Centos nginx配置文档

1、安装nginx: yum install nginx 2、Nginx常用命令 查看版本:nginx -v 启动:nginx -c /etc/nginx/nginx.conf 重新加载配置:nginx -s reload 停止:nginx -s stop 3、Nginx反向代理配置 nginx配置详解 1、Nginx配置图 详情可以查看:http://nginx.org/ru/docs/example…...

2023/9/14 -- C++/QT

作业&#xff1a; 仿照Vector实现MyVector&#xff0c;最主要实现二倍扩容 #include <iostream>using namespace std;template <typename T> class MyVector { private:T *data;size_t size;size_t V_capacity; public://无参构造MyVector():data(nullptr),size(…...

golang在goland编译时获取环境变量失效

在golang中&#xff0c; 我们通常使用os包来获取环境变量&#xff0c;如&#xff1a; os.Getenv() os.LookupEnv() 等。 但如果我们使用goland编译器&#xff0c;在编译是&#xff0c;这时操作环境变量&#xff0c;会发现os包读取到的环境变量值不变&#xff1a; 新增后&am…...

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了

一款非常容易上手的报表工具&#xff0c;简单操作实现BI炫酷界面数据展示&#xff0c;驱动支持众多不同类型的数据库&#xff0c;可视化神器&#xff0c;免开源了。 在互联网数据大爆炸的这几年&#xff0c;各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…...

蓝桥杯 题库 简单 每日十题 day3

01 约数个数 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 1200000 有多少个约数&#xff08;只计算正约数&#xff09;。 解题思路 枚举&#xff0c;从1开始一直到1200000本身都作为1200000的除数&#xff0c;…...

基于SSM+Vue的高校实验室管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

C语言天花板——指针(初阶)

&#x1f320;&#x1f320;&#x1f320; 大家在刚刚接触C语言的时候就肯定听说过&#xff0c;指针的重要性以及难度等级&#xff0c;以至于经常“谈虎色变”&#xff0c;但是今天我来带大家走进指针的奇妙世界。&#x1f387;&#x1f387;&#x1f387; 一、什么是指针&…...

关于第一届全球电子纸创新应用金奖征集评选及报名指南

重要通知 &#xff5c;关于第一届全球电子纸创新应用金奖征集评选及报名指南https://mp.weixin.qq.com/s/RWsZtmJ20-NZXMG0k0rwPA?wxwork_useridEPIA 从2004年&#xff0c;Sony推出全球首款电纸书阅读器至今20载&#xff0c;这期间&#xff0c;到底诞生了多少种创新产品&#…...

idea搭建项目找不到Tomcat

idea搭建项目找不到Tomcat_idea没有tomcat配置项_ZYRL的博客-CSDN博客...

类和对象三大特性之继承

全文目录 继承的概念定义格式继承关系和访问限定符final 基类和派生类对象赋值转换继承中的作用域派生类的六个默认成员函数构造函数拷贝构造函数operator析构函数 友元和静态成员友元静态成员 各种继承形式菱形继承虚继承菱形虚拟继承对象模型 继承和组合 继承的概念 通过继承…...

Debian 12安装Docker

1.更新系统包 #apt update 2.安装依赖包 #apt install apt-transport-https ca-certificates curl gnupg lsb-release 3.添加Docker源 &#xff08;1&#xff09;添加Docker 官方GPG密钥 #curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/s…...

小谈设计模式(4)—单一职责原则

小谈设计模式&#xff08;4&#xff09;—单一职责原则 专栏介绍专栏地址专栏介绍 单一职责原则核心思想职责的划分单一变化原则高内聚性低耦合性核心总结 举例图书类&#xff08;Book&#xff09;用户类&#xff08;User&#xff09;图书管理类&#xff08;Library&#xff09…...

ATF(TF-A) EL3 SPMC威胁模型-安全检测与评估

安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方FF-A ID 5.2 端点在直接请求/响应调用中模拟…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...