数据通信网络之OSPFv3基础
文章及资源归档至【AIShareLab】,回复 通信系统与网络 可获取。
文章目录
- 一、目的
- 二、拓扑
- 三、需求
- 四、步骤
一、目的
- 掌握路由器的IPv6 基础配置。
- 掌握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】,回复 通信系统与网络 可获取。 文章目录 一、目的二、拓扑三、需求四、步骤 一、目的 掌握路由器的IPv6 基础配置。掌握OSPFv3(单区域)的基础配置。 二、拓扑 如图1 所示,三台路由器R1、R2 和R…...
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive 串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive,功能实现。 文章目录 FPGA-结合协议时序实现UART收发器(五&…...
我学编程全靠B站了,真香-国外篇(第三期)
你好,我是Martin。 今天来点猛料,给大家推荐点我的压箱收藏-国外知名大学的公开课。 我推荐的不多,本着少就是多的原则,只给大家推荐我看过最好的五门视频,主要是来自两所国外高校:MIT美国麻省理工、CMU卡…...
c++ 变量常量指针练习题
Q1:在win32 x86模式下,int *p; int **pp; double *q; 请说明p、pp、q各占几个字节的内存单元。 p 占 4 个字节 pp 占 4 个字节 q 占 4 个字节 Q2常量1、1.0、“1”的数据类型是什么? 1 是 整形 int 1.0 是 浮点型 double “1” 是 const char * Q3 语句&…...
Linux底层基础知识
一.汇编,C语言,C,JAVA之间的关系 汇编,C语言,C可以通过不同的编译器,编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统,Java虚拟机是由汇编,C,…...
JUC并发编程--------线程安全篇
目录 什么是线程安全性问题? 如何实现线程安全? 1、线程封闭 2、无状态的类 3、让类不可变 4、加锁和CAS 并发环境下的线程安全问题有哪些? 1、死锁 2、活锁 3、线程饥饿 什么是线程安全性问题? 我们可以这么理解&#…...
机器视觉之Basler工业相机使用和配置方法(C++)
basler工业相机做双目视觉用,出现很多问题记录一下: 首先是多看手册:https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例,实际上在使用过程中,大部分都是这些源码,具体项目选择对应的…...
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
作业: 仿照Vector实现MyVector,最主要实现二倍扩容 #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中, 我们通常使用os包来获取环境变量,如: os.Getenv() os.LookupEnv() 等。 但如果我们使用goland编译器,在编译是,这时操作环境变量,会发现os包读取到的环境变量值不变: 新增后&am…...
一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了
一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了。 在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…...
蓝桥杯 题库 简单 每日十题 day3
01 约数个数 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 1200000 有多少个约数(只计算正约数)。 解题思路 枚举,从1开始一直到1200000本身都作为1200000的除数,…...
基于SSM+Vue的高校实验室管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
C语言天花板——指针(初阶)
🌠🌠🌠 大家在刚刚接触C语言的时候就肯定听说过,指针的重要性以及难度等级,以至于经常“谈虎色变”,但是今天我来带大家走进指针的奇妙世界。🎇🎇🎇 一、什么是指针&…...
关于第一届全球电子纸创新应用金奖征集评选及报名指南
重要通知 |关于第一届全球电子纸创新应用金奖征集评选及报名指南https://mp.weixin.qq.com/s/RWsZtmJ20-NZXMG0k0rwPA?wxwork_useridEPIA 从2004年,Sony推出全球首款电纸书阅读器至今20载,这期间,到底诞生了多少种创新产品&#…...
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源 (1)添加Docker 官方GPG密钥 #curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/s…...
小谈设计模式(4)—单一职责原则
小谈设计模式(4)—单一职责原则 专栏介绍专栏地址专栏介绍 单一职责原则核心思想职责的划分单一变化原则高内聚性低耦合性核心总结 举例图书类(Book)用户类(User)图书管理类(Library)…...
ATF(TF-A) EL3 SPMC威胁模型-安全检测与评估
安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方FF-A ID 5.2 端点在直接请求/响应调用中模拟…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
