Computer knowledge network summary (f) application layer

1, Domain Name System (DNS)

Domain Name System Overview

Domain Name System DNS (Domain Name System) is the use of the Internet naming system for converting easier for people to use the machine name to an IP address.

[Why DNS? When a host communication station on the User and the Internet, they must know each other's IP address. However, the user's hard to remember that binary host addresses 32, so the system can use the domain name on the Internet host names into IP addresses.

[Why the machine at the time of processing IP datagrams to use IP instead of directly using the domain name it? ] This is because the length of the IP address is a 32-bit fixed (if IPV6, is 128), and the length of the domain name is not fixed, it is difficult to machine processing.

Internet Domain Name System (DNS) is designed as an online distributed database, and the use of client-server mode.

Internet domain structure

The use of the Internet naming hierarchy tree, using this nomenclature, no one connected to the Internet host or router, has a unique name of the hierarchy, namely domain name (Domain Name). "Domain" is the name of a space can be divided managed, it can also be divided into sub-domains.

DNS provides domain name in the label by the letters of the alphabet and numbers, each label no more than 63 characters, not case-sensitive; low-level domain name written on the left, while the highest level of domain names written on the far right. Complete domain name consists of a total of not more labels composed of more than 255 characters. Each higher level domain name management.
Here Insert Picture Description
Internet name space is divided in accordance with the organization, regardless of the physical network, and the IP address in the "Subnet" does not matter.

Domain name server

A domain name server is responsible (or privileged) range called the zone (zone), all nodes in a zone must be Unicom. Each area set the appropriate permissions domain name server, domain name used to save all the hosts in the area of ​​mapping IP addresses. In short, the jurisdiction of the DNS server is not a "field" as a unit, but the "zone" as a unit. DNS server zone is the range of the actual jurisdiction. Region domains may be equal or less than, but must not be greater than the domain.

According to the role of domain name server, domain name server can be divided into four different types: root name servers, top-level domain server, domain name server authority, the local name server.

1. The root name server

The highest-level domain name server. All root name servers know that domain names and IP addresses of all the top-level domain servers. Root name server domain name server is the most important, because no matter what a local domain name server, to any of a domain name on the Internet resolve, as long as they can not be resolved, you must first turn to the root name servers.

Root name server using anycast technology, so when the DNS client sends a query to the IP address of a root domain name servers, routers on the Internet to find customers from the DNS root name server recent.

2. The top-level domain name server

Responsible for domain name server for a zone. When a domain name server authority can not give a final answer to the query will tell send queries a DNS client, the next step which should find a domain name server authority.

3. The local domain name server

First: it does not belong to the local domain name server domain name server hierarchy, but it is very important domain name system.

When a host sends a DNS query requests, query request message is sent to the local domain name server. Local domain name server from the user closer, usually no more than a few from the router. When the host to be queried also belong to the same local ISP, the local domain name server will be able to convert the host name query to its IP address, without the need to go ask other name servers.

Domain name resolution process, recursive queries, and iterative queries difference: Here Insert Picture Description
recursive queries : Host usually recursive query to query the local DNS server. The so-called recursive query is this: If the host you want to ask a local domain name server does not know the queried domain name IP address, local domain name server to DNS client, to continue to send a query message to other root name server, rather than the host the next step of its own inquiry.

迭代查询:本地域名服务器向根域名服务器的查询通常采用的是迭代查询。当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当指向哪一个域名服务器进行查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。

当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求哪一种查询方式。

高速缓存

为了提高DNS查询效率,并减轻域名服务器的负荷和较少互联网上的DNS查询报文数量,在域名服务器中广泛使用高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。当然需要设置计时器,超时删除,再重新获取。

主机中也有高速缓存。许多主机在启动时,从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。

2、文件传送协议

FTP概述

文件传输协议FTP(File Transfer Protocol)是互联网上使用得最广泛得文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。

下面介绍基于TCP的FTP和基于UDP的简单文件传输协议TFTP,它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回原节点。

FTP的基本工作原理

文件传输协议FTP只提供文件传送的一些基本服务,它使用TCP可靠的运输服务。FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。

FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

主进程的工作步骤如下:

1、打开21端口,使客户进程能够连接上;
2、等待客户进程发出连接请求;
3、启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可以创建其他一些子线程;
4、回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发进行的

Here Insert Picture Description
在进行文件传输的时候,FTP的客户和服务器之间要建立两个并行的TCP连接:“控制连接”和“数据连接”。控制连接在整个会话期间一直保持打开,FTP客户所发出的传送请求,通过控制连接发送给服务端的控制进程,但控制连接并不用来传送文件。实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到FTP客户发来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务端的数据传送进程。

当客户端进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的数值端口21,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传输连接。接着,服务器进程用自己传送数据的熟知端口20与客户进程所提供的端口号建立数据传送连接。由于FTP使用了两个不同的端口号,所以数据连接与控制链家而不会发生混乱。

简单文件传输协议TFTP

简单文件传输协议TFTP(Trivial File Transfer Protocol)是一个很小且容易实现的文件传送协议。

TFTP使用UDP数据报,因此TFTP需要有自己的差错改正措施。TFTP只支持文件传输而不支持交互,也不对用户身份进行鉴别。

TFTP的主要优点:

1、TFTP可用于UDP环境。例如:当需要将程序或者文件同时向许多机器下载时就往往需要使用TFTP;

2、TFTP代码所占内存比较小。

TFTP的主要特点:

1、每次传送的数据报文中有512字节的数据,但最后一次可不足512字节;

2、数据报文按序编号,从1开始;

3、支持ASCII码或二进制传送;

4、可对文件进行读或写;

5、使用简单的首部。

3、远程终端协议TELNET

TELNET是一个简单的远程终端协议。用户用TELNET就可以在其所在地登陆(TCP连接注册)到远地的另一台主机上,能够实现远程控制。TELNET又称为终端仿真协议。

TELNET也使用客户服务器模式。在本地系统运行TELNET客户进程,而在远地主机上运行TELNET服务器进程。和FTP的情况相似,服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。

TELNET定义了数据和命令应怎样通过互联网,这些定义就是所谓的网络虚拟终端NVT(Network Virtual Terminal)。
Here Insert Picture Description
客户软件把用户的击键和命令转换成NVT格式,并送交服务器。服务器软件把收到的数据和命令从NVT格式转换成远地系统所需的格式。向用户返回数据时,服务器把远地系统的格式转换为NVT格式,本地客户再从NVT格式转换到本地系统所需的格式。

TELNET的选项协商(Option Negotiation)使TELNET客户和TELNET服务器可商定使用更多的终端功能,协商的双方是平等的。

4、万维网和HTTP协议

万维网概述

万维网WWW(World Wide Web)是一个大规模、联机式的信息储藏所,简称Web。万维网用链接的方法能非常方便地从互联网上的一个站点访问/链接另一个站点,从而主动地按需获取丰富的信息。
Here Insert Picture Description
万维网是一个分布式的超媒体系统,它是超文本系统的扩充。

超文本:指包含指向其他文档的链接的文本。也就是说,一个超文本由多个信息源链接组成,而这些信息源可以遍布在世界各地,并且数目也是不受限制的,利用一个链接可使用户找到远在异地的另一个文档,而这又可链接到其他文档(以此类推)。这些文档可以位于世界上任何一个接在互联网上的超文本系统中。超文本是万维网的基础。

统一资源定位符URL

统一资源定位符URL(Uniform Resource Locator):是用来表示从互联网上得到的资源位置和访问这些资源的方法。

互联网上的所有资源,都有一个唯一确定的URL。URL相当于一个文件名在网络范围的扩展,它的一般形式由下面四个部分组成:

<协议>://<主机>:<端口>/<路径>

URL里面的字母不分大小写,但为了便于阅读,有时故意使用一些大写字母。

超文本传送协议HTTP

1.HTTP的操作过程

HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。

HTTP协议是面向事务的应用层协议,它是万维网上能够可靠地交换文件(包括:文本、声音、图像等各种多媒体文件)的重要基础。
Here Insert Picture Description
每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。一旦监听到连接建立请求并建立了TCP连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接就被释放了。在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议HTTP。

HTTP协议是无状态的,即同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假设页面没有更新),因为服务器不记得曾经访问过的这个客户,也不记得为它服务过多少次。HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。

