为什么 IPv4 地址会用完?

网络工程 ip IPv4 纳特 IPv6 IP地址
2022-02-27 13:40:28

我知道我们的 IPv4 地址已经用完了(或者已经用完了?),但我真的不明白为什么会这样。现在,每个家庭都有自己的 IPv4 地址(动态分配,但仍然每个家庭都有一个地址)。为什么一个城市(例如)不能只有一个 IPv4 地址,而这个城市的所有家庭都在该城市的专用网络上?然后这个城市将能够分配地址从范围0.0.0.1255.255.255.254

我确信我的理解是错误的,否则 IPv4 地址不会用完。我的理解有什么问题?

4个回答

IPv4 地址短缺

根据 Vint Cerf(IP 之父)的说法,IPv4 的 32 位地址大小是任意选择的。IP 是一项政府/学术界的合作实验,从未设想过当前的公共互联网。IP 范式是每个连接的设备都有一个唯一的 IP 地址(IP 设备之间发送的所有数据包都将从源 IP 地址端到端连接到目标 IP 地址),并且许多使用 IP 的协议依赖于每个设备具有唯一的 IP 地址。

假设我们可以使用所有可能的 IPv4 地址*,则只有 4,294,967,296 个可能的 IPv4 地址,但(截至 2018 年 9 月)当前世界人口为 7,648,290,361。如您所见,可能的 IPv4 地址不足以让每个人拥有一个,但是很多人拥有一台计算机、打印机、手机、平板电脑、游戏机、智能电视等,每个都需要一个 IP 地址,并且这甚至没有涉及 IP 地址的业务需求。我们也处于物联网(IoT)的风口浪尖,每个设备都需要一个 IP 地址:灯泡、恒温器、温度计、雨量计和洒水系统、警报传感器、电器、车辆、车库开门器、娱乐系统、宠物项圈,谁知道还有什么。


*有些 IPv4 地址块不能用于主机寻址。例如,多播有一个不能用于主机寻址的 268,435,456 个地址块。IANA 在https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml维护 IANA IPv4 专用地址注册表,以记录所有特殊地址块及其用途.


IANA(互联网号码分配机构)用完了 IPv4 地址块来分配给要在各自区域分配的 RIR(区域互联网注册管理机构),而且 RIR 现在也用完了要在每个区域分配的 IPv4 地址。想要或需要 IPv4 地址的 ISP(互联网服务提供商)和公司无法再从其 RIR 获得 IPv4 地址,现在必须尝试从可能有额外地址的企业购买 IPv4 地址(随着 IPv4 地址短缺的加深,IPv4 地址的价格往上)。

即使所有为特殊用途而保留且不能用于主机寻址的 IPv4 地址都可供使用,我们仍然处于相同的位置,因为由于 IPv4 地址的大小有限,根本没有足够的 IPv4 地址。

缓解 IPv4 地址短缺

如果 IANA 和 IETF(互联网工程任务组)没有采取缓解 IPv4 地址短缺的措施,IANA 和 RIR 会比他们早很多年用完 IPv4 地址。一项重要的缓解措施是弃用 IPv4 网络类别以支持 CIDR(无类别域间路由)。有类寻址只允许分配三种网络大小(每个网络总共有 16,777,216、65,536 或 256 个主机地址),这意味着浪费了许多地址(只需要 300 个主机地址的企业需要分配一个有 65,536 个可能主机的有类网络地址,浪费了有类网络中 99% 以上的地址),

到目前为止,对延长 IPv4 寿命影响最大的缓解措施是使用私有寻址和称为 NAPT(网络地址端口转换)的 NAT(网络地址转换)的变体,这是大多数人在指 NAT 或 PAT(PAT 是 NAPT 的供应商特定术语)。不幸的是,NAPT 是一种丑陋的解决方法,它破坏了 IP 端到端范例,并且破坏了依赖于唯一 IP 寻址的协议,需要更丑陋的解决方法。

NAT/NAPT

