http、https、tcp三次握手,四次挥手

发布时间 2023-11-13 15:41:30作者: boye169

HTTP、HTTPS和TCP介绍

  1. HTTP(超文本传输协议是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。是用于www浏览的一个协议。
  2. HTTPS(超文本传输安全协议) = HTTP + SSL/TSL(安全层),HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
  3. TCP(传输控制协议):是机器之间建立连接用的到的一个协议。

HTTP本身是一个协议,一般是基于TCP连接的。( HTTP/3 基于 UDP 协议)

HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。

http协议和https协议的区别

  传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同

传输信息安全性不同

1、http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
2、https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。

连接方式不同

1、http协议:http的连接很简单,是无状态的。
2、https协议:是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

端口不同

1、http协议:使用的端口是80。
2、https协议:使用的端口是443.

证书申请方式不同

1、http协议:免费申请。
2、https协议:需要到ca申请证书,一般免费证书很少,需要交费

HTTP(TCP)连接

三次握手

  1. 客户端发送SYN包到服务端,等待服务端确认;
  2. 服务端确认接收SYN包,并发送回来一个SYN+ACK包给客户端;
  3. 客户端确认接收,并向服务端发送确认包ACK,连接建立。

为什么是三次握手?

因为三次握手是保证client和server端均让对方知道自己具备发送和接收能力的最小次数:

  1. client–>server:server确认client具备发送能力
  2. server–>client:client确认服务端具备接收和发送能力
  3. client–>server:server确认client具备接收能力

为什么每次还要发送SYN或者ACK?

这是为了保证每一次的握手都是对上一次握手的应答,每次握手都会带一个标识 SEQ,后续的ACK都会对这个SEQ进行加一来进行确认。也就是保证每次的握手双方都是同一个”人”,而不是中途被替换了。

四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务器均可主动发起挥手动作。

(1) TCP客户端发送一个FIN报文,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN报文,它发回一个ACK报文,确认序号为收到的序号加1。和SYN一样,一个FIN报文将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1.

为什么是四次挥手?

因为TCP是一个全双工协议,必须单独拆除每一条信道。4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。

如果是三次挥手,会怎么样?三次的话,被动关闭端在收到FIN消息之后,需要同时回复ACK和Server端的FIN消息。如果Server端在该连接上面并没有Pending的消息要处理,那么是可以的,如果Server端还需要等待一段时间才可以关闭另外一个方向的连接,那么这样的三次挥手就不能满足条件。