【javaEE】计算机网络原理初始

news2024/11/23 17:11:53

目录

1、网络发展史

1.1、独立模式

1.2、网络互连

1.2.1、局域网(LAN)

1.2.2、广域网(WAN)

1.2.3、广域网和局域网的区别

1.2.4、局域网组建网络的方式 (了解)

2、网络通信基础

2.1、IP地址

2.2、端口号 

2.3、认识协议

2.4、协议分层

2.5、OSI七层网络模型

2.6、TCP/IP五层模型

2.7、封装和分用 (大体了解封装和分用的流程)

🧑发送方(封装)

👧接收方(分用)

2.8、网络设备所在分层

2.9、五元组


1、网络发展史

1.1、独立模式

这个时候的计算机之间是相互独立的,两个设备之间是无法进行交互的。

1.2、网络互连

随着时代的发展,越来越需要计算机之间互相通信,共享然间和数据,即一多个计算机协同工作来完成业务,就有了网络互联。

网络互连将多台计算机链接在一起,完成数据共享。数据共享的本质就是网络数据传输,即计算机之间通过网络来传输数据,也成为网络通信。

根据网络互连的规模不同,可以划分为局域网(LAN)和广域网(WAN)。

1.2.1、局域网(LAN)

局域网,即Local Area Network,简称LAN。Local即标识了局域网是本地,局部组建的一种私有网络。局域网是指在某一区域内有多台计算机互联成的计算机组。一般是方圆几千米内。局域网是封闭型的,可以由一个房间中的两台电脑组成,也可以由如网吧中的上千台计算机组成。局域网内的主机之间能够方便的进行网络通信,又称为内网;多个局域网之间在没有链接的情况下,是无法通信的。

1.2.2、广域网(WAN)

广域网,即Wide AreaNetwork,简称WAN。又称为广域网、外网、公网。广域网是指通过路由器,将多个局域网链接起来,在物理上组成很大范围的网络,就形成了广域网,广域网内部的局域网都属于其子网。

1.2.3、广域网和局域网的区别

局域网(LAN)主要是指小范围内的计算机互联网络,其范围比广域网(WAN)要小很多。

广域网上的每一台电脑都有一个或者多个广域网IP地址,广域网IP地址一般要到ISP处交费之后才能申请到,广域网IP地址不能重复;局域网上的每一台电脑都有一个或者多个局域网IP地址,局域网IP地址是局域网内部分配的,不同局域网的IP地址可以重复,不会相互影响。

1.2.4、局域网组建网络的方式 (了解)

(1)基于网线直连

(2)基于集线器组件

 (3)基于交换机组件

 (4)基于交换机和路由器组建

 集线器集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离。集线器不进行碰撞检测,它的每个接口简单的手法比特,收到1就转发1,收到0就转发0.集线器不具备交换机所具有的MAC地址表,所以它法发送数据时都是没有针对性的,而是采用广播的方式发送。

交换机从定义上来看,交换机是一个网络设备,能链接多台设备到计算机网络中,通过数据包交换的方式,将数据转发到目的地从功能上看,交换机是用与链接多台设备,让其具备网络互通的条件。交换机上有很多端口,这些端口是通过MAC地址,也就是网卡的硬件地址来识别,从而达到数据交换的功能;交换机的工作原理很像理想化的交通,各个岔路口(交换机的端口)的车辆(数据)都有自己的专用车道,每辆车都有自己的目的地(MAC地址),所以主干道的交通不会堵塞(交换机的特点:无阻塞的交换数据)。

路由器路由器是互联网的枢纽,是链接Internet中个局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送数据。

2、网络通信基础

 ❓网络互联的目的是进行网络通信,也就是网络数据传输,跟具体一点,是网络主机中的不同进程间,基于网络传输数据。


❗那么,在组建的网络中,如何判断到底是从那台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

2.1、IP地址

概念IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址,简单说,IP地址用于定位主机的网络地址就像我们发快递一样,需要直到对方的收获地址,快递员才能将包裹送到目的地。