HTTP/1.0的主要缺点:

每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象需要依次进行链接,那么每一次链接下载都导致2RTT的开销。另一种开销就是万维网客户和服务器每一次建立新的TCP连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使万维网服务器的负担很重。好在浏览器都能够打开5~10个并行的TCP连接,而每一个TCP连接处理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。

HTTP/1.1:

较好的解决了HTTP/1.0两倍RTT时间开销的问题。它使用持续连接。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续HTTP请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。

HTTP/1.1的持续连接有两种工作方式:非流水线方式和流水线方式。非流水线客户访问一次对象需要一个RTT时间,流水线客户访问所有的对象只需要花费一个RTT时间。

2.代理服务器

代理服务器是一种网络实体,它又称为万维网高速缓存。代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去互联网访问该资源。代理服务器可在客户端或服务器端工作,也可在中间系统上工作。
Here Insert Picture Description
图中校园网使用代理服务器访问互联网的过程如下:

  1. 校园网计算机中的浏览器访问互联网的服务器请求服务时,就先和校园网的代理服务器建立TCP连接,并向代理服务器发出HTTP请求报文;

  2. 若代理服务器已经存放了所请求的对象,代理服务器就把这个对象放入HTTP响应报文中返回给计算机的浏览器;

  3. 否则,代理服务器就代表发出请求的用户浏览器,与互联网上的源点服务器建立TCP连接,并发送HTTP请求报文;

  4. 源点服务器把所请求的对象放在HTTP响应报文中返回给校园网的代理服务器;

  5. 代理服务器收到这个对象后,先复制在自己的本地存储器中(留待下次用),然后再把这个对象放在HTTP响应报文中,通过已建立的TCP连接,返回给请求该对象的浏览器。

