IP 应答数据包如何到达专用 LAN 内的目的地?

Ins*_*ray 30 routing lan tcp ip packet

这是一个小理论问题,让我困惑了很长时间。

基本上,如果我们在一个私有局域网内,并且我们希望传入的数据包到达,例如,位于其中一台机器上的 HTTP 服务器,我们会转发端口,以便传入的数据包准确地到达那台计算机。

现在,我对“响应”数据包如何到达 LAN 内的目的地感到非常困惑,例如,当我们打开一个网页左右时。无法真正找到有关该主题的任何有用信息。

我希望有人能给我一些线索或将我链接到一些可能解释它的信息。谢谢。

编辑:我想我应该澄清一下。我要问的一个例子是这样的:
1. 局域网内的一台具有单个外部 IP 的计算机尝试从该局域网外的网络服务器加载网页(基本上在互联网上)
2 . 网络服务器响应并将网页发送回该计算机。

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

Der*_*ler 61

即使这个问题已经被完全覆盖。我觉得这个过程最好一步一步地描述。

在这个例子中,我坐在一个通过路由器连接到 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 数据包中的Destination字段指向一个不同于我自己的网络,所以它被发送到我的默认网关(而不是直接发送到计算机)。

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

以太网

这很容易,因为我们为此使用了以太网协议的寻址。我们只是在 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 服务器通常在端口上运行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

所以路由器收到的应答包实际上是这样的:
Answer TCP Packet from superuser.com
Source: 64.34.119.12(superuser.com)
Source Port: 80
Destination: 92.69.127.243(my public IP)
Destination Port: 12345(我的路由器组成的端口)

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

回答来自我的路由器的 TCP 数据包
Source: 64.34.119.12(superuser.com)
Source Port: 80
Destination: 192.168.1.12(my IP)
Destination Port: 11111(我的电脑组成的端口)


JRo*_*ert 11

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

  • JRobert:除了没有端口号的 tcp 或 udp 之外的 IP 协议(​​例如 ICMP)呢? (2认同)

Red*_*ick 0

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

数据包到达网络服务器,并且仍然具有外部源 IP 地址,该地址将用作任何回复的目标地址。服务器相应地以通常的方式使用与请求的源IP地址相同的目标IP地址来寻址传出的应答数据包。由于请求者的 IP 地址是外部的,因此数据包在 MAC 层被寻址到路由器的内部接口。

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