据我所知,每个进程都可以获得自己的 IP 地址,并有大量 IP 可供备用。
缺点是什么?
本质上,您的主机将成为路由器,每个进程都是一个主机(在当前系统中)。
据我所知,每个进程都可以获得自己的 IP 地址,并有大量 IP 可供备用。
缺点是什么?
本质上,您的主机将成为路由器,每个进程都是一个主机(在当前系统中)。
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?)
我看不出使用主机:服务描述符对今天的系统有什么好处。它不会实现今天不可能实现的任何事情。