计算机网络
-
TCP连接
-
三次握手
-
客户端发送syn报文段
-
服务端收到后返回syn和ack
-
客户端收到后返回ack
-
-
四次挥手
- 客户端发出 FIN
- 服务端收到后发出 ACK
- 服务端发出 FIN
- 客户端回复ACK,经过2MSL(最大报文段生存时间)后断开,服务端收到后立即断开
-
-
为什么要三次握手四次挥手
- 握手:两次的话服务端不知道客户端是否有接收能力
- 挥手:tcp是全双工的,这意味着数据可以在两个方向上传输,第三次和第四次确保了双方数据传输完毕,并且每个方向是独立的被关闭
-
https连接
- 客户端发起
HTTPS
请求,发送客户端生成的随机数
和支持的加密算法列表
; - 服务端返回
证书
、服务端生成的随机数
、选择的加密方法
给客户端; - 客户端对证书进行合法性验证,验证通过后再生成一个
随机数
,客户端通过证书中的公钥
对随机数
进行加密传输到服务端,服务端接收后通过私钥
解密得到随机数
- 三次握手此时已经完成,之后客户端和服务端都会根据这三个
随机数
,生成一个随机对称密钥
,之后的数据都通过随机对称密钥
进行加密传输
。
- 客户端发起
-
https 比 http 好在哪
-
数据安全
-
数据完整性:
-
身份验证
-
https页面白屏问题
-
证书过期
-
证书不匹配
-
证书链不完整
-
证书被吊销
-
自签名证书
-
http 2.0
-
二进制分帧
:在之前的HTTP
版本中,我们是通过文本
的方式传输数据。在HTTP/2
中信息和数据体都是二进制,并且统称为"帧
":用头信息帧放头部字段,用数据帧放请求数据体,是一堆乱序的二进制帧,它们不存在先后关系,因此不需要排队等待,是HTTP2
多路复用的基础。 -
头部压缩
HTTP2
使用HPACK算法
压缩头部然后再发送,并在两端维护了索引表,用于记录出现过的header
,后面在传输过程中就可以传输已经记录过的header
的键名,对端收到数据后就可以通过键名找到对应的值。 -
多路复用
在一个连接里,可以同时发送
多个请求或回应,且不用按顺序一一对应,这样子解决了HTTP队头阻塞
的问题。
`服务器推送` 允许浏览器发送一个请求后,服务器主动向浏览器推送与这个请求相关的`资源`,这样浏览器就不用发起后续请求去获取一些`资源`。但是`Chrome106`版本禁用了,改为`103状态码`;
-
http1 => http1.1 => http2 => http3 的区别
-
http1: 是一个无状态,短连接协议,它很简单但是也存在一些问题
-
短链接:每次浏览器和服务端建立连接后处理一个请求响应就会断开
3. 性能低:如果加载大量资源例如图片,每个资源都需要建立一个新的 tcp 连接
4. 无主机头:不支持同一个ip上部署多个域名,无法区分请求是发送给哪个域名的
-
http 1.1: 目前使用最广泛的版本之一
-
长连接:默认开启,在一个 tcp 连接中可以发送多个请求和处理多个响应,请求串行
-
管道化:允许浏览器发送一个请求后不等待响应就可以发送另一个。但是由于服务器必须按照顺序返回响应,如果前面的请求太慢就会导致“队头阻塞”,所以实践中很少使用。发送并行,接收串行
-
引入主机头
-
http 2.0: 解决队头阻塞
-
多路复用:允许一个 tcp 连接上同时发送和接收多个独立的请求响应,请求和接收都为并行
-
头部压缩:使用HPACK算法对请求和响应头进行压缩
-
服务器推送
-
二进制分帧:之前的版本都是通过文本的方式传输,http2中数据和信息都是二进制乱序存放,每个帧有唯一标识符,以便浏览器在接收后进行组装
-
http 3:解决http2在传输层的队头阻塞
-
基于 UDP的 QUIC 协议
-
tcp丢包后其他数据流会被阻塞,quic丢包后不会影响其他数据流
-
更快的建立连接
-
连接迁移
-
