这是一个困扰我很久的小理论问题。
基本上,如果我们在私有局域网内,并且我们希望传入的数据包到达位于其中一台机器上的 HTTP 服务器,我们就会转发端口,以便传入的数据包准确到达该计算机。
现在,我很困惑“响应”数据包如何到达 LAN 内的目的地,例如当我们打开网页时。真的找不到有关该主题的任何有用信息。
我希望有人能给我一些线索或提供一些可以解释这一点的信息。谢谢。
编辑:我想我应该澄清一下。我所问的问题的一个例子可能是这样的:
1. 局域网内的一台计算机具有一个外部 IP,它试图从该局域网外的 Web 服务器(基本上在互联网上)加载网页
2. Web 服务器做出响应并将网页发送回该计算机。
此时令我非常困惑的是,如果没有先前的端口转发,路由器如何知道将传入数据发送给哪台计算机(假设路由器连接到具有多台计算机的 LAN)。
答案1
尽管这个问题已经完全涵盖了。我觉得这个过程最好逐步描述。
在本例中,我位于一个通过路由器连接到互联网的私有局域网中。由于我们的网络共享一个公共 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 服务器通常在端口上运行80
。IP 没有端口的概念端口. 来自TCP在 TCP 中,我们(像在 IP 中一样)有一个来源和目的地 港口。
我发往 superuser.com 的 TCP 数据包
源:(192.168.1.12
我的 IP)
源端口:(11111
我的计算机组成的端口)
目标:64.34.119.12
(superuser.com)
目标端口:80
当您的路由器发送初始数据包(发送到superuser.com
端口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
我的电脑占用的端口)
答案2
网络地址解读。简而言之,当专用 LAN 的网关路由器用自己的公共地址替换专用 LAN 源地址时,它会以某种方式修改数据包,例如分配一个唯一的、在本地没有意义的端口号,并将其映射回原始 LAN 节点和传出请求。它会记住此端口映射,因此当回复返回到公共 IP/唯一端口号时,它(路由器)知道如何将其取消映射回其原始节点之一。这也是您可以运行多个选项卡、浏览器或浏览器实例的方式,并且每个浏览器请求的回复都会返回到正确的浏览器和选项卡。
答案3
当初始数据包到达路由器的外部接口时,它会根据端口转发配置更改数据包的目标 IP 地址,并在路由器的内部接口上传输修改后的数据包(如果需要,在通常的 ARP 之后)
数据包到达 Web 服务器后仍具有外部源 IP 地址,该地址将用作任何回复的目标地址。因此,服务器以通常的方式使用与请求的源 IP 地址相同的目标 IP 地址来寻址传出的回复数据包。由于请求者的 IP 地址是外部的,因此在 MAC 层,数据包被寻址到路由器的内部接口。
请注意,每个网络层都有不同的目标。
答案4
很简单,当私有 LAN 内的计算机发起传出连接时,NAT 网关会自动为其生成端口映射。它们与您之前手动输入的端口映射大致相同:{公共端口、私有地址、私有端口},使用方式也大致相同。动态映射的最大区别在于,当预期的端口号已被使用时,NAT 网关通常必须任意分配映射的公共端口。