NAT 的概念非常简单:当数据包通过 NAT 设备时,它会替换数据包标头中的源 IPv4 地址和目标 IPv4 地址中的一个或两个。实际上,它需要计算,因为 IPv4 报头有一个计算字段来检查 IPv4 报头的完整性,并且对 IPv4 报头进行的任何更改都需要重新计算该字段,并且数据包有效负载中的一些传输协议也有自己的计算必须使用 NAT 设备中可用于数据包转发的计算资源重新计算的字段。

在基本 NAT 中,NAT 设备有一个 IPv4 地址池,用于替换从内部网络发送到外部网络的 IPv4 数据包的数据包标头的源 IPv4 地址,并且它维护一个转换表以转换从外部网络返回的流量的目标 IPv4 地址,以便将数据包传送回内部网络上的正确主机。这也需要 NAT 设备上的资源来构建和维护转换表,并执行表查找。这种资源利用会减慢数据包的转发速度,因为 NAT 使用的资源取自可用于数据包转发的资源。

NAPT 通过转换 TCP 和 UDP 的传输协议地址(端口)以及 ICMP 的查询 ID 进一步提升了 Basic NAT。通过还转换传输层地址,NAPT 允许将单个外部 IPv4 地址用于许多内部主机 IPv4 地址。NAPT 甚至比基本 NAT 更占用资源,因为它需要为每个传输层协议提供一个单独的表,并且它还必须执行传输协议的完整性计算。

使用私有 IPv4 寻址,可在多个网络上重复使用(您可能已经注意到,大多数家庭/住宅网络默认使用相同的 192.168.1.0/24 网络,该网络位于 IANA 分配的私有 IPv4 地址范围之一)与 NAPT 一起,允许企业和家庭用户各自使用单个外部(公共)地址来建立大型内部(私人寻址)网络。这节省了很多很多 IPv4 地址(可能的 IPv4 地址总数的几倍),并延长了 IPv4 的寿命,远远超出了如果没有 NAPT 会崩溃的程度。NAPT 确实有一些严重的缺点:

  • NAPT 打破了 IP 端到端范式,它只适用于 TCP、UDP 和 ICMP,打破了其他传输协议。还有一些使用 TCP 或 UDP 的应用层协议被 NAPT 破坏,即使 TCP 和 UDP 名义上与 NAPT 一起工作。其他缓解措施,例如 STUN/TURN,可能适用于某些应用层协议,但它们会增加成本和复杂性。
  • 与不使用任何形式的 NAT 的情况相比,NAPT 非常占用资源,会减慢数据包转发速度。一些供应商添加了专用硬件来减少从数据包转发中窃取资源的需要,但这会增加费用、大小、复杂性和功耗。
  • 使用 NAPT 时,从 NAPT 网络外部发起的流量无法传递到内部网络,因为转换表中没有由内部发起的流量添加的转换条目。单个外部(公共)地址在 NAT 设备上配置,具有该目标 IPv4 地址且在传输协议的转换表中没有源 IPv4 地址条目的任何数据包都被假定为 NAPT 设备本身,而不是内部网络。对于这个问题,有一种缓解方法,称为端口转发。
  • 端口转发基本上手动配置转换表中的永久条目,以允许外部发起的流量被指定到特定的传输协议和协议的地址被传递到特定的内部主机。这确实有一个缺点,即只允许一个内部主机成为特定传输协议和地址的目标。例如,如果内部网络上有多个 Web 服务器,则只有一个 Web 服务器可以暴露在 TCP 端口 80(Web 服务器的默认值)上。
  • 由于 IPv4 地址短缺非常严重,ISP(互联网服务提供商)无法分配给客户的公共地址。ISP 无法再获得任何公共地址,因此他们采取了一些特别伤害家庭/住宅用户的缓解措施。ISP 希望为愿意为获得公共地址的特权付费的商业客户保留宝贵的公共地址池。为此,ISP 现在开始为其家庭/住宅客户分配私有或共享地址,并且 ISP 在他们自己的路由器上使用 NAPT 以促进在单个公共地址上使用多个私有或共享地址。这会造成家庭/住宅网络落后于两个 NAPT 转换(ISP NAPT 到客户 NAPT)的情况,
  • 许多人错误地将 NAPT 和安全性等同起来,因为内部主机无法直接从外部寻址。这是一种虚假的安全感。因为将网络连接到公共 Internet 的防火墙是运行 NAPT 的方便场所,这只会使情况变得混乱。它产生了一种危险的看法,即 NAPT 本身就是防火墙,而真正的防火墙是不必要的。网络安全来自防火墙,它默认阻止所有外部发起的流量,只允许明确配置允许的流量,可能对数据包内容进行深入检查以丢弃危险的数据包有效负载。有些人没有意识到,如果没有防火墙,无论是硬件还是软件,在 NAPT 设备的外部或内置于 NAPT 设备中,以保护 NAPT 设备,NAPT 设备本身是易受攻击的。如果 NAPT 设备被入侵,它,进而是攻击者,可以完全访问私有寻址的内部网络。与转换表不匹配的外部发起的数据包的目的地是 NAPT 设备本身,因为它是实际使用外部地址寻址的设备,因此可以直接攻击 NAPT 设备。

