代理就足够了,为什么还需要 nat?

代理就足够了,为什么还需要 nat?

我的机器连接到本地局域网。要连接到互联网,流量需要通过代理服务器。我对代理人服务器发送请求代表原始请求发送者。因此,当服务器回复时,它会将回复发送给代理,认为它是客户端。然后代理将回复转发给我的机器。
网络地址解读。您的请求通过 nat 路由器。然后 nat 路由器为您提供一个公共 ip 地址并将此映射存储在其表中。回复(来自服务器)将发送到此分配的公共地址。nat 路由器从表中解析为您的本地 ip 地址,并将回复转发到您的机器。
我的问题是,当代理本身能够调解流量并为您提供互联网访问权限时,为什么还需要 nat?

答案1

MadHatter 撰写了一篇通俗易懂的文章,解释了代理和 NAT 之间的区别。

如需了解更多技术细节,我建议您阅读 OSI 模型和 TCP/IP 模型。Nat 在 OSI 模型的后 3 层(网络层,本例中为 IP)运行,而代理通常在第 7 层(应用层、HTTP 或您代理的任何层)运行。

NAT 和代理也试图解决略有不同的问题。NAT 将大量私有 IP 隐藏在少量公共 IP 后面,以缓解 IP 地址短缺的问题,而代理则出于安全、审计或性能原因创建网络“瓶颈”

答案2

在我看来,您已经很好地掌握了这里的基本原理,简短的回答是,如果您使用具有公共地址的代理,则不需要 NAT - 对于由代理调解的协议。

然而,天地间的礼仪比你的哲学所能想象的还要多;并非所有网络都是可代理的,甚至并非所有可代理的网络都有代理,因此 NAT 是这些网络的一个方便的后备选择。

编辑:代理是一种在应用程序级别工作的计算设备。HTTP 代理接收远程站点的 HTTP 请求,正如您所指出的,它会亲自前往该站点并发出请求,然后将答案传回请求的客户端。但要做到这一点,它必须详细了解 HTTP。

类似地,您可以编写 FTP 代理,但它必须了解 MKD、DELE、LIST 和类似 ftp 协议命令的详细信息,以便正确地代理客户端的请求。任何想要透明工作的代理通常都必须深入了解协议的内部结构,才能代理该协议。

SOCKS 在某种程度上是这个规则的一个例外,但这是因为 SOCKS 协议为代理设置了一个更通用的接口,要求每个客户进行 SOCKS 化,因此能够对 SOCKS 代理发出正确的请求,以便设置每个代理所需的类型,这并不完全透明。

相关内容