【发布时间】:2021-06-11 06:40:56
【问题描述】:
如果这是重复的,我深表歉意,但我无法理解大多数看起来相似的答案。在不了解它们的情况下,很难浏览所有维基百科页面和内容。
我知道具有公共 IP 地址的路由器可以使用传入请求的端口来确定它应该将其发送到哪个私有设备。但问题是每个私有 IP 地址也有端口,那么路由器如何不仅决定将数据包发送到哪个 IP 地址,还决定它应该在该私有 IP 地址的哪个端口上?
我现在能想到的唯一方法是端口映射将每个传入端口映射到 IP 和端口,例如端口 11000 可以转到 192.168.86.250:25565。我写的越多越明显,但是有人可以确认它是如何工作的吗?
另外,如果有人能指出我使用 c# 来确定可以与我的公共 IP 一起使用的端口以访问我在 192.168.86.250:25565 上运行的程序,那么我将获得奖励积分。
【问题讨论】:
-
“那么路由器如何决定不仅要向哪个 IP 地址发送数据包,还要决定它应该在该私有 IP 地址的哪个端口上?” - 它决定将其发送到哪个 IP 的方式相同......信息存储在内存中......这不是最合乎逻辑、最直接的方式吗?
-
是的,我相信这是某种算法,而不是存储在内存中。谢谢你的澄清。
-
看来您想了解UPnP protocol。
-
您可以在路由器上设置端口转发,这比使用 UPnP 更安全。应该了解启用 UPnP 的安全风险:security.stackexchange.com/questions/38631/…
-
应用程序注册端口(在 c# 中,带 +-)。然后,Windows 将传入消息发送到注册该端口的应用程序。 IP 地址和端口号在 IP 数据包标头中。见维基:en.wikipedia.org/wiki/IPv4
标签: c# networking ip