HTTPS

发布时间 2023-04-11 21:04:31作者: 哦、菜狗啊

TCP/IP 模型:数据链路层、网络层、传输层、应用层

OSI模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

HTTP2

  1. 常见头部用静态表和Huffman编码压缩,后续请求头部也可用动态表,体积也大大压缩
  2. 实现Stream并发
  3. 服务器支持主动推送资源
  4. 二进制编码

缺点:队头阻塞,握手时延高,连接迁移需要重新连接

HTTP3

  1. 无队头阻塞
  2. 连接快,内部有TLS1.3,一个RTT就可以完成连接与密钥协商
  3. 连接迁移,通过连接ID标记通信端点

TCP连接

客户端 服务器端
SYN = 1,seq = x(发送随机初始化序号x)
SYN = 1,ACK = 1,seq = y,ack = x+1(收到序号为x的报文,应答x+1,随机初始化自己的序号y)
ACK = 1,seq = x+1,ack = y+1(收到序号y,并将y+1作为应答号,报文序号为x+1)【请注意TCP规定,普通的TCP确认报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下所发送的下一个数据报文段的序号仍是x + 1。】

采用三报文握手,而不是两报文握手来建立TCP连接,是为了防止已失效的连接请求报文段突然又传送到了TCP服务器进程因而导致错误。

seq即同步序列编号(Synchronize Sequence Numbers)syn->Synchronize
ack即确认号(acknowledgement number)

TLS

RSA四次握手(TLS 1.2)

客户端 服务器端
ClientHello
- TLS Version(客户端使用的TLS版本号)
- CLient Random(生成的随机数)
- Cipher Suites(支持的密码套件)
ServerHello
- TLS Version(确认的TLS版本)
- Server Random(服务器端随机数)
- Cipher Suite(最终选择的密码套件)

Server Certificate(发送服务器端证书)

Server Hello Done(服务器Hello完成)
Client Key Exchange(检验完证书后,再次生成随机数PreMaster,发送)
Change Cipher Spec(由CLient Random、Server Random、PreMaster生成会话密钥,以后改用会话密钥加密通信)
Finished
Change Cipher Spec(解密出PreMaster,同样生成一样的会话密钥,以后改用密钥加密通信)
Finished

共需要4次握手,2个RTT时延( RTT(Round-Trip Time):往返时延。从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。)

RSA密钥协商不支持前向加密。客户端一开始传递随机数时使用服务器公钥加密,由服务器私钥解密,这里可能存在服务器私钥泄露,后续所有信息被第三方截获破解。

ECDHE四次握手(TLS 1.3)

客户端 服务器端
ClientHello
- TLS Version(客户端使用的TLS版本号)
- CLient Random(生成的随机数)
- Cipher Suites(支持的密码套件)
ServerHello
- TLS Version(确认的TLS版本)
- Server Random(服务器端随机数)
- Cipher Suite(最终选择的密码套件)

Server Certificate(发送服务器端证书)
Server Key Exchange(选择椭圆曲线,生成随机数为私钥,由私钥通过椭圆曲线算出公钥,发送椭圆曲线、公钥给客户端)


Server Hello Done(服务器Hello完成)
Client Key Exchange(检验完证书后,生成随机数为私钥,由椭圆曲线算出客户端公钥,发送公钥
Change Cipher Spec自身私钥对方公钥椭圆曲线算出一个值,再由该值、CLient Random、Server Random,生成最终会话密钥,以后改用会话密钥加密通信)
Encrypted Handshake Message(将之前发送的数据做一个摘要,再用会话密钥发送加密后,验证对称密钥是否可用)
Change Cipher Spec自身私钥对方公钥椭圆曲线算出一个值,再由该值、CLient Random、Server Random,生成最终会话密钥,以后改用会话密钥加密通信)
Encrypted Handshake Message(将之前发送的数据做一个摘要,再用会话密钥加密加密后,验证对称密钥是否可用)

ECDHE 相比 RSA 握手过程省去了一个消息往返的时间(1 RTT),在还没连接完全建立前,就发送了应用数据,这样便提高了传输的效率。

TCP断开连接

image-20230410152629270

客户端 服务器端
FIN = 1,ACK = 1,seq = u,ack = v
ACK = 1,seq = v,ack = u+1
(中间还可以继续传数据)
FIN = 1,ACK = 1,seq = w,ack = u+1
ACK = 1,seq = u+1,ack = w+1

没有数据要发送且开启TCP 延迟确认机制后,第二次挥手和第三次挥手会合并成一次

等待2MSL原因:1.防止旧连接的数据包影响 2.保证连接正常关闭