大家好,我是讯享网,很高兴认识大家。
1.目录网络协议HTTPHTTPS
希望这篇文章能让读者了解什么是网络协议,以及目前我们接触最多的http和https。
2.网络协议
网络是为计算机网络中的数据交换而建立的规则、标准或协议。
众所周知,网络是一个由计算机组成的“大网络”,相互之间进行通信和数据交换。我们都知道不同电脑厂商生产的电脑肯定是不一样的,那么他们是如何克服这些差异来沟通的呢?很明显,是“语言”。我们的语言可以互相交流,因为我们在这些定义上达成了共识。例如,一个苹果指的是一种特定的水果等等。并且计算机也通过建立这种约定来完成通信。但是要小心!该网络协议不仅适用于计算机之间,也适用于网络上的所有设备(服务器、个人电脑、交换机、路由器、防火墙等)。).大部分网络采用分层架构,每一层都建立在其下层之上,为其上层提供一定的服务,并对上层屏蔽如何实现这种服务的细节(这类似于我们代码中的接口)。一台设备上的第n层与另一台设备上的第n层通信的规则是第n层协议。网络的每一层都有很多协议,接收方和发送方同一层的协议必须一致,否则一方将无法识别另一方发送的信息。网络协议使网络上的各种设备能够相互交换信息。上面提到大多数网络采用分层。下面是分层模型:
OSI 模型(Open System Interconnection Reference Model),一种概念模型,由国际标准化组织提出,是一个试图使各种计算机在世界范围内互连为网络的标准框架。它具体分为七层:应用层(第七层)为应用软件而设的接口,用于应用间的通信表示层(第六层)将数据转为接收系统可以使用的格式会话层(第五层)会话层是建立在传输层之上,利用传输层提供的接口,使应用建立和维持会话,并能使会话获得同步(简单理解成数据传输的一个通道)传输层(第四层)将传输表头(TH,传输表头包含了所使用的协议等信息)加至数据(我们要传输的数据)形成数据包网络层(第三层)网络层决定了数据的传输路径和转寄,它会将网络表头(NH,包含了网络数据:IP 等)加入数据包中数据链路层(第二层)数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错物理层(第一层)物理层确保原始数据可以在各种物理媒体上传输
TCP/IP协议族的分层方式与OSI相同,如下图所示:
下面将画一个简单场景的网络请求。
场景:我为公司写了一个简单的hello world静态页面,部署在公司的服务器上。我在家里用自己的电脑通过公网访问了这个静态页面,比如“http://www.xxx.com”。
当我访问这个网站时,浏览器做了什么?我们来看下图:
TCP
TCP(传输控制协议)是一种面向连接、可靠、基于字节流的双向传输传输层通信协议。连接建立时会经过三次握手,三次握手完成后才开始数据传输;需要四个波才能终止连接。如下所示:
(1)建立连接
图源:百度百科来源:百度百科
三次握手:
客户端发送 SYN 报文给服务端,进入 SYN_SEND 状态服务器回复 SYN,进入 SYN_RECV 状态客户端收到来自服务端的 SYN 报文后,回复 ACK
客户端和服务器进入建立状态,可以开始发送和接收数据。
(2)终止连接
图源:百度百科来源:百度百科
Wave四次(注意:关闭动作可以由任意一端先发起,以客户端为例):客户端先调用close,执行active close,发送FIN表示数据已发送。进入FIN_WAIT_1状态后,服务器执行被动关闭,并向客户端发送ACK。当服务器进入CLOSE_WAIT状态时,它向客户端发送一个FIN,当它进入LAST_ACK状态时,发起关闭的一方负责FIN的最终确认。这个例子是客户端需要接收FIN并回复ACK给服务器,服务器进入TIME_WAIT状态,服务器收到ACK后进入关闭状态。
为什么最后挥了四次手?
因为一方主动发起关闭并发送FIN,只是意味着它不会再发送数据了,但仍然可以接收数据,所以需要另一方关闭并发送FIN通知对方。ACK和FIN为什么要分开?因为ACK告诉对方“我知道”,而FIN告诉对方“我没有数据给你”。实际情况不一定是我刚收到FIN就把所有数据给了对方,所以需要分开。
HTTP
HTTP(超文本传输协议),超文本传输协议,基于TCP协议。
HTTP是一种无状态协议。就像我们作为游客访问一个页面一样,无状态协议简单而高效。但是对于电商场景,需要记录用户的登录状态或者购物车信息(除了像一些中层系统的电商系统,只是举例),所以还需要一些额外的技术辅助,比如Cookie。
HTTP消息格式
HTTP请求消息和响应消息的结构基本相同。
该消息由三部分组成:
起始行描述请求或响应的基本信息,如:GET /** HTTP/1.1、HTTP/1.1 200 OK 等头部字段集合使用 key-value 说明报文(想想请求头和响应头)消息正文HTTPS
HTTP是基于TCP实现的,它的消息是明文,整个传输过程是完全透明的,任何一个环节都可以被轻易拦截和修改,非常不安全。因此,安全的HTTP协议HTTP应运而生。HTTPS实际上在HTTP中加入了SSL。
(1) SSL/TLS
SSL安全套接字层,于1999年更名为TLS(传输层安全性)。
首先要明确几个概念:
对称加密通过同一把“钥匙”进行加密和解密非对称加密有两把“钥匙”——公钥,私钥,使用公钥加密的,需要使用私钥解密;使用私钥加密的,需要公钥解密摘要算法将一个随机长度的内容生成一个定长的内容,常见算法有:MD5、sha1、sha2等等安全性没有绝对的安全,我们所说的数据安全都是基于一个信任点,认为它是安全的,我们所说的安全才能成立,否则不存在安全一说。如:非对称加密和对称加密,我们相信这些算法的安全性,因此认为只要密钥不泄露,那么就是安全的(2)HTTPS 工作流程大致如下:
先完成三次握手,和HTTP一致。
浏览器给服务器发送加密套件列表(就是告诉服务器自己支持的加密算法)服务器根据加密套件列表挑选加密算法,并给浏览器发送公钥浏览器获取公钥后,随机生成对称加密算法使用的密钥,通过公钥加密该密钥,然后发送密文给服务器服务器使用私钥解密,对于该会话的内容信息都使用该密钥加密传输给浏览器(3)优点通过非对称加密保证浏览器传输的密钥不会被激活成功教程(因为私钥在自己手上,没有经历过网络传输)使用对称加密算法加解密内容效率高(4)缺点服务器给浏览器传输公钥时没法保证该浏览器不会泄露公钥
基于这个缺点,我们需要依靠第三方机构的协助,使我们的HTTPS更加安全可靠。
如下所示:
对于第三步的传输公钥改成传输公钥数字证书数字证书组成:
公钥用户信息
公开密钥
符号
通过hash得到数据摘要(公钥、公司信息、域名等应用信息);CA对摘要信息进行加密,这个密文就是签名。
CA信息
有效期间
证书序列号
数字证书由第三方机构(CA 机构)颁发公司信息、系统的域名和公钥需要到 CA 机构进行认证,认证通过后 CA 再给我们颁发证书,证书内容如上不累述。因为这证书有签名,所以证书内容不可被篡改,从而证书里面的公钥用户信息和公钥的安全性就得到了保证。CA 机构颁发的证书的可靠性依赖于根证书,而根证书是操作系统或浏览器内置的(换句话说,我们就是要相信操作系统或者浏览器的安全性)
综上所述,HTTPS的安全性是基于对根证书和加密算法的信任,所以我们认为自己是安全的。
如上所述,基于一定的信任点,才能谈我们的安全,所以没有绝对的安全。如果黑客劫持了浏览器,这样你所有的请求都会先去他那里,然后他去服务器,那么你请求的所有数据都会先去黑客那里,所以是不安全的。例如,我们的许多梯子都是代理。浏览器发出的请求由它来表示,然后我们去找可以翻墙的服务器请求资源。得到的数据自然是同样的路由返回,所以这个中转服务器可以做很多操作。
相信到现在为止,大家都知道我们常说的网络分层架构一般定义为5层或者7层,我们所说的网络协议就是针对其中某一层的通信协议。这里我们以我们最常接触的http和https为例来说明,并说说它们的区别,同时也延伸了网络安全的内容。
作者介绍
51CTO社区编辑蔡,从事Java后端开发8年。做过广电BOSS系统传统项目,后加入互联网电商,负责订单、TMS、中间件等。
本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://51itzy.com/16354.html