IP应答数据包如何到达专用LAN内部的目的地?[重复]


26

这是一个理论上的小问题,已经困扰我很长时间了。

基本上,如果我们在专用LAN内,并且希望传入的数据包到达例如位于其中一台计算机上的HTTP服务器,则我们转发端口,以便传入的数据包恰好到达该计算机。

现在,我对“响应”数据包如何到达局域网内的目的地感到困惑,例如,当我们打开一个网页时。真的找不到关于该主题的任何有用信息。

我希望有人可以给我一些提示,或者将我链接到一些可以解释它的信息。谢谢。

编辑:我认为我应该澄清。我要问的一个例子是这样的:
1. LAN内具有单个外部IP的计算机尝试从该LAN外部的Web服务器(基本上在Internet上)加载网页
2 Web服务器做出响应,然后将网页发送回该计算机。

在这一点上,令我感到困惑的是,路由器如何知道在没有先前端口转发的情况下哪台计算机将发送传入数据(假设路由器已连接到具有多台计算机的局域网)。


刚刚观看了关于该主题的精彩视频:网络地址转换
-Computerphile

Answers:


56

即使该问题已被完全涵盖。我觉得最好对这一过程进行逐步描述。

对于此示例,我坐在通过路由器连接到Internet的专用LAN中。因为我们的网络共享一个公共IP地址,所以我们使用NAT。

因此,当我请求superuser.com将生成许多IP数据包的页面时。让我们看一个。

IP数据包
来源:(192.168.1.12我的IP)
目的地:64.34.119.12(superuser.com)

现在,我的系统很可能与所讨论的系统类似。我有自己的IP地址(192.168.1.12),子网掩码(255.255.255.0)和默认网关192.168.1.1)。现在,由于我的IP数据包中的“ 目标”字段指向的网络不同于我自己的网络,因此将其发送到默认网关(而不是直接发送到计算机)。

但是,如果目的地完全指向其他地方,那么数据包如何到达默认网关呢?

乙太网路

这很容易,因为我们为此使用了以太网协议的寻址。我们只需在IP数据包中设置目标IP地址,并在以太网帧中将默认网关的MAC地址设置为目标。

现在,将确保我们的默认网关获取到的数据包superuser.com。好极了!

现在,网关已收到我们的数据包,可以直接在其路径上发送它。但是要确保它会得到答案,首先需要替换数据包的地址(否则superuser.com将尝试将答案发送到其网络上具有我的 IP地址的某些(可能)不存在的设备。非常好。)
因此,我的路由器会将其公共 IP地址放在“ 源”字段中:

IP数据包
来源:(92.69.127.243我的公共IP)
目的地:64.34.119.12(superuser.com)

现在,同一游戏在世界上的所有路由器上不断进行,直到数据包最终到达superuser.com并生成答案为止。

答案

回答IP数据包
来源:64.34.119.12(superuser.com)
目的地:(92.69.127.243我的公共IP)

好的,答案到了我的路由器,现在呢?我的路由器现在如何知道将答案发送到192.168.1.12

TCP协议

嗯,这确实有效,因为我们只研究了通信的IP和以太网部分。使这项工作起作用的是TCP部分。

您很可能知道Web服务器通常在port上运行80。IP没有端口的概念。那来自TCP。在TCP中,我们有一个(如IP)目标 端口

我发送到superuser.com的TCP数据包
源:(192.168.1.12我的IP)
源端口:(11111计算机组成的端口)
目标:64.34.119.12(superuser.com)
目标端口:80

当您的路由器发送该初始数据包(发送到superuser.comport 80)时,他将在其中放置一个新的源端口(如12345)。
这是重要的部分!他会记得那个替换!

我的路由器到superuser.com的TCP数据包
源:(92.69.127.243我的公共IP)
源端口:(12345我的路由器组成的端口)
目标:64.34.119.12(superuser.com)
目标端口:80

因此,路由器收到的应答数据包实际上是这样的:
从superuser.com应答TCP数据包
来源:64.34.119.12(superuser.com)
来源端口:80
目的地:(92.69.127.243我的公共IP)
目的地端口:(12345我的路由器组成的端口)

因此,现在他获取了该数据包,并看到该数据包是用于先前记住的端口,该端口已分配给IP地址192.168.1.12(我的IP地址)的NAT操作。

回答来自路由器的TCP数据包
来源:64.34.119.12(superuser.com)
来源端口:80
目的地:(192.168.1.12我的IP)
目的地端口:(11111我的计算机组成的端口)


