- 虚拟机复制问题
在复制搭建三台虚拟机的时候,没有让虚拟机关机而是选择挂起,在挂起的时候虚拟机文件是只读状态的,应用层的软件VMware不能修改其中的参数,这样会导致虚拟机的MAC地址出现冲突进而导致无法在ARP层通信,也就不能实现联网。但是软件认为他已经将配置文件写入了,因而在软件层面看是看不到的,必须到虚拟机中排查才能排查到,如图56、57所示,软件层面的MAC不存在问题,必须要到虚拟机中查看MAC才可以发现
软件层面MAC无误
MAC****地址冲突
** **我在排查这个错误的时候并不是一次就完成了对地址的查询,而是在多次摸索中才排查出错误所在,我在这个过程中使用了Wireshark获取了数据包,在抓取了ARP层的数据包后,我们发现了有很多错误的碰撞包,并且所有的碰撞包都在往同一个MAC地址发信息。在这一过程中正好对应了只有第一台设备能进行网络通信,因为网络中只有他一个设备的MAC地址可用。
** **抓包过程示意
** **基于此我们发现了MAC碰撞这个问题并进而解决了这个问题,关闭虚拟机并重新生成MAC地址即可解决这一问题。
下面整理一下我在排查该错误过程下的思路。整个计算机网络的体系结构一共分为七层,我们称之为OSI七层模型。我们可以对着这个模型来排查错误,OSI模型如图所示:
OSI****七层模型
** **一般容易出现错误的层有四个,应用层、网络层、链路层和物理层,应用层错误往往是DNS解析错误,需要正确配置DNS设置才可以访问,在网络配置处我们可以看到DNS配置是114.114.114.114,这里我们是使用了电信自建的DNS,是没有问题的,使用物理机也能ping通,说明不是应用层的问题。
** DNS**配置情况
** **后面排查了网络层,IP层只需要检查IP配置是否正确,网关和子网掩码是否正确即可,在图片中我们可以看到IP的配置是正确的,网关也与虚拟网关一致,可以判断IP层配置没有问题
图66网关设置
由于该项目运行在虚拟机上,因而不需要考虑物理层问题,只要主机的网络没有问题就不需要考虑物理层的问题。
那么就只剩链路层了,于是我抓包查看了链路层的网络情况,发现了大量出现了MAC碰撞的错误数据包,进而可以判断出是出现了MAC地址的碰撞,最终经过研究发现,由于挂起时虚拟机文件是只读状态的,因而软件并不会将MAC地址写入虚拟机文件,但是软件认为其已经写入了,于是同一个IP段内出现了两个相同MAC地址的数据包,产生了碰撞进而导致联网失败。
最终解决的问题是将虚拟机关机并重新生成MAC地址。
2.JRE****缺失问题
在JDK1.8之后的版本就不提供JRE了,JDK 全称为 Java Development Kit,是 java 开发工具包,是程序员使用 java 语言编写 java 程序所需的开发工具包。而JRE 全称为 Java Runtime Environment,是 java 运行时的环境,包含了 java 虚拟机,java 基础类库,是使用 java 语言编写的程序运行所需要的软件环境。不提供JRE之后直接运行的JAVA程序就不好直接运行,需要走JDK编译。但是可以使用其提供的Jlink包来生成JRE,命令是:jlink --module-path jmods --add-modules java.desktop --output jre
** JDK与JRE**的区别
JRE(Java Runtime Enviroment) 是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
JDK(Java Development Kit) 又称 J2SDK(Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java 工具 tools.jar 和 Java 标准类库 (rt.jar)。
JRE 主要包含:java 类库的 class 文件(都在 lib 目录下打包成了 jar)和虚拟机(jvm.dll);
JDK 主要包含:java 类库的 class文件(都在 lib 目录下打包成了 jar)并自带一个 JRE。
JDK与JRE****的区别
问题解决过程:
在终端内输入命令:****jlink --module-path jmods --add-modules java.desktop --output jre
可以看到jre文件以及jre文件夹内的文件。
版权归原作者 樂樂_ 所有, 如有侵权,请联系我们删除。