介绍
两台及两台以上的计算机相互之间进行数据的收发。
TCP/IP
目前我们经常用到的通信协议就是TCP/IP了, 下面展示了收发两端的层级作用
TCP首部
IP首部
HTTP请求结构
TCP三次握手
第一次握手 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x + 1(Sequence Number + 1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence
Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;第三次握手 客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y + 1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
为什么要三次握手?
确保连接通常且连接请求的有效性。
四次挥手
第一次分手 主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
第二次分手 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为 Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
第三次分手 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
第四次分手 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL(MSL:Maximum
Segment
Lifetime,报文段最大生存时间,详情请见下文介绍)后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
HTTPS
HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transport Layer Security 安全传输层协议)
"client hello"消息:客户端通过发送"client hello"消息向服务器发起握手请求,该消息包含了客户端所 持的 TLS版本和密码组合以供服务器进行选择,还有一个"client random"随机字符串。
"server hello"消息:服务器发送"server hello"消息对客户端进行回应,该消息包含了数字证书,服务器选择的密码组合和"server random"随机字符串。
验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:
- 检查数字签名
- 验证证书链 (这个概念下面会进行说明)
- 检查证书的有效期
- 检查证书的撤回状态 (撤回代表证书已失效)
“premaster secret"字符串:客户端向服务器发送另一个随机字符串"premaster secret (预主密钥)”,这个字符串是经过服务器的公钥加密过的,只有对应的私钥才能解密。
使用私钥:服务器使用私钥解密"premaster secret"。
生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY。
客户端就绪:客户端发送经过共享密钥 KEY加密过的"finished"信号。
服务器就绪:服务器发送经过共享密钥 KEY加密过的"finished"信号。
达成安全通信:握手完成,双方使用对称加密进行安全通信。