格式:IP地址是一个32为的二进制数,通常被分割为4个"8为二进制数"(也就是4个字节),如:01100100.00000100.00000101.00000110。通常使用"点分十进制"的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)来表示,如:192.168.2.10.

❓IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,有那个进程来接收这个数据呢?


❗这个时候就需要我们来了解一下端口号了。

2.2、端口号 

概念:在网络通信中,IP地址用来表示主机网络地址,端口号可以标识主机中发送数据,接收数据的进程简单来说:端口号用于定位主机中的进程类似发送快递时,不光需要只从收获地址(IP地址),还需要指定收获人(端口号)。

格式:端口号时0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

❗❗❗注意事项:

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

一个进程启动后,系统会随机分配一个端口(启动端口)

程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送,接收数据。

进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定端口号,但是不同的进程不能绑定一个端口号。

2.3、认识协议

❓上述了解了IP地址和端口号,网络通信通过IP确定主机的网络地址,端口号用来确定接收信息的进程(程序)。网络通信是基于二进制的0/1代码进行数据传输的。发送方如何告诉接收方信息是什么?是什么格式呢?对方在得到这些0/1代码之后需要按照什么格式对信息进行解析呢?


❗这个时候就需要使用协议来规定双方的数据格式。这就好比我们同别人进行交流的时候,两个人都使用汉语,那么在交流的过程中,两人可以立即知道对方的意思;但是一个人使用汉语一个人使用英语,这个时候,双发谁都不明白对方的意思,这样就无法进行交流了。

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵守的一组约定、规则。例如怎样建立链接、怎样相互识别等。只有遵守这个约定,计算机之间才能相互通信。

✨网络协议的三要素:

1️⃣语法:及数据于控制信息的结构或格式;

  • 就类似于打电话时,双方使用同样的语言:普通话

2️⃣语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。

  • 语义主要是用来说明通信双发应当怎样做,用于协调于差错处理的控制信息。
  • 类似打电话时,说话内容。

3️⃣时序:即时间实现顺序的详细说明。

  • 时许定义了何时进行通信,先将什么,后讲什么,讲话的速度等,比如是采用同步传输还是异步传输

2.4、协议分层

在网络通信中,需要约定的协议是非常复杂的,因为我们的网络本身就是非常复杂的,网络上边链接的设备非常多,彼此之间的通信路径也就很复杂的,这样网络通信面临的环境也就很复杂,所以面对复杂的环境,就需要复杂的协议,但是协议太复杂也不是很好,这会让我们的学习、维护、使用的成本都很高,面对这样的问题,我们可以将复杂的协议拆分成多个小的简单的协议,这些拆分出来的小的协议,有些协议的作用或者定位是类似的,就可以对这些小协议,进行分类(只是进行了分组),同时针对这些不同的类别,进行分层(约定了层级之间的调用关系,要求上层协议调用下层协议,下层协议给上层协议提供支持,不能跨层调用。)

✨ 协议分层的好处:

  1. 分层之后就可以做到,层次之间,耦合程度比较低,上层协议不必了解下层的细节,下层也不必了解上层的细节。(就如同上述的图片一样,将协议分成了两层,将汉语协议替换成英语协议,不会影响到电话协议,不论使用什么语言,都能进行交流。)
  2. 方便对某一层的协议进行替换。(就如同上述的图片,将电话协议换成无线电协议,汉语协议没有发生变换,照样可以进行通话)

2.5、OSI七层网络模型

OSI七层模型包括了应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

 由于OSI七层模型既复杂又不实用,所以OSI七层模型并没有在实际中被大量使用,实际组建网络的时候,只是以OSI七层模型设计中的部分分层,也就是下面的TCP/IP五层模型来实现的。

2.6、TCP/IP五层模型

