gpt4 book ai didi

linux - Unix vs BSD vs TCP vs Internet 套接字?

转载 作者:IT王子 更新时间:2023-10-29 00:42:07 26 4
gpt4 key购买 nike

我正在阅读 Linux 编程接口(interface),它描述了 Linux 上使用的几种不同类型的套接字:

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

书中提到的一件事是,如果您想在远程主机之间进行通信,则不能使用 Unix 域套接字,因为它们用于同一主机上的 IPC。您必须使用“Internet”套接字。

但是,我仍然有点困惑这与“TCP”套接字、Berkeley 套接字和其他 2 个套接字有什么关系?他们是什么关系?为什么要有 Internet 套接字和 TCP 套接字?

简而言之,我试图了解所有(我是否遗漏了什么?)各种不同类型的 Unix 套接字以及在什么情况下我会使用它们?

最佳答案

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

An endpoint of a bidirectional inter-process communication flow. This often refers to a process flow over a network connection, but by no means is limited to such.

因此,一个主要区别是 (1) 使用网络的套接字和 (2) 不使用网络的套接字。

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

Berkeley 套接字就是我们今天所知的 POSIX 平台上的网络套接字。过去有不同的 Unix 开发路线(例如 Berkeley 或 BSD、System V 或 sysV 等)。Berkeley 套接字基本上赢得了市场,并且实际上是当今 Unix 套接字的同义词。

严格来说,没有 TCP 套接字。有些网络套接字可以使用 TCP 协议(protocol)进行通信。将它们称为 TCP 套接字只是语言学家的简写,以将它们与使用其他协议(protocol)的套接字区分开来,例如UDP、路由协议(protocol)或诸如此类的东西。

“Internet”套接字基本上是一种毫无意义的区别。它是一个使用网络协议(protocol)的套接字。这消除了 Unix 域套接字,但大多数网络协议(protocol)可用于在 LAN 或 Internet 上进行通信,这只是网络的集合。 (尽管请注意,存在特定于本地网络的协议(protocol)以及管理网络集合的协议(protocol)。)

关于linux - Unix vs BSD vs TCP vs Internet 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com