http三次握手和四次挥手

Posted <a href="#">le

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http三次握手和四次挥手相关的知识,希望对你有一定的参考价值。


前言

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。


一、HTTP和HTTPS

1. HTTP

  • HTTP 请求的过程

域名解析 --> 发起 TCP 的 3 次握手 --> 建立 TCP 连接后发起 HTTP 请求 -->服务器响
应 HTTP 请求,浏览器得到 html 代码 -->浏览器解析 html 代码,并请求 html 代码中的资
源(如 js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

  • 请求原理
    HTTP 协议是应用层的一种协议,是一种 C/S 架构服务,基于 TCP/IP 协议来通信,监听在
    TCP 的 80 端口上,HTTP 协议实现的是客户端可以向服务端获得 web 资源

2. HTTPS

  • 原理

HTTPS 在传输数据前需要客户端(浏览器)与服务器(网站)之间进行一次握手,在握手过程中
将确立双方加密传输数据的密码信息.TLS/SSL 协议是一套加密传输协议,使用了非对称加
密,对称加密,以及 HASH 算法。

  • HTTPS 为什么安全
    因为网络请求需要中间有很多的服务器路由器的转发。中间的节点都可能篡改信息,而如
    果使用 HTTPS,密钥在你和终点站才有。HTTPS 之所以比 HTTP 安全,是因为他利用 ssl/tls
    协议传输。它包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer 传递
    等。保障了传输过程的安全性。

二、什么是 TCP 连接的三次握手

1. 三次握手

TCP 是因特网中的传输层协议,使用三次握手协议建立连接,完成三次握手,客户端与服
务器开始传送数据。

第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SENT 状态,
等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个
SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此
包发送完毕,客户端和服务器进入 ESTABLISHED(TCP 连接成功)状态,完成三次握手。

2. TCP 协议优点

TCP 发送的包有序号,对方收到包后要给一个反馈,如果超过一定时间还没收到反馈就
自动执行超时重发,因此 TCP 最大的优点是可靠。

3. TCP 协议缺点

很简单,就是麻烦,如果数据量比较小的话建立连接的过程反而占了大头,不断地重发
也会造成网络延迟,因此比如视频聊天通常就使用 UDP,因为丢失一些包也没关系,速
度流畅才是重要的。

三、 为什么 TCP 连接需要三次握手四次挥手

1. 为什么是三次握手?

为了防止已失效的连接请求报文段突然有送到了服务器,因而产生错误,假设两次握手时,
客户发出的第一个请求连接报文段在某一网络节点长时间滞留,以致延误到连接释放后才
到达服务器。服务器收到失效的连接请求报文段后,认为是客户又发出一次新的连接请求。
于是向客户发送确认报文段,同意建立连接,此时在假定两次握手的前提下,连接建立成
功。这样会导致服务器的资源白白浪费。

2. 为什么是四次挥手?

TCP 协议是全双工通信,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接
是双方都需要确认的共同行为,假设是三次挥手时,首先释放了客户到服务器方向的连接,
此时 TCP 连接处于半关闭状态,这时客户不能向服务器发送数据,而服务器还是可以向客
户发送数据。如果此时客户收到了服务器的确认报文段后,就立即发送一个确认报文段,
这会导致服务器向客户还在发送数据时连接就被关闭。这样会导致客户没有完整收到服务
器所发的报文段。


总结

Success often depends upon knowing how long it will take to succeed.

以上是关于http三次握手和四次挥手的主要内容,如果未能解决你的问题,请参考以下文章

TCP-三次握手和四次挥手简单理解

http协议的三次握手和四次挥手

三次握手,四次挥手(详解)

TCP三次握手和四次挥手

三次握手和四次挥手

为啥是四次挥手而不是三次