我们在很多资料上可能看到四层模型,这种表述是因为更多的关注软件层面的协议,物理层是纯硬件的,和程序员的关系不大。

  • 应用层和应用端的程序紧密相关,关注传输过来的数据到底是如何使用的。是用来进行直接显示,还是参与运算等等。
  • 传输层不考虑中间路径,只关注起点和终点。(这就好比我们在淘宝上买快递的时候,我们和卖家只关注起点和终点)
  • 网络层主要负责两个遥远的节点之间,进行路径的规划。选择出一个合适的路径(就好比你的快递从上海发往西安,上海到西安之间存在很多条路径,可以选择从上海直达西安,也可以选择从上海经过南京到达西安,也可以是从上海到达苏州再到徐州再到西安,中间存在很多条路都可以进行选择)
  • 数据链路层主要关注的是两个相邻结点之间的传输,就比如交换机和路由器之间是通过网线、光纤或者是无线的方式将两个网络设备链接在一起。(就好比快递公司在运输快递的时候,规划出的路径上两个相邻地点之间,到底是通过火车、卡车还是飞机运送这些快递)
  • 物理层网络通信的基础设施,网线、光纤,网络接口等,真实的硬件设备所遵守的硬件协议。

这样分层之后就像上述说的方便了学习和维护,降低了程序员的心智负担,在同一时刻只关注一个子问题。 传输层、网络层、数据链路层、物理层这四层只关注数据的传输,不关注数据是用来干什么的,应用层是关注数据是用来做什么的。而且关注数据传输的四层是操作系统内部已经分装好的,我们没有能力进行修改,我们进行的网络编程主要还是围绕应用层展开的。

我们了解过网络协议中每层的作用,那具体一条数据是怎样在网络中传输呢?

2.7、封装和分用 (大体了解封装和分用的流程)

我们以qq发送一条消息为例,假设用户A给用户B发送了一个"早安",时间为2023-6-1 8:30:00,下面来模拟一下信息的发送过程。

🧑发送方(封装)

 1️⃣应用层将数据封装成数据报:qq应用程序在拿到A用户的数据后进行封装,封装成应用层数据报,这个操作本质上就是字符串拼接(将发送人的qq号,接收者的qq号,发送时间,发送内容放在数据包中进行拼接),当然数据报当中的每种信息为了区分可能会采用分隔符或者长度信息来进行界定。

我们这里只是 对这个qq的应用层数据包进行了假设,真实的qq应用层数据包是怎样组成的,那就只有qq的程序员知道了。

 应用层调用传输层提供的API,将应用层数据报交给传输层。

2️⃣传输层:传输层拿到数据之后会在应用层封装的数据报的基础上再次进行封装,传输层有很多协议,最典型的是TCP和UDP协议,我们这里以UDP协议为例。UDP数据报由数据载荷和UDP数据报头组成。应用层的数据报,作为UDP数据报的数据部分(载荷)。UDP数据报头中存储的就是一些数据信息(例如源端口,目的端口等)。这里添加的UDP报头本质上还是字符串拼接。

 

🌰举个例子来理解一下,当我们在淘宝上买了东西,卖家发货的时候,需要用包装袋,将商品包装起来,交给快递站,快递站在进行快递运输的时候,会在装一个袋子,袋子上贴一张标签,上边写这发货地,和收货地等等信息。这些做完之后,将这样的一个包裹作为一个整体就可以进行运输了。这个标签就相当于UDP报头。

UDP数据包封装好之后,传输层调用网络层的API,将传输层的数据包交给网络层。

3️⃣网络层:网络层拿到数据报之后,在传输层封装的数据报基础上再次进行封装,网络层最常见的协议,就是IP协议。网络层对得到的数据报添加上IP协议报头,IP数据报就由IP协议报头和数据载荷组成,UDP数据报就做IP数据报的数据部分(载荷)。

IP数据报封装好之后,数据链路层调用网络层API,将网络层的数据报交给数据链路层。 

 4️⃣数据链路层:数据链路层最典型的协议就是以太网协议,我们平时使用网络上网就遵守以太网协议,我们将其称为以太网,包括我们的网线也遵守以太网协议,所以也叫做以太网线,以太网协议在数据链路层和物理层都进行了一些规定。

 

数据链路层拿到UDP数据报之后,对该数据报再次进行封装,添加以太网帧头和帧尾。这里也是字符串的拼接。以太网帧头中包含了一些具体的属性,比较关键的属性是MAC地址,也叫做物理地址,也是描述一个主机,在网络上的位置。

