Http和Https的区别

http是一种超文本传输协议,http是在一个计算机世界里专门在两点之间传输问题、图片、音频、视频等超文本的数据约定和规范。
http主要内容分为三个部分,超文本(Hypertext)、传输(Transfer)、协议(Protocol)

  1. 超文本就是不单单是文本,还可传输图片、音频、视频等
  2. 文本、图片、音频等这些概念可以统称为数据,传输就是数据需要经过一系列的物理介质从一个端系统传送到另一个端系统的过程。通常我们把传输数据的一方称为请求放,把接收二进制数据包的一方称为应答方 Http和Https - 图1
  3. 协议是指在网络中传递、管理信息的一些规范。如人与人之间是通过语言来交流,那么这个交流的语言就是协议。计算机之间相互通信也是需要遵循一定的规则的,这个规则称为协议。
  4. TCP/IP的五层模型

无标题.png

三次握手

服务端进程启动,准备接收客户端进程的连接请求,此时接收方进入LISTEN(监听)模式
三次握手

  1. 第一次握手:客户端向服务端发送连接请求报文,这是报文HEAD中的SYN标志位为1,同时设置一个初始序列号seq=x(随机数)。做完这步动作,发送方进入SYN_SENT(同步已发送状态)
    SYN:同步标志位,seq:包序列编号(每个包都有一个序列号)
    第一次握手客户端发送的报文称为同步请求报文,希望与服务端建立同步连接,报文不携带数据
  2. 第二次握手:服务端收到来自客户端的连接请求报文后,需要确认收到,确认收到的响应报文中ACK(确认标志位)设置为1,将确认号ack设置为第一步的请求序列号seq加1(ack=x+1,x为第一次握手传入的seq值)。另外服务端也返回一个SYN包(可以建立同步连接),既SYN+ACK包,序列号seq=y。服务端进入SYN_RCVD(同步收到)状态
    ACK:确认状态位(这里ACK=1),这个ACK一定要和ack(32位确认序号,这里是ack=x+1)区分开来,ACK是包的状态标志,ack是确认序号
  3. 第三次握手:客户端收到来自服务端的SYN+ACK包,会发送一个ACK确认包。ACK=1,ack=y+1(y是第二步端响应的seq值),seq=x+1(注意这里的x是第二步服务端响应的ack值)

为什么需要建立三次握手来建立TCP连接

  1. 第一次握手客户端发送报文给服务端,收到服务端的响应表示客户端的发送数据能力没问题
  2. 第二次握手服务端发送数据给客户端表示服务端接收数据能力没问题
  3. 第三次握手客户端发送报文给服务端表示服务端发送数据能力没问题,客户端接收数据能力没问题。客户端和服务端都能正常接收和响应。

所以要验证客户端和服务端的发送和接收数据能力至少需要三次握手才能达到