网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket(套接字),因此建立网络通信连接至少要一对端口号。socket 本质是对 TCP/IP 协议栈的封装,它提供了一个针对 TCP 或者 UDP 编程的接口,并不是另一种协议。通过 socket,你可以使用 TCP/IP 协议。

补充

补充:Socket 是进程间通信的端点,是「IP + 端口 + 协议」的抽象,并非协议本身。

补充要点:

  • 三类 Socket:
    • 流式 Socket(SOCK_STREAM)→ TCP,面向连接、可靠、有序。
    • 数据报 Socket(SOCK_DGRAM)→ UDP,无连接、不保证到达。
    • 原始 Socket(SOCK_RAW)→ 直接访问 IP 层,ping、traceroute 使用。
  • 通信过程(TCP):服务端 socket() → bind() → listen() → accept();客户端 socket() → connect(),全双工读写。
  • OS 抽象:在 Linux 中 Socket 是一类文件描述符,可以像文件一样被 read/write/poll/epoll 操作。
  • 常见协议:HTTP 默认基于 TCP Socket;WebSocket 底层也是 TCP;QUIC/HTTP3 基于 UDP。

简单 Node.js 示例(TCP 服务端):

const net = require('net');
const server = net.createServer(socket => {
  socket.write('hello\n');
  socket.on('data', data => console.log('recv:', data.toString()));
});
server.listen(3000);

补充:浏览器端不能直接使用系统 Socket,只能通过 WebSocket / fetch / WebRTC 等高层 API。