我试图弄清楚网络是如何工作的,我陷入了使用NAT
的情况。
我有一个路由器和由该路由器管理的局域网,该路由器执行地址转换(即NAT
)。
某些本地主机将IP数据报发送到路由器,路由器将该数据报中的源IP地址(更改为外部路由器的IP)和源端口号(更改为??? <1>),并将其转发到外部。 / p>
如果/当目标主机发回IP数据报时,我们的路由器会使用在源地址转换过程中存储的一些信息将目标源地址和目标端口号更改为正确的地址。
我有三个问题:
当某些本地主机发送IP数据报(寻找<1>标记)时,路由器将哪个端口号分配给IP数据报的源端口号? (我猜它使用第一个可用的端口号,对吗?)
本地主机可以启动与远程主机的连接,但是反之亦然吗?有可能吗? (如果主机的IP地址不是唯一的或未注册的,外部主机如何与我们交谈)。
如果对2.问题的回答是:不可能,那么torrent如何工作? (据我所知,主机可以在不同的本地网络中互相交谈。)
关于1.问题的一点点清楚:
我的意思不是说带有NAT
的路由器具有一组服务器作为本地网络,据我所知,这里使用的端口号很明显-与启动某些服务相关的端口号在特定服务器上-在我看来,在这种情况下,每个局域网的端口号可以是唯一的。
答案 0 :(得分:1)
想象一下,您的局域网中有几台主机,所有IP都在192.168.0范围内。其中一个尝试访问(例如)1.1.1.2端口80上的Internet服务器。发送请求的主机将分配给该主机,它将选择下一个可用端口,并发送已通过4个值标识的请求:主机地址,主机端口,目的地地址,目的端口。
NAT路由器将检查收到的请求并将其转发。如果主机端口已经在使用中,它将仅更改该主机端口,否则它将保持不变。它将请求的4个值添加到其内部状态表中。一个答案返回,它在表中查找最终目的地并转发消息。如果有东西进来但不在表中,则将其丢弃,换句话说,内部主机必须启动连接或消息交换。
默认情况下,大多数家庭或SOHO路由器仅允许传出连接或消息。如果要建立传入连接,则必须对其进行配置(port forwarding),以便外部主机可以连接到您的(公共)IP地址或发送未经请求的消息,并且路由器知道将该连接转发到哪里。 / p>
有一些技术可以使NAts后面的主机直接连接而无需特殊配置,hole punching经常使用,并且涉及第三台主机(两台主机均可访问的服务器)。