一小时通关计算机网络( 冲冲冲!!!)

今天的网络发展无疑是人类历史上非常成功的设计系统,有数以亿级相连的计算机与移动设备,大家请跟随作者来快速闯关并见识那些处于网络的文明之光与领域知识。

第一关:因特网

因特网作为讨论计算机网络与其 协议的载体,我们通过它能够更好的见识网络的体系。

1.1 什么是因特网

  1. 我们可以通过描述因特网的具体构成(构成因特网的硬件与软件组件)
  2. 根据分布式应用提供服务的联网基础设施来描述因特网。

接下来我们就通过上面两点来走进 因特网的世界。

从具体构成描述因特网

部件介绍:

  • 可以连接因特网的传统设备称为 主机端系统 , 它们容纳应用程序。
  • 物理媒体(电缆吗,铜线,光纤)组成了 通信链路
  • 当端系统向另一台端系统发送信息时,发送端系统将数据分段,并在端中加上首部字节,这样形成的信息叫 分组
  • 能从入的通信链路接受到达的分组,且从出通信链路转发该分组 的设备叫 分组交换机(常见的是路由器与 链路层交换机)
  • 端系统通过 通信链路 和 分组交换机 连接在一起

图:

可以说信息就是通过 从端系统(电脑)出,到通信链路(网线或光纤)进行运输,到分组交换机(转换口,也可以说是运输时需要进行信息转换与确认从 何出口出)。

部件如何接入因特网 与 协议的产生

  • 端系统需要通过 因特网服务提供商(Internet Service Privider ,ISP)接入网络,其ISP自身就是由多个交换机于多端 通信链路组成的网络。
  • 端系统,分组交换机和其他部件需要运行 一系列协议,这些协议控制着因特网信息的接受与发送(TCP,Transmission Control Protocal 传输层协议) 和 IP (Internet Protocal,网络协议) ,其中 IP 协议定义了在路由器和端系统之间发送和接受的分组格式。

图:

我们在实际的使用因特网,需要联系我们的本地因特网服务商(ISP) 购买并接入网络,之后我们通信使用一定的协议(遵守一定的约定)来控制我们的信息的收发。

从为应用程序提供服务的基础设施描述因特网

首先我们需要讲一个额外的术语:

  • 我们使用的很多应用程序设计多个交换数据的端系统(比如:多台不同的服务器,或多台端系统为我们提供了数据的交换)我们称其 分布式应用程序

图:

之后我们需要想一想:

运行在一个端系统的程序是如何能令因特网向运行在另一台端系统的应用程序的软件发送消息的呢?

哈哈,其实这个我相信大家都听说过,其实是与因特网相连接的端系统呢提供了一个套接字接口(socket interface) 该接口规定了运行在一个端系统上的程序请求因特网基础设施向另一台端系统上的目的程序交付数据的方式。通过这种方式,我们就能进行通信。

图:

上节课我们提出协议,那么什么是真正的网络协议?

其实呢,协议(protocal)定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和/或接收一条报文或其他事件所采取的动作。

暗示: 掌握计算机网络领域知识的过程就是理解网络协议的构成, 原理和工作方式的过程。

1.2 网络的接入 (可跳过)

我们来理解一下接入网

  • 接入网是指将端系统物理连接到其边缘路由器的网络。
  • 边缘路由器是端系统到任何其他远程端系统的第一台路由器

你可以看看身边的第一台路由器,那就是你的边缘路由器,嘿嘿

家庭接入 (DSL,电缆)

这里我们主要讲一下这两种主要流行的类型: 数字用户线(DSP)和 电缆。

数字用户线(DSP)

  • 通常我们从本地电话接入的电话公司(例如电信公司)来获得 DSL 因特网接入,这时我们的 ISP 网络提供商就是电信公司,DSL (双绞铜线)可以与本地的电话公司中心局的数字用户线接入复用器(DSLAM)交换数据,最后由本地中心局将数据推至因特网

这里我们讲一下DSL速率收费的问题,哈哈!!

DSL 定义了多个传输速率,而提供商呢提供分等级的服务,它们有意地限制了我们的 住宅速率,其中的 家庭与中心局的距离也影响了其 DSL 的传输速率。

电缆因特网接入利用了有线电视的基础设施,这里我们不讲其,我们讲一下光纤到户

