数据报和分组
分组可以用来指代任何格式化的数据块;而数据报则通常只用来描述那些通过不可靠的服务传输的分组,既不保证送达,也不发送失败通知
无协议服务——UDP
UDP是一个简单、无状态的协议,适合作为其他上层应用协议的辅助。这样的好处是不会超时、不会发生队首阻塞、不跟踪网络状态也不需要拥塞控制。
连接状态超时
UDP因为没有连接终止确认环节,所以任何一端随时都可以停止传输数据报而不发送通告,为解决这个问题,UDP路由会记录定时过期。
NAT穿透
NAT(网络地址转换器)用来解决ipv4地址不够问题,但是阻碍了设备之间的连接(外网设备连接内网设备)。所以有以下几种穿透技术用于UDP建立端到端的连接。
- STUN——原理是两台主机需要通过UDP通信时,他们首先会向各自的STUN服务器发送绑定请求,然后分别响应外网IP和端口号交换数据
- TURN——原理是主机将数据传送到服务器后,服务器再将数据传送到另一端主机中。
传输层安全
SSL
SSL(Secure Sockets Layer)是一种安全协议,用于在网络通信中提供加密和身份验证。SSL协议通过在客户端(例如浏览器)和服务器之间建立一个安全的通信通道,确保传输的数据不被第三方窃取或篡改。
SSL协议在直接位于TCP上一层的应用层被实现,并且不会影响上层协议,但能够保证上层安全。
TSL
TLS(Transport Layer Security)是SSL(Secure Sockets Layer)的继任者,是一种广泛使用的安全协议,用于在计算机网络上提供安全的通信。TLS主要用于加密从客户端到服务器的连接,以确保传输的数据在网络上传输时的保密性和完整性。
TLS在功能上与SSL类似,但它提供了更高的安全性,修复了SSL中的一些已知漏洞和不足。自TLS 1.0发布以来,TLS协议已经经历了多个版本的更新,最新的版本是TLS 1.3,它进一步增强了安全性,并优化了性能。
TSL握手
TLS握手(TLS Handshake)是客户端和服务器在建立安全的TLS连接时进行的一系列交互过程。TLS握手的主要目的是协商加密算法、生成加密密钥、验证服务器(和可选的客户端)的身份,并为后续的安全通信建立一个加密通道。
TLS握手的主要步骤
-
客户端问候(Client Hello):
- 客户端向服务器发送一个“Client Hello”消息,包含支持的TLS版本、加密算法套件列表、一个随机数以及其他参数(如支持的压缩方法、扩展字段等)。
-
服务器问候(Server Hello):
- 服务器收到“Client Hello”后,选择一个双方都支持的TLS版本和加密算法,并返回一个“Server Hello”消息,包含服务器选择的加密套件、一个随机数、服务器的数字证书(用于身份验证),以及其他必要的信息。
-
服务器证书(Server Certificate):
- 服务器将其数字证书发送给客户端。该证书通常由受信任的证书颁发机构(CA)签发,用于证明服务器的身份。客户端使用其信任的CA证书来验证服务器证书的有效性。
-
服务器密钥交换(Server Key Exchange, 可选):
- 如果所选择的加密算法需要额外的密钥交换信息(例如,Diffie-Hellman参数),服务器将此信息发送给客户端。
-
客户端证书请求(Client Certificate Request, 可选):
- 如果服务器要求客户端进行身份验证,服务器会发送“客户端证书请求”消息,要求客户端提供其数字证书。
-
客户端响应(Client Response):
- 客户端验证服务器证书的有效性。如果一切正常,客户端会生成一个预主密钥(Pre-Master Secret),并用服务器的公钥加密,然后发送给服务器。服务器使用自己的私钥解密得到预主密钥。
- 如果服务器请求了客户端证书,客户端会发送自己的证书并使用自己的私钥对一个随机消息签名,以证明其身份。
-
生成会话密钥(Session Key Generation):
- 客户端和服务器根据之前交换的随机数和预主密钥,分别生成相同的会话密钥。这个密钥用于加密接下来的数据通信。
-
完成握手(Finished Messages):
- 客户端和服务器分别发送一个“Finished”消息,使用生成的会话密钥加密。这个消息用来验证整个握手过程的完整性。
-
加密通信:
- 握手完成后,客户端和服务器之间的通信将使用协商的会话密钥进行加密,确保数据的机密性和完整性。
TLS握手的重要性
TLS握手是整个TLS协议的核心部分,它确保了通信双方能够以安全和加密的方式进行数据交换。通过握手过程,客户端和服务器能够:
- 确认彼此的身份(通过数字证书)。
- 安全地协商加密算法和会话密钥。
- 建立一个安全的加密通道,以保护随后的数据传输。
TLS握手的成功与否直接影响到通信的安全性,因此它是TLS协议中最关键的步骤之一。
MAC
MAC(Message Authentication Code,消息认证码)是一种用于验证数据完整性和认证消息来源的安全机制。在通信或数据存储过程中,MAC可以确保消息在传输或存储过程中没有被篡改,同时验证消息的发送方是否可信。
ALPN
ALPN(Application-Layer Protocol Negotiation,应用层协议协商)是TLS(传输层安全)协议的一个扩展,它允许客户端和服务器在建立TLS连接时协商应用层协议。ALPN的主要目的是在建立安全连接的过程中,确定双方使用的具体应用协议,如HTTP/2或HTTP/1.1。
ALPN的工作原理
-
客户端发送支持的协议列表:
- 在TLS握手的“Client Hello”阶段,客户端通过扩展字段(ALPN扩展)发送一个支持的应用层协议列表。这些协议按优先级顺序排列,表示客户端能够使用的协议类型。
-
服务器选择协议:
- 服务器接收到客户端的“Client Hello”消息后,从客户端提供的协议列表中选择一个双方都支持的协议,并在返回的“Server Hello”消息中告知客户端所选择的协议。
-
协议确认:
- 一旦协议被服务器选择并返回给客户端,TLS握手过程继续进行,并最终在这个握手基础上建立起相应应用层协议的安全连接。
-
数据传输:
- 握手完成后,客户端和服务器就可以使用选定的应用层协议(如HTTP/2)进行安全的数据传输。
ALPN的应用场景
ALPN最常用于Web浏览器和Web服务器之间的连接管理,特别是在支持多种HTTP协议的环境中。它允许在单一的TLS连接中高效地协商和切换不同的应用层协议。以下是ALPN的几个典型应用场景:
-
HTTP/2 和 HTTP/1.1 切换:
- 当客户端访问一个Web服务器时,它可能支持HTTP/2或HTTP/1.1。通过ALPN,客户端和服务器可以协商使用哪种HTTP版本进行通信,而不需要在连接后再进行额外的协议升级。
-
SPDY 协议:
- SPDY是Google开发的一种实验性协议,ALPN可以用于在SPDY和HTTP之间进行协商。
-
其他应用层协议:
- ALPN不仅限于HTTP,还可以用于其他协议,如WebSocket、IMAP、SMTP等,确保在这些协议上建立安全连接时的高效协商。
ALPN的优势
- 减少延迟:通过在TLS握手阶段协商应用层协议,ALPN减少了后续协议升级所需的额外延迟,从而提高了连接速度。
- 灵活性:客户端和服务器可以根据支持的协议动态协商,而不需要预先配置,增加了连接的灵活性。
- 简化连接管理:ALPN集成在TLS握手过程中,避免了在应用层再进行额外的协议协商,使得连接管理更加简洁高效。
总之,ALPN在现代网络协议中扮演着重要角色,特别是在Web通信中,帮助高效地管理和优化多种协议的使用。]
TLS会话恢复
TLS会话恢复(TLS Session Resumption)是一种优化机制,用于加快重新建立TLS连接的过程,减少握手的开销。通常,当客户端与服务器首次建立TLS连接时,需要经过完整的TLS握手过程,包括加密算法协商、密钥生成和身份验证等。这一过程相对较慢,尤其是在高延迟网络环境中。因此,TLS会话恢复机制旨在通过重用之前的会话信息来加速后续的连接。
TLS会话恢复的两种主要机制
-
会话ID(Session ID):
- 概述:会话ID是早期的TLS会话恢复机制,主要用于TLS 1.2及以下版本。它通过在客户端和服务器之间共享一个会话ID来实现会话恢复。
- 工作原理:
- 在首次完整的TLS握手过程中,服务器生成一个唯一的会话ID并将其发送给客户端。
- 客户端和服务器保存这个会话ID及相关的会话信息(如会话密钥)。
- 当客户端再次连接同一服务器时,它可以发送之前的会话ID。如果服务器仍然保存该会话ID,就可以快速恢复会话,直接使用之前的会话密钥,而不需要重新执行完整的握手。
- 如果服务器无法找到该会话ID(例如,服务器重启或会话过期),则会进行完整的TLS握手并生成一个新的会话ID。
-
会话票据(Session Tickets):
- 概述:会话票据是TLS 1.2中引入的一种改进的会话恢复机制,并且在TLS 1.3中得到了广泛使用。它不依赖服务器存储会话信息,而是将会话信息加密后发送给客户端,客户端在后续连接时可以使用这个票据恢复会话。
- 工作原理:
- 在首次完整的TLS握手过程中,服务器生成一个会话票据,并将其发送给客户端。这个票据包含了加密的会话信息,如会话密钥。
- 客户端将会话票据保存起来。
- 当客户端再次连接同一服务器时,它可以发送这个会话票据。服务器解密并验证票据中的会话信息,如果有效,就可以快速恢复会话,而不需要重新执行完整的握手。
- 服务器可以定期更新票据的加密密钥,以提高安全性。
TLS 1.3 中的会话恢复
在TLS 1.3中,会话恢复机制得到了进一步的优化和简化:
- 0-RTT 握手(Zero Round-Trip Time Resumption):TLS 1.3引入了0-RTT握手,可以在不进行任何往返时间的情况下恢复会话,这极大地减少了连接延迟。客户端在发送会话票据的同时,可以立即发送应用数据。不过,0-RTT握手有一定的重放攻击风险,因此需要特别的安全考虑。
TLS会话恢复的优势
- 减少握手延迟:通过重用会话密钥,会话恢复可以跳过耗时的密钥交换和证书验证步骤,显著降低连接建立时间。
- 降低服务器负载:会话恢复减少了服务器每次新连接时的计算开销,尤其是在处理大量并发连接的情况下,有助于提高服务器的性能。
- 节省带宽:由于会话恢复减少了需要传输的数据量(如不需要重新传输数字证书),也有助于节省网络带宽。
总之,TLS会话恢复是一种有效的优化技术,通过重用之前的会话信息,使得后续连接更加快速和高效。