网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 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 使用。
- 流式 Socket(
- 通信过程(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。



