七层协议
TCP
三次握手
- 客户端发送SYN包(seq=i)到服务器,进入SYN_SENT状态
- 服务器收到SYN包,设置ACK为i+1,同时发送SYN包(seq=j),进入SYN_RECV状态
客户端收到服务器端ACK+SYN报文段,将ACK设置为j+1向服务器发送ACK报文段,发送完毕后进入ESTABLISHED状态
四次挥手
主机1(客户端/服务器)设置Seq=i向主机2发送一个FIN报文段,此时主机1进入FIN_WAIT状态
- 主机2收到主机1发送的FIN报文段,向主机1回一个ACK为i+1,此时主机2进入FIN_WAIT_2状态
- 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态
- 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段就此关闭,主机1等待2ML后依然没有回复则证明Server端已经正常关闭,主机1也关闭连接
主机1等待2ML的原因是防止主机2没有收到自己发的ACK消息,防止他超时重传FIN,而自己已经关闭了
HTTPS
https是采用对称加密和非对称加密相结合的方式来进行安全认证的。对称加密用来加密所要发送的信息,非对称加密用来传输对称加密的秘钥算法等信息。
- 客户端访问服务器(https://www.domain.com)
- 采用HTTPS协议的必须要有一套数字证书,可以自己制作也可以向组织申请。区分在于自己颁发的证书需要客户端验证通过才能继续访问,而受信任的公司申请的证书不会弹出提示页面。这套证书中包含一对公私钥、机构信息、过期时间等
- 传送证书(包含公钥)给客户端
- 客户端解析证书。验证公钥是否有效,比如颁发机构、过期时间等。如果验证通过,生成一个随机值,通过证书中的公钥进行非对称加密。
- 客户端加密随机值传输给服务端,后面双方会以这个随机值作为公私钥进行内容对称加密传输。
- 服务端用私钥解密随机值
- 传输(随机值)对称加密的信息返回给客户端
- 客户端利用之前生成的随机值进行解密