如果我的 IP(在本地网络中)不是唯一的,外部设备如何解决我的问题?

If my IP (in local network) isn't unique how can an outside device address me?

我试图弄清楚网络是如何工作的,但我遇到了使用 NAT 的情况。

我有一个路由器和一个由该路由器管理的本地网络,该路由器执行地址转换(即 NAT)。

某个本地主机向路由器发送一个IP数据报,路由器改变这个数据报中的源IP地址(到外部路由器的IP)和源端口号(到??? <1>)并转发到外部.

If/when 目标主机发回 IP 数据报,我们的路由器使用在源地址转换期间存储的一些信息将目标源地址和目标端口号更改为正确的。

我有三个问题:

  1. 当某个本地主机发送一个IP数据报(寻找<1>标签)时,路由器分配给IP数据报源端口号的端口号是多少? (我猜它使用了第一个可用的端口号,是真的吗?)

  2. 本地主机可以发起到远程主机的连接,反之又如何呢?有可能吗?如果有,怎么可能? (如果我们主机的 IP 地址不是唯一的或未注册,外部主机如何与我们交谈)。

  3. 如果问题 2. 的答案是:不可能,那么 torrent 是如何工作的? (据我所知,主机可以在不同的本地网络中相互交谈。)

稍微搞清楚1.问题: 我不是说带有 NAT 的路由器有一组服务器作为本地网络的情况,正如我猜的那样,很清楚要使用什么端口号 - 与某些服务相关联的端口号已启动在特定服务器上 - 在这种情况下,我认为每个本地网络的端口号可以 be/are 唯一。

假设您的本地网络中有多个主机,所有主机的 IP 都在 192.168.0 范围内。其中一个尝试在(比如)1.1.1.2 端口 80 访问 Internet 服务器。发送请求的主机将分配 select 下一个可用端口并发送由 4 个值主机地址标识的请求,主机端口、目标地址、目标端口。

  1. NAT 路由器将检查收到的请求并转发它。如果主机端口已被使用,它只会更改主机端口,否则它会保持不变。它将请求的 4 个值添加到其内部状态 table。一个答案返回,它在其 table 中查找最终目的地并转发消息。如果有东西进来但它不在 table 中,它就会被丢弃,换句话说,内部主机必须启动连接或消息交换。

  2. 默认情况下,大多数家庭或 SOHO 路由器只允许传出连接或消息。如果您想要传入连接,您必须对其进行配置 (port forwarding),以便外部主机可以连接到您的 (public) IP 地址或发送未经请求的消息,并且路由器知道将其转发到哪里连接到.

  3. 有一些技术可以让 NAts 后面的主机无需特殊配置即可直接连接,hole punching 是常用的并且涉及第三个主机(两个主机都可以访问的服务器)。