[计算机基础] HTTP与HTTPS

321 阅读4分钟

Android相关知识点总结。

参考文章 juejin.cn/post/684490…

1. HTTP与HTTPS的概念以及二者的区别

HTTP(Hyper Text Transfer Protocol over Layer超文本传输协议),他在传输层TCP协议的基础之上,规定了一种万维网(www)服务器与浏览器之间信息传递的规范,作用于应用层。

HTTP在HTTP协议的基础之上,添加TSL/SSL安全层,做到了传输加密和身份认证,保证了传输过程的安全性。

http请求发起后,客户端会打开一条到服务端默认80端口的TCP连接,期间会完成TCP的三次握手、四次挥手,然后客户端会想服务端发送http请求报文,服务端返回相应报文。 而https请求发起后,客户端会打开一条到服务端默认443端口的TCP连接,期间会完成SSL的连接过程。

2. TCP连接的建立(三次握手)、释放(四次挥手)

首先要明确几个概念:

  1. 序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  2. 确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
  3. 标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:
  • URG:紧急指针(urgent pointer)有效。
  • ACK:确认序号有效。
  • PSH:接收方应该尽快将这个报文交给应用层。
  • RST:重置连接。
  • SYN:发起一个新连接。
  • FIN:释放一个连接。
  1. 建立连接

第一次握手: 客户端向服务端发送Seq=X(一般为1)、标志位SYN=1的报文,随后客户端进入SYN-SENT阶段,等待服务端的确认。

第二次握手: 服务端接收到来自客户端的报文之后,结束LISTEN阶段。并返回Seq=Y、Ack=X+1、标志位SYN=1、ACK=1的报文,随后服务端进入SYN-RCVD阶段。

第三次握手: 客户端接收到来自服务端的确认收到数据的报文之后,明确了从客户端到服务端的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段Seq=X+1、Ack=Y+1、标志位ACK=1(确认收到服务端同意连接的信号)的报文,随后客户端进入ESTABLISHED阶段。

  1. 释放连接

第一次挥手: 客户端想要释放连接,向服务端发送一条Seq=U、标志位FIN=1的报文,随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且客户端停止向服务端发送数据,但是客户端仍然能接收从服务端传输过来的数据。

第二次挥手: 服务端接收到客户端发出的Fin报文后,确认了客户端想要释放连接,随后服务端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段Seq=V、Ack=U+1、标志位ACK=1的报文。随后服务端开始准备释放服务端到该客户端方向上的连接。 客户端收到从服务端发出的报文后,确认了服务端收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段。

第三次挥手: 服务端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务端到客户端方向上的连接准备,再次向客户端发出一段Seq=W、Ack=U+1、标志位Fin=1 ACK=1的报文。随后服务端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并停止向客户端发送数据,但是服务端仍然能接收从客户端传输过来的数据。

第四次挥手: 客户端收到从服务端发出的报文后,确认了已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并发送最后一段Seq=U+1、Ack=W+1,标志位ACK=1的报文。随后客户端开始在TIME-WAIT阶段等待2MSL,服务端收到报文后结束LAST-ACK阶段,进入CLOSED阶段。客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段。由此正式确认关闭服务端到客户端方向上的连接。

具体可参考 blog.csdn.net/csdnnews/ar…

3. SSL连接建立

  • 客户端发送请求,生成一个随机数A发送到服务端
  • 服务端也生成一个随机数B,返回公钥和CA证书到客户端
  • 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数C,用公钥对其加密,发送到服务端
  • 服务端接受到这个加密后的随机数C后,会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
  • 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
  • SSL加密建立