IPv4地址短缺的解决方案

IETF 预测了 IPv4 地址短缺,并创建了解决方案:IPv6,它使用 128 位地址,这意味着有 340,282,366,920,938,463,463,374,607,431,768,211,456 (340 undecillion) 可能的 IPv6 地址。几乎无法想象的 IPv6 地址数量消除了对 NAPT 的需求(IPv6 没有任何 NAT 标准,就像 IPv4 那样,实验性的 IPv6 NAT RFC 明确禁止 NAPT),恢复了原始的 IP 端到端范式。IPv4 地址短缺的缓解措施旨在延长 IPv4 的寿命,直到 IPv6 无处不在,此时 IPv4 应该会逐渐消失。

人类无法真正理解用于 IPv6 的大小数字。例如,标准 IPv6 网络对网络地址的每个网络和主机部分使用 64 位。那是 18,446,744,073,709,551,616 个可能的 IPv6 标准 /64 网络,以及每个网络的相同(大量)主机地址。要尝试理解这么大的数字,请考虑使用扫描网络上所有可能地址的工具。如果这样的工具每秒可以扫描 1,000,000 个地址(不太可能),那么在单个 /64 IPv6 网络上执行扫描将需要超过 584,542 年。目前,只有 1/8 的总 IPv6 地址空间分配给全球 IPv6 地址,这适用于 2,305,843,009,213,693,952 个标准 IPv6 /64 网络,如果 2100 年世界人口为 210 亿(一个有点现实的数字),这 210 亿人中的每一个人都可以拥有 109,802,048 个标准 IPv6 /64 网络,每个网络有 18,446,744,073,709,551,616 个可能的主机地址。不幸的是,(几十年的)IPv4地址短缺已经在人们心中根深蒂固,以至于许多人根本无法放手,他们试图将其应用于IPv6,这是毫无意义的,实际上是有害的。IPv6实际上是为了浪费地址而设计的。

IETF 也有事后诸葛亮的优势,它通过删除 IPv4 中无法正常工作的特性、改进一些 IPv4 特性并添加 IPv4 没有的特性来改进 IP(在 IPv6 中),创建一个新的和改进的 IP . 由于 IPv6 是与 IPv4 完全分离的协议,因此它可以与 IPv4 并行运行,因为从 IPv4 过渡到 IPv6。主机和网络设备可以同时在同一个接口上同时运行 IPv4 和 IPv6(双栈),彼此不可见;两种协议之间没有干扰。

IPv6 的问题在于,它实际上是一个完全不同的协议,与无处不在的 IPv4 不兼容,而且许多人认为 IPv4 地址短缺的缓解措施“足够好”。结果是,自 IPv6 标准化以来已经 20 多年了,而我们现在才在使用 IPv6 方面获得了一些真正的吸引力(谷歌报告,截至 2018 年 9 月,全球 IPv6 采用率超过 20%,而 IPv6 的采用率在美国超过 35%)。我们最终转向 IPv6 的原因是没有更多未使用的 IPv4 地址可以分配。