❓这个时候很多老铁就有疑问了,MAC和IP不是重复了吗?


MAC的功能和IP很相似,但是当下将这两个地址分别作用于不同的用途。IP用来进行网络层的路径规划,MAC用来描述数据链路层,两个即将传输的相邻结点。就好比快递(数据)在运输(传输)的时候网络层对其进行了路径规划,比如从上海到西安,路径为上海->苏州->徐州->西安,这个时候数据传输的时候,数据从上海到苏州,那么源MAC就是上海,目的MAC就是苏州。到达苏州之后,源MAC就是苏州,目的MAC就是徐州。MAC地址随着数据在路径中的传输,会随时发生变化。

✨提示:理论上MAC地址是和网卡绑定的,全世界的每个网卡都会有一个自己的唯一的MAC地址。

最后数据链路层将数据向下传输给物理层。

5️⃣物理层:物理层拿到这些二进制代码之后,转换成光信号或者电信号或者电磁波信号,进行传输。


👧接收方(分用)

 接收过程和发送过程刚好相反。

  • 发送,从上到下,一次封装,新增报头;
  • 接收,从下到上,一次分用,去掉报头。

忽略中间的转发过程,只考虑B用户的电脑收到这个消息的情况。

1️⃣物理层:网卡收到的是电信号/光信号/电磁波信号这样的信息,物理层会对这些信号进行解析,还原成0101这样的二进制序列。

如果电脑在接收数据的时候,使用的介质是以太网线,这个时候根据以太网协议,将这些数据转换成以太网数据帧。

 这个时候物理层将这个数据帧交给数据链路层。

2️⃣数据链路层:当数据链路层拿到这个以太网数据帧数据之后,会根据以太网协议的格式将这个数据进行解析,把以太网帧头和帧尾去掉。取出中间的载荷,这个载荷就是IP数据报。

 将解析完成的IP数据报传输给网络层。

3️⃣网络层:网络层拿到这个数据之后,根据IP协议对该数据报进行数据解析,也就是去掉IP报头,取出数据载荷,此时这个数据载荷就是UDP数据报,将UDP数据报传输给上层的传输层。

4️⃣传输层: 传输层拿到这个数据之后,根据UDP协议格式来进行数据解析,还是去掉报头,取出载荷,把数据交给应用层。

 5️⃣应用层:由于每个要接收网络数据的程序都需要关联上一个端口号,所以可以借助端口号来区分具体的应用程序。

这个时候应用层拿到数据之后根据端口号,将这个数据交给QQ程序进行解析应用层数据报,取出下列字段,放到程序的界面中。

❓上述的下面的每一层怎样知道,将解析好的数据交给那一层呢?


  1. 数据链路层将数据传输给网络层的时候,以太网数据帧帧头中有一个消息类型,根据这个类型就知道了网络层是IP协议了。
  2. 将网络层数据交给传输层的时候IP数据报,报头中也有一个字段,标识当前传输层使用的UDP还是TCP协议。

 


2.8、网络设备所在分层

上述只是简单描述了数据的封装和分用,在真实的网络环境中,数据的传输中间可能要经历很多结点,对数据进行多次的封装和分用。

  • 对于一台主机,从应用层封装到物理层,具有五层转发能力
  • 对于一台交换机具有两层数据转发能力,从物理层到数据链路层。交换机在网络中进行数据传输的时候,先将得到的数据进行分用,分用到数据链路层,查看当前这个数据报的目的MAC是否正确,然后交换机对这个数据进行重新封装,封装完成之后,此时源MAC地址和目的MAC地址就发生了变化。
  • 对于一台路由器,它实现了从网络层到物理层,具有三层转发能。路由器得到数据之后,会将数据从物理层分用到网络层,根据当前得到的目的IP进行下一阶段的寻路操作,当上一个IP规划的路径出现问题(网络环境发生改变,某个设备宕机),这个时候网络层IP会重新规划路线,再进行数据疯转。此时经过数据链路层的时候,也会调整MAC地址。IP规划传输路径的时候,并不是一次就规划好了,它是走一步看一步,根据当前的网络环境随时规划路线。
  • 对于一台集线器,他只实现了物理层。

 上述所说的交换机和路由器只是传统的(经典的)交换机和路由器,也就是说是出现在教科书和考试卷子上的交换机和路由器。真实世界的路由器和交换机,之间的界限越来越小了,路由器可以通过设定特殊模式,只进行二层转发,交换机也由高端的交换机,支持三层转发。甚至交换机和路由器还可以封装分用到传输层甚至应用层。

