谈谈你对 TCP 三次握手和四次挥手的理解

三次握手

客户端发送syn(包含req,保证输入的安全性,以及验证包的顺讯)包到服务器,等待服务器接受.

  • 支持的协议版本
  • 一个客户端生成的随机数,用于生成'对话秘钥'
  • 支持的加密方法,比如RSA加密方法
  • 支持的压缩方法

服务器接受数据包并确认客户的syn,并发送syn+ack(确认字符)的包给客户端.

  • 确认使用的加密通信的协议版本,如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
  • 一个服务器生成的随机数,用于生成'对话秘钥'
  • 确认使用的加密方法,比如RSA加密方法
  • 服务器证书

客户端确认接受服务器接受的syn+ack的包,并向服务器发送确认包ack

  • 一个随机数。该随机数用服务器公钥加密,防止被窃听
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验

HTTPS 握手过程中,客户端如何验证证书的合法性?

  • 校验证书的颁发机构是否受客户端信任
  • 通过CRL和OCSP的方式验证证书时候被吊销
  • 对比系统时间,看证书是否到期
  • 通过校验对方是否存在证书的私钥,判断证书的网站域名是否与证书颁发的域名一致

四次挥手

  • 客户端发送fin信号,告诉服务器需要断开连接,等待服务器响应.
  • 服务器接收到fin信号并确认,回应等待数据发送完成请求,发送ack包(失败可以重新发送).
  • 服务器数据传输完毕,发送给客户端确认信息,等待客户端响应,如响应,则服务端直接关闭.
  • 客户端收到响应,并确认信息,然后再次发送ack包给服务端,并进入time_wait状态,等待2MSL(最大报文生存时间)后,没有响应,则直接关闭.
原文地址:https://www.cnblogs.com/liuabo/p/13608155.html