WebSocket 学习 - 2025/3/14

WebSocket

介绍

HandShake 和 Acknowledgement

在网络通信中,Handshake(握手)Acknowledgement(确认) 是两个非常重要的概念,它们用于确保通信双方能够正确建立连接并可靠地传输数据。以下是它们的详细解释:


1. Handshake(握手)

握手是通信双方在正式传输数据之前,进行的一系列交互过程,目的是建立连接并协商通信参数。常见的握手协议包括 TCP 三次握手TLS/SSL 握手

TCP 三次握手

在 TCP 协议中,握手过程分为三步:

  1. SYN(同步)
    • 客户端向服务器发送一个 SYN 报文,表示请求建立连接。
    • 报文包含一个随机生成的序列号(Sequence Number),用于标识这次通信。
  2. SYN-ACK(同步确认)
    • 服务器收到 SYN 报文后,向客户端发送一个 SYN-ACK 报文。
    • 报文包含确认号(ACK = 客户端的序列号 + 1)和一个新的序列号(服务器的序列号)。
  3. ACK(确认)
    • 客户端收到 SYN-ACK 报文后,向服务器发送一个 ACK 报文。
    • 报文包含确认号(ACK = 服务器的序列号 + 1)。

完成三次握手后,连接正式建立,双方可以开始传输数据。

TLS/SSL 握手

在 HTTPS 等加密通信中,TLS/SSL 握手用于协商加密算法、交换密钥等:

  1. 客户端发送支持的加密算法列表和随机数。
  2. 服务器选择加密算法并发送自己的随机数和证书。
  3. 客户端验证证书,生成预主密钥(Pre-Master Secret),并用服务器的公钥加密后发送。
  4. 双方根据随机数和预主密钥生成会话密钥,用于后续加密通信。

2. Acknowledgement(确认)

确认是通信过程中,接收方通知发送方数据已成功接收的机制。它用于确保数据的可靠传输,避免数据丢失或重复。

TCP 中的确认

在 TCP 协议中,确认是通过 ACK 报文 实现的:
• 接收方收到数据后,会发送一个 ACK 报文,其中包含确认号(ACK = 接收到的数据的最后一个字节的序列号 + 1)。
• 如果发送方没有收到 ACK,会重发数据,直到收到确认。

应用层中的确认

在一些应用层协议中,确认机制可能更加复杂。例如:
HTTP/2:通过帧(Frame)和流(Stream)机制实现确认。
MQTT:通过 PUBACK、SUBACK 等报文实现确认。


Handshake 和 Acknowledgement 的区别

特性 Handshake Acknowledgement
目的 建立连接并协商通信参数 确认数据已成功接收
时机 在通信开始之前 在数据传输过程中
交互次数 通常多次交互(如 TCP 三次握手) 每次数据传输后都可能需要确认
作用 确保双方能够通信 确保数据可靠传输

总结

Handshake 是通信双方建立连接的过程,确保双方能够正确通信。
Acknowledgement 是接收方通知发送方数据已成功接收的机制,确保数据可靠传输。
两者在网络通信中相辅相成,共同保障了通信的可靠性和正确性。

应用场景

实现步骤

posted @ 2025-03-14 23:18  XYu1230  阅读(43)  评论(0)    收藏  举报