1.3 网络核心(重要)

我们在接入网络后,就应该更向深入研究其 互联网端系统的分组交换机(路由器或链路层交换机)和链路所构成的网状网络。

通过网络链路和交换机移动数据有两种基本方法: 电路交换分组交换

分组交换

当端系统向另一台端系统发送信息时,发送端系统将数据分段,并在端中加上首部字节,这样形成的信息叫 分组, 将分组通过通信链路和 分组交换机传送的过程叫 分组交换

接下来我们介绍一下分组传输中的一些机制与问题

存储转发传输

在多数分组交换机(假定路由器)在链路的输入端使用 存储转发传输 机制。

它指的是 交换机能够开始向输出链路传输该分组的第一个比特之前,必须接受到整个分组,仅当接收完该分组的所有比特,才嗯那个向链路输出。

排队时延与分组丢失

每台分组交换机有多条链路相连, 对于每条相连接的链路, 分组交换机均有一个输出缓存,也叫输出队列
它,用于存储路由器准备发往那条链路的分组。

  • 到达该输出队列的分组所在的链路如果正忙于传输其他分组,该分组必须在输出队列等待,因此,存在了 排队时延。
  • 由于缓存(输出队列)是有限的,一个到达的分组可能发现该 输出队列 已经被排队等待传输的分组充满了,在此情况下,到达的分组或已经在排队的分组之一被丢弃,称之为 丢包

那么,被传输的分组是如何准确地到达目的地的呢?接下来我们来讲解一下其原理。

转发表与路由选择协议

在因特网中,每个端系统都具有一个称为 ip 的地址。

当源主机向目的端系统发送一个分组时,源在该分组的首部填入了其目的地的 Ip 地址,就像邮政地址一样,该地址是一种等级结构。

  • 当一个分组道道网络路由器时,路由器会检查该分组的目的地址的一部分,通过这一部分并向一台相邻路由器转发该分组,其原理是 转发表 用于将目的地址映射成为 输出链路,供路由选择并将该分组导向该输出链路。

这些转发表是我们手工设置的吗?

其实并不是,因特网具有一个特殊的路由选择协议,用于自动设置这些转发表,原理是路由选择协议决定从每台路由器到每个目的地的最短路径,使用这些最短路径结果来配置路由器中的转发表。

电路交换

在电路交换网络中,端系统通信会话期间,预留了端系统间沿路径通信所需要的资源(缓存,与链路传输速率)。

预留,代表了预定,就像去餐厅吃饭预定一样,无须等待,来了就就餐。可以说通信期间,可以保证实时安全,但避免不了资源的占领与等待(预定好了饭,但是很长时间都不来就餐)

这里我们来对比一下 分组交换与电路交换 (连科学家们都在争辩,哈哈)

首先分组交换的性能优于电路交换的性能,在多个数据流之间共享链路传输速率的两种形式的关键差异在于:

  • 电路交换不考虑需求,而预先分配了传输链路的使用,这使得已经分配而并不需要的链路时间上得不到利用,
  • 分组交换按需求分配链路使用, 链路传输能力将在所有需要在链路上传输分组的用户之间逐渐分组地被共享。

目前我们的社会都在朝向分组交换方向发展。

网络中的网络

其实呢,在我们今天,因特网是一个网络的网络,其结构复杂,由高层 ISP(网络提供商) 与 底层 ISP 组成,其跨越大洋和大洲, 我们用到的内容都是由 底层ISP 提供,而 底层 ISP 的内容是 较高层 ISP 提供,高层与高层,低层与低层,高层与低层彼此之间相互联,(互联网也是顾名思义吧)

1.4 分组交换网中的 时延,丢包与 吞吐量

前面我们讲到未来分组交换网是趋势,可通过分组交换方式的因特网能够达到任意两个端之间信息能随心所欲地瞬时移动数据而没有数据丢失,是极高的目标。

计算机网络与现实物理定律碰撞,其必定会产生 时延,丢包,限制吞吐量的问题(就像运输货物时出现的问题,收费站等待,货物散落,运输速度限制),处理这些问题就显得极为重要与令人痴迷。

接下来我们来理解一下时延

