计算机网络
文章平均质量分 85
夏目友人不还账
这个作者很懒,什么都没留下…
展开
-
TCP面试问题
等再次收到前面被网络延迟的数据包时,会判断乱序队列有没有数据,然后会检测乱序队列中是否有可用的数据,如果能在乱序队列中找到与当前报文的序列号保持的顺序的报文,就会看该报文是否有 FIN 标志,如果发现有 FIN 标志,这时才会进入 TIME_WAIT 状态。所以,即使没有开启 TCP keepalive,且双方也没有数据交互的情况下,如果其中一方的进程发生了崩溃,这个过程操作系统是可以感知的到的,于是就会发送 FIN 报文给对方,然后与对方进行 TCP 四次挥手。所以,我们可以得知一个点。原创 2023-10-16 16:08:11 · 156 阅读 · 0 评论 -
TCP如何优化
当服务端 SYN 半连接队列溢出后,会导致后续连接被丢弃,可以通过 netstat -s 观察半连接队列溢出的情况,如果 SYN 半连接队列溢出情况比较严重,可以通过 tcp_max_syn_backlog、somaxconn、backlog 参数来调整 SYN 半连接队列的大小。可是,默认的滑动窗口最大值只有 64 KB,不满足当今的高速网络的要求,要想提升发送速度必须提升滑动窗口的上限,在 Linux 下是通过设置 tcp_window_scaling 为 1 做到的,此时最大值可高达 1GB。原创 2023-10-15 19:45:25 · 230 阅读 · 0 评论 -
RPC和WebSocket
既然有 HTTP 协议,为什么还要有 RPC纯裸 TCP 是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP 和各类 RPC 协议就是在 TCP 之上定义的应用层协议。RPC 本质上不算是协议,而是一种调用方式,而像 gRPC 和 Thrift 这样的具体实现,才是协议,它们是实现了 RPC 调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时 RPC 有很多种实现方式,不一定非得基于 TCP 协议。从发展历史来说,HTTP原创 2023-10-13 15:40:20 · 327 阅读 · 1 评论 -
3.7 HTTP3 强势来袭
队头阻塞,HTTP/2 多个请求跑在一个 TCP 连接中,如果序列号较低的 TCP 段在网络传输中丢失了,即使序列号较高的 TCP 段已经被接收了,应用层也无法从内核中读取到这部分数据,从 HTTP 视角看,就是多个请求被阻塞了;TCP 和 TLS 握手时延,TCP 三次握手和 TLS 四次握手,共有 3-RTT 的时延;原创 2023-10-12 16:44:28 · 422 阅读 · 0 评论 -
3.6 HTTP/2提升性能的几个方向
HTTP/2 通过 Stream 的并发能力,解决了 HTTP/1 队头阻塞的问题,看似很完美了,但是 HTTP/2 还是存在“队头阻塞”的问题,只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层。不过,动态表并非可以无限增大, 因为动态表是会占用内存的,动态表越大,内存也越大,容易影响服务器总体的并发能力,因此服务器需要限制 HTTP/2 连接时长或者请求次数。有没有什么解决方案呢?的方式,将体积压缩了近一半,而且针对后续的请求头部,还可以建立。第一点,对于常见的 HTTP 头部通过。原创 2023-10-12 16:22:51 · 144 阅读 · 0 评论 -
3.5 HTTPS 如何优化
对于软件优化的方向,如果可以,把软件升级成较新的版本,比如将 Linux 内核 2.X 升级成 4.X,将 openssl 1.0.1 升级到 1.1.1,因为新版本的软件不仅会提供新的特性,而且还会修复老版本的问题。这些会话重用技术虽然好用,但是存在一定的安全风险,它们不仅不具备前向安全,而且有重放攻击的风险,所以应当对会话密钥设定一个合理的过期时间。对于硬件优化的方向,因为 HTTPS 是属于计算密集型,应该选择计算力更强的 CPU,而且最好选择。原创 2023-10-12 15:30:09 · 38 阅读 · 0 评论 -
HTTPS ECDHE 握手解析
RSA 密钥协商算法「不支持」前向保密,ECDHE 密钥协商算法「支持」前向保密;使用了 RSA 密钥协商算法,TLS 完成四次握手后,才能进行应用数据传输,而对于 ECDHE 算法,客户端可以不用等服务端的最后一次 TLS 握手,就可以提前发出加密的 HTTP 数据,节省了一个消息的往返时间;使用 ECDHE, 在 TLS 第 2 次握手中,会出现服务器端发出的「Server Key Exchange」消息,而 RSA 握手过程没有该消息;原创 2023-10-12 14:34:18 · 141 阅读 · 0 评论 -
HTTPS RSA 握手解析
, 一般 WITH 单词前面有两个单词,第一个单词是约定密钥交换的算法,第二个单词是约定证书的验证算法。原创 2023-10-11 21:08:13 · 40 阅读 · 0 评论 -
3.2 HTTP1.1 如何优化
这次主要从 3 个方面介绍了优化 HTTP/1.1 协议的思路。第一个思路是,通过缓存技术来避免发送 HTTP 请求。客户端收到第一个请求的响应后,可以将其缓存在本地磁盘,下次请求的时候,如果缓存没过期,就直接读取本地缓存的响应数据。如果缓存过期,客户端发送请求的时候带上响应数据的摘要,服务器比对后发现资源没有变化,就发出不带包体的 304 响应,告诉客户端缓存的响应仍然有效。将原本由客户端处理的重定向请求,交给代理服务器处理,这样可以减少重定向请求的次数;原创 2023-10-11 20:09:39 · 36 阅读 · 0 评论 -
HTTP面试问题3
图中发送方发送了很多个 packet,每个 packet 都有自己的序号,你可以认为是 TCP 的序列号,其中 packet 3 在网络中丢失了,即使 packet 4-6 被接收方收到后,由于内核中的 TCP 数据不是连续的,于是接收方的应用层就无法从内核中读取到,只有等到 packet 3 重传后,接收方的应用层才可以从内核中读取到数据,这就是 HTTP/2 的队头阻塞问题,是在 TCP 层面发生的。UDP 发送是不管顺序,也不管丢包的,所以不会出现像 HTTP/2 队头阻塞的问题。原创 2023-10-11 19:41:10 · 29 阅读 · 0 评论 -
HTTP常见面试题2
也就是内容的「指纹」,这个。原创 2023-10-11 16:25:26 · 27 阅读 · 0 评论 -
计算机网络面试问题1
三次握手的目的是确保双方都能够收到对方的请求和确认,并且双方都同意建立连接。同时,三次握手也能够防止已经失效的连接请求报文段在网络中重新出现,避免了资源的浪费。5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现意外错误。1xx:信息性状态码,表示服务器已接收了客户端请求,客户端可继续发送请求。完成了这三次握手后,TCP连接就建立起来了,双方可以开始进行数据的传输。4xx:客户端错误状态码,表示客户端的请求有非法内容。3xx:重定向状态码,表示服务器要求客户端重定向。原创 2023-10-10 22:07:10 · 230 阅读 · 0 评论 -
HTTP 常见面试题1
强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。如下图中,返回的是 200 状态码,但在 size 项中标识的是 from disk cache,就是使用了强制缓存。, 是一个相对时间;Expires,是一个绝对时间;如果 HTTP 响应头部同时有 Cache-Control 和 Expires 字段的话,Cache-Control 的优先级高于 Expires。原创 2023-10-10 16:40:31 · 30 阅读 · 0 评论 -
键入网址到网页显示,期间发生了什么
浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。的 MAC 地址就有点复杂了,只要告诉以太网对方的 MAC 的地址,以太网就会帮我们把包发送过去,那么很显然这里应该填写对方的 MAC 地址。原创 2023-10-10 15:02:07 · 202 阅读 · 0 评论 -
2.3 Linux 系统是如何收发网络包的
电脑与电脑之间通常都是通过网卡、交换机、路由器等网络设备连接到一起,那由于网络设备的异构性,国际标准化组织定义了一个七层的 OSI 网络模型,但是这个模型由于比较复杂,实际应用中并没有采用,而是采用了更为简化的 TCP/IP 模型,Linux 网络协议栈就是按照了该模型来实现的。TCP/IP 模型主要分为应用层、传输层、网络层、网络接口层四层,每一层负责的职责都不同,这也是 Linux 网络协议栈主要构成部分。原创 2023-10-09 22:14:06 · 188 阅读 · 0 评论 -
TCP/IP 网络模型有哪几层
综上所述,TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。每一层的封装格式:网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。原创 2023-10-09 16:26:10 · 168 阅读 · 0 评论