一次把http、https、tcp、udp、tls、ssl聊明白
什么是OSI协议
在一切开始之前,需对OSI七层协议模型有基本了解
OSI七层协议模型、TCP/IP四层模型、五层协议体系结构的示意图如下
层协议和对应的标准7层协议的关系如下图:
什么是UDP 和 TCP
工作在传输层,建立端到端的链接。
UDP 和 TCP 的区别
TCP 和 UDP 都位于计算机网络模型中的运输层,它们负责传输应用层产生的数据。下面我们就来聊一聊 TCP 和 UDP 分别的特征和他们的区别
UDP 是什么
UDP 的全称是 User Datagram Protocol,用户数据报协议。它不需要所谓的握手操作,从而加快了通信速度,允许网络上的其他主机在接收方同意通信之前进行数据传输。
数据报是与分组交换网络关联的传输单元。
UDP 的特点主要有
-
UDP 能够支持容忍数据包丢失的带宽密集型应用程序
-
UDP 具有低延迟的特点
-
UDP 能够发送大量的数据包
-
UDP 能够允许 DNS 查找,DNS 是建立在 UDP 之上的应用层协议。
TCP 是什么
TCP 的全称是Transmission Control Protocol ,传输控制协议。它能够帮助你确定计算机连接到 Internet 以及它们之间的数据传输。通过三次握手来建立 TCP 连接,三次握手就是用来启动和确认 TCP 连接的过程。一旦连接建立后,就可以发送数据了,当数据传输完成后,会通过关闭虚拟电路来断开连接。
TCP 的主要特点有
-
TCP 能够确保连接的建立和数据包的发送
-
TCP 支持错误重传机制
-
TCP 支持拥塞控制,能够在网络拥堵的情况下延迟发送
-
TCP 能够提供错误校验和,甄别有害的数据包。
TCP的三次握手和四次挥手
SYN建立连接请求
FIN结束连接请求
三次握手
第一次握手:发送SYN=1 附带随机数sequence=(随机数1号)
第二次握手:发送SYN=1 ACK=1(表示确认收到) 附带随机数sequence=(随机数2号) 加确认信息ack(通过第一次请求的sequence随机数+1得到的数)
第三次握手:发送ACK=1(表示确认收到) 附带随机数sequence=(随机数1,也就是最开始的那个)+1 加确认信息ack(通过第二次请求的sequence随机数2+1得到的数
第三次握手使用了前两次的随机数,这样做避免客户端发送多个连接请求,分不清那个是哪个。
Ddos攻击,只发送第一次握手,不发送第三次握手,这样服务器就是会一直保留第一次握手的sequence,从而瘫痪。
四次挥手
第一次挥手:发送 FIN(请求结束) 附带随机数sequence=随机数1
第二次挥手:发送ACK=1(表示确认收到)加确认信息ack(通过第一次请求的sequence随机数1+1得到的数)
第二次和第三次不能合为一步是因为,可能还有数据在传递,需要等待服务端一切就绪后才能发送结束信号。
第三次挥手:发送FIN(请求结束) 加确认信息ack(通过第一次请求的sequence随机数1+1得到的数) 附带随机数sequence=(随机数2)
第四次挥手:发送发送ACK=1 加确认信息ack(通过第一次请求的sequence随机数2+1得到的数)加 附带sequence=(随机数1)+1
什么是 http
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应,是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP 主要内容分为三部分,超文本(Hypertext)、传输(Transfer)、协议(Protocol)。
-
超文本就是不单单只是本文,它还可以传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转。
-
上面这些概念可以统称为数据,传输就是数据需要经过一系列的物理介质从一个端系统传送到另外一个端系统的过程。通常我们把传输数据包的一方称为请求方,把接到二进制数据包的一方称为应答方。
-
而协议指的就是是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为协议,只不过是网络协议。
至于http协议的具体内容和规范,可以参考这篇文章
什么是 https
HTTPS 并不是一个新的应用层协议,它其实就是 HTTP + TLS/SSL 协议组合而成,而安全性的保证正是 TLS/SSL 所做的工作。
也就是说,HTTPS 就是身披了一层 SSL 的 HTTP
面试:https是什么?http和https有什么不同?
答:HTTPS并不是新的应用层协议,而是http协议+SSL协议组合,所以HTTPS就是 HTTP + TLS/SSL 协议组合,至于它和HTTP有什么不同,在直观区别上有以下几点
- 传输信息安全性不同:http协议是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。https协议是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。
用什么方法加密,如何加密的?
会在后面提到? - 端口不同:http协议:使用的端口是80
- 需要申请证书
上面都是表层的不同,最重要的是https在osi的会话层添加了tls协议,需要进行四次握手,建立安全的通讯环境。
面试:HTTPS 解决了什么问题
一个简单的回答可能会是 HTTP
它不安全。由于 HTTP 天生明文传输的特性,在 HTTP 的传输过程中,任何人都有可能从中截获、修改或者伪造请求发送,所以可以认为 HTTP 是不安全的;在 HTTP 的传输过程中不会验证通信方的身份,因此 HTTP 信息交换的双方可能会遭到伪装,也就是没有用户验证
;在 HTTP 的传输过程中,接收方和发送方并不会验证报文的完整性
,综上,为了结局上述问题,HTTPS 应用而生。
面试:HTTPS 做了什么?
-
加密(Encryption)
-
数据一致性(Data integrity)
-
身份认证(Authentication)
什么是 SSL/TLS
TLS(Transport Layer Security)
是SSL(Secure Socket Layer)
的后续版本,它们是用于在互联网两台计算机之间用于身份验证
和加密
的一种协议。
我们需要清楚SSL/TLS位于什么层,这关系到它何时起作用。
TLS在可靠的传输层(TCP)之上运行,这意味着首先必须完成TCP的“三次握手“。
SSL/TLS加密基本原理
四次握手流程
-
客户端发出请求(ClientHello):发送支持的TLS版本、加密套件、压缩方式和一个随机数
-
服务器回应(ServerHello):确认TLS版本、加密方式,还会发送公钥、证书和一个随机数并附带
ServerHello Done
-
客户端回应:去证书颁发网站验证证书是否有效,如果有效,则信任这是合法的服务器,客户端再次产生一个随机数(也叫预主秘钥),用服务器的证书中的公钥加密,发送给服务器,客户端发送握手结束通知,表示握手结束。
-
服务器最后回应:服务器用私钥解密客户端发送过来的随机数,生成pre-master key(服务端用预主秘钥第一随机数和第二算技术计算出的会话秘钥),用于接下来的
对称加密
,服务器发送编码改变通知,表明下面使用协商的加密和秘钥传送信息,服务器发送握手结束通知,表示SSL/TLS握手结束。
https工作流程图
结合上面所讲知识,现在再来看这个https请求流程图,感觉浅显易懂了很多。
加密知识浅探
对称加密
也叫共享秘钥加密,加密和解密同用一个密钥。服务端将秘钥发送给客户端的过程中,容易被劫持,失去安全效果。
对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
非对称加密
也叫公开秘钥加密,非对称加密有两把秘钥,一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
加密选择
- 由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度
- 对称加密算法不能实现签名,因此签名只能非对称算法。
二者区别及工作原理
非对称加密是比较浪费资源的方式,所以只用于建立连接,确认身份,之后转为对称加密。非对称加密可以简单比作,两个人,各有一把锁和钥匙,把敞开的锁寄给双方,用对方锁锁上要传递的内容,这样即使数据被劫持也无法获取里面的内容,因为钥匙从来没有泄露过。