Sockets 接口:UNIX 如何重塑网络

Hooray for the Sockets Interface

Sockets 接口:UNIX 如何重塑网络

1983 年,UCB 发布的 4.2BSD 版本引入了 Sockets 接口,这被视为在线服务的诞生时刻。在此之前,获取 UNIX 系统需通过磁带邮寄,安装过程繁琐且依赖手工输入十六进制代码。Sockets 的出现将网络连接抽象为文件描述符,让原本复杂的网络通信变得像读写文件一样简单。这一创新不仅统一了网络访问模型,还催生了 FTP、Telnet 和 SMTP 等关键协议,彻底改变了全球网络服务的普及方式。

Sockets 的出现让网络连接的抽象变得像读写文件一样简单,几乎任何能操作文件的程序都能迅速转换为网络程序。
  1. Taniwha

    Sockets 是那种你很少会去探究其底层的承重级抽象——就像文件系统或线程一样,但有时为了满足极致的性能需求,你确实需要深入到其之下。

  2. jchw

    这篇文章有点忽略了当时的网络标准——当时有很多标准,TCP 和 IP 只是其中之一,其余大多数要么是私有的(如 DNA、SNA、BNA 等)且互不兼容,要么属于电信运营商,他们想按数据包收费(如 X.25)。

    在我看来,TCP/IP 之所以胜出,是因为其实现是开源的,而且没人能通过封锁他人(或向他人收取构建实现的许可费)来赚钱。此外,当时还有一个现成的参考实现可供取用。

  3. inigyou

    我对 Sockets 有两个不满:

    1. 双向 Sockets 本应该对应 ≥2 个文件描述符(fd),而不是 1 个。

    2. 非阻塞语义以及 poll/select 很糟糕。

    不能怪 1983 年的人没把“异步 I/O”做对,毕竟我们现在还在为此挣扎;至少现在我们有一些不错的解决方案(比如 Linux 上的 io_uring)。

同日更多故事

2026-07-29