我正在阅读Linux编程接口,它描述了在Linux上使用的几种不同类型的套接字:
书中提到的一件事是,如果您想在远程主机之间进行通信,就不能使用Unix域套接字,因为它们是用于同一台主机上的IPC的。你必须使用“互联网”套接字。
但是,我仍然有点困惑,这与"TCP“套接字、伯克利套接字和其他两个套接字有什么关系?他们之间的关系是什么?为什么您会有一个互联网套接字和TCP套接字?
简单地说,我正在努力理解所有的事情(我错过了什么吗?)不同类型的Unix套接字,在什么情况下我会使用它们?
发布于 2014-04-06 18:48:19
套接字是一种抽象。因此,套接字使用的标记定义与任何套接字一样好:
双向进程间通信流的端点。这通常指的是通过网络连接的进程流,但绝不仅限于此。
因此,一个主要的区别是套接字(1)使用网络,(2)套接字不使用。
Unix域套接字不使用网络。他们的API使开发人员看起来(大部分)与网络套接字相同,但所有通信都是通过内核完成的,套接字仅限于与运行它们的机器上的进程对话。
伯克利套接字是我们今天所知道的POSIX平台上的网络套接字。过去有不同的Unix开发路线(如Berkeley或BSD、System或sysV等)。伯克利套接字基本上在市场上获胜,实际上是当今Unix套接字的同义词。
严格地说,没有TCP套接字。有些网络套接字可以使用TCP协议进行通信。将它们称为TCP套接字只是语言学家的简称,以区分它们与使用另一种协议(如UDP、路由协议或诸如此类)的套接字。
"Internet“套接字基本上是一个毫无意义的区别。它是一个使用网络协议的套接字。这就消除了Unix域套接字,但大多数网络协议都可以用来在LAN或Internet上进行通信,后者只是网络的集合。(不过请注意,本地网络和管理网络集合的协议都有特定的协议。)
https://stackoverflow.com/questions/22897972
复制相似问题