我以为我了解关于 NAT 等的全部内容,但现在我遇到了问题。
首先我假设:
因为没有足够的 IPv4 地址可用,我们需要另一个系统。今天在家中连接到互联网的设备是以下组合:
1) 物理级别的调制解调器,用于更改线路上的信号类型。
2)链路级交换机,因此您可以将多台计算机连接到设备
3)路由器将所有计算机连接到互联网并超出您的家庭子网等
4)允许所有内部计算机连接的 NAT到外部
5) 一个端口转发器,让外部连接到内部网络
我称之为 NAT:
当向外部发出请求时:设备的 NAT 部分会更改来自内部计算机的请求的源端口和源 IP。新的源 IP 将是您的公共 IP。NAT 部分将在具有此映射的表中保存一条记录:“original-ip, original-port, new-port”。
当响应返回时,NAT 将检查目标端口并将其与他的表中的新端口进行比较。如果找到匹配项,NAT 将用 original-ip 替换 destination-ip,用 original-port 替换 new-port。结果,响应将被转发到发出请求的内部计算机。因此,NAT 部分用于从内部初始化连接时。当这个请求穿过 NAT 时,有两件事发生了变化:source-ip 和 source-port。
然后是端口转发器:
设备的这一部分将接受在外界初始化到您的网络的连接。它将查看传入请求的目标端口,并通过为该端口号制定规则,它可以将请求的目标端口和目标 IP 更改为内部 IP。使用这些规则,来自外部的请求可以连接到内部网络上的计算机,因此端口转发器会更改两件事:目标 IP 和目标端口。
A:在我问我的问题之前,这是怎么解释的?
现在我的问题是通过端口转发器从外部发出请求后的响应。假设制定了正确的规则,并且通过内部计算机上的端口转发发出了请求。因此,在端口转发器中,destination-ip 更改为计算机的 internal-ip,destination-port 更改为运行服务的端口。如果此内部计算机是网络服务器,它将生成响应。因此destination-ip 将是请求的源ip,destination-port 将是请求的源端口。source-ip 将是计算机的内部 ip,source-port 将是服务的端口。
现在,这种反应必须传到外面。所以我假设它通过 NAT 到外部?所以通过NAT后,source-ip就是public-ip,source-port是随机的。现在我用wireshark测试了这个。我联系了 NAT 后面的网络服务器,我看到响应来自端口 80?!这怎么可能?这说明转发请求的响应没有通过NAT?
我重新思考了这个概念,我的新假设是,当从外部初始化连接时,它将通过端口转发器并到达正确的计算机。这将创建一个响应,当该响应到达我们的“一体机”设备时,该设备可以识别它转发了响应的请求,并且不会更改源端口。
B:确实是这样,还是以其他方式进行?
维基百科关于端口转发的说法是:“在这种情况下,源地址和端口保持不变。当在不是网络默认网关的机器上使用时,源地址必须更改为翻译机器的地址,或者数据包将绕过转换器,连接将失败。” ( http://en.wikipedia.org/wiki/Port_forwarding )
这确认转发请求的响应必须再次通过端口转发器而不是通过 NAT,因此源端口不会更改。端口转发器会将源 IP 更改为公共 IP。
有人可以验证这一点或给我比我的其他解释吗?