七层协议

image.png

TCP

三次握手

  1. 客户端发送SYN包(seq=i)到服务器,进入SYN_SENT状态
  2. 服务器收到SYN包,设置ACK为i+1,同时发送SYN包(seq=j),进入SYN_RECV状态
  3. 客户端收到服务器端ACK+SYN报文段,将ACK设置为j+1向服务器发送ACK报文段,发送完毕后进入ESTABLISHED状态

    四次挥手

  4. 主机1(客户端/服务器)设置Seq=i向主机2发送一个FIN报文段,此时主机1进入FIN_WAIT状态

  5. 主机2收到主机1发送的FIN报文段,向主机1回一个ACK为i+1,此时主机2进入FIN_WAIT_2状态
  6. 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态
  7. 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段就此关闭,主机1等待2ML后依然没有回复则证明Server端已经正常关闭,主机1也关闭连接

    主机1等待2ML的原因是防止主机2没有收到自己发的ACK消息,防止他超时重传FIN,而自己已经关闭了

HTTPS

https是采用对称加密和非对称加密相结合的方式来进行安全认证的。对称加密用来加密所要发送的信息,非对称加密用来传输对称加密的秘钥算法等信息。

网路协议 - 图2

  1. 客户端访问服务器(https://www.domain.com)
  2. 采用HTTPS协议的必须要有一套数字证书,可以自己制作也可以向组织申请。区分在于自己颁发的证书需要客户端验证通过才能继续访问,而受信任的公司申请的证书不会弹出提示页面。这套证书中包含一对公私钥、机构信息、过期时间等
  3. 传送证书(包含公钥)给客户端
  4. 客户端解析证书。验证公钥是否有效,比如颁发机构、过期时间等。如果验证通过,生成一个随机值,通过证书中的公钥进行非对称加密。
  5. 客户端加密随机值传输给服务端,后面双方会以这个随机值作为公私钥进行内容对称加密传输。
  6. 服务端用私钥解密随机值
  7. 传输(随机值)对称加密的信息返回给客户端
  8. 客户端利用之前生成的随机值进行解密