分组在从一个节点(分组交换机)沿着这条路到后序的节点(分组交换机),会经历不同类型的时延,包含
节点处理时延(nodal processing delay), 排队时延(queuing delay),传输时延(transmission delay)和传播时延 (propagation delay),累加起来就是总时延。

图示:

  • 处理时延:
  1. 检查分组首部和决定该分组导向何处所需的时间
  2. 检查比特级别的差错所需时间
  • 排队时延

一个特定分组的排队时延长度决定于先期到达的正在排队等待向链路传输的分组数量,如果队列是空的,且没有其他分组正在传输,则排队时延为 0

  • 传输时延

传输时延是路由器推出分组所需要的时间, 与分组长度和链路传输速率的正比有关,与路由器(分组交换机)举例无关

  • 传播时延

从链路起点到下一个路由器(节点或分组交换机)所需的时间是传播时延,与两台路由器之间的距离有关。

可以说,我们从当前电脑到 另一台目的电脑所需的时延是(忽略拥塞问题,即排队时延) N(N个分组交换机)(处理时延+ 传输时延+传播时延)

接下来我们来讲一下除了时延之外最重要的性能测度(端到端吞吐量)

吞吐量

假定主机A 到B传输一个大文件。

  • 在任何时间瞬时的瞬时吞吐量就是 B 接收到文件的速率
  • 传输文件的大小除以时间是 平均吞吐量
  • 对于多链路网络,其吞吐量是 链路速率的最小值,假定 路由器前后两条链路,链路速率分别是 Rc 与 R d,则吞吐量是 min(Rc, Rd)

从上面看出,吞吐量取决于数据流过的链路的传输速率,其吞吐量近似看成沿着源和目的地之间路径的最小传输速率

1.5 协议层次与其服务模型

由于计算机网络体系是十分复杂的,但请不要怀疑能不能构建其结构,因为接下来我们将进入其 前辈们总结的协议层次与服务模型。

协议分层

为了给网络协议的设计提供一个结构, 网络设计者以 分层的方式组织协议以及实现这些协议的网络硬件与软件。

各层的所有协议称为 协议栈。因特网的协议栈由 5个 方面进行组成,我们会在一下一一简要概述,后面我们会继续详细通过这些知识。

  • 应用层: 是网络应用程序与应用层协议存在的地方, 协议有(HTTP),(SMTP),FTP ,将地址转换为域名这样的操作是借助于 特定的 应用层协议域名系统DNS完成的。

应用层协议分布在多个端系统商,而一个端系统使用协议与另一个系统之间应用程序交换信息分组,我们将这种位于其应用层商的信息分组称为 报文

  • 运输层: 运输层在应用程序端点之间传送应用层报文,常见的运输协议是 TCP/IP,这些协议会将报文分割为 短报文(报文段)进行传输。

  • 网络层: 负责将称为 数据报 的网络层分组从一台主机移动到另一个主机,其运输层协议会向网络层递交运输层报文段与目的地址。
    其包含了 网际协议 IP,定义了在数据报中各个字段以及端系统和路由器如何作用于这些字段。
    也定义了路由选择协议,它根据路由将数据报从源传输到目的地。

  • 链路层: 网络层将数据包下传给链路层,链路层沿着路将数据包传递给下一个节点(交换机),在下一个节点,链路层也会将数据报上传给网络层。

  • 物理层: 物理层的任务是从该帧中的一个一个比特从一个节点移动到下一个节点。

OSI模型

国际标准化组织 (ISO) 提出计算机网络围绕7层组织,称其开放系统互连模型

七层模型是: 应用层,表示层,会话层,运输层,网络层,数据链路层于物理层。

比因特网新添加了表示层与会话层。

表示层:作用是使得通信的应用程序能够解释交换数据的含义,包括数据压缩和加密与解释。
会话层: 提供了数据交换的定界和同步功能,包括了简历检查点与恢复方案的方法。

封装的概念,嘿嘿

  • 应用层报文和运输层首部信息构成了 运输层报文段 (M -> (Ht, M)).因此运输层报文段封装了应用层报文,大概封装信息: 允许接收端运输层向上向适当的应用程序交付报文的信息;差错检测位信息。该信息让接收方判断报文中的比特在途中是否被改变。
  • 运输层向网络层传递该报文段,网络层增加了如源和目的端系统地址等网络层首部信息,生产了网络层数据报。
  • 将该数据报传递给链路层,链路层也增加了其链路首信息生成 链路层帧。

