首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TCP的套接字与Linux的TCP套接字

TCP的套接字与Linux的TCP套接字
EN

Stack Overflow用户
提问于 2019-02-15 21:50:46
回答 2查看 482关注 0票数 0

Linux和TCP协议都有称为“套接字”的概念。它们是相同的概念吗?Linux的TCP套接字是否实现了TCP的套接字概念?

  1. 连接和套接字之间的关系: 我听说过a Linux's TCP socket,这是真的吗? Tenebaum的计算机网络(2011年第5版,第6.5.2节,,p553)说: 套接字可以同时用于多个连接。换句话说,两个或多个连接可以在同一个套接字上终止。连接由两端的套接字标识符标识。

由于引用中说两个连接可以共享一个“套接字”,这本书是否使用了与Linux的TCP套接字不同的“套接字”概念?本书是否使用了TCP的套接字概念?

  1. 进程和套接字之间的关系: 我还听说了a Linux's TCP socket。但是,如果两个进程可以共享一个套接字,那么进程不能随意在套接字上创建自己的连接吗?所以在同一个Linux的TCP套接字上有两个连接?这是否与1相矛盾,其中两个连接不能共享Linux套接字?

两个进程能否共享(TCP的套接字)

EN

回答 2

Stack Overflow用户

发布于 2019-02-15 22:28:56

这本书引用了一个更抽象的套接字概念,这个概念不与特定的操作系统,甚至网络/传输协议相关联。在本书中,套接字只是一个唯一定义的连接端点。因此,连接是一对套接字(S1,S2),在某些未定义的上下文中,这对应该是唯一的。现在使用我的连接的一个特定于TCP的示例将有一个抽象套接字,它由一个接口IP地址和一个TCP端口号组成。像我这样的堆栈溢出用户和抽象套接字443,151.101.193.69之间有许多连接,但只有一个连接来自我的机器27165,192.168.1.231到443,151.101.193.69,这是一个使用不可路由IP地址的假示例,以保护我的隐私。

如果我们更加具体地假设堆栈溢出和我的计算机都在运行linux,那么我们就不能谈论man 2 socket定义的套接字,以及使用它的linux。在这里,可以在侦听模式下创建套接字,这通常称为服务器。此套接字可以在多个进程之间共享(在共享内存或状态的意义下共享)。但是,当对等点连接到此侦听套接字时,将创建一个新的套接字(这是accept()调用的结果)。原始侦听套接字可能再次用于accept()另一个连接。我相信,如果在accept()系统调用中有多个进程被阻塞,那么其中的一个进程将被解除阻塞,并使用新创建的连接套接字返回。

如果这里缺少什么,请告诉我。

票数 4
EN

Stack Overflow用户

发布于 2019-02-19 22:49:16

作为你正在阅读的文档来说,说话很方便,但并不是很准确。

套接字是一个通用的网络API。它们与TCP的唯一关系是,您可以设置套接字来使用它。您还可以设置套接字来讨论操作系统支持的任何其他网络协议;此外,您也不必使用套接字,许多OS仍然提供其他网络API,其中一些具有很大的利基优势。

这给你留下的问题是,非技术语言让你对事情是如何组合的有一个概念,但它掩盖了实现细节,你不能用外行的术语从特征和类比中进行任何详细的推理。

因此,忽略由套接字形成的概念。阅读实际的文档,而不是教程。编写代码,看看它是否像你想的那样工作。您将了解到,您现在拥有的是一个外行对“一个套接字”的理解,包括您用socket()创建的套接字之间的差异,从accept()中获得的套接字,以及您可以在Unix的文件系统中找到的套接字等等。

即使是“连接”也有点简化,即使对于TCP来说也是如此。

为了让您知道兔子洞有多深,“共享”也是如此--您可以通过某些类型的套接字发送fd,而套接字是fd的,在fork()之后,两个进程共享fd名称空间,您可以dup() fd的.

一个完全设置的TCP网络连接是一个{host1:port1,host2:port2}对,两端都有某种跟踪状态,并且在这些端之间发送的数据包根据TCP协议(即规则)更新状态。您可以将套接字连接到本地TCP地址,并通过该套接字一个接一个地访问远程(或本地)地址,因此从这个意义上讲,连接可以共享一个套接字--但如果您正在运行服务器,bind() ed连接将获得自己的专用套接字,这就是如何识别您的read()数据的来源。

常见的合并之一是主机之间的合并:可以绑定套接字的端口对和套接字本身。最后你会有一个OS套接字监听新的连接,再加上基于连接的协议(如TCP )上的每个连接,但是它们都可以使用相同的主机:端口,很容易掩盖现实,把它看作是“一个套接字”,看起来你正在读的书就是这样的用法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54717531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档