网络协议--HTTP-TCP-HTTPS

先来看看我们经常的网络传输层级结构


我们先来讲一个为什么要分层!!! 我们从上到下开始讲,就用HTTP来讲.  HTTP,还有比如熟悉的直播协议RTMP协议,都是基于TCP的应用层协议. 应用层协议就是把需要传播的数据进行一个结构封装!

这是因为我们要把一个结构封装,从client传到server ,它的路径不是直接点对点的! 他要经过很多中间结点,比如你的路由器,比如你的小区网关 .   首先明白,网络是不稳定的! 也就是说,很有可能,到了某个结点,就出问题了!! 如果超过了timeout时间server还没有向client发回执消息(tcp需要,udp不需要),那么.我们就认为,此信息丢了,需要重新发.    

但是如果一个消息太大,那么这样机制,就太浪费资源了,因为结点经常出问题,就会经常重发,就会直接让耗费的资源X2!

所以现实采用的策略是,分包! 所以基于此,就有了第二层------>传输层

首先http会把数据封装好后,下沉到传输层,由传输层来进行分包,并且制定一些传输层协议,比如TCP是需要收到回执才算一次发包成功,而udp只要发包出去就行了,不关心是否最终成功.  但是无论如何,都是需要网络发送的,所以,就会把分好的包,继续下沉,就到了我们的第三层----->IP层

IP层就是负责路由,寻址,分块传输 这一系列操作! 最后丢给----- >数据链路层

数据链路层就是在物理层面,实施真正的数据网络传输.

整个传输过程,很像是一个U型过程.

首先client端, http协议先封装了需要传递的信息, 然后他也不管怎么传,不管是否分包,反正就直接丢给下层,也就是传输层(这里对应tcp协议),tcp来进行一个分包,然后扔给下一层IP层,再扔给链路层.    接着,这个包经过了重重结点,到达了server端的链路层,由server端的链路层上抛到server的IP层,再上抛到server的传输层,因为是TCP协议,所以server的TCP这里,就会让下层发一个回执给client,表示这个包我收到了! 就会将一个回执信息再到server的IP层--->server的链路层------>重重结点----->client的链路层----->client的IP层------>client的传输层,收到回执,表示该包已经完成了传输过程.    最终,所有包传完后,client的传输层,会对所有包通过TCP协议进行一个合并,再向上传到HTTP应用层! 完成了整个HTTP传输过程!

我们知道,HTTP是无状态交互,而TCP,是有状态交互,什么意思呢?  因为TCP的分包策略,导致c与s的交互不是一次性的,可能会有多次.那么是不是每一次都要带上所有的身份信息呢? 不是的. 只需要带一次就行了. 这就是所谓的 tcp连接 .  是通过端口(soket)这个概念,来实现连接的.  也就是说,当tcp连接建立后,c,s两端都会有一个端口开放,双方就通过这个端口,来进行接下来的通信!


这就是所谓的三次握手,目的就是为了建立socket连接!



4次握手,关闭TCP连接

 这里就提出了,我们长连接的概念!  比如我们的MQTT,就是长连接,就是为了随时都能通信嘛,更具体的说,是为了server随时都能向client发信息!那是怎么实现的呢?

 特别简单,你建立tcp连接之后,不要用闭就行了!!!!  你一直不关闭,这就是一个tcp长连接!  但是啊,如果你的一个TCP连接长时间不通信!!! 网关(运营商)就会觉得,哦,需要你们没有主动关闭,但可能是cs某一端已经挂了.  他出于节省资源的目的,会来把这个TCP连接给关掉!   所以,TCP长连接,是需要隔一段时间,就发一个心跳包,来证明自己俩边都没问题,来让网关不要回收这个端口资源!!



HTTP为啥不安全

这是因为,HTTP在传输层,采用的是明文传播,也就是说,任何一个结点,都能明文看到信息,并且,还可以篡改! 有了这个前提,我们再来看看HTTPS为啥是安全的

一言以蔽之,HTTPS比HTTP多了一个TLS(trasport layer secure)层,该层位于 应用层与传输层之间! 该层的主要作用就是,加密与解密.


HTTPS流程是这样的

HTTP先将自己封装好的数据,向下层传播,也就是TLS层.  此时,TLS会先进行一个HTTPS连接,或者是叫TLS连接,连接的另一端当然就是server端喽,然后该层通过极其复杂的交互,如传递证书验证信息通过非对称加密协商出一套对称密钥! 所以,TLS层建立起了一个soket连接来完成这一系列的事情,最终确定了对称密钥!   并将HTTP数据,进行加密!   之后向下传递到传输层,就跟上面的流程是一样的了!    接收方,也就是server方也是,在传输层(TCP层)收到信息后,拼装好后上传到TLS层,进行解决,最后再由TLS层传到HTTP层,完成整个HTTPS流程!

下面的图为TLS连接,或者说HTTPS连接的整个过程


最后一个问题,用了HTTPS后,为何抓包还能看见明文?

这是因为:https加密是发生在应用层与传输层之间的TLS层,所以在传输层看到的数据才是经过加密的,而我们捕捉到的http post,是应用层的数据,此时还没有经过加密。这些明文信息,其实就是你的本地数据。

换言之,你能抓到HTTPS明文包内容,也就是HTTP的内容的前提是,你和发送方或者接收方,处于同一网段,并且你有证书!就能抓到HTTPS明文包了! 抓到的,其实就是还没有经过加密的,或者是已经经过解决的内容!!!   其它中间经点,是经过TCP协议来传播,传播之前经过了TLS层,已经加密了,所以中间结点是安全的!

那么,中间结点虽然是加密不可见,但是不怕被人篡改吗? 如果别人乱改了怎么办?    不用担心,因为有签名机制!! 如果改了后,解密时,在TLS层会发现签名对不上,因为签名是根据内容的经过算法得出的.    签名对不上,那这条信息就不被信任,从而解决这些问题!

你可能感兴趣的:(网络协议--HTTP-TCP-HTTPS)