WebSocket 学习 - 2025/3/14
WebSocket
介绍

HandShake 和 Acknowledgement
在网络通信中,Handshake(握手) 和 Acknowledgement(确认) 是两个非常重要的概念,它们用于确保通信双方能够正确建立连接并可靠地传输数据。以下是它们的详细解释:
1. Handshake(握手)
握手是通信双方在正式传输数据之前,进行的一系列交互过程,目的是建立连接并协商通信参数。常见的握手协议包括 TCP 三次握手 和 TLS/SSL 握手。
TCP 三次握手
在 TCP 协议中,握手过程分为三步:
- SYN(同步):
• 客户端向服务器发送一个 SYN 报文,表示请求建立连接。
• 报文包含一个随机生成的序列号(Sequence Number),用于标识这次通信。 - SYN-ACK(同步确认):
• 服务器收到 SYN 报文后,向客户端发送一个 SYN-ACK 报文。
• 报文包含确认号(ACK = 客户端的序列号 + 1)和一个新的序列号(服务器的序列号)。 - ACK(确认):
• 客户端收到 SYN-ACK 报文后,向服务器发送一个 ACK 报文。
• 报文包含确认号(ACK = 服务器的序列号 + 1)。
完成三次握手后,连接正式建立,双方可以开始传输数据。
TLS/SSL 握手
在 HTTPS 等加密通信中,TLS/SSL 握手用于协商加密算法、交换密钥等:
- 客户端发送支持的加密算法列表和随机数。
- 服务器选择加密算法并发送自己的随机数和证书。
- 客户端验证证书,生成预主密钥(Pre-Master Secret),并用服务器的公钥加密后发送。
- 双方根据随机数和预主密钥生成会话密钥,用于后续加密通信。
2. Acknowledgement(确认)
确认是通信过程中,接收方通知发送方数据已成功接收的机制。它用于确保数据的可靠传输,避免数据丢失或重复。
TCP 中的确认
在 TCP 协议中,确认是通过 ACK 报文 实现的:
• 接收方收到数据后,会发送一个 ACK 报文,其中包含确认号(ACK = 接收到的数据的最后一个字节的序列号 + 1)。
• 如果发送方没有收到 ACK,会重发数据,直到收到确认。
应用层中的确认
在一些应用层协议中,确认机制可能更加复杂。例如:
• HTTP/2:通过帧(Frame)和流(Stream)机制实现确认。
• MQTT:通过 PUBACK、SUBACK 等报文实现确认。
Handshake 和 Acknowledgement 的区别
| 特性 | Handshake | Acknowledgement |
|---|---|---|
| 目的 | 建立连接并协商通信参数 | 确认数据已成功接收 |
| 时机 | 在通信开始之前 | 在数据传输过程中 |
| 交互次数 | 通常多次交互(如 TCP 三次握手) | 每次数据传输后都可能需要确认 |
| 作用 | 确保双方能够通信 | 确保数据可靠传输 |
总结
• Handshake 是通信双方建立连接的过程,确保双方能够正确通信。
• Acknowledgement 是接收方通知发送方数据已成功接收的机制,确保数据可靠传输。
两者在网络通信中相辅相成,共同保障了通信的可靠性和正确性。
应用场景

实现步骤


浙公网安备 33010602011771号