网络基础知识:命名、寻址和转发
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
这是我学习Udacity 免费计算机网络基础课程时所写的系列课堂笔记的第四篇。
什么是IP地址?
“互联网协议”v4 地址是一个 32 位二进制数,采用点分四进制表示法,例如130.207.7.36。这 4 个数字中的每一个都代表 8 位,总共 32 位。二进制数的 8 位范围从 0 到 255(记住 2^8 = 256)。
因此,IPv4 地址的总数为 2^32,约 40 亿。尽管我们正面临地址短缺的困境,但就本文而言,我们将学习如何处理所有这些地址。如果我们单独存储和查找每个地址,这将既昂贵又低效。
所以我们把IP地址分组。
1994 年前的分类地址
1994 年之前,我们使用“有类”寻址,将 IP 地址分为“路由前缀”(指示 AB 类或 C 类)、“网络 ID”部分和“主机 ID”部分:
1992 年路由表中只有大约 5000 个路由前缀,但到了 1994 年,这个数字迅速增长,显然是不可持续的,我们开始耗尽 C 类地址,同时仍然为未使用的 A 类和 B 类地址保留了大块的 IPv4 地址空间。
无类别域间路由(CIDR)
传统的分类策略未能预见到C类地址的巨大需求,其僵化的定位方式促使我们转向新的寻址协议——CIDR。与IPv4中固定的32位“网络ID”和“主机ID”部分不同,CIDR的IP地址包含一个“掩码”,用于指示网络ID的长度。
所以65.14.248.0/22翻译成二进制代码如下:
--------65--- ---14--- ---248-- ----0--
01000001 00001110 11111000 0000000
^^^^^^^^ ^^^^^^^^ ^^^^^^
^ first 22 bits are network ID
因此,“掩码”是一个可变长度的地址前缀,并且与所使用的IP地址范围无关(而“分类寻址”则基本上固定了地址前缀的长度)。这使得区域互联网注册管理机构(RIR)能够根据网络规模更灵活地分配地址。
然而,地址前缀可能连续或重叠,例如同时存在两个地址前缀65.14.248.0/22。65.14.248.0/24在这种情况下,地址65.14.248.0/24前缀将是地址前缀的子集65.14.248.0/22(并且更具体)。如果在路由表中发现此类重叠,则解决方案是根据最长掩码(即地址前缀)长度进行转发。这种对更具体地址的“掩码”处理允许上游路由器(例如65.14.248.0/8)聚合(而不是通告)更具体的地址前缀。
从 1994 年到 21 世纪初,CIDR 在将路由表的增长速度减缓至线性速度方面非常成功。但从 2000 年开始,出现了一种新的做法,使得上游提供商难以将 IP 前缀聚合在一起。
多宿主与IP前缀聚合
多宿主是指一个自治系统(通常带有/24掩码)希望通过两个上游互联网服务提供商 (ISP) 实现访问。
我们以两个互联网服务提供商 (ISP) 为例,ISP1 和 ISP2。假设 ISP1 拥有12.0.0.0/8并分配12.20.249.0/24给我们的自治系统 (AS),我们的 AS 拥有“多宿主”前缀,并向12.20.249.0/24ISP2 通告该前缀。现在,ISP1 和 ISP2 都希望向互联网的其他部分通告该前缀。虽然 ISP1 可能希望将该前缀聚合到 中12.0.0.0/8,但它无法做到,因为 ISP2 仍在通告12.20.249.0/24,而 是一个更长的前缀,所有流量都会流向 ISP2。因此,ISP1 被迫放弃将该 AS 的前缀聚合到它已拥有的前缀中。
因此,尽管 CIDR 聚合在一段时间内解决了路由表大小增长的问题,但多宿主再次导致了路由表大小的激增,因为聚合变得不那么有用了。
使用最长前缀匹配算法的地址查找
因此,CIDR 要求 LPM 能够高效地在路由表中查找正确的前缀,而 LPM 需要搜索所有前缀长度以及给定长度的所有前缀。另一个限制是速度——OC48需要160纳秒的查找时间,或者最多 4 次内存访问。
二叉树速度效率极低,而直接树或精确匹配策略空间效率又很低。我们通过使用“多位”或“多元”树来折衷。一个k元树的深度为W/K,度为2^K,步长为K。二叉树是多元树的特殊情况k=1,即深度为W,度为2,步长1为。因此,我们可以通过移动来控制内存访问,k从而找到所需的深度。
还有其他优化方法,例如叶子推送、Luleå和Patricia Tries。此外,还有完全替代 Tries 的方法,例如内容寻址内存查找,它本质上是精确匹配。
IPv4 地址耗尽的解决方案:网络地址转换
NAT 允许多个网络重用同一私有 IP 地址空间。私有 IP 地址于 1996 年被保留(参见RFC 1918192.168.0.0 ,其中解释了诸如 127.0.0.0 和127.0.0.0.0 等常见地址的由来172.16.0.0)。NAT 允许网络重用部分互联网地址空间,将私有 IP 地址转换为一个全球可见的单一 IP 地址。NAT 维护一个映射表,将自身的公网地址和端口映射到它所重写的私有地址和端口。
这种做法在小型/家庭办公网络和VPN中很常见。然而,这样做破坏了互联网架构的端到端原则。
解决 IPv4 地址耗尽问题的方案:IPv6(128 位地址)
另一种解决方案是 IPv6。IPv6 不仅增加了地址位数,还精简了报头中的大量冗余信息。以下是所需字段的比较:
IPv6 的优势:
- 当然,还有更多地址。
- 更简洁的标题
- 更简单的多宿主
- 内置IPSec/扩展头安全机制- (当然,也存在一些注意事项)
然而,迄今为止,IPv6 的普及速度非常缓慢,因为 IPv6 难以逐步部署。目前所有网络都运行在 IPv4 上,网络效应巨大,覆盖范围极窄。采用 IPv6 的用户面临着严重的兼容性问题。目前,逐步部署要么采用 IPv4 和 IPv6 双栈,要么采用转换/隧道技术(两者原理类似,但使用单独的层来实现IPv6 到 IPv4 的隧道传输)。
旁注:IP地址分配的工作原理
IP地址是按照层级结构分配给互联网服务提供商的:
- 最高层,全球互联网号码分配机构(IANA)负责分配:
- 五个区域互联网注册管理机构之一:AfriNIC、APNic、ARIN、LACNIC 或 RIPE。这些机构又将域名分配给:
- 单个 AS,例如您的大学网络
这种方法一直沿用到 2011 年,当时IANA 发放了最后一个“/8”域名块。另外,有趣的是,各个注册机构的域名分配并不均匀:
这也是一个很好的 CIDR 速查表,显示了有类地址到无类地址的转换,以及每个地址范围内的分配和例外情况:https://oav.net/mirrors/cidr.html。
本系列下一集
希望这篇概述能让您对 IP 地址的工作原理以及我们目前在 IPv4 方面面临的问题有一个大致的了解。我计划撰写更多入门教程,非常欢迎您提出反馈意见和问题:
文章来源:https://dev.to/swyx/networking-essentials-naming-addressing-and-forwarding-13kk


