如果我有两台内部计算机通过NAT路由器连接到同一个外部IP地址,那么路由器如何才能将流量传输到正确的内部计算机?据我所知,NAT将传入的数据包转发到最近将传出数据包发送到[传入数据包]发送方IP地址的计算机。由于两台计算机都发送到同一个地址,路由器是否将数据包转发到两者?如果是这种情况,客户端软件是否有责任确定哪些数据包是相关的?
两台计算机是否都试图连接到同一个端口?
答案 0 :(得分:30)
当您打开套接字时,您需要寻址目标系统的端口并在您自己的系统上打开共轭侦听端口以接收任何响应。您必须将目标系统发送到您的侦听端口。
有多个系统使用相同的调制解调器
当您启动网络浏览器并访问www.google.com:80时,您的浏览器会从系统中获取/搜索免费的非系统共轭端口以供收听。让我们说,共轭端口是10000.侦听器端口用于从谷歌接收http流。
然后你的孩子偶然也会坐在你旁边浏览www.google.com:80和他/她的游戏站或xbox的google会话 - 无论是偶然还是分配了共轭端口10000.
你们两个都坐在电缆调制解调器后面,电缆调制解调器后面是你的无线路由器。而且你的两个系统都在无线路由器后面 - 所有系统都按照网络拓扑顺序排列。
防止路由器/调制解调器上的端口地址冲突
让我们说你的有线电视公司DHCP分配你的调制解调器ip4地址72.72.72.72。但是,您的无线路由器DHCP会将192.168.0.10分配给您的系统,并将192.168.0.11分配给您孩子的系统。
当携带侦听器端口信息的帧通过NAT路由器时,它会转换一个或两个侦听端口。假设你的页面有15000端口,你的孩子页面有16000端口。
您的无线路由器会将您的请求发送到谷歌服务器,来自72.72.72.72:15000和72.72.72.72:16000。
谷歌服务器然后单独响应72.72.72.72:15000和72.72.72.72:16000并且当无线路由器遇到响应时,它到达它已存储的映射并将72.72.72.72:15000转换为192.168.0.10 :10000到达你的系统,但转换72.72.72.72:16000到192.168.0.11:10000到达你的孩子的系统。
运行网络/游戏/ ftp / etc服务器
但是,如果您的系统上运行了Web服务器或ftp服务器,该怎么办?如果你有两个系统,并且两个系统都有一个Web服务器并且两个Web服务器都在端口80上监听,那该怎么办?
我们说第一个Web服务器系统的无线路由器注册/分配的本地IP地址是192.168.0.30,第二个Web服务器系统是192.168.0.40。
无线路由器通常默认配置网页192.168.0.1:80,除非您更改了它。页面上会有一个选项卡,您可以在其中定义/保留应用程序端口映射。
您可以注册无线路由器以保留映射
192.168.0.30:80 => outgoing port 8080
192.168.0.40:80 => outgoing port 8088
因此,您必须给您的朋友打电话,您的网络/游戏服务器是可以通过的 分别为72.72.72.72:8080和72.72.72.72:8088, 无线路由器将其端口8080和8088排除在自己的动态NAT使用之外。
当然,72.72.72.72与您的ISP DHCP决定更新调制解调器的ip4地址之前一样好,比如说72.72.90.200。在此之后,您必须给朋友打电话/发电子邮件并说出来 嘿,服务器的地址分别变为72.72.90.200:8080和72.72.90.200:8088。或者您可以订阅动态DNS(ddns)服务以使用命名域,其中ddns服务将需要您在系统上安装简单的心跳线实用程序以帮助它们监视地址变化。 DDNS翻译是一个单独的问题/策略。
NAT调制解调器
较新的ISP合约为您提供具有NAT的调制解调器。如果是这样,您必须关闭调制解调器上的那个或无线路由器上的那个。你不应该同时使用两者 - 两次翻译的重点是什么,因为NAT只是为了防止地址冲突。当您从无线路由器关闭NAT时,它可以作为集线器交换机而不是路由器运行,因此您可以使用其LAN插槽而不是其WAN插槽将其连接到调制解调器。
答案 1 :(得分:4)
路由器管理每台计算机独立的“源”端口。当您可能连接到“目标”上的端口80时,路由器可能会将源端口分配给某个高端口。
Wikipedia总结为
网络地址转换涉及 重写源和/或 目的地IP地址和通常 也是IP的TCP / UDP端口号 数据包通过NAT时。 校验和(IP和TCP / UDP)必须 也要改写以考虑到 变化。
答案 2 :(得分:2)
已经提供了很好的答案,但这是另一个例子:
HOST A addr HOST B addr
10.1.0.2:4040 10.1.0.3:4040
-----------------------------------------
NAT 200.50.50.28:4040 200.50.50.28:4041 (what external host sees)
200.50.50.28是路由器的全球(互联网)IP。
每个端口号在NAT表中都是唯一的。当然,路由器会执行所有 dirty 工作,以透明方式修改源地址和目标地址。
答案 3 :(得分:1)
它使用不同的端口传入外部流量,然后NAT将一个端口上的数据包路由到一个内部IP地址,将另一个端口的数据包路由到另一个内部IP地址......来自每个内部的iniital请求计算机,当它在出路时通过NAT时,确定哪个端口将用于来自外部ip地址的传入流量,并告诉外部服务器将哪个端口发送回该连接的流量。
答案 4 :(得分:1)
RFC3022提供了大量有关其工作原理的信息
答案 5 :(得分:0)
由于已经讨论了Internet服务提供商(ISP)提供的面向公众的地址或外部IP地址,因此我想补充一下。 您可以要求ISP更改您的公共IP地址。它将变为静态,因此,如果他们想访问网络地址转换器(NAT)中的服务器,则不必通知朋友更改IP地址。 在撰写本文时,静态IP地址的成本约为100美元。他们将大多数ISP称为企业帐户。 您可以通过搜索“我的IP地址是什么”来确定面向公众的IP地址。