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...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP