为啥两个 HTTP 和 TCP 地址可以使用同一个端口,而两个 IPC 地址不能使用同一个命名管道?

Posted

技术标签:

【中文标题】为啥两个 HTTP 和 TCP 地址可以使用同一个端口,而两个 IPC 地址不能使用同一个命名管道?【英文标题】:Why two HTTP and TCP addresses can use the same port and two IPC addresses cannot use the same named pipe?为什么两个 HTTP 和 TCP 地址可以使用同一个端口,而两个 IPC 地址不能使用同一个命名管道? 【发布时间】:2011-04-12 14:15:39 【问题描述】:

我对端口的看法是:每当消息到达机器时,它都会被复制到映射到指定端口的内存区域,并通知相关的应用程序或服务有消息到达。

如果这是真的,那么如果两条消息到达侦听同一端口的两个不同服务会发生什么? (http 或 tcp)

为什么两个命名管道地址不能使用同一个命名管道?

【问题讨论】:

“命名管道地址”是什么意思? 一般来说,您的分析具有误导性:无论应用协议是什么,一次只有一个服务可以侦听特定端口上的 tcp/ip 连接。 命名管道地址表示IPC地址。 也许您需要澄清您所谈论的操作系统平台。例如,Named pipes 在 Unix 和 Windows 上的含义不同。 【参考方案1】:

TCP 通过 local ip, local port, remote ip, remote port 的元组识别“连接”。因此,由于每个传入连接都有不同的远程 ip/端口对,您的本地机器可以区分它们。

HTTP 使用 TCP 进行传输。因此,HTTP 端口 TCP 端口。

如果您曾经在打开连接时让您的机器获得一个新的 IP 地址,您会注意到它们在第一次发送任何数据时会中断,因为远程主机无法识别(新)地址并且发送 RST 响应。

一个管道只有它的名字来区分它,所以无论它有多少写者,都只有一个“连接”。

【讨论】:

小修正:连接由5元组标识;我省略了“协议”(即 tcp/udp 是分开的)。 there is only one 'connection' no matter how many writers it has. - 在 Windows 操作系统上,这完全不正确。有一个名称,可能有许多管道实例(即客户端-服务器连接)。就像 TCP。 我是 UN*X 人...我什至不知道 Windows 有命名管道。 :-)【参考方案2】:

您的描述是处理传入消息的一种方式。

如果两个网站在同一个端口上监听,则有一个一个网络服务器在那个端口上监听,然后查看 http 主机头以找到正确的网站来转发请求。

命名管道也是如此,RPC监听器监听TCP端口,然后发现是命名管道消息,然后将消息转发给正确的命名管道。

【讨论】:

这意味着命名管道也使用端口来接收消息? 是的,命名管道是一种高级协议,它是使用 RPC 调用实现的,它直接在 TCP 上实现,或者以前经常在 NetBios 上实现,可以在 TCP 或 NetBEUI 之上运行。

以上是关于为啥两个 HTTP 和 TCP 地址可以使用同一个端口,而两个 IPC 地址不能使用同一个命名管道?的主要内容,如果未能解决你的问题,请参考以下文章

一个TCP连接上为啥能发起多少个HTTP请求?

为啥用路由器连的两台电脑互相PING不通

为啥 HTTP/HTTPS 代理和 Socks 代理可以在一个端口上工作?

为啥tcp服务器可以获取客户端的ip?

为啥使用 HTTP/2 的应用只建立一个 TCP 连接?

TCP有235端口,UDP也可以有235端口,为啥不会冲突?