2.9、五元组

在TCP/IP协议中,用五元组标识一个网络通信:

  1. 源IP:标识源主机
  2. 目的IP:标识目的主机
  3. 源端口号:标识源主机中该次通信发送数据的进程。
  4. 目的端口号:标识目的主机中该次通信接收数据的进程
  5. 协议号:标识发送数据的进程和接收数据的进程双方约定的数据格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端开发技术栈(工具篇):2023最新版nvm的Win/Linux安装和使用(详细) 27.8k stars

目录 nvm是什么 nvm下载 nvm安装 Windows nvm的使用 安装Node.js 切换Node.js版本 卸载Node.js 其他使用方法 Linux nvm的使用 安装NVM 使用NVM 总结 Node.js是一个非常流行的JavaScript运行时环境,可以帮助开发人员构建高性能的网络应用程序, 它被用于…

SpringCloud:分布式锁和线程安全

这篇文章是一个初步了解分布式应用的线程安全和锁的文章,所有截图及代码全部来自亲身实践 1.对于单机应用我们可以把锁加在方法维度(有用,不推荐) 像这样 但是我们应该缩小锁的范围,我们这里是在派单,避免…

手撕希尔排序

什么是希尔排序?他的效率怎摸样,如何去实现希尔排序呢?在这之前可能我们已经了解了希尔排序,作为排序中的老大哥一员,希尔排序的效率也是屈指可数的。 想要知道希尔排序如何实现我们就的先了解插入排序。 目录 1.何…

Flutter 笔记 | Flutter 核心原理(六)Embedder 启动流程(Android)

Embedder是Flutter接入原生平台的关键,其位于整个Flutter架构的底层,负责Engine的创建、管理与销毁,同时也为Engine提供绘制UI的接口,那么底层的实现细节如何?本文将详细分析。 Embedder关键类分析 在正式分析Embedd…

chatgpt赋能python:Python知识|关联两个列表

Python 知识 | 关联两个列表 Python 是一种高效的编程语言,它能够很好地进行数据处理,因此在 SEO 领域得到广泛的应用。关联两个列表是一种基础的数据处理方法,本文将为读者详细介绍如何使用 Python 关联两个列表,并给出一些实例…

Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵

目录 52. N皇后 II N Queens II 🌟🌟🌟 53. 最大子数组和 Maximum Subarray 🌟🌟 54. 螺旋矩阵 Spiral Matrix 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏…

chatgpt赋能python:Python关键词匹配:优化你的SEO策略

Python关键词匹配:优化你的SEO策略 在当今数字时代,搜索引擎是许多人获取信息和发现新客户的主要渠道。对于企业或个人网站来说,优化SEO(搜索引擎优化)策略变得至关重要。在SEO的世界里,关键词匹配是一个重…

springboot+vue编程训练考试测试系统设计与实现

本编程训练系统管理员功能有管理员和用户。管理员功能有个人中心,用户管理,题库资源管理,用户交流,试卷管理,留言板管理,试题管理,系统管理,考试管理。用户可以查看题库资源&#xf…

chatgpt赋能python:使用Python进行人民币兑换-带着您深入了解

使用Python进行人民币兑换 - 带着您深入了解 在当今日益全球化的世界里,进行货币兑换已成为很正常的事情。人民币是世界上最常用的货币之一,而Python作为一种强大的编程语言,可以帮助我们进行人民币兑换计算。本文将介绍如何使用Python进行人…

