Unix vs BSD vs TCP vs Internet套接字?

我正在阅读Linux编程接口,它介绍了Linux上使用的几种不同types的套接字

  • Unix域
  • 伯克利
  • TCP
  • 互联网

本书所说的一件事是,如果你想在远程主机之间进行通信,你不能使用Unix域套接字,因为它们是在同一个主机上的IPC。 你必须使用“Internet”套接字。

但是,我仍然有点困惑,这是如何与“TCP”套接字,伯克利套接字和其他2? 他们的关系是什么? 为什么你会有一个Internet套接字以及一个TCP套接字?

总之,我试图理解所有的(我错过了什么?)各种不同types的Unix套接字,在什么情况下我会使用它们?

Solutions Collecting From Web of "Unix vs BSD vs TCP vs Internet套接字?"

套接字是一个抽象。 SO上用于套接字的标记定义与任何一样好:

双向进程间通信流的端点。 这通常是指通过网络连接的处理流程,但不限于此。

所以从这个主要区别是套接字(1)使用网络和(2)套接字没有。

Unix 套接字不使用网络。 他们的api使得开发人员看起来(大部分)与网络套接字相同,但是所有的通信都是通过内核来完成的,套接字仅限于与他们运行的机器上的进程交谈。

伯克利插座是我们今天知道的POSIX平台上的网络插座。 过去有不同的Unix开发方式(例如Berkeley或BSD,System V或sysV等等)。Berkeley套接字在市场上基本上赢了,现在已经成为Unix套接字的代名词。

严格来说,没有一个TCP套接字。 有网络套接字可以使用TCP协议进行通信。 这只是一个语言学速记,把它们称为一个tcp套接字,以使用另一种协议,例如UDP,路由协议或其他协议将它们与套接字区分开来

一个“互联网”套接字是一个无意义的区别。 这是一个使用网络协议的套接字。 这消除了unix域套接字,但大多数网络协议可以用于在局域网或互联网上进行通信,这只是网络的集合。 (虽然注意到有一些特定于本地网络的协议,以及那些管理网络集合的协议。)