3.HTTP的报文结构

HTTP有两类报文:请求报文和响应报文
Here Insert Picture Description
由于HTTP是面向文本的,因此在报文中的每一个字段都是一些ASCII码串,因而各个字段的长度都是不确定的。

HTTP请求报文和响应报文都是由三个部分组成:开始行(请求报文中叫请求行、响应报文中叫状态行)、首部行和实体主体。

请求报文的请求行的第一个字段“方法”,常用的如下表所示:
Here Insert Picture DescriptionHere Insert Picture Description
HTTP响应报文:

响应报文的状态行包括三项内容:HTTP的版本、状态码以及解释状态码的简单短语。

状态码都是三位数字的,分为5大类:

  1. 1xx 表示通知信息,如请求收到了或者正在处理;
  2. 2xx 表示成功,如接受或知道了;
  3. 3xx 表示重定向,如要完成请求还必须采取进一步的行动;
  4. 4xx 表示客户的差错,如请求中有错误的语法或不能完成;
  5. 5xx表示服务器的差错,如服务器失效无法完成请求。

如下面三种常遇见的响应报文中的状态行:
Here Insert Picture Description

4. 在服务器上存放用户的信息

因为HTTP是无状态的协议,所以服务器识别不了用户,但是某些场景又需要服务器能够识别出用户,比如下面这个场景:

在网上购物时,一个顾客要购买多种物品。当他把选好的一件物品放入“购物车”后,他还要继续浏览和选购其他商品。因此,服务器需要记住用户身份,使他接着选购的一些物品能够放入同一个“购物车”中,这样便于集中结账。

要做到上面的场景的需求,需要在HTTP中使用Cookie,其在HTTP服务器和客户之间传递状态信息。

Cookie的工作过程:

当用户A浏览某个使用Cookie的网站时,该网站的服务器就为A产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在给A的HTTP响应报文中添加一个叫做Set-cookie的首部行。这里的“首部字段名”就是“Set-cookie”,而后面的“值”就是赋予该用户的“识别码”。例如这个首部行是这样的:

Set-cookie:31d4d96e407aad42

当A收到这个响应时,其浏览器就在它管理的特定Cookie文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面给出的识别码。当A继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并收到HTTP请求报文的Cookie首部行中:

Cookie:31d4d96e407aad42

于是,这个网站就能跟踪用户31d4d96e407aad42在该网站的活动。需要注意的是,服务器并不需要知道这个用户的真实姓名以及其他的信息。但服务器能够知道用户31d4d96e407aad42在什么时间访问了哪些页面,以及访问这些页面的顺序。如果A是在网上购物,那么这个服务器可以为A维护一个所购物品的列表,使A在结束这次购物时可以一起付费。