使用CCProxy搭建windows系统阿里云socket代理服务器 教程

目录 1. 通过windows远程连接阿里云服务器2. 云服务器上安装CCProxy2.1 CCProxy下载安装2.2 设置协议、代理服务、端口号和ip2.3 新建代理用户2.4 确保你的CCProxy启动了服务 3. 在阿里云实例安全组中开放代理端口3.1 前往安全组页面3.2 添加你对应服务的开放端口 总结 欢迎关注…

Java键盘事件处理及监听机制解析

文章目录 概念KeyEventKeyListener代码演示总结 概念 Java事件处理采用了委派事件模型。在这个模型中,当事件发生时,产生事件的对象将事件信息传递给事件的监听者进行处理。在Java中,事件源是产生事件的对象,比如窗口、按钮等&am…

java企业级信息系统开发学习笔记11 利用MyBatis实现条件查询

文章目录 一、学习目标1.对学生表进行条件查询,涉及姓名、性别和年龄三个字段。2.比如查询姓“吴”,性别为“女”,同时年龄为19的学生记录 二、打开上一笔记mybatis项目三、对学生表实现条件查询(一)创建学生映射器配置…

如何使用wget下载(录制)流媒体或直播推流文件,以及下载出现“正在把输出重定向至 “wget-log.1””错误该怎么办

下载推流文件其实非常简单,就是通常使用的最简单的命令: wget URL -O 输出文件名这里最好设置一下输出文件名,不然很可能下载的文件名称会很奇怪,导致格式识别错误或者其他问题。 不过,如果你直接使用这个命令很可能…

微信小程序nodejs+vue图书馆自习室座位管理系统vax51

系统设计需要从用户和管理员的实际需求开始,以了解他们需要实施哪些功能以及他们可以包括哪些管理工作。 考虑到图书馆座位预约系统小程序系统设计的特点,应满足几个要求:开发语言 node.js 框架:Express 前端:Vue.js 数据库&#…

[MySQL从入门到精通]MySQL概述及安装

前言 你是否想过我们在登录各种各样的网站时候,所需要输入的账号密码,它们存储在哪里?你猜对了,就是今天我们所要说的数据库 目录 前言 1.数据库的概述 1.1 数据 1.2 数据库 1.3数据库的种类 1.4数据库管理系统 2.MySQL的…

CSS 水平垂直居中的方式

目录 在不知道子元素宽高的情况下,水平垂直居中的六种方式: 1、弹性盒子布局方式来实现(flex)。 2、绝对定位 transform 3、table标签 4、display:table-cell 5、display: grid 6、writing-mode 属性 在不知道子…

chatgpt赋能python:10年Python编程经验的工程师推荐:免费的PythonIDE

10年Python编程经验的工程师推荐:免费的Python IDE 作为一名有着10年Python编程经验的工程师,我一直在寻找可以帮助我提高效率的Python IDE。在这个过程中,我试用了许多付费和免费的IDE,最终发现了一些免费的Python IDE&#xff…

chatgpt赋能python:Python关闭程序语句:顺畅退出程序的方式

Python关闭程序语句:顺畅退出程序的方式 当我们创建一个Python程序时,我们需要确保该程序以正确的方式结束,而不是通过强制终止或强制关闭窗口这样的极端行为。 这种情况可能会导致数据丢失和资源泄漏,从而影响程序的稳定性和可靠…

chatgpt赋能python:Python在计量中的应用

Python在计量中的应用 Python是一种高级编程语言,已经成为了计量学中不可缺少的工具。 Python有一个强大的生态系统,包括庞大的第三方库,这些库提供了丰富的机器学习、数据可视化和分析工具,这些工具在计量学中发挥了极为重要的作…

【vue2+docx-preview】实现docx文档预览(自定义修改样式)

前言 使用vue预览docx的解决方案,过去还有一种Mammoth 。 它旨在转换 .docx 文档(例如由 Microsoft Word 创建的文档),并将其转换为 HTML。 不支持样式。实现方式可以参考:Vue Word预览之mammoth.js 因此选择换成支持…