我知道主机/计算机上对于我在网络上托管的每个服务都会有多个端口。
但我想了解这些端口内部是什么?
以下是我对网络端口的理解。如果我错了,请纠正我。添加详细信息以使其更清晰。
它们可能是一种软件构造,主要是操作系统网络组件内的队列/缓冲区,每当机器上托管网络服务(Web 服务、文件传输服务等)时都会动态创建。并且每个网络服务都会监听各自的端口(以接收数据),并且还可以访问该端口(以发送数据)。[就像有界缓冲区问题]
当需要发送数据时
网络服务(应用程序)将对操作系统进行系统调用(例如 send()),将数据写入缓冲区并通知传输协议。这样 TCP/UDP 协议就会从缓冲区中获取数据,对其进行分段并将其传递到网络堆栈。
何时需要接收数据-
当数据通过 NIC 到达主机时,数据将从操作系统中的某个低级网络组件读取并传递到网络堆栈。当操作系统的传输层组件读取数据时,它会将数据放在与该特定端口号关联的队列中,以便监听该端口的应用程序(网络服务)可以读取数据。
答案1
几乎正确,但并不完全正确。
套接字是带有缓冲区的软件构造(每个套接字都有单独的发送和接收队列)。对于 TCP,每个连接都使用单独的套接字。
端口只是用于解复用的数字标签 - 帮助操作系统选择哪个套接字(或哪个接收缓冲区)应该接收传入的数据包。
每个套接字都与多个参数相关联 - 协议、本地和远程地址以及本地和远程端口 - 所有这些参数都在查找接收到的数据包时使用。(当地址相同时,至少一个端口必须不同。但如果地址不同,则多个套接字可以使用相同的端口。)