路由器如何决定数据包的目的地?

我有一个基本的networking问题。 两台PC正在通信WLAN。 两台个人电脑都在路由器或调制解调器后面。

两台PC都有相同的公共IP。 公共IP大部分时间是路由器或调制解调器。 这些路由器和调制解调器后面可能会有更多的PC。 个人电脑如何沟通? 我可以理解,数据包可以到达那些路由器或调制解调器,然后到互联网,但之后呢? 在数据包中,目标IP被设置为公共IP。 当数据包返回时,路由器或调制解调器如何决定发送数据包的位置? 有谁可以解释我这个请。

这个神秘背后的大部分机制是NAT伪装 :

  • 你的电脑与外部通信

例如你的电脑在专用networking上,IP为10.1.2.3。
您的路由器记住PC IP /端口,并初始化到远程IP /端口(WAN)的连接。 因此,当在同一个通道上有回复时,路由器将数据包转发回到LAN侧的PC。

  • 外部设备与您的PC通信

在这种情况下, 设备初始化连接,因此路由器不知道应该向哪个10.xxx客户端转发数据包。
这就是为什么路由器需要一个特定的设置,例如说,如果你的PC碰巧是一个Web服务器(HTTP端口)

HTTP (WAN) ==> (LAN) 10.1.2.3:80 

也就是说,来自HTTP端口的数据包在端口80上进入内部LAN地址10.1.2.3(您的PC)。

在基本设置中,设备总是只知道下一跳。 这一个也只是知道下一跳到所需的目的地。 如果目的地不在主机/路由器本地,则它将数据包发送到默认网关等等。

在更复杂的情况下,您可以使静态路由指向特定networking目标的显式网关。

如果手动pipe理这些路由过于复杂,则使用dynamic路由分发协议(如RIP)

甚至更复杂的协议更多地了解ip块的全球分布(通过AS号码 ),并试图决定在成本和距离上路由分组的位置。 例子是BGP和OSPF

我对你的“大部分时间”感到有点困惑:我认为这是永远或永远。 如果PC的公共IP始终与路由器/调制解调器一致,则本地networking使用NAT从本地networking外部访问PC。 =>查看第一个答案

如果PC的公共IP与其路由器/调制解调器不一致,则可以从WAN直接访问本地networking(如果我们忽略可能阻塞的防火墙)。 =>查看第二个答案

如果您刚开始了解路由的工作原理,那么您应该首先关注后一种情况,也可以将其简化为:

 PC1 <-LAN1-> Router1 <-WAN_link-> Router2 <-LAN2-> PC2 

(就像没有其他东西一样)

好问题。 实际上有一些策略,但本质上,路由器保留所有NAT连接(客户端端口,客户端IP,目标IP,目标端口)的表格。 当返回数据包返回时,它会根据数据包来自哪个端口以及从哪个端口匹配哪个客户端来转发它。

大多数NAT实现也是PAT(端口地址转换实现),以防止两个客户端select相同的源端口。

一些路由器,例如思科设备出于安全考虑而进行序列号随机化 – 它可以帮助隐藏NAT后面有多less种types的客户端。 还可以尝试保护客户端免受针对序列号的types攻击,或者猜测下一个连接的下一个序列号。