Http和Https协议请求时都会通过Tcp三次握手建立Tcp连接 。
那么,三次握手是指什么呢?

文章插图
那么,为什么一定要三次握手呢,一次可以吗?两次可以吗?
带着这些问题,我们来分析一下为什么必须是三次握手 。
1、第一次握手,A向B发送信息后,B收到信息 。B可确认A的发信能力和B的收信能力
2、第二次握手,B向A发消息,A收到消息 。A可确认A的发信能力和收信能力,A也可确认B的收信能力和发信能力
3、第三次握手,A向B发送消息,B接收到消息 。B可确认A的收信能力和B的发信能力
通过三次握手,A和B都能确认自己和对方的收发信能力,相当于建立了互相的信任,就可以开始通信了 。
下面,我们介绍一下三次握手具体发送的内容,用一张图描述如下:

文章插图
首先,介绍一下几个概念:
- ACK:响应标识,1表示响应,连接建立成功之后,所有报文段ACK的值都为1
- SYN:连接标识,1表示建立连接,连接请求和连接接受报文段SYN=1,其他情况都是0
- FIN:关闭连接标识,1标识关闭连接,关闭请求和关闭接受报文段FIN=1,其他情况都是0,跟SYN类似
- seq number:序号,一个随机数X,请求报文段中会有该字段,响应报文段没有
- ack number:应答号,值为请求seq+1,即X+1,除了连接请求和连接接受响应报文段没有该字段,其他的报文段都有该字段
1、第一次握手:建立连接请求 。客户端发送连接请求报文段,将SYN置为1,seq为随机数x 。然后,客户端进入SYN_SEND状态,等待服务器确认 。
2、第二次握手:确认连接请求 。服务器收到客户端的SYN报文段,需要对该请求进行确认,设置ack=x+1(即客户端seq+1) 。同时自己也要发送SYN请求信息,即SYN置为1,seq=y 。服务器将SYN和ACK信息放在一个报文段中,一并发送给客户端,服务器进入SYN_RECV状态 。
3、第三次握手:客户端收到SYN+ACK报文段,将ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕,客户端和服务券进入ESTABLISHED状态,完成Tcp三次握手 。
从图中可以看出,建立连接经历了三次握手,当数据传输完毕,需要断开连接,而断开连接经历了四次挥手:
1、第一次挥手:主机1(可以是客户端或服务器),设置seq和ack向主机2发送一个FIN报文段,此时主机1进入FIN_WAIT_1状态,表示没有数据要发送给主机2了
2、第二次挥手:主机2收到主机1的FIN报文段,向主机1回应一个ACK报文段,表示同意关闭请求,主机1进入FIN_WAIT_2状态 。
3、第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,主机2进入LAST_ACK状态 。
4、第四次挥手:主机1收到主机2的FIN报文段,想主机2回应ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段后,关闭连接 。此时主机1等待主机2一段时间后,没有收到回复,证明主机2已经正常关闭,主机1页关闭连接 。
下面是Tcp报文段首部格式图,对于理解Tcp协议很重要:

文章插图
四、Https协议/SSL协议
Https协议是以安全为目标的Http通道,简单来说就是Http的安全版 。主要是在Http下加入SSL层(现在主流的是SLL/TLS),SSL是Https协议的安全基础 。Https默认端口号为443 。
前面介绍了Http协议,各位同学能说出Http存在的风险吗?
1、窃听风险:Http采用明文传输数据,第三方可以获知通信内容
2、篡改风险:第三方可以修改通信内容
3、冒充风险:第三方可以冒充他人身份进行通信
SSL/TLS协议就是为了解决这些风险而设计,希望达到:
1、所有信息加密传输,三方窃听通信内容
2、具有校验机制,内容一旦被篡改,通信双发立刻会发现
3、配备身份证书,防止身份被冒充
下面主要介绍SSL/TLS协议 。
SSL发展史(互联网加密通信)
1、1994年NetSpace公司设计SSL协议(Secure Sockets Layout)1.0版本,但未发布 。
推荐阅读
- 非常全面的无线网桥知识
- 生育政策全面放开最新消息2019 2021三孩生育政策全面放开最新消息
- 抖音账号初期运营:这些技巧你要了解一下!
- 让我们来了解下浮梁功夫茶的历史。
- 传奇世界|传奇世界:你真的了解道士吗?看看下面的你就知道了。
- 红茶百科:红茶的九大常识 看下你了解多少
- 一文带你了解TDD和FDD有什么区别
- 程序员如何学习计算机视觉?你需要了解这五大技术!
- 保护数据安全,从HTTPS加密开始
- 电源选购攻略了解一下
