对NAT的特定情况感到好奇。假设我们有4台计算机在NAT下共享一个全局IP地址。据我所知,NAT盒保存内部记录,以了解将请求转发到哪台计算机。但是,让我们说在计算机#2上我正在尝试下载文件。让我们说计算机#1,#3和#4,我只是正常浏览网页。当浏览器启动TCP连接以获取该文件时,它如何知道将哪个计算机提供给它?我的意思是,四台计算机中的每一台都使用端口80来浏览网页吗? NAT的记录如何区分哪个“端口80”属于哪台计算机?
答案 0 :(得分:11)
互联网上的每个唯一TCP连接都由四个数字 - {source IP, source port, destination IP, destination port}
组成。
NAT网关(GW)将其转换为{GW public IP, GW-mapped port, destination IP, destination port}
,以便外部路由器知道将数据包返回到此特定网关。它还将这些映射端口的映射保留为{GW-mapped port -> {source IP, source port}}
的源IP和端口号,这使它能够确定将响应数据包发送到哪个内部机器。
答案 1 :(得分:5)
“端口80 for http”的概念并不像这些那样工作。当计算机浏览Web时,只有服务器使用端口80,而客户端将使用随机端口号。服务器使用客户端提供的目标端口进行回复。端口80只是用来敲门服务器的门。
NAT所做的是将所有这4台计算机转发到数据包,使其源端口不重复。当NAT收到数据包时,它会检查附加的目标端口是否可以转换,并在可能的情况下将其转换为LAN。