IPv6 可以使 NAT/端口号变得多余吗?

网络工程 通讯协议 纳特 协议理论 ipv6 UDP
2021-07-27 21:19:33

据我所知,每个进程都可以获得自己的 IP 地址,并有大量 IP 可供备用。

缺点是什么?

本质上,您的主机将成为路由器,每个进程都是一个主机(在当前系统中)。

4个回答

IPv6 没有 IPv4 那样的 NAT 标准(NAT 打破了 IP 的端到端前提,而 IPv6 旨在恢复该前提)。有一个IPv6 NAT实验性RFC,但它是网络层的一对一 NAT,而不是像 IPv4 NAPT 那样也转换端口地址的东西,事实上,实验性 IPv6 NAT RFC 明确禁止.

如果您考虑各种传输协议,TCP 和 UDP 使用端口,这些端口实际上是这些传输协议的地址。其他传输协议可能使用其他地址,有些不使用地址。

您的想法可能适用于 TCP 或 UDP,但只能使用一种,并且可能不适用于其他传输协议。IPv6 与 UDP 一样是无连接的,因此它可以与 UDP 一起使用,但 TCP 是面向连接的,它执行许多原本需要由应用程序执行的工作。

对无连接和面向连接的传输协议都有要求。IPv4 的前身实际上等同于 IP 和 TCP 作为单一协议,但由于某些传输协议需要无连接,因此有必要将它们分开。

一个缺点是上层需要知道 IP 地址,这违反了分层原则。如果您切换到 IPv4,会发生什么?或者是其他东西?

上层如何告诉网络层它应该开始响应 IP 地址?假设一个新的应用程序启动。网络层如何知道有一个新地址要响应?

IPv6 理论上可以消除 NAT,但组织可能想要隐藏其内部 IP 地址的原因仍然存在。

IPv6 将不再需要 NAT 作为共享公共 IP 地址的一种方式,但出于安全原因,NAT 可能仍有一些用途。

从理论上讲,删除端口是可能的,但这将是一项艰巨的任务。即使您为端口号保留 IP 地址的最后 16 位 + 为 TCP/UDP 标志保留 1 位,您也需要重新编写将协议从第 3 层解包到第 4 层的所有软件,以使用来自 IP 的位端口号和协议的地址,而不是数据包中的数据。

当您将端口号放入 IP 地址时,这就是“简单”的解决方案,如果您想完全摆脱端口号,则需要更改使用端口的每个软件和库,无论是服务器、客户端还是防火墙等等。这基本上是不可能的,如果您完全删除端口,那么每个在从 IPv4 到 IPv6 时都可以正常工作的“在端口 X 上打开服务器”的软件会立即中断。

只保留端口要容易得多。

它不会是 IPv6。这样的系统当然是可行的,但它是 IP 协议的一种变体。今天,IP 包含两部分:主机标识符和服务标识符。

对于您的方案,它本质上是一个服务描述符。这将需要更改 DNS(例如,您如何区分 example.com 的 SMTP 服务器和 example.com 的 www-server?)

我看不出使用主机:服务描述符对今天的系统有什么好处。它不会实现今天不可能实现的任何事情。