Socket 和 Transport 之间有什么区别,如果有的话

What is the difference between Socket and Transport, if there is one

"socket" 或 "transport" 之间是否有区别,或者它们可以互换。我之所以问是因为我看到很多图书馆似乎都在做同样的事情,但只是在名称 functions/methods/properties/classes.

上略有不同

我的理解是 "socket" 是将 servers/network 设备连接在一起的流,"transport" 是连接使用的方案(例如 TCP 是一种传输)。

Is there a difference between a "socket" or a "transport", or are they interchangeable?

到目前为止,我还没有看到 transport 这个词作为一个词。我总是在整个传输过程中无处不在地阅读传输层。我会要求您提供您引用的 外部参考资料 (并且感到困惑)。即使在 Java 的网络库中,我也从未 heard/read 将运输作为一个独立的存在实体(在我有限的经验范围内)!

I only ask because I see a lot of libraries that seem to do the same thing, but differ slightly only in how the name functions/methods/properties/classes.

我认为您因为 TLS/SSL 而感到困惑。这里 TLS 是 SSL 的后继者。您不应该将套接字和传输与此相关联。顺便说一句,TLS/SSL 是应用层协议。

My understanding is a "socket" is a stream connecting servers/network devices together and a "transport" is the scheme the connection uses (E.g. TCP is a transport).

你的两个陈述都不正确(至少首先是肯定的)!套接字不是流; TCP不是传输协议,而是TCP/IP.

的传输协议

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

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

我认为你提出这个问题是因为 PHP 以一种令人困惑的方式使用了这些概念。例如 transport definition and the concept of stream sockets。 我不是 PHP 程序员,但据我所知,它的名称不是很直观。

在操作系统中,套接字是一种操作系统API,供应用程序通过某种协议进行通信。

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

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

现在,AF_INET 套接字可以是 TCP 的流套接字(因为它是面向流的)或 UDP 的数据报套接字 One explanation here

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

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

从我在提到的链接中读到的内容,PHP 有流套接字的概念,这与套接字的一般操作系统概念不同。它们将您从裸操作系统套接字中抽象出来。流套接字允许您 select 不同的传输(tcp、udp、ssl、unix 等)。我假设它指的是传输数据的不同机制(不仅是协议,还有像 unix 套接字这样的机制),如果你阅读 stream sockets 你会看到它在幕后为 TCP 打开一个真正的流套接字,所谓的 "transport" 和 UDP 的数据报套接字,称为 "transport"。

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

最后,我希望通过这个解释你会得出结论,套接字和传输不是可互换的概念,无论是在操作系统的一般概念还是在PHP。