路由器如何知道将数据包发送到哪个设备?[重复]


15

我的问题与它如何通过互联网移动无关,而是与它如何通过路由器移动到特定设备有关。连接到家庭网络中路由器的所有设备都具有相同的外部IP。假设设备A正在加载页面,并且数据包从外部源发送到路由器,因为数据包知道设备A的外部IP,并且它们能够到达路由器。但是现在,它如何到达设备A?路由器如何知道将其发送到设备A而不是设备B?

我认为这涉及到NAT,但我只是在寻找NAT可以完成此操作的逻辑解释。


我无法给您一个非常具体的答案,但是路由器会跟踪请求的去向和发送者。当外部源做出响应时,路由器仅检查最初是哪个设备尝试联系外部源,然后将响应转发给该设备。如果您需要更多信息,请查看NAT。
杰克·汉弗莱斯

这个问题属于
Superuser.com

Answers:


11

当您发起与外部站点的连接时,路由器每次都使用一个不同的源端口号...然后,它将使用该源端口号(数据返回到该源端口号)作为关键字来查找在哪台计算机上您请求的内部网络。这称为“端口地址转换”(与“网络地址转换”相对,网络地址转换是当您有多个可用于路由器的网络地址时)。


1
这将解释诸如TCP连接之类的内容,但是某些应用程序是无连接的。UDP数据包呢?如果您要在一台设备上托管服务器,即使该服务器使用TCP进行连接,在路由器不知道服务器位于哪台设备的情况下,它也无法初始化连接。

1
对于UDP连接,通常必须在路由器上预定义可用于路由到特定设备的端口。这是路由器的“端口转发”功能,可用于传入的UDP数据包(响应于传出的消息或新的传入数据包),也可用于传入的TCP数据包(例如,由远程客户端发起的数据包)您自己的PC上的数据。)
Michael Bray

1

通常,来自家庭网络的所有设备都有不同的内部地址(专用地址,始终为192.168.0.1〜192.168.0.255)。

当数据包从本地网络发送时(例如设备A:192.168.0.123),当它通过路由器时,路由器会将专用地址转换为路由器的外部地址(假设为140.191.2.5),并且路由器还会记录该数据包映射在NAT中。

当响应返回时,路由器映射NAT,并找到原始源是设备A。

因此设备A最终会收到该数据包。

这只是一个概念,有关更多详细信息,请参阅Wiki:NAT。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.