WebSocke

1. DNS 解析

  • 客户端:根据 WebSocket URL 解析出服务器的 IP 地址。

2. 建立 TCP 连接

客户端

  1. 创建套接字:调用 socket() 创建一个 TCP 套接字。
  1. 连接服务器:调用 connect() 方法连接到服务器的 IP 地址和端口。

服务器

  1. 创建套接字:调用 socket() 创建一个 TCP 套接字。
  1. 绑定地址和端口:调用 bind() 方法将套接字绑定到特定的 IP 地址和端口。
  1. 监听连接:调用 listen() 方法,使套接字进入监听模式,等待客户端连接。
  1. 接受连接:调用 accept() 方法接受客户端连接,生成一个新的套接字用于通信。

3. 网卡处理

  • 客户端和服务器的网卡:在建立连接时,网卡会根据 IP 地址和端口号在网络上发送和接收数据包。

4. WebSocket 握手(Handshake)

客户端

  1. 发送握手请求:通过 TCP 连接发送包含特定头部信息的 HTTP 请求,如 Upgrade: websocketConnection: UpgradeSec-WebSocket-Key 等。

服务器

  1. 接收握手请求:通过 TCP 连接接收客户端的 HTTP 请求。
  1. 验证请求并生成响应:验证请求头信息并生成包含 101 Switching Protocols 状态码的响应,添加 Sec-WebSocket-Accept 头部信息。
  1. 发送握手响应:通过 TCP 连接发送握手响应。

5. WebSocket 数据传输

客户端和服务器

  1. 建立连接后:客户端和服务器可以开始通过 WebSocket 协议发送和接收数据帧。
  1. 封装和解析数据帧:每个数据帧包含控制信息和数据负载,双方通过解析帧头来获取数据。

6. 消息收发

客户端

  1. 发送消息:调用 WebSocket API 将消息封装成帧并通过 TCP 连接发送。
  1. 接收消息:监听 TCP 连接,解析接收到的帧获取消息。

服务器

  1. 发送消息:将消息封装成帧并通过 TCP 连接发送。
  1. 接收消息:监听 TCP 连接,解析接收到的帧获取消息。

7. 关闭连接

客户端和服务器

  1. 发送关闭帧:当某一方决定关闭连接时,发送一个特殊的 WebSocket 关闭帧。
  1. 接收关闭帧并响应:接收方收到关闭帧后,发送一个关闭帧作为响应。
  1. 关闭 TCP 连接:双方调用 close() 方法关闭 TCP 套接字。

详细的 TCP 通信流程

  1. TCP 三次握手
      • 客户端发送 SYN 包到服务器。
      • 服务器接收 SYN 包并返回 SYN-ACK 包。
      • 客户端接收 SYN-ACK 包并发送 ACK 包,完成连接建立。
  1. 数据传输
      • 数据通过 TCP 连接传输,TCP 协议负责数据包的分段、传输、重组和确认。
      • 网卡处理传输过程中的数据包物理传输。
  1. TCP 四次挥手
      • 一方发送 FIN 包请求关闭连接。
      • 另一方接收 FIN 包并返回 ACK 包。
      • 另一方发送 FIN 包请求关闭连接。
      • 初始方接收 FIN 包并返回 ACK 包,完成连接关闭。
通过这些步骤,WebSocket 可以在 TCP 的基础上建立和维持高效的双向通信连接。
Loading...
文章列表
王小扬博客
云原生
Git
Elasticsearch
Apollo
产品
Think
生活技巧
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP
AI