万维网文档

超文本标记语言

要使任何一台计算机都能显示出任何一个万维网服务器上的页面,就必须解决页面制作的标准化问题。超文本标记语言HTML(HyperText MarkUp Language)就是一种制作万维网页面的标准语言,它消除了不同计算机之间信息交流的障碍。

HTML利用很多“标签”用于文档的排版。

需要注意的是仅当HTML文档是以.html或.htm为后缀时,浏览器才对这样的HTML文档的各种标签进行解释。如果HTML文档是以.txt为后缀的,则HTML解释程序就不对标签进行解释,而浏览器只能看见原来的文本文件。

5、电子邮件

电子邮件概述

电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人“邮箱”里,收件人可在自己方便时上网到自己使用的邮件服务器进行读取。
Here Insert Picture Description
发送和接收一个邮件的几个重要步骤:

1、发件人编写好邮件内容。然后把邮件通过SMTP协议发送给发送方的邮件服务器;

2、SMTP服务器收到用户发来的邮件后,就把邮件临时存放在邮件缓存队列中,等待发送到接收方的邮件服务器中;

3、发送方邮件服务器SMTP客户与接收方邮件服务器的SMTP服务器建立TCP连接,然后就把邮件缓存队列中的邮件依次发送出去;

4、运行在接收方邮件服务器中的SMTP服务器进程收到邮件后,把邮件放入收件人用户邮箱中,等待收件人进行读取;

5、收件人在打算收信时,就运行计算机中的用户代理,使用POP3或者IMAP协议读取发送给自己的邮件。

简单邮件传送协议SMTP

STMP(Simple Mail Transfer Protocol)规定了两个相互通信的SMTP进程之间应该如何交换信息。

SMTP规定了14条命令和21种应答信息。下面介绍发送和接收方的邮件服务器之间的SMTP通信的三个阶段的主要命令和响应信息。

1、连接建立

发件人的邮件发送到发送方邮件服务器的邮件缓存中后,邮件服务器中的代理SMTP客户每隔一定时间对邮件缓存扫描一次。如发现有邮件,就使用SMTP的熟知端口25与接收方邮件服务器的SMTP服务器建立TCP连接。在连接建立后,接收方SMTP服务器要发出“220 Service ready”(服务就绪)。然后SMTP客户向SMTP服务器发送HELLO命令,附上发送方的主机名。SMTP服务器若有能力接收邮件,则回答“250 OK”,表示已准备好接收。若SMTP服务器不可用,则回答“421 Service not available”(服务不可用)。

注意:SMTP不使用中间邮件服务器,TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立。

2、邮件传送

邮件的传送从MAIL命令开始。MAIL命令后面有发件人的地址。

下面跟着一个或者多个RCPT命令,取决于把同一个邮件发送给一个或多个收件人。

RCPT命令的作用:先弄清楚接收方系统是否已做好接收邮件的准备,然后才发送邮件。这样做是为了避免浪费通信资源,不至于发送了很长的邮件以后才知道地址错误。

再下面就是DATA命令,表示要开始传送邮件的内容了。

3、连接释放

邮件发送完毕后,SMTP客户应发送QUIT命令。SMTP服务器返回的信息是“221(服务关闭)”,表示SMTP同意释放TCP连接。邮件传送的全部过程即结束。

需要说明的是:
SMTP传送的邮件是明文,不利于保密。也没有身份鉴别,所以造成很多垃圾邮件。

解决办法:扩充的SMTP(Extened SMTP),记为ESMTP。新增的功能有:客户端的鉴别、服务器接受二进制报文、服务器接受分块传送的大报文、发送前先检查报文的大小以、使用安全传输TLS以及使用国际化地址等。

SMTP有很多缺点,比如:不能传送可执行文件或其他二进制对象、限于传送7位ASCII码、SMTP服务器拒绝超过一段长度的邮件等等。为了解决以上问题,提出了通用互联网邮件扩充MIME,它并没有改变或取代SMTP,但增加了邮件主体的结构并定义了传送非ASCII码的编码规则。

邮件读取协议POP3和IMAP

邮局协议POP3是一个非常简单、但功能有限的邮件读取协议。它最大的特点就是只要用户从POP3服务器读取了邮件,POP3服务器就把该邮件删除。