一个分组具有两种类型的字段: 首部字段与 有效载荷字段(来自上一个层)

封装的过程能够比前面描述的更加复杂,一个大报文可能被划分多个运输层报文段,在接收端,必须从其连续的数据报中重构这样一个报文段。

第二关:应用层

网络应用是计算机网络存在的证明, 从现在开始我们来学习 因特网的最顶层,也是与我们接触最多的一层,
大致我们需要学习的部分是 定义关键的应用层概念,包括 应用程序所需要的 网络服务,客户和服务器,进程和运输层接口。

2.1 应用层协议原理

网络应用程序体系结构

目前的主流体系结构:(c/s)客户端 -服务器结构与对等(p2p)体系结构

cs : 一个总是运行的主机服务器,服务于其他来自客户的主机请求
p2p:主机对之间直接通信,主机对被称为对等方。

进程通信

构建网络应用程序前,我们需要对运行在多个端系统商的程序是如何互相通信情况有一个基本了解。

  • 进行通信的其实是进程而非程序,一个进程可以被认为是运行在端系统中的一个程序,两个不同端系统商的进程通过跨越计算机网络交换报文而互相通信。

进程寻址

一般情况下,一台主机上 的进程为了向另一台主机上运行的进程发送分组,要定义两种信息:

  1. 主机的地址 (IP地址实现, 是一个32比特的量且能够唯一地标识该主机)
  2. 在目的主机中指定接受进程的标识符 (端口号标识主机的指定进程)

图:

可供应用程序使用的运输服务

我们知道套接字是应用程序和运输层协议之间的接口,在发送端的应用程序将报文推向套接字,在套接字的另一端,运输层协议负责从接受进程的套接字得到该报文。

这里我们思考一下,运输层协议能够为调用它的应用程序提供上面服务呢?

其实有四种:

  1. 可靠的数据传输

运输层协议能够潜在地向应用程序提供一个重要服务是进程到进程的可靠数据传输,发送进程只需要将数据传递给套接字,就可以完全相信其数据能够无差别地到达接收进程。

  1. 吞吐量

运输层协议能够以某种特定的速率提供确保的可用吞吐量,具有吞吐量要求的应用程序被称为 带宽敏感的应用,我称其为 “抢占网速的大型软件”。

  1. 定时

运输层协议也能提供定时保证。

  1. 安全性
    运输层协议能够为应用程序提供一种或多种安全性服务,加密解密过程,数据完整性与端点鉴别手段。

因特网提供的实际运输服务

因特网考虑到计算机网络运输服务的需求,提供了两种运输层协议 ,UDPTCP

由于协议为调用它们的应用程序提供了不同的服务集合,我们需要在选择时进行良好冷静的判断

  1. TCP 服务

TCP 服务模型包括面向连接的服务,与 可靠数据传输服务。

  • 面向连接的服务:

准备: 客户端服务器进行互相交换运输层控制信息,为大量分组的到来做准备
全双工: 连接双方的进程可用在此连接上同时进行报文手法,当应用程序结束报文发送,必须拆除该连接。

  • 可靠的数据传送服务:通信的进程能够依靠 TCP,无差别,按适当顺序交付所有发送的数据。

应用程序的一端将字节流传入套接字中时,能够依靠 TCP 将相同的字节流交付给接收方的套接字,没有字节的丢失与 余。

Tcp协议也提供了拥塞控制机制,当发送与接受方网络出现拥塞时,TCP的拥塞机制会抑制发送进程。

TCP 的安全性: tcp的加强版(SSL,安全套接字层),能够做到 TCP 做到的一切,还提供了加密,数据完整性与端点鉴别。

  1. UDP 服务

UDP 是一种不提供不必要服务的轻量级运输协议。

  • 无连接,无握手过程。
  • 不可靠的数据传输服务,UDP 并不保证该报文将到达接收方进程,到达的报文也不能被保证是 顺序或完整。
  • 没有拥塞控制机制,UDP 发送端以它选定的任何速率向其下层注入数据。

应用层协议

我们从以上大致了解了如何实现网络进程间相互通信,但如何构造这些报文,报文中的字段含义是什么,进程什么时候发哦是那个这些报文?

