1. DNS 解析
- 客户端:根据 WebSocket URL 解析出服务器的 IP 地址。
2. 建立 TCP 连接
客户端
- 创建套接字:调用
socket() 创建一个 TCP 套接字。
- 连接服务器:调用
connect() 方法连接到服务器的 IP 地址和端口。
服务器
- 创建套接字:调用
socket() 创建一个 TCP 套接字。
- 绑定地址和端口:调用
bind() 方法将套接字绑定到特定的 IP 地址和端口。
- 监听连接:调用
listen() 方法,使套接字进入监听模式,等待客户端连接。
- 接受连接:调用
accept() 方法接受客户端连接,生成一个新的套接字用于通信。
3. 网卡处理
- 客户端和服务器的网卡:在建立连接时,网卡会根据 IP 地址和端口号在网络上发送和接收数据包。
4. WebSocket 握手(Handshake)
客户端
- 发送握手请求:通过 TCP 连接发送包含特定头部信息的 HTTP 请求,如
Upgrade: websocket,Connection: Upgrade,Sec-WebSocket-Key 等。
服务器
- 接收握手请求:通过 TCP 连接接收客户端的 HTTP 请求。
- 验证请求并生成响应:验证请求头信息并生成包含
101 Switching Protocols 状态码的响应,添加 Sec-WebSocket-Accept 头部信息。