Http、Https、Websocket、Socket、Socks的总结

HTTP:

表示超文本传输协议。该协议定义了如何格式化和传输消息,以及Web服务器和浏览器应采取什么操作来响应各种命令。

通信过程:

万维网服务器端有一个服务器进程,不断的监听TCP的80端口,以发现是否有浏览器发起的连接请求,一旦监听到连接建立请求后,建立TCP连接,浏览器发起请求,服务器端响应,两者的交互按照规定的格式和遵循一定的规则

特点

  • 信息是明文传输
  • 使用80端口

HTTPS:

HTTP+SSL/TLS 加密通信

作用:

内容加密(建立一个信息安全通道,来保证数据传输的安全

身份认证(确认网站的真实性

数据完整性(防止内容被第三方冒充或者篡改

特点 

图片来自:详解https是如何确保安全的http://www.wxtlife.com/2016/03/27/%E8%AF%A6%E8%A7%A3https%E6%98%AF%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F/

SSL在握手完全阶段依赖数字证书(非对称加密算法)建立安全会话(对应下的123过程)

传输阶段使用对称加密算法(密钥只有一个)对报文加密(对应下述的4过程)

 实际的HTTPS通信过程

为了防止出现中间人伪造服务器发送的公钥,采用第三方CA认证保证服务器公钥的合法性。

(1)传输服务器的公钥(CA认证证书,保证公钥合法性)给客户端

(2)客户端使用服务器端的公钥加密报文(可能包含相应的密码信息,下面为随机数3),发送给服务器端

(3)客户端和服务器端从而建立起一套对称密钥

(4)后续使用这套对称密钥传输数据

                          

  • 蓝色的部分,可以看出来,这是tcp链接。所以https的加密层也是在tcp之上的。
  • 客户端首先发起clientHello消息。包含一个客户端随机生成的random1 数字,客户端支持的加密算法,以及SSL信息
  • 服务器收到客户端的clientHello消息以后,取出客户端法发来的random1数字,并且取出客户端发来的支持的加密算法, 然后选出一个加密算法,并生成一个随机数random2,发送给客户端serverhello
  • 让客户端对服务器进行身份校验,服务端通过将自己的公钥通过数字证书的方式发送给客户端
  • 客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key。并将PreMaster Key发送到服务端,服务端通过私钥将PreMaster Key解密获取到Random3,此时客户端和服务器都持有三个随机数Random1 Random2 Random3,双方在通过这三个随即书生成一个对称加密的密钥.双方根据这三个随即数经过相同的算法生成一个密钥,而以后应用层传输的数据都使用这套密钥进行加密.
  • Change Cipher Spec:告诉客户端以后的通讯都使用这一套密钥来进行.

参考:https://juejin.im/post/5a2fbe1b51882507ae25f991

区分非对称加密、对称加密及数字签名

非对称加密:

公钥加密,加密方和解密方使用不同的密码

公钥对外公开,私钥保密(无私钥解不开)

数字签名:

3点:报文鉴别、报文完整性(有私钥才能加密发送)、不可否认

上述的密文可以被公开的公钥解析出明文,但是不能篡改

如下为具有保密性的数字签名:(以上的非对称加密和数字签名的结合)

对称加密:

加密和解密方使用同一套密码’

事先约定(需要高度安全的密钥分配中心增加成本)、或者信使传递(大型计算机网络中明显不合适)

注意的:

websocket:

创建需要在客户端和服务之间双向通信(例如,即时消息和游戏应用)的web应用

建立在TCP协议之上:基于TCP的一种应用层网络协议

  • 持久连接
  • 使用8080端口

  一张很好的图比较两者的区别:

参考:阮一峰的网络日志https://www.ruanyifeng.com/blog/2017/05/websocket.html

websoket服务器框架:Netty, Undertow, Jetty, Spray-websocket, Vert.x, Grizzly 和 Node.js 七种框架

MQTT和websoket区别

MQTT:基于TCP的Pub/Sub协议,为物联网优化的特性:适应不同网络的QoS、层级主题、遗言等

比如利用HTML5应用来作为MQTT的客户端,也即是采用MQTT over WebSocket

Socket:

socket是一套完成TCP,UDP协议的接口,对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),IP地址和端口号构成套接字

 SOCKS:

主要用于客户端与外网服务器之间通讯的中间传递

SOCKS是会话层的协议,位于表示层传输层(TCP/UDP)之间。

有SOCKS代理服务器

参考资料:

【1】使用四种框架分别实现百万websocket常连接的服务器https://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/

【2】https://www.zhihu.com/question/21816631

【3】https://www.ruanyifeng.com/blog/2017/05/websocket.html

【4】计算机网络

【5】https://www.cnblogs.com/yinzhengjie/p/7357860.html

发布了136 篇原创文章 · 获赞 112 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/heda3/article/details/103113155