这些问题苦恼着我们,其实呢,这些问题都能够在应用层协议中看到。

应用层协议定义了运行在不同端系统上的应用程序如何相互传递报文,其定义了:

  • 交换的报文类型, 例如请求报文与响应报文
  • 各种报文类型的语法,报文中的各个字段与其如何描述
  • 字段的语义,字段中的信息含义
  • 确定进程何时如何发送报文,对报文进行响应的规则。

也可以说应用层协议定义了应用程序间的消息逻辑规则,其应用层协议大多都是 由 RFC 文档定义。

接下来我们讲解一些比较出名的 应用层协议,如 http 等等

2.2 Web 与 HTTP

Web 是一个引起世界公众关注的因特网应用,Web使得信息能够满足人们按需操作,是十分方便的知识海洋阅览器。

HTTP 概况

Web 应用 使用的应用层协议是 HTTP (HyperText Transfer Protocal ),是 WEB 的核心。

接下来我们来了解一下 HTTP 在WEB 的实际作用:

  • HTTP 定义了 WEB 客户向 WEB 服务器请求 WEB 页面的方式,以及服务器向客户传送 WEB 页面的方式。

图:

HTTP 的工作原理:

HTTP 使用 TCP 作为它的支撑传输协议(而非 UDP)

  • HTTP 客户先发送一个与服务器的 TCP 连接,一旦建立起连接,浏览器与服务器进程就能通过套接字接口访问TCP。 这就好比 客户端套接字接口是 客户端进程与 TCP 连接之间的门,在服务器端的套接字接口则是服务器进程与TCP连接之间的门

  • 一旦客户或服务器向其套接字接口发送了报文,这就表明 报文将脱离其程序控制进入到 TCP 的控制

  • TCP 为 HTTP 提供了可靠数据传输服务,HTTP无须担心数据丢失或 TCP 从网络的数据丢失和乱序故障恢复的这些事情,这样的分层管理优点也是很大的。

  • HTTP 是一个无状态协议, 服务器并不存储关于客户的任何信息,当客户发起两次请求对象时,服务器会重复发送,当你在网页上多次请求下载软件时,会下载两次!

HTTP 的非持续连接与持续连接

在我们的因特网应用程序中,客户端 与服务器在长时间内通信,其中客户发送一系列请求并且服务器对每个请求进行响应,这一系列请求可以以规则的间隔周期地或是间断一个个发出。

