思维导图如下:

image-20240427223010060

1.get/post区别:

GET 的语义是从服务器获取指定的资源。GET 请求的参数位置一般是写在 URL 中。安全幂等。

POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。不安全幂等。

2.https:

HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

混合加密的方式实现信息的机密性,解决了窃听的风险。

摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。

将服务器公钥放入到数字证书中,解决了冒充的风险。

3.四次握手:

客户端向服务器发起加密通信,携带者随机数1,服务端返回随机数2,客户端返回随机数3,服务端计算后返回。

4.http2优化:

同个域名只需要占用一个 TCP 连接,使用一个连接并行发送多个请求和响应,这样整个页面资源的下载过程只需要一次慢启动,同时也避免了多个TCP连接竞争带宽所带来的问题。

并行交错地发送多个请求/响应,请求/响应之间互不影响。

在HTTP/2中,每个请求都可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。

二进制传输,头部压缩。

3:

QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议。

5.http与rpc:

RPC 本质上不算是协议,而是一种调用方式,而像 gRPC 和 Thrift 这样的具体实现,才是协议,它们是实现了 RPC 调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时 RPC 有很多种实现方式,不一定非得基于 TCP 协议。

6 长轮循:

我们知道,HTTP 请求发出后,一般会给服务器留一定的时间做响应,比如 3 秒,规定时间内没返回,就认为是超时。

如果我们的 HTTP 请求将超时设置的很大,比如 30 秒,在这 30 秒内只要服务器收到了扫码请求,就立马返回给客户端网页。如果超时,那就立马发起下一次请求。

像这种发起一个请求,在较长时间内等待服务器响应的机制,就是所谓的长轮循机制。我们常用的消息队列 RocketMQ 中,消费者去取数据时,也用到了这种方式。

在 HTTP/1.1 里,只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。

7.WebSocket:

HTTP/1.1,也是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双工

socket 和 WebSocket 之间,就跟雷峰和雷峰塔一样,二者接近毫无关系

image-20240426105045550

对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用 WebSocket 协议。

8.tcp:

IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。

因为 TCP 是一个工作在传输层可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

9.tcp连接:

TCP 四元组可以唯一的确定一个连接,四元组包括如下:

  • 源地址

  • 源端口

  • 目的地址

  • 目的端口

10.tcp/udp:

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。

  • UDP 是不需要连接,即刻传输数据。

  • TCP 是一对一的两点服务,即一条连接只有两个端点。

  • UDP 支持一对一、一对多、多对多的交互通信

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。

  • UDP 是尽最大努力交付,不保证可靠交付数据。

11.三次握手:

image-20240426105600575

12.为什么不使用两次握手:

为了能让客户端有中间状态,避免历史的链接。

TCP 使用三次握手建立连接的最主要原因是防止「历史连接」初始化了连接。

13.四次挥手:

image-20240426105846401

14.tcp重传:超时与快速

TCP 实现可靠传输的方式之一,是通过序列号与确认应答。

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。

重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据,也就是我们常说的超时重传

所以,快速重传的工作方式是当收到三个相同的 ACK 报文时,会在定时器过期之前,重传丢失的报文段。

15.流量控制:窗口:

窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值。

16.拥塞控制:窗口:

拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。

核心就是维护一个窗口。

当发送方每收到一个 ACK,拥塞窗口 cwnd 的大小就会加 1。

当拥塞窗口 cwnd 「超过」慢启动门限 ssthresh 就会进入拥塞避免算法。

每当收到一个 ACK 时,cwnd 增加 1/cwnd。

当发生了「超时重传」,则就会使用拥塞发生算法。

这个时候,ssthresh 和 cwnd 的值会发生变化:

  • ssthresh 设为 cwnd/2

进入快速恢复之前,cwndssthresh 已被更新了:

  • cwnd = cwnd/2 ,也就是设置为原来的一半;

  • ssthresh = cwnd;

17.IP:

MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

源IP地址和目标IP地址在传输过程中是不会变化的(前提:没有使用 NAT 网络),只有源 MAC 地址和目标 MAC 一直在变化。

18.当键入网址后,到网页显示,其间发生了什么:

浏览器做的第一步工作是解析 URL

浏览器生产 HTTP 请求信息

DNS解析域名

操作系统将消息发送给 Web 服务器

层级包装协议:http/tcp/ip/mac最外面

网卡出门

经过交换机开始流转。