谈谈你对 TCP 三次握手和四次挥手的理解
三次握手
客户端发送syn(包含req,保证输入的安全性,以及验证包的顺讯)包到服务器,等待服务器接受.
- 支持的协议版本
- 一个客户端生成的随机数,用于生成'对话秘钥'
- 支持的加密方法,比如RSA加密方法
- 支持的压缩方法
服务器接受数据包并确认客户的syn,并发送syn+ack(确认字符)的包给客户端.
- 确认使用的加密通信的协议版本,如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
- 一个服务器生成的随机数,用于生成'对话秘钥'
- 确认使用的加密方法,比如RSA加密方法
- 服务器证书
客户端确认接受服务器接受的syn+ack的包,并向服务器发送确认包ack
- 一个随机数。该随机数用服务器公钥加密,防止被窃听
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
HTTPS 握手过程中,客户端如何验证证书的合法性?
- 校验证书的颁发机构是否受客户端信任
- 通过CRL和OCSP的方式验证证书时候被吊销
- 对比系统时间,看证书是否到期
- 通过校验对方是否存在证书的私钥,判断证书的网站域名是否与证书颁发的域名一致
四次挥手
- 客户端发送fin信号,告诉服务器需要断开连接,等待服务器响应.
- 服务器接收到fin信号并确认,回应等待数据发送完成请求,发送ack包(失败可以重新发送).
- 服务器数据传输完毕,发送给客户端确认信息,等待客户端响应,如响应,则服务端直接关闭.
- 客户端收到响应,并确认信息,然后再次发送ack包给服务端,并进入time_wait状态,等待2MSL(最大报文生存时间)后,没有响应,则直接关闭.