Unix套接字的简单说明


20

我可以搜索,并且已经看过Wikipedia条目和其他地方,但是即使我有一定的编程经验,我还是不太了解这个概念。您能把我当作10岁的孩子,并给我一个关于套接字通讯的清晰解释吗?


使用它们编写一些小型测试应用程序。您甚至不需要两台机器,只需两个小应用程序即可启动。答对了。
Patrick Hughes

Beej的《网络编程指南》似乎是Unix套接字非常流行的介绍性文字,尽管我不能说我喜欢它。
Nemanja Trifunovic

我已经赞成@DanielPittman的答案,如果我必须写的话,我会写相同的答案;但是,如果您需要更多帮助,我会扩大。请编辑您的问题,为您所知道和不知道的内容提供一些背景知识,并让我知道您是在寻求有关使用方法,它们在内部的工作方式还是理论(协议设计)方面的帮助,或者您正在尝试出于某种目的进行评估?
Dipan Mehta'2

这是一本书:Unix网络编程。地球上任何愿意回答这个问题的人都会向这位母亲学习。阅读这本书,您的问题本身就会变得更好。
Dipan Mehta 2012年

您是说BSD插槽吗?Unix套接字仅在本地工作。
imel96 2014年

Answers:


15

让我举个例子:假设您想与不在您住址的朋友交流/聊天。为此,您必须建立一个“沟通渠道”。假设您要使用电话进行此通信。您知道城市中有电话线网络,该网络延伸到每个房屋。

现在,您家中有一个电话插座,而您朋友家中有一个。为了进行通信,您和您的朋友必须通过将电话插入通信两端的插座来连接到网络。从概念上讲,编程中的套接字与电话套接字相同。

在编程中,您有两个要相互通信的进程(正在运行的程序)。为此,他们必须在自己之间建立通信链接。同样,有可用的网络,他们只需要使用某种套接字就可以连接到该网络。Unix套接字就是这样一种套接字,它为网络提供了这种连接/可插入性。因此,在这两个程序的每一个中,您将都有一些代码来完成通过套接字连接到网络的工作。

剩下的就是细节。


2
如果我有足够的声誉,我会拒绝投票。您的文字没有解释套接字的工作方式。与Wikipedia中的内容相同。套接字如何监听?您的电话插座如何监听连接?
格林

21

Unix套接字是双向套接字-就像您可能熟悉的基于IP的套接字一样,有点类似于您可能熟悉的管道。

它们具有少量有趣的属性:

  • 它们仅在“本地主机”的域中-您不能通过网络访问它们,只能在本地计算机上访问它们。
  • 您可以在“流”模式下创建它们,在这种模式下,它们只是像管道一样将数据作为字节流传递。
  • 您可以在“数据报”模式下创建它们,在它们之间保留发送操作之间的边界。这使您可以保留成帧,而无需在字节流之上构建自己的成帧协议。
  • 他们使用文件系统或在Linux上使用“抽象名称空间”作为其“地址”
  • 您可能可以模拟另一端,安全地识别连接软件或通过套接字传递文件句柄,具体取决于您的操作系统。

从本质上讲,它们等效于任何其他套接字-它们具有比管道更有趣的属性,但在其他方面没有根本不同。它们通常具有比管道更高的IPC延迟,并且通常具有更大的缓冲区-尽管您可以进行调整,但它取决于平台。

要记住的最后一个有趣的属性是,它们使用文件系统作为其命名空间-就像命名管道,而不是匿名管道,因为该软件没有先前的关系可以通信。(抽象名称空间套接字是相同的,但“文件”路径不必存在。)

没有比这更深的东西了-它们没有任何超级秘密的隐藏属性,这些属性使它们与典型的管道或与本地主机的TCP连接完全不同。


3
谢谢,但我仍然觉得它很复杂,充满了got昧。
Elzo Valugi 2012年

2
请不要因为尝试单行回答而受到冒犯,以查看是否有更好的帮助:“您知道TCP / IP和UDP / IP套接字如何工作吗?它们是相同的,只是没有IP部分。”
丹尼尔·皮特曼

我没有冒犯,我只想了解。谢谢。我将更详细地研究这些内容。
Elzo Valugi 2012年

4
使用该术语定义术语(即:“ Unix套接字是双向套接字”)不会向不知道套接字以什么开头的人解释任何内容。
布莱恩·奥克利

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.