为啥两个 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 地址不能使用同一个命名管道?的主要内容,如果未能解决你的问题,请参考以下文章