TCP/IP、HTTP、HTTPS
文章目录第一章、资源分类1、静态资源2、动态资源3、网络通信三要素第二章:网络协议与TCP/IP1、OSI七层网络模型、四层网络模型2、TCP与UDP3、TCP/IPCDNWAFWebService4、TCP的三次握手和四次挥手5、 什么是半连接队列?6、ISN(Initial Sequence Number)是固定的吗?7、SYN攻击是什么?第三章:HTTP1、http概念及发展2、http特点
第一章、资源分类
1、静态资源
所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析
如:html,css,Javascript
2、动态资源
每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,在返回给浏览器
如:servlet/jsp,php,asp……
3、网络通信三要素
IP:电子设备(计算机)在网络中的唯一标识。
端口:应用程序在计算机中的唯一标识。0~655363.传输协议:规定了数据传输的规则
基础协议:tcp:安全协议,三次握手。速度稍慢
udp:不安全协议。速度快
第二章:网络协议与TCP/IP
1、OSI七层网络模型、四层网络模型
网络设计者以分层(layer)的方式组织协议,每个协议属于层次模型之一。每一层都是向它的上一层提供服务(service),即所谓的服务模型(service model)。每个分层中所有的协议称为 协议栈(protocol stack)。因特网的协议栈由五个部分组成:物理层、链路层、网络层、运输层和应用层。
四层网络协议中:应用层、传输层、网际层、网络接口层
层级 | 作用 | |
---|---|---|
应用层 | 网络应用程序和网络协议存放的分层 | HTTP;电子邮件传送协议 SMTP;端系统文件上传协议 FTP;域名解析的 DNS 协议我们把位于应用层的信息分组称为 报文(message);基于 AMQP 协议的 RabbitMQ 中间件 |
传输层 | 在应用程序断点之间传送应用程序报文 | 在这一层主要有两种传输协议 TCP和 UDP我们把运输层的分组称为 报文段(segment) |
网络层 | 一般把网络层就称为 IP 层 | IP 协议是一种网际协议,除了 IP 协议外,网络层还包括一些其他网际协议和路由选择协议将称为 数据报(datagram) 的网络分层从一台主机移动到另一台主机。 |
链路层 | 将帧从一个端系统运输到另一个端系统 | 包括以太网、WiFi 和电缆接入的 DOCSIS 协议,因为数据从源目的地传送通常需要经过几条链路,一个数据包可能被沿途不同的链路层协议处理,我们把链路层的分组称为 帧(frame) |
物理层 | 将帧中的一个个 比特 从一个节点运输到另一个节点 | 物理层的协议仍然使用链路层协议,这些协议与实际的物理传输介质有关,例如,以太网有很多物理层协议:关于双绞铜线、关于同轴电缆、关于光纤 |
2、TCP与UDP
TCP 向它的应用程序提供了面向连接的服务,它能够控制并确认报文是否到达,并提供了拥塞机制来控制网络传输,因此当网络拥塞时,会抑制其传输速率。
UDP 协议向它的应用程序提供了无连接服务。它不具备可靠性的特征,没有流量控制,也没有拥塞控制。我们把运输层的分组称为 报文段(segment)
3、TCP/IP
TCP/IP 我们一般称之为协议簇, TCP/IP 协议簇中不仅仅只有 TCP 协议和 IP 协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP 协议,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。
TCP 协议的全称是 Transmission Control Protocol 的缩写,意思是传输控制协议,HTTP 使用 TCP 作为通信协议,这是因为 TCP 是一种可靠的协议,而可靠能保证数据不丢失。
IP 协议的全称是 Internet Protocol 的缩写,它主要解决的是通信双方寻址的问题。IP 协议使用 IP 地址 来标识互联网上的每一台计算机,可以把 IP 地址想象成为你手机的电话号码,你要与他人通话必须先要知道他人的手机号码,计算机网络中信息交换必须先要知道对方的 IP 地址。
注:
CDN
CDN的全称是Content Delivery Network,即内容分发网络,它应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求。CDN 是构建在现有网络基础之上的网络,它依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
- 全局负载均衡
- 缓存系统(命中率,回源率):命中率越高越好,回源率越低越好,一般不超过5%
打比方说你要去亚马逊上买书,之前你只能通过购物网站购买后从美国发货过海关等重重关卡送到你的家里,现在在中国建立一个亚马逊分基地,你就不用通过美国进行邮寄,从中国就能把书尽快给你送到。
WAF
WAF 是一种 Web 应用程序防护系统(Web Application Firewall,简称 WAF),它是一种通过执行一系列针对HTTP / HTTPS的安全策略来专门为Web应用提供保护的一款产品,它是应用层面的防火墙,专门检测 HTTP 流量,是防护 Web 应用的安全技术。
WAF 通常位于 Web 服务器之前,可以阻止如 SQL 注入、跨站脚本等攻击,目前应用较多的一个开源项目是 ModSecurity,它能够完全集成进 Apache 或 Nginx。
WebService
WebService 是一种 Web 应用程序,WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
Web Service 是一种由 W3C 定义的应用服务开发规范,使用 client-server 主从架构,通常使用 WSDL 定义服务接口,使用 HTTP 协议传输 XML 或 SOAP 消息,它是一个基于 Web(HTTP)的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。
DNS解析
4、TCP的三次握手和四次挥手
tcp的三次握手
其实就是建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。
tcp的四次挥手
断开连接
注:为什么需要三次握手,两次不行吗?
弄清这个问题,我们需要先弄明白三次握手的目的是什么,能不能只用两次握手来达到同样的目的。
第一次握手:客户端发送网络包,服务端收到了。
这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。
这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。
这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。
5、 什么是半连接队列?
服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。
当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。
这里在补充一点关于SYN-ACK 重传次数的问题:
服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传。如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。
注意,每次重传等待的时间不一定相同,一般会是指数增长,例如间隔时间为 1s,2s,4s,8s…
6、ISN(Initial Sequence Number)是固定的吗?
当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。ISN可以看作是一个32比特的计数器,每4ms加1 。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它做错误的解释。
7、SYN攻击是什么?
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN攻击是一种典型的DoS/DDoS攻击。
检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。
在Linux/Unix上可以使用系统自带的netstat命令来检测SYN攻击。
netstat -n -p TCP | grep SYN_RECV
常见的防御SYN攻击的方法有如下几种:
- 缩短超时(SYN Timeout)时间
- 增加最大半连接数
- 过滤网关防护
- SYN cookies技术
第三章:HTTP
1、http概念及发展
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,TCP/IP协议的最上层协议(HTML文件、图片、查询结果),互联网上应用最为广泛的一种网络协议,所有的www文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
HTTP/0.9 | 1991年 | 不 涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 | 没有作为正式的标准 |
---|---|---|---|
HTTP/1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、OPTIONS、DELETE命令 | 正式作为标准 |
HTTP/1.1 | 1997年 | 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输 编码 | 2015年前使用广泛 |
HTTP/2 | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 | 覆盖市场 |
http2.0的优点
①解析速度快
服务器解析 HTTP1.1 的请求时,必须不断地读入字节,直到遇到分隔符 CRLF 为止。而解析 HTTP2 的请求就不用这么麻烦,因为 HTTP2 是基于帧的协议,每个帧都有表示帧长度的字段。
②多路复用
HTTP1.1 如果要同时发起多个请求,就得建立多个 TCP 连接,因为一个 TCP 连接同时只能处理一个 HTTP1.1 的请求。
在 HTTP2 上,多个请求可以共用一个 TCP 连接,这称为多路复用。同一个请求和响应用一个流来表示,并有唯一的流 ID 来标识。 多个请求和响应在 TCP 连接中可以乱序发送,到达目的地后再通过流 ID 重新组建。
③首部压缩
HTTP2 提供了首部压缩功能。多请求请求时,有很多消息头都是重复的。如果可以把相同的首部存储起来,仅发送它们之间不同的部分,就可以节省不少的流量,加快请求的时间。
HTTP/2 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送。如果服务器收到了请求,它会照样创建一张表。 当客户端发送下一个请求的时候,如果首部相同,它可以直接发送这样的首部块:服务器会查找先前建立的表格,并把这些数字还原成索引对应的完整首部。
④优先级
HTTP2 可以对比较紧急的请求设置一个较高的优先级,服务器在收到这样的请求后,可以优先处理。
⑤流量控制
由于一个 TCP 连接流量带宽(根据客户端到服务器的网络带宽而定)是固定的,当有多个请求并发时,一个请求占的流量多,另一个请求占的流量就会少。流量控制可以对不同的流的流量进行精确控制。
⑥服务器推送
HTTP2 新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。
2、http特点
①无状态:协议对客户端没有状态存储,对事物处理没有“记忆“能力,比如访问一个网站需要反复进行登录操作
②无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
③基于请求和响应:基本的特性,由客户端发起请求,服务端响应
④简单快速、灵活
⑤通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
3、http缺点:
①无状态
既然服务器没有记忆能力,它就无法支持需要连续多个步骤的事务操作。每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量。由此出现了 Cookie 技术。
②明文
HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式。
③对比 TCP、UDP 这样的二进制协议,它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark 或者 tcpdump 抓包后,直接用肉眼就可以很容易地查看或者修改,为我们的开发调试工作带来极大的便利。
当然缺点也是显而易见的,就是不安全,可以被监听和被窥探。因为无法判断通信双方的身份,不能判断报文是否被更改过。
④性能
HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。
4、http的状态码
1xx:临时回应 | 表示客户端请继续 |
---|---|
2xx:成功响应 | 200请求成功;204请求处理成功,但是没有资源可以返回;206对资源某一部分进行响应,由Content-Range 指定范围的实体内容。 |
3xx:需要进行附加操作以完成请求 | 301:永久性重定向(用的不多),该状态码表示请求的资源已经重新分配 URI,以后应该使用资源现有的 URI; 302:临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。303:该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。 304:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。307:临时重定向。该状态码与 302 Found 有着相同的含义。 |
4xx:客户端请求错误 | 400:该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。401:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。403:该状态码表明对请求资源的访问被服务器拒绝了。404:该状态码表明服务器上无法找到请求的资源。405请求类型不对 |
5xx:服务器本身发生错误 | 500:服务端错误,代码发生Bug/临时错误,服务器端在执行请求时发生了错误。503:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。 |
5、请求方式
HTTP 请求方式一共有 9 种
HTTP 1.0 定义的POST 、GET 、HEAD
HTTP 1.1 定义的 PUT 、PATCH 、 OPTIONS 、DELETE 、CONNECT 、 TRACE
POST | 表示向指定资源提交数据,数据包含在请求头中。有可能导致新的资源建立或原有资源修改。 POST 请求是 HTTP 请求中使用最多的一种请求方式。 | 1.0;1.1 |
---|---|---|
GET | 表示请求指定的页面信息,并返回实体内容。 | 1.0;1.1 |
HEAD | 类似于 GET,只不过返回的响应体中没有具体内容,只有报文头,用于获取报文头。 | 1.0;1.1 |
PUT | 从客户端向服务器传送的数据取代指定的内容,即向指定的位置上传最新的内容。 | 1.0;1.1 |
PATCH | 对 PUT 方法的补充,用来对已知资源进行局部更新。 | |
OPTIONS | 返回服务器针对特殊资源所支持的 HTML 请求方式 或 允许客户端查看服务器的性能。 | 1.1 |
DELETE | 请求服务器删除 Request-URL 所标识的资源。 | 1.0;1.1 |
CONNECT | HTTP 1.1 中预留给能够将连接改为管道方式的代理服务器。 | 1.1 |
TRACE | 回显服务器收到的请求,主要用于测试和诊断。 |
6、POST 请求与 GET 请求区别
GET | POST | |
---|---|---|
本质区别 | 向服务器获取数据 | 向服务器传送数据 |
请求参数形式 | 拼接在URL上,多个参数之间用 & 隔开,如果参数是中文值,则会转换成诸如%ab%12的加密16进制码。 | 附在正文中 |
请求数据大小限制 | URL长度有限制,在 1024K 左右(不同协议不同浏览器不一样) | 相对 GET 安全,但是如果不使用 HTTPS,报文正文仍是明文,容易被人截获读取。 |
安全性 | URL上可见传输参数,所以安全性极低。一般用来传输一些公开的参数信息,解析也方便。 | 相对 GET 安全,但是如果不使用 HTTPS,报文正文仍是明文,容易被人截获读取。 |
浏览器后退,刷新是否重新请求 | 否 | 是 |
是否能被收藏为书签、是否被缓存、参数是否被保留浏览器历史 | 是 | 否 |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制,也允许二进制数据。 |
编码类型 | application/x-www-form-urlencoded(是浏览器默认的编码格式) | application/x-www-form-urlencoded 或 multipart/form-data |
7、http默认端口80
8、HTTP 报文、消息结构
HTTP 协议主要由三大部分组成:
起始行(start line):描述请求或响应的基本信息;
头部字段(header):使用 key-value 形式更详细地说明报文;
消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。
注:起始行和头部字段并成为 请求头 或者 响应头,统称为 Header;消息正文也叫做实体,称为 body。
HTTP 协议规定每次发送的报文必须要有 Header,但是可以没有 body,而且在 header 和 body 之间必须要有一个空行(CRLF),
请求报文
请求行:GET/POST url HTTP协议版本1.1
请求头: 包含属性名与属性值
请求空行:
请求体:get请求体为空/post请求体可以部位空
响应报文
响应行:HTTP协议版本1.1 响应状态码 响应状态字符串(200 🆗)
响应头: 包含属性名与属性值
响应空行:
响应体:
请求头内容
Request Header | 规定 |
---|---|
Accept | 浏览器端接受的格式。 |
Accept-Encoding | 浏览器端接收的编码方式 |
Accept-Language | 浏览器端接受的语言,用于服务端判断多语言 |
Cache-Control | 控制缓存的时效性 |
Connection | 连接方式,如果是keep-alive,且服务端支持,则会复用连接 |
Host | HTTP访问使用的域名 |
if-Modified-Slice | 上次访问时的更改时间,如果服务端认为此时间后自己没有更新,则会给出304响应。 |
if-None-Match | 次访问时使用的E-Tag,通常是页面的信息摘要,这个比更改时间更准确一些。 |
User-Agent | 用户代理,服务器识别客户端使用的操作系统、CPU、浏览器及版本等。是防反爬的手段,在express中需要 对请求对象定制,使用urllib.request.Request(url=url,headers=headers) |
Cookie | 客户端存储的cookie字符串 |
响应头内容
Response Header | 规定 |
---|---|
Cache-Control | 缓存控制,用于通知各级缓存保存的时间,例如max-age=0,表示不要缓存。 |
Connection | 连接类型,Keep-Alive表示复用连接。 |
Content-Encoding | 内容编码方式,通常是gzip。 |
Content-Type | 内容类型,所有请求网页的都是text/html。 |
Date | 当前服务器日期 |
ETag | 页面的信息摘要,用于判断是否需要重新到服务端取回页面。 |
Expires | 过期时间,用于判断下次请求是否需要到服务端取回页面。 |
Keep-Alive | 保持连接不断时需要的一些信息,如timeout=5,max=100, |
Last-Modified | 页面上次修改的时间。 |
Server | 服务端软件的类型。 |
Set-cookie | 设置cookie,可以存在多个 |
Via | 服务端的请求链路,对一些调试场景至关重要的一个头。 |
Content-Type :Content-Type 表示 body 的数据格式,以下介绍三种响应中的数据格式
text/html 表示数据格式是 HTML
text/css 表示数据格式是 CSS
application/javascript 表示数据各式是 JavaScript
application/json 表示数据格式是 JSON
9、HTTP2.0和HTTP1.X相比的新特性
加载更快
①二进制帧(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
- 帧长度
- 帧类型
- 帧标志
②多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
③header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
使用HPACK压缩算法:索引表,霍夫曼编码
④服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。
第四章:HTTPS
1、HTTPS概念
HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS.TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
2、HTTPS特点(ssl安全套接字协议)
通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:
-
内容加密:采用混合加密枝术,中间者无法直接查看明文内容
验证身份:通过证书认证客户端访问的是自己的服务器
保护数据完整性:防止传输的内容被中间人冒充或者篡改
缺点
- SSL证书收费,
SSL页面加载时间长,有统计延长50%
https在缓存方面,不如http
https会更多占用服务器的连接资源
https在面对黑客攻击,Dos拒绝服务攻击等方面也没啥作用
3、https的默认端口是443
4、加密分类
混合加密:
结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
数字摘要:
通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。
数字签名技术:
数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
·收方能够证实发送方的真实身份;
·发送方事后不能否认所发送过的报文;
第五章、axios解析
Axios 版本为 0.26.0
- axios(config) / axios.get / axios.post / axios.delete …
调用 axios ,传参发起一个请求,或者直接发起 get、post、delete 等请求 - axios.create
创建一个新的 axios 实例 - axios.defaults.xxxx
配置 axios 的默认配置 - axios.interceptors.request / axios.interceptors.response
配置 axios 的全局拦截器,也可以只配置某个通过 create 创建的实例的拦截器 - cancel
取消某个请求

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)