gpt4 book ai didi

php - Socket和Transport有什么区别,如果有的话

转载 作者:行者123 更新时间:2023-12-03 11:59:49 25 4
gpt4 key购买 nike

“套接字”或“传输”之间是否有区别,或者它们是否可以互换。我之所以问,是因为我看到很多库似乎在做同样的事情,但只是在名称函数/方法/属性/类方面略有不同。

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

最佳答案

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

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

在网络和操作系统中,有两种分层的通信模型:OSI 和 TCP/IP。在它们两者中,都有一个在网络层之上运行的传输层。该传输层的主要功能是在不同应用程序使用的不同 TSAP(传输服务访问点)之间多路复用网络层提供的服务(在 TCP/IP 模型中的应用程序层中运行)。传输层协议(protocol)的一些示例是: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 也有一些东西,但是......),可以说这些是应用层协议(protocol),但这里的分隔线不是很清楚。一些高级语言(Java 和其他语言)具有使用 SSL 或 TLS 的安全套接字。

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

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

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

关于php - Socket和Transport有什么区别,如果有的话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36576112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com