chr*_*lee 72 networking terminology history socket
有人可以向我解释什么是套接字吗?我在 SSL 等上下文中的许多首字母缩略词中看到它。
还有,为什么叫socket呢?纯粹是因为这是他们发明的名字吗?或者这是他们想出的第一个名字?
dha*_*hag 96
套接字是表示网络连接的伪文件。创建套接字后(标识其他主机和端口),对该套接字的写入将转换为发送出去的网络数据包,并且可以从该套接字读取从网络接收到的数据。
套接字类似于管道。对于使用它们的程序来说,两者看起来都像是文件。两者都有助于进程间通信。管道与本地程序通信;套接字与远程程序通信。正如您提到的,套接字还提供双向通信(就像一对正确连接的管道一样)。
最后,单机上的程序通常使用标准网络协议(例如 TCP)进行通信;一直到网络硬件(如果有的话!),计算校验和等,只是最终回到同一主机上,这将是浪费的。Unix 域套接字处理这种情况。它们连接同一主机上的进程而不是远程进程,绕过网络。
正如三重奏所提到的,在 BSD 的历史进程中,管道比套接字更早被引入,并且一旦套接字存在就使用套接字重新实现。同一参考文献The Design and Implementation of the FreeBSD Operating System提到,出于性能原因,管道随后被恢复为非套接字实现。
Sha*_*off 59
套接字只是通信的逻辑端点。它们存在于传输层。您可以在套接字上发送和接收事物,也可以绑定和侦听套接字。套接字特定于协议、机器和端口,并在数据包的标头中进行寻址。
Beej 的网络编程和进程间通信指南都有关于如何使用套接字的很好的信息,甚至回答了这个确切的问题。
Dam*_*mon 14
一个套接字或“套接字”可以是几个东西:
首先,它是一个思想模型和一个应用程序编程接口(API)。这意味着您有一组需要遵循的规则和一组可用于编写程序的函数,这些函数可以根据精确指定的契约来执行某些操作。在这种特殊情况下,某事意味着与另一个程序交换数据。
套接字 API 广泛地抽象了一般“通信”的细节。它通过一种(几乎)一致和相同的千篇一律的形式封装了您与谁交谈以及如何交谈。
您可以在不同的“域”(例如“unix 套接字”或“互联网套接字”)和不同类型的通信(例如“数据报”套接字或“流”套接字)中创建套接字,并与不同的接收者对话,并且一切都完全相同(好吧,99%,显然您必须考虑到细微的差异)。
您不需要知道(甚至不想知道!)您是否在与同一台计算机或不同计算机上的另一个程序对话,或者这些计算机之间是否存在 IPv4 或 IPv6 网络,或者其他一些你从未听说过的协议。
socket也是创建“套接字”的库函数(或系统调用)的名称,它是一种特殊的文件(Unix 中的一切都是文件)。
套接字与管道和名称管道属于同一类别
管道是在同一台计算机上的读取器和写入器(两者都是程序)之间的一种单向通信方式。它模拟数据流(就像 TCP 一样)。
也就是说,从管道的角度来看,不存在单独的“消息”或“数据块”。您可以将任意数量的数据复制到“一端”,其他人可以在“另一端”以与您相同的字节顺序读取任意数量的数据(不一定相同,也不一定一次性)把它推了进去。
一个命名管道只是一个在文件系统中拥有一个名字的管道。也就是说,它的外观和行为就像一个文件,它出现在目录列表中,你可以打开它,写入它等等。注意你也可以创建套接字特殊文件(这将是一个命名套接字) .
另一方面,套接字是一种双向(“双工”)通信方式,这意味着您可以从同一个套接字中写入和读取,并且双向通信不需要两个单独的套接字。
此外,套接字可以充当流(与管道相同),或者它可以发送离散的、不可靠的消息,或者它可以发送离散的、有序的消息(前两个适用于任何域,最后一个仅适用于“unix 域” )。它可以向完全不同的计算机上的某人发送消息(或模拟流)。在某些情况下,套接字甚至可以进行一种形式的一对多通信(多播)。
考虑到这一点,很明显套接字做的事情要复杂得多,而且通常比管道有更多的开销(基本上只是简单memcpy地往返缓冲区!),但是如果您创建本地套接字(即在同一个计算机),操作系统通常采用高度优化的快速路径,因此实际上没有太大区别。
有时会提到网络的进程间通信
是的,套接字是进程间通信的一种可能方式(共享内存和管道是替代方案的示例)。同时,它们被用于“联网”,如上所述。
一个套接字是一个抽象。它为应用程序提供了一个接口,以允许操作系统调解和组织任意数量的应用程序对有限资源的使用。
如果通过套接字发送的数据可以被认为是邮件的信封,那么套接字就是您的邮箱。您将邮箱(套接字)附加到您的房屋(程序)并将您的外发邮件(数据)放入其中。在预定的时间,邮递员(操作系统)会来取走您的外发邮件,并将所有收到的邮件投递到同一个邮箱中。您的外发邮件将代表您通过邮递员的卡车(网络连接)连同您邻居的所有邮件传送给收件人。这使您可以与远方的人通信,而无需自己投递信件的费用、时间、困难等。
至于为什么他们被称为“套接字”,发明者可以随心所欲地称呼它的想法可能在那里发挥了重要作用。虽然,在我看来这不是一个坏名字:)