Member-only story
首先从HTTP来看起,HTTP是一个网络协议,用于从www服务器端传输超文本到本地浏览器的传输协议。Https则是HTTP的安全版本,因为他在HTTP下加了SSL层,SSL层把传输的数据加密了,是一个安全的信息传输通道。
除此之外,HTTPs需要ca证书,所以有一定的成本。还有就是端口不同,Http协议端口是80,Https端口是443。
【Http协议的连接是无状态的连接,无状态指每个请求都是独立的,每个请求包含了处理这个请求的完整数据,发送请求不意味着状态的变更。即使在HTTP1.1可以在同一个连接传输多个HTTP请求,如果第一个请求出错了,后面的请求一般还是可以继续处理的。
无状态的HTTP协议也是有缺点的,对于单个请求所有的信息都要放在一起发送到服务端,所以消息结构复杂,HTTP解析也比其他协议复杂。并且,相同的数据在多个请求上会反复传输,比如每个请求都需要传输Host, Authentication,cookies,server等,往往都是完全重复的,降低了效率。】
所以总结一下HTTP与HTTPs 的区别就是:安全,成本高,端口不同
下面来讲讲HTTPs的工作原理:
这里先标记几个容易搞混的名词:公钥,私钥,密钥,ssl,客户端,服务器端。 步骤:
1、客户端使用带有https 的url访问web服务器端,与web服务器建立SSL链接。
2、Web服务器收到这个request之后,会把网站证书也就是公钥发给客户端。
3、客户端收到公钥之后,双方就开始协商SSL的安全等级并且客户端制定密钥,并且通过收到的公钥来加密密钥。把密钥发送给服务器端。
4、服务器端收到密钥用自己的私钥解密得到密钥。
5、最后服务器端用这个密钥达到加密客户端与服务器端通信会话的目的。
最后一部分就是HTTP与HTTPs的优缺点:
HTTPS的优点就是对传输数据来说很安全(虽然不是绝对的安全);缺点就是贵。握手的时候消耗时间,页面加载有延迟。HTTPs的缓存不如HTTP高效,会增加数据开销。TODO:有关缓存的内容还不是很清楚,需要深入理解。专门写一篇文章。
提到了HTTP当然就少不了TCP与UDP。他们有什么关系呢?
上面所提到的HTTP等协议都是位于应用层的协议,而TCP等是位于传输层的协议。所以他们两个也负责着不同的功能,比如说位于传输层的协议,考虑更多的就是如何把数据从一台电脑上传输到另一台电脑,他不需要考虑我传输的数据是什么类型,因为这个是应用层需要关心的。应用层关心的是数据用什么类型表达可以被另一台电脑或者服务器所理解,传输层考虑更多的是数据如何被稳定,高效的传播过去。
在知道他们的关系之后就更可以理解概念的内容了。
TCP传输最有名的就是三次握手,为什么握手三次呢?答案就是这样保证了客户端,服务器端都可以收发到对方的消息。这里就赘述了,画个图就明白。
下面简单写一下TCP与UDP的区别:
1、TCP更可靠,TCP与服务器建立链接之后,除了是一对一的建立链接外,它也有拥塞控制,也就是说如果网络拥堵了,他会停止发送信息。而且TCP下,跟服务器之间是有应答的功能,好比服务器收到我的消息,会给我发送一个确认应答ACK,如果服务器没听清或者没看懂我发的消息,会给我返回一个NACK,代表他没听懂我发的消息,让我待会儿重新传一遍。
2、UDP就会简单粗暴一点,他不需要建立链接,所以他可以广播也就是1对多传输。而且就算网络拥堵了,他也不会care那么多,继续传输。所以UDP容易丢包,一般用在视频,视频电话等等。这也就可以理解为什么我们看视频的时候网速不好,视频会卡成漫画了。
3、还有一点就是TCP消息首部有20个字节,UDP首部只有8个字节。顾名思义,UDP更轻量。
也许了解每个消息首部都有哪些内容可以帮助我们更好的理解TCP,UDP的传输性质,所以我简单讲讲TCP,UDP消息首部分别都有些啥呢?
首先是TCP的报文头:
包括源端口号,目的端口号,序号,确认号,数据偏移,6个控制位等等,比较繁琐。
UDP: 源端口号,目的端口号,长度,检验和。只有这四个。
源端口号和目的端口号比较显而易见,就不过多赘述。序号存在于传输数据的每一个字节,所以序号就是指目前发送数据排在第一位的字节序号。确认号指的是收到对方报文的序列确认号如果是N的话,代表着N-1序列号前面的字节都已经被正确接收了。数据偏移可以理解为这个报文头的长度,然后6个控制位里面包括ACK,PSH(push)等等,其实就是定义了这个报文的一些属性。 所以TCP的功能比UDP强,在头部包含的信息上就可以体现出来了。