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