什么是套接字?

什么是套接字?

有人可以向我解释一下什么是套接字吗?我在 SSL 等上下文中的许多缩写词中看到它。

还有,为什么叫socket呢?纯粹是因为这是他们发明的名字吗?或者这是他们想出的第一个名字?

答案1

套接字是代表网络连接的伪文件。一旦创建了套接字(标识另一台主机和端口),对该套接字的写入将转换为发送出去的网络数据包,并且可以从套接字读取从网络接收的数据。

套接字类似于管道。对于使用它们的程序来说,两者看起来都像文件。两者都促进进程间通信。管道与本地程序通信;套接字与远程程序进行通信。正如您所提到的,套接字还提供双向通信(就像一对正确连接的管道一样)。


最后,单机上的程序通常使用标准网络协议(例如 TCP)进行通信;如果一直到网络硬件(如果有的话!)、计算校验和等,只是为了回到同一主机,那将是一种浪费。 Unix 域套接字处理这种情况。它们绕过网络连接同一主机上的进程而不是远程进程。

正如 Tripleee 提到的,在 BSD 的历史进程中,管道的引入早于套接字,并且一旦存在,就使用套接字重新实现。相同的参考文献,FreeBSD操作系统的设计与实现,提到出于性能原因,管道随后恢复为非套接字实现。

答案2

套接字只是通信的逻辑端点。它们存在于传输层。您可以在套接字上发送和接收内容,可以绑定和侦听套接字。套接字特定于协议、机器和端口,并在数据包的标头中进行寻址。

Beej 的指南网络编程进程间通信两者都有关于如何使用套接字的良好信息,甚至回答这个确切的问题

答案3

现在,这是什么?

套接字或“套接字”可以有多种含义:

首先,它是一个思维模型和一个应用程序编程接口(API)。这意味着您有一组需要遵循的规则和一组函数,您可以使用它们根据精确指定的合同编写执行某些操作的程序。在这种特殊情况下,某物意味着与另一个程序交换数据。

套接字 API 广泛抽象了“通信”的一般细节。它通过一种(几乎)一致且相同的千篇一律的形式封装了您与谁交谈以及如何交谈。
您可以在不同的“域”(例如“unix套接字”或“互联网套接字”)和不同类型的通信(例如“数据报”套接字或“流”套接字)中创建套接字,并与不同的接收者通信,一切工作原理都完全相同(嗯,99%,显然有一些细微的差异,你必须考虑在内)。

您不需要知道(而且您甚至不想知道!)您是否与同一台计算机或不同计算机上的另一个程序通信,或者这些计算机之间是否存在 IPv4 或 IPv6 网络,或者可能是其他网络您从未听说过的协议。

socket也是创建的库函数(或系统调用)的名称“插座”,这是一种特殊的文件(Unix 中的一切都是文件)。

与...相比如何?

套接字与管道和名称管道属于同一类别

管道是一种手段单程同一台计算机上的读者和作者(两者都是程序)之间的通信。它模拟一个溪流数据(就像 TCP)。
也就是说,从管道的角度来看,不存在单独的“消息”或“数据块”。您可以将任意数量的数据复制到“一端”,其他人可以按照与您相同的字节顺序在“另一端”读取任意数量的数据(不一定相同,也不一定一次性)把它推了进去。

A命名的管道就是管道它在文件系统中拥有一个名称。也就是说,它的外观和行为就像一个文件,它出现在目录列表中,您可以打开它,写入它等等。请注意,您还可以创建套接字特殊文件(这将是一个命名套接字) 。

另一方面,套接字是一种手段两种方式(“双工”)通信,这意味着您可以在同一套接字中写入和读取,并且不需要两个单独的套接字来进行双向通信。
此外,套接字可以充当流(与管道相同),或者可以发送离散的、不可靠的消息,或者可以发送离散的、有序的消息(前两个在任何域上工作,最后一个仅在“unix域”上工作) )。它可以向完全不同的计算机上的某人发送消息(或模拟流)。在某些条件下,套接字甚至可以进行某种形式的一对多通信(多播)。

考虑到这一点,很明显套接字做了更复杂的事情,一般来说比管道有更多的开销(基本上只是简单地memcpy往返于缓冲区!),但是如果您创建本地套接字(即在同一台计算机上),操作系统通常会应用经过高度优化的快速路径,因此有确实没有太大区别。

有时在网络方面提到进程间通信

是的,套接字是进程间通信的一种可能方式(共享内存和管道是替代方案的示例)。同时,如上所述,它们被用于“网络”。

答案4

对于 IP 上的 udp 或 tcp,

套接字地址是 IP 地址和端口号的组合。

IP 地址是互联网上机器的地址,例如unix.stackexchange.com has address 198.252.206.140

然而,每台机器必须能够提供多个服务,因此大多数机器将在端口 80 上提供 http(网页),并在端口 22 上提供 ssh 等。

所以(套接字)的unix.stackexchange.com:80端口是该网站的访问点。80unix.stackexchange.com

然而还有其他类型的套接字,请参阅下面的评论。

相关内容