套接字如何与路由器打交道?

套接字如何与路由器打交道?

(不确定这是否应该在 unix stackexchange 网站上......)

当我创建套接字时,我会使用 IPv4 和端口号。因此,如果我知道这两者,但设置了路由器(在家庭网络上;只是学习套接字并进行实验),我将如何访问该 LAN 上的客户端?假设我在朋友的电脑上,我想连接到我家 LAN 上的电脑上的套接字,如果我使用我的公共 IP 地址作为套接字主机,它怎么知道要访问我的电脑?我需要在路由器上设置端口转发或其他东西吗?(如果重要的话,使用 C 和 Python)

答案1

是的,路由器需要知道将传入的数据包转发到您的计算机。这通常通过以下方式之一完成:

  • 非军事区:路由器将所有传入流量转发到指定主机
  • 静态端口转发,其中特定的向外端口始终按照路由器上设置的规则路由到特定主机
  • 动态端口转发,其中入站或出站流量的模式触发特定向外端口到特定主机的路由(例如,如果某台机器通过给定端口连接到特定 Internet 主机,则将某个入站端口范围转发到该机器)
  • 通用即插即用或 NAT-PMP,即网络上的机器自动为其托管的服务设置转发(通常由 BitTorrent 客户端使用)

答案2

“简易模式”解决方案是为所有相关计算机设置 ipv6。如果路由器/ISP 不支持,您可以使用(或类似方法)将 IPv6 连接隧道连接到您的机器。

然后,使用 ipv6 地址,事情应该只是工作

答案3

在您的终端,路由器使用 NAT,因此它知道哪些外部端口对应哪些内部客户端。

另一方面,需要某种端口转发。

答案4

路由器的主要目的是进行网络层(第 2/3 层)路由(主要是 Internet 协议 v4 和/或 v6 和 ICMP)。套接字与传输层(第 3/4 层)有关,因此尽管路由器可能能够与端口交互(端口转发就是一个例子),但它大多并不关心(路由器上的防火墙端口是它会关心的另一个例子,但这通常是通过一个完全不同的盒子来完成的,称为防火墙)。

相关内容