网际报文存取协议IMAP(Internet Message Access Protocol):用户在自己的计算机上就可以操纵邮件服务器的邮箱,就像在本地操纵一样,因此IMAP是一个联机协议。IMAP最大的好处就是用户可以在不同的地方使用不同的计算机随时上网阅读和处理自己在邮件服务器中的邮件。
Here Insert Picture Description
强调一下:发件人的用户代理向发送邮件的服务器发送邮件,以及发送邮件服务器向接收方邮件服务器发送邮件,都使用SMTP协议。而POP3或IMAP则是用户代理从接收方邮件服务器上读取邮件所使用的协议。

6、动态主机配置协议

连接到互联网的计算机的协议软件需要配置四个项目:

1、IP地址;
2、子网掩码;
3、默认路由器的IP地址;
4、域名服务器的IP地址;

动态主机配置协议DHCP(Dynamic Host Configuration Protocol),提供了一种机制,称为动态主机配置协议,称为即插即用连网。这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。

需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文(DHCPDISCOVER:将目的IP地址全置1,即255.255.255.255,源IP地址全设为0),这时该主机就成了DHCP客户。发送广播报文是因为现在还不知道DHCP服务器在什么地方,因此要发现DHCP服务器的IP地址。.这样,本网段的所有主机都能够收到这个广播包,但是只有DHCP服务器才能对此广播包进行回答。DHCP服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。DHCP服务器的回答报文叫做提供报文(DHCPOFFER),表示“提供”了IP地址等配置信息。
Here Insert Picture Description
需要说明几点:

1、我们没必要在每个网段上都设置一个DHCP服务器,只需要在每一个网络中设置一个DHCP中继代理(通常是一台路由器),就可以实现跨网段获取IP地址。DHCP中继代理配置了DHCP服务器的IP地址信息。当DHCP中继代理收到主机A以广播形式发送的发现报文后,就以单播方式向DHCP服务器转发此报文,并等待其回答。收到DHCP服务器回答的提供报文后,DHCP中继代理再把此提供报文发回给主机A。

2、DHCP服务器分配给DHCP客户的IP地址是临时的,,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP协议称这段时间为租用期,这个数值由DHCP服务器自己决定。当租用期过半,DHCP客户还要发送请求更新租用期。

7、P2P 应用

  • 话题
  1. P2P内容分发
  2. 不须要中心server,是一种去中心化的协议
  • 起源:
    因为CDN须要中心server,所以诞生了P2P去中心化的内容分发网络

  • P2P

  1. P2P的目标就是去中心化实现内容分发
  2. 主要想法就是让參与P2P的用户互相帮助
  • P2P的挑战
  1. 没有server支持,全部的连接须要用户主机自己组织。这就导致了一些问题。
  2. 每一个节点的能力有限
  3. 參与者可能是自私的,为什么节点之间会相互帮助呢?
  4. 去中心化,节点之间怎样找到对方呢?
  • 克服能力的限制
    每一个节点都是client,同一时候也扮演着server的角色

  • 參与者可能是自私的

  1. 每一个节点都扮演着两种角色,下载或者上传
  2. 防止自私的方法就是:假设你给我数据,我也给你数据
  • 实现去中心化
  1. 节点必需要知道对方的地址是什么
  2. 能够通过DHT分布式哈希表来实现
  3. DHT是全然去中心化、高效的分布式索引
  • BitTorrent
  1. 现在使用的基本的P2P系统
  2. 使用torrents来分发数据。每一个节点将文件分割成非常多片段,然后将这些片段进行传输
  • BitTorrent协议
  1. 从torrent种子开始
  2. 联系tracker,将自己增加到列表中,而且获取其它的用户列表
  3. 使用DHT网络来更新节点列表
  4. Own data segment and the data segment others to trade for their contribution to the multi-node priority
  5. When all nodes are the same download / upload data
  6. The document fragments cut into very small increase transmission speed
  7. The contribution of small isolated nodes, encouraged him to make many other contributions
  8. DHT is completely decentralized
  • P2P prospects
  1. Is CDN alternatives
  2. DHT and P2P technology has many other applications, such as SKYPE AMAZON
  3. There Bitcoin
Published 163 original articles · won praise 117 · views 210 000 +

Guess you like

Origin blog.csdn.net/u010095372/article/details/88101913