1
我编辑了您的答案,它没有清楚地显示端口号发生了什么。我在中间步骤以及每个步骤的端口号上添加了更多示例。
Scott Chamberlain 2012年

1
@OliverSalzburg我正在寻找回答相同的问题,您的解释使我回想起,只是对此的一个简短问题。想知道路由器将反向映射(源端口)保留多长时间,如果路由器对这么多请求继续这样做会感觉空间不足,是否会定期清除它们?
艾哈迈德(Ahmed)

@Ahmed:跟踪该信息的内存量有限。有65536个可能的端口号,它们存储在2个字节中。因此,记住每个端口的IP地址(4个字节)总计为65536 x 4字节= 262144字节= 256 kB。但是,细节是在路由器中实现的,因此内存不足。
Der Hochstapler,2012年

@Oliver很好的答案,正是我要寻找的!我有几个问题-(1)“世界上所有路由器的游戏都在不断进行着” -准确吗?当然,源字段不会在每个步骤中继续被替换吗?(2)路由器是否会长期记住打开的端口,或者是否会定期将其丢弃以应对无响应的请求?(3)这是否意味着黑客可以通过中间人攻击使数据包通过路由器的防火墙通过:侦听您的传出TCP数据包,然后使用与您的目的地匹配的欺骗性源IP锁定路由器的开放TCP端口?
乔恩·本特利

1
ICMP ping响应如何返回局域网中的计算机?是否具有类似于TCP的端口的内容?其他协议怎么样?
吉恩(Jean)

11

网络地址转换。简而言之,当专用LAN的网关路由器用其自己的公用地址替换专用LAN源地址时,它会以某种方式修改数据包,例如分配一个唯一的,否则在本地无意义的端口号,该端口号会映射回原始LAN节点和传出请求。它记住该端口映射,因此当回复返回到公共IP /唯一端口#时,它(路由器)知道如何将其取消映射回其原始节点之一。这也是您可以运行多个选项卡,浏览器或浏览器实例的方式,并且对每个浏览器请求的答复都会返回到正确的浏览器和选项卡。


2
JRobert:除了tcp或udp之外,没有端口号的IP协议(例如ICMP)又如何?
Uri 2014年

0

当初始数据包到达路由器的外部接口时,它将根据端口转发配置更改数据包的目标IP地址,并在路由器的内部接口上传输修改后的数据包(如果需要,在常规ARP之后)

数据包到达Web服务器,并且仍然具有一个外部源IP地址,该地址将用作任何答复的目标地址。因此,服务器以通常的方式用一个等于请求源IP地址的目标IP地址寻址传出答复包。因为请求者的IP地址是外部的,所以数据包在MAC层被寻址到路由器的内部接口。

请注意,每个网络层都有不同的目标。


0

端口转发通常在与之相邻的路由器或设备上进行。当LAN上的设备将流量发送到同一LAN上的另一设备时,路由器完全不参与。流量甚至都没有触及。您的端口转发规则将不会影响LAN到LAN的流量。

以太网在设计时考虑了“总线”拓扑,其中每台计算机都物理连接到同一介质。当现代交换机通过学习端口另一端的MAC地址并相应地复制流量来优化流量时,“总线”拓扑仍然保留。连接到标准交换机的任何东西都可以“直接”到达其他任何地方(假设它在同一子网内),而不必“通过”路由器等中间设备。

如果您要连接所有计算机的设备具有多个“ LAN”以太网端口,然后具有一个“ WAN”端口,您可能会感到困惑。这些类型的设备实际上是同一机架中的路由器和交换机。

因此,在您的局域网内,如果您的HTTP服务器地址为192.168.1.55,则要在局域网内访问它,您将需要在浏览器的地址栏中键入“ http://192.168.1.55 ”。路由器永远不会看到它。要在LAN外部访问它,您需要输入外部IP,即“ http://256.99.88.77:{您在此处转发的端口}”或其他任何内容。这确实对您的路由器造成了影响,路由器的NAT功能起作用,然后路由器将其发送到192.168.1.55。


0

很简单,当专用LAN内的计算机启动传出连接时,NAT网关会自动为其生成端口映射。它们与您之前手动输入的端口映射相同:{公共端口,专用地址,专用端口},并且使用方式大致相同。动态映射的最大区别是,当预期的端口号已在使用时,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.