由于客户服务器的交互方式是TCP 方式进行的,应用程序需要做出一个决定: 即每一个请求是经一个单独的TCP进行发送(非持续性连接),还是 所有请求都响应经相同的TCP连接(持续性连接

默认情况下: HTTP 采用 持续性连接

对比非持续性连接与持续性连接

非持续性连接的缺点十分明显:

  • 每个请求的对象维护一个全新连接,共需要 三次握手与数据交换,至少 两个 RTT加上服务器传输 HTML 文件的时间,并且由于多个TCP连接带来的 服务器压力也很大(客户端与服务器都要分配其 TCP 缓冲区和保持 TCP 变量)

HTTP 报文格式

HTTP 报文有两种: 请求报文与响应报文

请求报文

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: Close
User-agent: Mozilla/5.0
Accept-language: fr

我们来解释一下上面的报文意思:

首先呢,请求报文的规则是至少为 一行,HTTP请求报文的第一行叫 请求行,其后的所有行叫 首部行

  • 请求行有 3个字段: 方法字段/URL字段/HTTP 版本字段,方法字段包括 (GET,POST,HEAD,PUT,DELETE),
    URL 带有请求对象的标识,HTTP 版本字段是 自己解释的

  • 首部行中 :
    Host 代表了对象所在的主机,
    Connect: close 告诉服务器当发送完请求的对象后就关闭这条连接。
    User-agent: 用来指明用户代理,即向服务器发送请求的浏览器的类型。
    Accept-language:代表了用户想得到该对象的语法版本。

响应报文

HTTP/1.1  200 OK
Connection:  close
Data: Tue, 18 AUG 2015  15.44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015  15:11:03  GMT
Content-Length: 6821
Content-Type: text/html

(data data)

响应报文呢,由3部分构成: 初始状态行,6个首部行, 实体体

  • 初始状态行: HTTP 版本, 状态码与短语,其指示了请求的结果。
  1. 200 OK : 请求成功,信息在返回的响应报文中。
  2. 301 Moved Permanently: 请求的对象已经已经被移除了,新的URL 定义在相应报文的 Location,首部行中,客户软件将自动获取新 URL
  3. 400 Bad Request: 一个通用错差代码,指示该请求不能被服务器理解
  4. 404 Not Found: 被请求的文档不在服务器上
  5. 505 Htttp Version Not Supported:服务器不支持请求报文使用 HTTP 协议版本。
  • 首部行:
  1. Connect: close 发送完将关闭该 TCP 连接
  2. Date: 服务器产生并发送该响应报文而的日期与时间
  3. Server: 指示服务器的类型,类似客户端的 user-agent
  4. Last-Modified: 指示对象创建或最后修改的日期与时间
  5. Content-Length:被发送对象中的字节数
  6. Content-Type:实体中的对象

用户与服务器的交互:cookie

cookie 其实是非常好理解的,是指用户信息的索引缓存,也可以说是服务器用于标识一个用户的工具。但是也造成了用户信息泄露的问题,国家都很在意这些我们这些网民的 隐私安全。

Cookie技术一般有 4个组件:

  1. HTTP 响应报文中的一个 Cookie 首部行
  2. 在 HTTP 请求报文中的 一个cookie首部行
  3. 用户端系统保留一个 cookie文件,由用户的浏览器进行管理
  4. 位于 Web站点的一个后端数据库。

当我们的请求网页的过程,WEB站点会产生唯一一个识别码,并以此作为索引在后端数据库产生一个表现。

图:

Web 缓存

WEB 缓冲器 也叫 代理服务器,就像我们去通过百度去访问其他网站一样,百度平台就是我们的 代理服务器。

使用代理服务器的好处:

  • 大大减小服务器对客户端的响应时间,对客户是非常友好的。
  • 大大降低器因特网 web 流量,改善了所有应用的性能。

通过内容分发网络(Content Distrubution Network,CDN),WEB 缓存器正在因特网上发挥着越来越重要的作用,CDN公司在因特网安装了很多地理上分散的缓存器,因而使大量流量实现了本地化。

2.3 SMTP (simple Mail Transfer Protocal ,简单邮件传输协议)

这里对于邮件协议不再进行过多描述,我们转向更实用的 应用层协议(DNS)

2.3 DNS: 因特网的目录服务

DNS 为什么被提出,这其实涉及了一些很常见的有趣的问题。

因为端系统分组传输是需要 IP地址与端口的,但是 IP 地址是数字格式,是非常难以牢记的,比如 人们很乐意接受(www.baidu.com )而不乐意去接受(192.168.2.1…)数字IP ,所以域名是非常重要的,但是通信是需要 IP 的,域名向IP 解析这一需求促使了 DNS 服务的出现。

DNS 提供的服务

DNS :

  • 由分层的DNS服务器实现的分布式数据库
  • 一个使得主机能够查询分布式数据库的应用层协议(DNS协议运行在 UDP 之上,使用 53端口)

DNS 工作机理概述

假设运行在用户主机上的某些应用程序(web 应用) 需要将主机转换为 IP 地址

  • 这些程序调用 DNS 的客户端,并指出需要被转换的主机名,
  • 用户主机上的 DNS 接受到后,向网络中发送 一个 DNS 查询报文。所有 DNS请求和回答报文均使用 UDP数据经端口 53 发送
  • 经过若干秒时延后,用户主机上的 DNS 接收到一个提供所希望映射的 DNS 回答报文,这个映射结果再被传递到调用 DNS 的应用程序。

大家看到,看似 dns 只是作为一个提供简单和直接的转换服务的黑盒子,但是实现这个黑盒子是十分复杂的,它由分布于全球的大量 DNS 服务器以及定义了 DNS 服务器与查询主机通讯方式的应用层协议组成。

DNS 缓存

由于解析域名是非常消耗时间的,为了改善时延性能并改善在 因特网到处传输的 DNS 报文数量,引入了DNS 缓存,

第三关: 运输层

猜你喜欢

转载自blog.csdn.net/chongzi_daima/article/details/106966634