首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果有套接字和传输的话,有什么区别?

如果有套接字和传输的话,有什么区别?
EN

Stack Overflow用户
提问于 2016-04-12 14:21:24
回答 2查看 1.4K关注 0票数 1

“套接字”和“传输”之间是有区别的,还是可以互换的。我之所以这样问,是因为我看到很多库似乎都在做同样的事情,但只是在名称功能/方法/属性/类的方式上略有不同。

我的理解是,“套接字”是连接服务器/网络设备的流,而“传输”是连接使用的方案(例如,TCP是传输)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-13 02:32:38

我认为您提出了这个问题,因为PHP以一种令人困惑的方式使用这些概念。例如,运输定义流插座的概念。我不是一个PHP程序员,但据我注意到,它的名字并不是很直观。

在操作系统中,socket是应用程序通过特定协议进行通信的操作系统API。

在网络和操作系统中,有两种分层的通信模型: OSI和TCP/IP。在它们中,有一个传输层运行在网络层之上。该传输层的主要功能是在不同应用程序(在TCP/IP模型的应用层中运行)使用的不同TSAP(传输服务接入点)之间复用网络层提供的服务。传输层协议的一些例子是: TCP、UDP、SCTP。TSAP的概念是我们所知道的TCP/UDP/SCTP端口。

有不同类型的套接字:流和数据报套接字(分别为TCP和UDP )、原始套接字、unix域套接字、包套接字(在Linux中)等等。

现在,AF_INET套接字可以是用于TCP的流套接字(因为它是面向流的),也可以是用于UDP 这里有一个解释的数据报套接字。

具体来说,在TCP和UDP中,套接字由元组(源IP、源端口、目标IP、目标端口)定义。

SSL和TLS运行在TCP之上( UDP也有一些东西,但是.)可以说,这些是应用层协议,但在这里,分隔线并不是很清楚。一些高级语言,Java和其他语言,使用SSL或TLS具有安全套接字。

从我在上述链接中看到的内容来看,PHP有流套接字的概念,这不同于一般操作系统中的套接字概念。它们将您从裸露的操作系统套接字中抽象出来。流套接字允许您选择不同的传输(tcp、udp、ssl、unix等)。我假设它指的是传输数据的不同机制(不仅是协议,还包括unix之类的机制),如果您在流插座中阅读,您将看到它在幕后为TCP打开一个真正的流套接字,即所谓的“传输”,而为UDP打开一个数据报套接字,即所谓的“传输”。

现在,将它称为用于udp传输的流套接字是令人困惑的。我不知道PHP是否让您将UDP套接字视为面向流的套接字,在这种情况下,这是有意义的(我将这部分响应留给一些PHP专家)。

最后,我希望在此解释之后,您将得出结论,套接字和传输在操作系统的一般概念和PHP中都不是可互换的概念。

票数 1
EN

Stack Overflow用户

发布于 2016-04-12 17:15:39

“套接字”和“传输”是有区别的,还是可以互换的?

到目前为止,我还没有发现transport这个词是一个单词。我总是在整个传输过程中到处看到传输层。我请求您提供您引用的外部引用(并感到困惑)。即使在Java的网络库中,我也从未听说/读过传输是一个独立存在的实体(在我有限的经验范围内)!

我之所以这样问,是因为我看到很多库似乎都在做同样的事情,但只是在名称功能/方法/属性/类的方式上略有不同。

我想你被TLS/SSL弄糊涂了。这里,TLS是SSL的继承者。您不应该将套接字和传输与此关联起来。顺便说一下,TLS/SSL是应用层协议。

我的理解是,“套接字”是连接服务器/网络设备的流,而“传输”是连接使用的方案(例如,TCP是传输)。

你的两种说法都是不正确的(至少首先肯定)!套接字不是流;TCP不是传输,而是TCP/IP的传输协议。

简单地说,网络套接字是跨越计算机网络的连接的端点。套接字在内部通常是简单的整数,它们标识要使用的连接。套接字不需要地址(例如,仅用于发送数据),但如果程序将套接字绑定到地址,则可以使用套接字接收发送到该地址的数据。

然而,传输层是Internet协议套件和开放系统互连(OSI)中网络栈中协议分层体系结构中方法的概念划分。TCP/IP最著名的传输协议是传输控制协议(TCP)。

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

https://stackoverflow.com/questions/36576112

复制
相关文章

相似问题

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