TCP/UDP 端口与端口转发

TCP/UDP 端口与端口转发

我觉得自己对网络/互联网协议了解不够多。所以我的问题可能有点愚蠢。

如果我理解正确的话,TCP/UDP 端口对于服务器和客户端软件来说是“本地的”,并且仅与维持连接的设备相关;而用冒号附加到外部 IP 地址的端口对于路由器来说是“本地的”,因为它们仅与路由器相关,并且是为了找到没有唯一外部地址的设备。


因此,如果我是正确的,我只是想确保,如果您定义了一个函数:

TCPserver.listen(string ip, int port)

然后我可以这样做(当然取决于实施):

TCPserver.listen("123.456.789:18735", 1337)

而且两个端口之间互相没有任何关系,也不会互相干扰?


如果我说的不正确,那么我错在哪里?

答案1

监听器位于本地机器上。监听器指定的 IP 告诉它要监视哪个硬件(网络)接口,显然是在指定的端口上。

如果监听器配置在外部地址(机器外部,即不是localhost)上,那么可能会从网络上的其他机器接收传入请求。

在大多数情况下,就像您的情况一样,互联网连接和计算机之间会安装一个路由器。

路由器的作用是将流量引导到正确的机器。因此,为了使您的服务可以从互联网上访问,您需要告诉路由器,必须将公共 IP(WAN/互联网)上的请求转发到正确的服务器。

这是通过在路由器的配置中启用端口转发,选择公共端口和目标私有 IP 和端口来完成的。

下面是一个 Web 服务器设置的简单示例,它可以绕过 ISP 对传入端口 80 请求的阻止:

WAN/public IP: 1.2.3.4
LAN: 192.168.0.0/24 (router's IP would typically be 192.168.0.1)
web server: 192.168.0.10:80

由于 ISP 阻止了端口 80,我们将改用端口 8080,因此我们的链接将是http://1.2.3.4:8080。在路由器中,我们将把端口 8080 转发到192.168.0.10:80

相关内容