还有其他一些障碍,这些都是 IPv4 文化的一部分,人们很难忽视这些障碍。许多人也害怕 IPv6,他们已经长大并且对 IPv4 感到很舒服,还有很多问题。例如,与 IPv4 地址相比,IPv6 地址看起来又大又丑,这似乎让很多人望而却步。现实情况是,IPv6 通常比 IPv4 更容易、更灵活,尤其是在寻址方面,并且从 IPv4 中吸取的教训从一开始就应用于 IPv6。

Ron Maupin 的回答很好地概述了 IPv4 短缺,但我想解决您问题的这一部分:

为什么一个城市(例如)不能只有一个 IP 地址,而这个城市的所有家庭都在该城市的专用网络上。然后这个城市将能够分配范围从 0.0.0.1 到 255.255.255.254 的地址。

从表面上看,这正是“NAT”(或者,更具体地说,“IP 地址伪装”)的工作原理:建立了一个专用网络,它看起来像一个单一的主机,并在内部将流量路由到许多不同的用户。但是您在示例中忽略了一些重要的限制:

  • 内部用户仍然需要能够访问外部互联网;如果您将地址 151.101.1.69 分配给网络上的内部用户,您将无法访问 networkengineering.stackexchange.com,因为这是托管它的地址。因此,在实践中,您只能使用为此用途保留的内部地址
  • 不太明显的是,外部主机需要某种方式将流量传递给内部用户,即使他们只是浏览网页。这是因为 IP 连接不像隧道:向 Web 服务器发送数据包不会为会话预留电缆,它只是要求服务器将一些数据包发送回您的方式。如果 Web 服务器只是将其响应发送到一个公共地址,则需要跟踪哪台内部计算机实际请求它。如果内部网络上不止一个人访问同一个 Web 服务器,那么跟踪的唯一方法是为每个连接分配一个唯一的动态端口号,以便回复到达。

大约有 1800 万个私有 IPv4 地址,但只有 65536 个端口号。您实际上并不需要每个连接都有一个唯一的端口,因为您可以拥有一个包含远程地址的查找表,但是您可以在没有问题的情况下扩展多远仍然存在限制。

也就是说,NAT 确实是 IPv4 网络由于​​地址短缺而没有完全崩溃的最大原因之一。为每个家庭或办公室分配一个 IP 地址,并为他们分配一个执行 NAT 的设备,可以连接比 IPv4 的原始设计更多的设备。为了进一步扩展,使用运营商级 NAT,其中 ISP 的公共地址少于连接的家庭,可能使用两层 NAT 来管理数据包到其最终目的地的路由。

最后,从剩余的几个地址中挤出所有可能的路由只是 IPv4 的生命支持,并且在某些时候,每个地址都将保留供内部使用、某些 NAT 网络的公共面孔或公共地址接受未经请求的连接的服务器。

现在,每个家庭都有自己的 IP 地址。为什么一个城市(例如)不能只有一个 IP 地址,而这个城市的所有家庭都在该城市的专用网络上?

自 1990 年代末以来,许多互联网服务提供商就已经做到了这一点。

在 1990 年代,这样做有不同的原因(不是 IPv4 短缺)。然而在2012 年,我作为客户的互联网服务提供商开始这样做,因为不再有足够的 IPv4 地址:

我的提供商使用“DS-Lite”,这意味着新客户可以获得一系列全球 IPv6 地址(动态分配),并且他们只有您描述的私有 IPv4 地址。

其他互联网服务提供商使用您所描述的“CGNAT”(没有 IPv6)。

我的理解有什么问题?

您必须了解使用 NAT无法实现的功能:

如果你想操作一些服务器,你肯定需要一个唯一的 IP 地址。请注意,您可以通过智能手机访问您家中的某些设备是“服务器”。

Facebook Inc. 还进行了一项研究,表明当多个客户共享一个 IP 地址时,连接速度会受到影响。

还有另一个问题:

由于端口号,一个 IP 地址可以同时与某个服务器建立的连接数限制为大约 60000。

我见过同时打开 10 个连接的视频流页面。6000 人使用同一页面,达到了 60000 的限制。

而60000是理论极限;真正的限制更少。

然后这个城市将能够分配范围从 0.0.0.1 到 255.255.255.254 的地址。

这绝对行不通:

