![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机网络
文章平均质量分 61
张孟浩_jay
分享Java后端、MySQL、数据结构、计算机基础、算法、并发编程技术!欢迎朋友们交流关注,共同进步!
展开
-
vmware虚拟机网络通信
1、桥接模式vmware 会在每个虚拟机生成一个虚拟网卡,这个虚拟网卡和真实的物理网卡处在同一网段,虚拟网卡也通过物理网卡来传输数据2、nat模式vmware会在 主机上生成一个 vmnet8的虚拟网卡,相当于主机有了两个网卡,一个虚拟网卡,一个真实网卡。vmware会在主机内部生成一个 虚拟DHCP服务器、一个虚拟网关,网关支持nat转换。每个虚拟机上也会生成一个虚拟网卡。所有虚拟机的网卡ip地址 和 主机的vmnet8的这个虚拟网卡的ip地址处在同一个网段, vmnet8 和 真实网卡的 I原创 2021-10-30 21:49:47 · 1178 阅读 · 0 评论 -
Linux中UDP接收流程详解
UDP是一个无连接的协议,在实现上比TCP简单的多。1、创建socket无论是TCP还是UDP,底层都是一个socket对应。socket中有着接收队列、等待队列、发送队列三个队列。接收队列:用来存放对应的数据等待队列:当线程调用recv_msg()的时候,如果接收队列为空,就阻塞,将其加入到等待队列中。如果接收队列不为空,就直接读取对应的数据发送队列:当线程调用send_msg()的时候,就将数据挂到发送队列中,对应的内核线程会将其写入网卡中2、接收数据当数据到达网卡后,会一层一层的调原创 2021-10-01 16:58:47 · 1686 阅读 · 2 评论 -
Linux中TCP流程详解
文章知识来源本文是对张彦飞(飞哥)的文章的总结,用于学习和技术交流。飞哥的github:开发内功修炼Github飞哥的知乎专栏:开发内功修炼知乎专栏服务端建立TCP是一个基于客户端-服务器的网络模型,首先要建立服务端。Linux中会首先建立一个socket对象,socket中主要是维护了两个链表:1、半连接队列服务器收到客户端第一次握手的信息的时候,内核会为其生成一个request_sock对象,用来记录对应的客户端握手信息,并将request_sock对象加入到半连接队列中。半连接队列原创 2021-10-01 00:09:39 · 1556 阅读 · 1 评论 -
HTTP与TCP的关系
HTTP1和2是基于TCP的,那么HTTP到底是怎么调用TCP的呢?HTTP对应的是80端口,HTTP一直监听80端口,处理以下的情况:1、客户端发来的SYN的数据包,表示这是一个请求握手连接,那么HTTP就将其加入到SYN半连接队列中2、客户端对服务器SYN的ack包,表示客户端同意建立连接,那么就为客户端分配对应的缓冲区,用来存放发送窗口和接收窗口。缓冲区根据源IP和源端口号进行唯一标识3、普通的数据包,或者ack包,根据源IP地址和源端口进行查找对应的接收窗口和发送窗口从上述流程看出,任何利原创 2021-09-23 22:11:37 · 992 阅读 · 1 评论 -
WebSocket详解
WebSocket简介HTTP 有一个非常的大的局限就是 请求-响应 模式,只有客户端发送请求,服务器才能响应,发送数据给客户端。 服务器无法主动的向客户端发送数据。WebSocket 是基于TCP实现的一种协议,服务器可以主动发送给客户端数据。WebSocket 也是通过 URL来进行建立连接。ws为其协议简称,wss为安全的WebSocketws://www.chrono.comws://www.chrono.com:8080/srvwss://www.chrono.com:445/i原创 2021-09-23 22:02:31 · 2221 阅读 · 1 评论 -
CDN详解
CDN简介CDN的全称是 Content Delivery Network,也就是基于内容的转发网络。网络归根结底还是通过光纤或者电缆传播,距离越近,对应的时延肯定越小。假如一个上海的主机想要访问北京的主机的一些数据,那么数据肯定要走几百公里的路程。能不能在上海设置一个代理主机来缓存北京的主机对应的数据,这样的话,上海的主机直接访问上海的代理主机而不用在访问源服务器了,大大的减少了时延。这就是CDN,基于内容的转发网络,通过设置代理服务器来大大的减少了客户端请求的网络时延。CDN结构首先说下CD原创 2021-09-23 20:43:40 · 3672 阅读 · 1 评论 -
QUIC之UDP实现可靠传输
UDP变可靠原创 2021-09-22 23:02:30 · 3605 阅读 · 2 评论 -
HTTP2详解
HTTP2简介HTTP2是对HTTP1.1的升级,对HTTP1.1性能问题进行了优化,主要从以下两个方面来优化:1、头部压缩HTTP1.1主要是对Body进行压缩,而头部却没有压缩。HTTP2通过HPACK算法对头部进行压缩,减少了传输时间。2、队头阻塞HTTP1.1使用的是TCP协议,并且为了节省资源,采用了长连接,长连接引入了队头阻塞的问题。HTTP2引入了流和帧,解决了HTTP层面上的队头阻塞。HTTP2报文结构详解1、二进制 替换 文本HTTP1.1采用的是文本描述,也就是通过ASC原创 2021-09-22 14:38:21 · 12912 阅读 · 2 评论 -
HTTPS优化
HTTPS可以从以下几方面优化:1、协议优化TLS1.3 相较于 TLS1.2 从2个RTT缩短到了1个RTT,所以尽量使用TLS1.32、证书优化证书优化主要有两方面:1、证书传输证书越小,传输的就越快。选择不同的加密方法,生成的证书的大小也不一样。所以我们尽量选择加密损失空间小的方法。2、证书验证证书验证有的时候不仅需要验证证书是否被篡改,还需要验证证书是否被吊销。之前是由CA机构维护一个吊销证书列表CRL,客户端每次要下载CRL,然后验证证书是否被吊销。随着吊销证书的增多,CRL的大原创 2021-09-22 10:38:03 · 907 阅读 · 1 评论 -
HTTPS之TLS1.3
TLS1.3建立在TLS1.2之上,如果不熟悉TSL1.2,可以看一下我之前写的一篇文章HTTPS之TLS1.2连接详解TLS1.3是TLS1.2的升级版。主要改动在以下方面:1、去除了RSA。因为RSA存在安全隐患,如果黑客手机大量数据破解了服务器私钥,或者服务器私钥泄露,那么密钥就会被黑客解密,数据就透明了。2、TLS变成了1次RTT。具体的流程如下:将CEDHE的参数配置放到了客户端,这样的话客户端可以直接传递给服务器公钥1、服务器在收到客户端的第一个握手的时候,就可以生成密钥。1、服务原创 2021-09-21 19:08:39 · 875 阅读 · 0 评论 -
HTTPS之TLS1.2连接详解
本文说一下HTTPS的会话连接详情1、三次握手连接首先通过三次握手连接来建立连接2、ClientHello客户端首先明文发送以下信息,用于建立加密连接1、随机数ClientRandom客户端生成一个随机数ClientRandom ,用于后面合成 密钥2、TLS版本号客户端支持的TLS版本号3、加密算法列表客户端支持的加密算法列表3、ServerHello服务器收到客户端发送的ClientHello,然后发送回应信息到客户端,包括以下信息1、确认TLS版本号确认客户端发送的TLS原创 2021-09-20 23:17:47 · 5234 阅读 · 2 评论 -
HTTPS加密详解
HTTPS出现原因HTTP默认是明文传输的,数据包在网络中转发的时候,黑客完全可以见数据包拦截下来,查看和篡改其中的信息。比如:1、 查看其中的密码,那么密码就泄露了。。2、 转账操作,如果黑客将被转帐的账户改成自己的,那么你的钱就跑到黑客的账户里了。。。所以HTTP是不安全的,HTTPS 的全称是 HTTP Secure,是HTTP的安全升级版,引入了加密,数据采用密文传输,解决了这一问题。对称加密和非对称加密1、加密和解密当今主要有对称加密和非对称加密两种方式。对称加密对称加密利用原创 2021-09-20 19:01:15 · 972 阅读 · 2 评论 -
HTTP之缓存
缓存出现原因查询和缓存总是配套出现,HTTP的GET请求也是一种查询,是客户端通过HTTP向服务器查询资源,为了减少不必要的查询,也为了降低网络负担,HTTP也引入了缓存。缓存的Key就是URL,Value就是对应的回应Body。缓存详解当浏览器第一次请求一个URL的时候,服务器的响应头中有一个Cache-Control字段中记录了max-age,指的是缓存的有效时间。缓存是由Cache-Control字段来控制的,注意只有客户端的请求头中的Cache-Control才能控制是否使用缓存。1、原创 2021-09-20 13:53:50 · 330 阅读 · 1 评论 -
HTTP之Cookie
Cookie简介HTTP是无状态的,也就是服务器不会保存客户端任何的信息。即使他们刚刚才交换了数据。但是有些场景需要服务器记得客户端的信息,所以就引入了CookieCookie详解Cookie与HTTP中的两个字段有关:1、SetCookie响应头中的一个属性,服务器可以通过该属性向客户端发送Cookie。浏览器接受响应包后,会将相关的Cookie保存在浏览器本地2、Cookie如果服务器对浏览器发送了Cookie,那么之后浏览器访问服务器会自动发送之前写入的Cookie,也就是通过请求头中的原创 2021-09-19 22:20:59 · 1743 阅读 · 1 评论 -
HTTP中重定向
重定向简介HTTP中的重定向就是当客户端访问一个服务器不可用的资源后,服务器会返回一个响应包,响应包中带有另一个链接,然后浏览器会自动跳转到另一个链接,无需用户点击,是浏览器自动跳转的。重定向原理1、 客户端访问了一个不可用的资源,然后服务器返回了一个响应包。响应包有以下特点:1、 status code = 3xx,表示这是一个重定向包2、 响应头中有一个location属性,对应的值为需要跳转到的新链接。3、 浏览器自动发起一个http请求访问新链接4、 服务器返回新链接响应的数据,在浏原创 2021-09-19 19:05:35 · 7155 阅读 · 0 评论 -
HTTP之队头阻塞
HTTP1.1HTTP1.1中引入了长连接,允许多个连接复用一个TCP连接。当多个请求先后调用HTTP发送的时候,如果前一个请求不响应的话,后一个请求是不会发送的。所以如果前一个响应阻塞的话,后边的请求也会被迫阻塞,叫做队头阻塞。为什么要严格控制返回顺序呢?因为假如不按照FIFO返回响应,就无法区分返回的响应头对应哪个HTTP请求头了。HTTP2.0HTTP2.0时,引入了帧、流的概念。HTTP2是基于TCP的。HTTP2允许多个请求不按照先后顺序发送数据,并允许穿插的发送数据,也就是每次发原创 2021-09-19 18:29:20 · 1886 阅读 · 1 评论 -
HTTP长连接和短连接
HTTP长连接简介HTTP1.1中引入了长连接,且HTTP默认就是长连接。有长连接就有短连接,二者有什么区别呢?HTTP是基于TCP的,所以在传输数据的时候,会进行三次握手和四次挥手。短连接: 每次发起HTTP请求都要进行连接,然后再传输完后关闭连接。长连接: 发起完HTTP请求后,并不关闭连接,当连接复用次数到一定次数,或者过了一定时间、或者客户端主动释放连接才会关闭连接。HTTP长连接详情长连接是由一个Connecton字段控制的,有两个取值:1、 Keep-Alive 表示使用长连原创 2021-09-19 17:32:33 · 3310 阅读 · 1 评论 -
HTTP之Chunk
Chunk简介HTTP是可以传输大文件的,比如上G的资源。上G的资源肯定是无法直接传输的,因为以太网有着MTU的限制,所以HTTP采用了Chunk的方法来传输大文件chunk是HTTP应用层实现的分块,不需要TCP的分段了。Chunk详解Chunk的中文意思就是块。Chunk就是将大文件分成块,一个块对应着一个Http请求,然后会对每个Http进行编号,然后在接收方重组。正常的Http请求都是客户端请求,服务器返回然后就结束了。而Chunk不会,是会一直等待服务器多次发送数据,发送数据完成后才原创 2021-09-19 15:53:00 · 6273 阅读 · 1 评论 -
HTTP之Body格式
HTTP中的Body存储的是实际的数据。请求包和响应包都可以携带Body。Body中的数据流程如下:客户端端发送请求Body到服务器,服务器对Body进行解析。服务器发送响应Body到客户端,客户端对Body进行解析。因为HTTP是一个非常灵活的协议,对Body传输的内容不做限制,可以传输各种各样的数据,以及其他信息。所以在传输Body的时候,对应的信息都可以通过key-value的方式保存到header中,方便接收方的对Body的解析。1、数据格式Body中装的是什么类型的数据,对应的ke原创 2021-09-19 15:28:45 · 3517 阅读 · 1 评论 -
HTTP状态码详解
HTTP中的响应包中的第一行中包含状态码,代表着当前HTTP请求的状态。分类:状态码的取值范围 在 000 - 999,大致分为五类:1xx: 中间状态信息,表示还需要后续操作2xx 成功,报文被成功接收3xx 重定向,客户端重新发送其他请求4xx 客户端错误,HTTP报文格式不对5xx 服务器错误,服务器内部发生错误常用状态码举例101改变协议,比如HTTP请求头中指定了upgrade,要求更改协议,比如WebSocket,服务器就会返回101200正常接收,表示HTTP请原创 2021-09-19 14:14:02 · 1911 阅读 · 1 评论 -
HTTP之URL
URL简介URL 叫做 统一资源定位符,Uniform Resource Location。用来标记全球中唯一的一个资源。URL详解1、schemescheme指的是协议。http或者https协议的scheme 就等于 http、https。ftp协议的scheme 等于 ftp2、主机地址1、域名+端口号2、ip地址+端口号端口号可以省略,如果省略就按照默认的端口80。主机地址和scheme之间用 :// 分隔3、路径路径和主机地址之间用 / 分隔通过主机地址原创 2021-09-19 13:16:43 · 1005 阅读 · 1 评论 -
HTTP报文结构详解
HTTP简介HTTP是我们非常熟悉的协议,叫做超本文传输协议,也就是我们浏览网页需要的协议。HTTP报文介绍原创 2021-09-19 10:44:27 · 7314 阅读 · 1 评论 -
ICMP详解
ICMP简介ICMP的全称是Internet Control Message Protocol。也就是网络控制报文协议。ICMP是一个网络层协议。用来检测IP报文是否能够正常发送,以及出错原因,以及查询主机的信息。也就是差错查询和信息查询。我们经常使用的ping工具就是利用ICMP实现的。ICMP详解ICMP报文在IP Header中有一个字段代表是否为ICMP包。ICMP数据中 主要包括 以下字段:1、TypeICMP数据包的类别2、Code对Type的进一步说明3、标识符原创 2021-09-18 19:05:45 · 18296 阅读 · 1 评论 -
NAT和NAPT
NAT和NAPT引入原因IPV4是一个32位的地址,最大容纳为 2 32,就这还包括了广播地址、网络地址等主机不可用的IP地址。也就是40多亿。现在全球电子设备的IP地址已经远远超过了40亿。所以IP地址不是不够用了吗?为什么现在的网络还好好的呢?这都多亏了NAPT技术。NAPT在将NAPT之前,我们先讲下NAT。我们都知道之前的一个路由器端口对应着一个网络。一个路由器端口连着多个主机,每个主机都和路由器端口处于同一网络,每个主机的IP地址都不一样,并且是全球唯一的。这样的话,IPV4地址肯定是原创 2021-09-17 23:24:17 · 1166 阅读 · 1 评论 -
DHCP详解
DHCP简介我们都知道一台计算机或者手机想要上网,必须要有一个IP地址,要不然别人是找不到你的。如果我们要手动配置IP的话,是非常麻烦的。因为一个IP地址要对应着一个网络,而一个网络对应一个位置。如果主机更改位置了,要重新变换IP地址。实际上我们在使用计算机和手机或者更改位置的时候,也没有手动配置或者更换过IP地址吧。但是我们还是正常的上网了。这就归结于DHCP的功劳了。DHCP的全称是Dynamic Host Configuration Protocol,也叫做动态主机配置协议。简单的说,DHC原创 2021-09-17 18:34:27 · 4631 阅读 · 1 评论 -
IP广播地址详解
广播地址简介当一个数据包中的目的IP地址是一个广播地址的时候,当数据包转发到了对应的网络中后,会将数据包转发给网络中的所有主机。具体做法路由器怎么判断 是不是一个广播地址呢?将 目的IP地址 和 广播地址 做 ^ 异或操作如果 ^ 的结果 == 0,说明就是广播地址。有一个特殊的广播地址:255.255.255.255当目标IP地址是 255.255.255.255,路由器直接将数据包转发到本地网络中的所有主机中。255.255.255.255 适用于 DHCP 协议中请求IP数据原创 2021-09-17 17:01:48 · 6050 阅读 · 1 评论 -
RARP详解
RARP简介ARP是根据IP地址请求MAC地址,而RARP相反,是根据MAC地址来获取IP地址。RARP是一个已经退出历史舞台的协议了,用于来获取IP地址,是DHCP的鼻祖。每个局域网中至少有一个RARP服务器,用于接收RARP请求,并为其分配IP地址。RARP缺点:1、 RARP工作在链路层,只能在局域网中申请IP,无法跨网段。2、 RARP必须要提前在RARP服务器中配置MAC地址和IP地址,否则在对应的MAC地址请求时,不会做出回应,会请求失败。RARP工作原理客户端发送一个广播帧,具原创 2021-09-17 13:51:00 · 5431 阅读 · 1 评论 -
ARP详解
ARP简介IP地址只是一个逻辑地址,要想在链路层上传播数据,需要知道MAC物理地址。而IP数据包中只有IP地址,所以就需要一个协议来通过IP地址来获取对应的MAC地址,这个协议就是ARP协议。ARP原理ARP报文解析1、 ARP是工作在链路层的,ARP请求发送一个帧。帧分为两部分:帧头部、ARP请求数据。上图是帧的结构:1、 帧的头部的目的MAC地址为FFFFFFFFFFFF,表示这是一个广播帧,会转发给网络中的所有主机。2、 帧的头部的帧类型有以下选择:1、 0800:运载的是IP数原创 2021-09-16 22:14:58 · 6736 阅读 · 2 评论 -
DNS详解
DNS简介DNS是一个应用层协议,用来获取域名对应的IP地址。什么是域名呢?由于IP地址是一连串的数字,不容易记忆,所以就引入了域名,域名是一串字符,人们更容易记忆。人们可以通过域名代替IP地址来访问对应的主机。域名的构成域名服务器是一个分布式层次树状结构。从上到下分别为根DNS服务器、顶级DNS服务器(一级域名)、权威DNS服务器(二级域名),三级域名服务器等…比如 zhidao.baidu.com 、translate.goole.cn、csdn.net、space.bilibili.c原创 2021-09-16 16:32:30 · 2256 阅读 · 1 评论 -
IP地址之无分类编址CIDR
IP地址表示着一台计算机的逻辑地址。IP地址一开始采用A、B、C等分类编址。最后改成了无分类编址CIDR。1、A、B、C、D、E分类在最开始的时候,计算机科学家将IP地址分为A、B、C、D、E类分类编址有种缺点:比如一个A类地址对应的是224 - 2个IP地址(网络地址和广播地址),这个是个天文数字,一个公司或者组织是无法完全利用这么多IP地址的,就造成了IP地址的浪费。CIDR无分类编址无分类编址的做法是将IP分为两部分:1、网络号网络号对应的是一个网络地址,一个网络可以容纳多个主机原创 2021-09-16 12:47:34 · 4510 阅读 · 1 评论 -
TCP粘包
粘包原创 2021-09-15 21:11:31 · 201 阅读 · 1 评论 -
IP层对UDP分片
IP层对UDP分片的原因由于应用层数据有的时候会超过MTU,超过了链路层的最大运输能力,需要对数据进行分片传输。TCP协议有着自己的分片规则,UDP没有实现对应的分片,每次都是按照报文传输,不论报文多大。这就苦了IP层,IP层会对UDP数据包进行分片传输。IP分片详解我们看IP是怎么对数据包分片,每个分片都带有IP头信息。IP数据包头部有三个字段来进行分片:1、16位标识16位标识用来唯一标识一个UDP数据包,标志着这个分片属于哪个UDP数据包。同一个UDP数据包的不同分片对应的16位标原创 2021-09-14 21:16:37 · 2010 阅读 · 2 评论 -
TCP和UDP的区别
TCP和UDP是传输层提供的两个协议。原创 2021-09-14 11:50:16 · 1079 阅读 · 1 评论 -
TCP拥塞控制
拥塞控制简介TCP会根据网络的拥堵程序来改变数据包发送的速率。如果网络卡顿的话,会降低发送速率,如果网络顺畅的话,会提高发送速率。拥塞控制和流量控制的区别流量控制 针对的是 发送窗口 和 接收窗口之间的关系,是用来保证发送和接收之间的收发均衡。拥塞控制 针对的是 网络拥堵情况 , TCP会根据网络拥堵情况来调整发送速率。拥塞控制的原因如果网络卡顿的时候,还以一个很大的速率发送数据包的话,由于网络卡顿,数据包的延迟时间会很大,导致大量的数据包重发,这不仅会造成资源浪费,还会进一步加重网络原创 2021-09-13 21:36:32 · 490 阅读 · 4 评论 -
TCP流量控制
流量控制的意义TCP提供了流量控制功能,流量控制就是发送窗口要根据接收窗口的实际情况来控制发送数据包的速度。为什么要控制流量呢?因为如果不考虑接收窗口的接收能力,发送窗口以超出接收窗口的能力来发送数据包,接收窗口没有能力接收,只能造成数据包的丢失,然后造成发送方的重传,不仅浪费了网络资源,还会加重网络的拥堵。流量控制正常情况下,发送窗口和接收窗口的大小基本是相等的。...原创 2021-09-13 16:34:35 · 741 阅读 · 1 评论 -
ARQ自动重传详解
ARQ简介ARQ称为Automatic Repeat Request,叫做自动重传。ARQ是TCP实现可靠传输的重要协议。ARQ分类ARQ有以下三种实现,分别对于滑动窗口的三种状态:1、停止-等待协议发送窗口大小 = 1 ,接收窗口大小 = 1发送方每发送一个数据包,就要等待接收方返回ack包。如果在定时器内没有收到ack包,就重新发送数据包。缺点: 发送效率慢,串行发送2、回退N步协议发送窗口大小 n > 1,接收窗口 = 1发送方最多可以连续发送n个数据包,不必等待接原创 2021-09-12 19:10:43 · 5357 阅读 · 6 评论 -
TCP滑动窗口详解
TCP原创 2021-09-11 22:56:33 · 17360 阅读 · 11 评论 -
TCP三次握手,四次挥手详解
TCP头部首先说下TCP的头部,TCP头部是实现TCP协议的重要部分。如上图所示,TCP头部主要包括以下信息:1、源端口号 (16位):数据包的发送方端口2、目标端口号 (16位)数据包的接收方端口3、序列号 seq(32位)在建立连接的时候会生成一个随机数作为序列号,用来标识一个数据包在发送中的位置。每发送一个数据包,序列号就会+1。4、确认应答号 ack(32位)下一次期望获得的数据包的序列号seq5、 4个标识位1、SYNSYN = 1,代表这个数据包是一个客户端的请求原创 2021-09-10 21:26:51 · 10550 阅读 · 7 评论 -
系统角度看TCP三次握手
以系统角度来看三次握手1、当客户端发送SYN包后,服务器将ack、客户端IP和端口包装成节点加入到半连接队列中。2、向客户端发送确认SYN包,当客户端接收到确认SYN包时,在发送数据包,如果ack和能够对的上,就将半连接队列中对应的节点加入到全连接队列中。3、当全连接队列中不空时,会唤醒accept()方法来读取全连接队列中的节点,通过客户端IP和端口为唯一标识,来初始化socket。客户端的一个socket是会占用一个端口的,服务器端的多个socket共用一个端口。...原创 2021-09-10 14:00:38 · 110 阅读 · 1 评论 -
数据包在网络中的传输过程详解
我们当今使用电子设备都离不开网络,通过网络我们可以聊天、玩游戏、看电影都操作。网络的本质就是交换数据。本文我们就来看下数据是如何在网络中传输的。计算机网络模型现在有两种计算机网络模型,分别为OSI七层模型和TCP/IP四层模型OSI将计算机网络分为了7层,TCP/IP将计算机网络分为了4层计算机网络书中为了更好的解释运行原理,将TCP/IP模型改变成了五层模型,将TCP/IP四层模型中的网络接口层分为了数据链路层和物理层。本文也采用五层模型来解释数据在网络中的传输流程。TCP/IP五层模原创 2021-09-09 11:02:10 · 24920 阅读 · 9 评论