我想两者都允许主机到主机协议将数据传送到正确的进程。但是,它们有什么不同呢?
2 回答
网络应用程序(通常)是在套接字 API 之上编写的。在某些方面,套接字是连接两个或多个网络应用程序的网络“管道”的入口点。双方都需要打开一个套接字来创建网络“管道”。套接字本质上是双向的,因此“管道”的两端可以同时向另一端发送数据并从另一端接收数据。这两个端点通常位于不同的机器上。显然,没有什么能阻止我们让他们坐在同一台机器上。
套接字由三个主要参数标识——其中一个是端口号。另外两个是:(a) 机器的 IP 地址(IPv4 或 IPv6)和 (b) 传输协议(例如 TCP/UDP)。端口号是网络应用程序的逻辑本地标识点。对于每个协议和每个地址族,每个主机最多可以有 65,536 个端口;通常,0 到 1024 范围内的端口号是标准端口,并为各种应用程序保留。此范围之外的端口通常可用于一般用途。对于整个网络中的给定套接字,这三个参数一起应该是唯一的。因此,您可以将两个 TCP 套接字应用程序放在同一台机器上,但要使它们唯一可访问,它们需要绑定到不同的端口。有一种方法可以将多个套接字绑定到同一个端口,
因此,简单的答案是套接字和端口一起工作以允许两个网络应用程序进行通信。它们不是相互竞争的概念。
您可能会发现 Beej 网络指南中的套接字/绑定部分很有帮助。 https://beej.us/guide/bgnet/html/multi/syscalls.html#socket
“端口”是 TCP、UDP 和其他传输层协议的组成部分。
“套接字”是地址:协议:端口组合和应用程序之间的 API 级映射的常用术语。它与 TCP/IP 几乎没有任何关系,而更多地与最重要的层有关——特别是正在使用的套接字 API,如 BSD 套接字、WinSock 或 XTI。关于网络协议的好的文档永远不会用这个词来描述它们。另一方面,API 文档几乎总是如此。