假设你想访问这个网站(networkengineering.stackexchange.com)。然后你必须建立到 151.101.129.69 的连接。

如果在全市局域网内有一台地址为 151.101.129.69 的计算机,则与“networkengineering.stackexchange.com”的连接可能无法正常工作,因为尚不清楚两台计算机中的哪一台具有相同的 IP 地址:是市内网还是网外?

这意味着全市网络必须知道 151.101.129.69 是该网络之外的地址。

因此,只能使用未在全球互联网中使用的地址。

顺便一提:

即使在连接到互联网的专用网络中,我们也无法使用整个范围 0.0.0.1-255.255.255.254:

在这样的网络中,我们可以使用像 151.101.129.69 这样的地址。

但是,不能使用 0、127 和 224-255 范围,因为这些范围几乎由所有操作系统和设备专门处理。因此,没有一个常见的操作系统会允许计算机拥有例如地址 127.10.11.12。

有一些客观的和一些基于意见的原因,当然还有最重要的原因——金钱——为此。

首先,IP设计为与具有唯一地址的主机端到端。这基本上意味着——理论上——每台设备(服务器、电脑、电话)都需要有自己的独立 IP 地址。

有 40 亿个可用地址,这对于每个人来说原则上都足够了,因为尽管地球上的人口几乎是两倍,但绝大多数人都在努力获得足够的食物,而且他们的一生都可能买不起电脑. 不过,在能买得起的少数人中,更像是人均15-20台永远在线的设备,包括一些相机、一台冰箱、遥控照明和取暖器,还有……你的烤面包机由于我不知道的原因,它必须连接到互联网。
物联网并不是真正需要的东西,但它在过去十年中已经非常成功地推向市场并被广泛采用,因此它已成为现实,因此真正的问题。另外,相当数量的地址由于好的技术原因被浪费了,大量的地址被完全没有理由地浪费了(我稍后再谈)。

在实践中,有一种叫做 NAT 的东西完全(或几乎如此)你的建议。从技术上讲,它违反了 IP 的设计原则,但这并不是什么大问题。尽管如此,虽然 NAT 工作正常并且在某些方面实际上是一件好事,但它有其局限性(值得注意的是,理论上它最多只能将地址数量扩展 65535 倍,实际上远低于此)是让 NAT 消失的强烈愿望。最紧迫的一个事实是 NAT 掩盖了地址和设备之间的 1:1 关系。这实际上是一件好事,因为哦,见鬼,你实际上不想要那个,但对于某些有发言权的人(例如执法部门)来说并不是那么好。另一个原因是 NAT(通常也有防火墙)使某些应用程序更难。特别是,NAT 后面的一台主机与 NAT 后面的另一台主机通信是很麻烦的(并非不可能,只是比绝对必要更难实现)。

现在,对于一个“典型”企业(或其他组织),有些人坐在隔间里,在公司网络或通过 VPN 进行通信,并且可能具有各种互联网访问权限,例如每个楼层有一个 IP 地址是非常有意义的并将它们全部通过NAT。它不仅会便宜得多,而且对于外部观察者来说,它也不会那么明显。另外,它会让网络管理员更加明显。两者都是一件好事。唉,现实情况是,几家大公司和美国大学已经保留了大量的 IP 地址,以便他们可能拥有的每台机器都有自己的个人地址。问为什么?我不能说。

我们之所以“被淘汰”,最重要的原因是有强烈的推动 IPv6 的动力。虽然 IPv6 不仅消除了一些麻烦并带来了一些(尽管很少)理想的特性,但它还增加了线路上可测量的开销(特别是如果涉及多个层,例如 IP-over-PPPoE-over-ATM,例如许多家庭互联网连接),客户为带宽付费(以每秒字节数为单位)或按字节数付费。所以...从 IPv4 移出的任何一种方式都是非常可取的,因为作为提供商,您要么需要更少的骨干网,要么您可以为相同的东西向您的客户收取更多费用。
这导致危机被积极宣传,像糖果一样分发地址(直到几乎没有留下)。我记得,不久前,几年前,租用 50 美元的服务器时,你会得到大约 5 个地址。