第二章 Internet 地址结构

第二章 Internet 地址结构

[本文为《TCP/IP 详解》学习笔记]

2.1 引言

本章讨论了如何为 Internet 中的设备分配地址,有助于路由可扩展性的地址层次结构分配方式,以及特殊用途的地址,包括广播、组播和任播地址。我们还讨论了 IPv4 和 IPv6 地址结构和用途的区别。

对于全球性的 Internet 地址,一个分层结构管理实体帮助用户和服务提供商分配地址。个体用户通常由 Internet 服务提供商(ISP) 分配地址,通过支付费用来获取地址和执行路由。

2.2 表示 IP 地址

IPv4 地址

IPv4 是一个 32 位的非负整数。目前最流行的地址类型是 IPv4 地址。这些地址通常采用所谓的点分四组或点分十进制表示法(点分式),例如 165.195.130.107

IPv6 地址

IPv6 地址的长度是 128 位,是 IPv4 地址长度的 4 倍。IPv6 地址的传统表示方法是采用称为 字段 的四个十六进制数,用冒号分隔。例如一个包含 8 个块的 IPv6 地址可以写为 5f05:2000:80ad:5800:0058:0800:2023:1d71 。而且 IPv6 地址的简化方法已经被标准化 [RFC4291] :

1)一个块中的前导的 0 可以缺省。

2)全 0 的块可以缺省,并用 :: 代替,但是为了避免歧义 :: 在一个地址中只能使用一次。

3)在 IPv6 格式中嵌入 IPv4 地址可使用混合符号形式,紧接着 IPv4 部分的地址块的值为 ffff,地址其余部分使用点分四组格式。例如,IPv6 地址 ::ffff:10.0.0.1 可表示 IPv4 地址 10.0.0.1 .它被称为 IPv4 映射的 IPv6 地址。

4)IPv6 地址的低 32 位通常采用点分式表示。因此,IPv6 地址 ::0102:f001 相当于地址 ::1.2.240.1 。它被称为 IPv4 兼容的 IPv6 地址。但是注意 IPv4 兼容的 IPv6 地址与 IPv4 映射的 IPv6 地址是不同的。

在 URL 中要求使用 [] 将 IPv6 地址包裹起来,以避免与端口号前的 : 发生混淆。另外 [RFC5952] 还制定了一些规则:

1)前导 0 必须缺省;

2):: 必须使用在压缩 0 最多的地方,一样多的靠前的优先;

3)a 到 f 的十六进制数字应该用小写表示。

2.3 基本的 IP 地址结构

2.3.1 分类寻址

IPv4 的地址主要分为五大类

地址范围高序位用途百分比网络数主机数
A0.0.0.0~127.255.255.2550单播/特殊1/212816,777,216
B128.0.0.0~191.255.255.25510单播/特殊1/416,38465,535
C192.0.0.0~223.255.255.255110单播/特殊1/82,097,152256
D224.0.0.0~239.255.255.2551110组播1/16N/AN/A
E240.0.0.0~255.255.255.2551111保留1/16N/AN/A

注意:有几个地址通常不作为单播地址使用。特别是,地址块中得第一个和最后一个地址通常不使用。

范围描述
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
私网IPv4地址,可用于家庭、办公室和企业的内部局域网。设计私网IPv4地址的初衷是缓解IPv4地址耗尽问题。
169.254.0.0/16Link-local,Link local地址只在某网段有意义,路由器是不会转发地址为Link-local的IP包的。
127.0.0.0/8Loopback,回送测试loopback test所用
224.0.0.0/4IP组播地址
240.0.0.0/4保留为研究测试使用
255.255.255.255广播地址

Internet 地址分类方法在经历 Internet 增长后,它开出现规模问题,当每个新网段被添加到 Internet 中,集中协调为其分配一个新的 A 类、B 类或者 C 类网络号变得很不方便。另外,A 类和 B 类网络号通常浪费太多主机号,而 C 类网络号不能为很多站点提供足够的主机号。

2.3.2 子网寻址

从本质上来说,子网寻址为 IP 地址增加了一个额外部分,但是并没有为地址增加长度。因此一个站点管理员能在子网数和每个子网中预期的主机数之间折中,同时不需要与其它站点协调。

子网寻址提供额外灵活性的代价是增加成本。由于当前的 子网 字段和 主机 字段的定义是由站点指定的(不是由网络号分类决定),一个站点中所有的路由器和主机需要一种新的方式,以确定地址中的子网部分和主机部分。

2.3.3 子网掩码

子网掩码 是由一台主机或路由器使用的分配位,以确定如何从一个 IP 地址中分离出网络、子网信息和主机地址。IP 子网掩码的长度与对应的 IP 地址长度相同。它们通常在一台主机或路由器中以 IP 地址相同的方式配置,既可以是静态的(通常是路由器),也可以使用一些动态方式,例如:动态主机配置协议(DHCP;见第 6 章)。

各种格式的 IPv4 子网掩码的例子

点分十进制表示容易记住的格式(前缀长度)二进制表示
128.0.0.0/110000000 00000000 00000000 00000000
255.0.0.0/811111111 00000000 00000000 00000000
255.192.0.0/1011111111 11000000 00000000 00000000
255.255.0.0/1611111111 11111111 00000000 00000000
255.255.254.0/2311111111 11111111 11111110 00000000
255.255.255.192/2711111111 11111111 11111111 11100000
255.255.255.255/3211111111 11111111 11111111 11111111

子网掩码和子网都是边界路由器需要注意的信息,以确定一个目的地址为 128.32.1.14 属于子网 128.32.1.0/24 以完成路由转发任务。Internet 路由系统其余外的部分不需要子网掩码的信息,因此子网掩码纯粹是站点的内部的局部问题。

2.3.4 可变长度子网掩码

目前可以将不同长度的子网掩码用于相同的网络号。虽然增加了地址分配管理的复杂性,但是也提高了子网的灵活性,不同的子网可以容纳不同数量的主机。现在大多数主机、路由器和路由协议都支持 可变长度子网掩码(VLSM)

VLSM 可用于分割一个网络号,使每个子网支持不同数量的主机。每个路由器和主机除了 IP 地址外还需要配置一个子网掩码。

注意:主机和路由器的每个接口都需要用 IP 地址和子网掩码来描述,掩码决定了网络拓扑的不同。基于路由器中运行的动态路由协议(例如 OSPF 、IS - IS 、RIPv2),流量能正确地在同一站点中的主机之间流动,以及通过 Internet 前往或来自外部站点。

2.3.5 广播地址

子网广播地址通过将 IPv4 地址的网络/子网部分设置为适当值,以及主机部分所有位置 1 而形成。计算方法为 掩码取反或上原 IP 地址就得到了一个子网广播地址。这种广播也叫做定向广播。

定向广播是一个大问题,从安全角度来看,它们至今在 Internet 中仍然被禁用。[RFC0919] 描述了针对 IPv4 的各类广播,[RFC1812] 建议支持由路由器转发定向广播,它不仅可用,还默认开启。[RFC2644] 使用这个策略发生逆转,路由器现在默认禁止转发定向广播,甚至完全省略支持能力。

除了子网广播地址,特殊用途地址 255.255.255.255 被保留为本地网络广播(也称有限广播),它根本不会被路由器转发。注意,虽然路由器可能不转发广播,但子网广播和连接在同一网络中的计算机的本地网络广播将工作,除非被终端主机明确禁用。这种广播不需要路由器;如果有的化,链路层的广播机制用于支持它们(见第 3 章)。广播地址通常与某些协议一起使用,例如 UDP/IP(第 10 章)或 ICMP(第 8 章),因为这些协议不涉及 TCP/IP 那样的双方会话。 IPv6 没有任何广播地址;广播地址可用于 IPv4 中,而 IPv6 仅使用组播地址(见 第 9 章)。

2.3.6 IPv6 地址和接口标识符

除了比 IPv4 地址长 4 倍这个因素,IPv6 地址还有一些额外的特点。IPv6 地址使用特殊前缀表示一个 地址范围 。一个 IPv6 地址范围是指它可用的网络规模。有关范围的重要例子包括 节点本地(只用于同一个计算机内的通信)、链路本地(只用于同一个网络链路或 IPv6 前缀中的节点)或全球性(Internet 范围) 。在 IPv6 中,大部分节点通常在同一网络接口上使用多个地址。虽然 IPv4 中也支持这样做,但是并不常见。一个 IPv6 节点中需要一组地址,包括组播地址(见 2.5.2 节),它来源于 [RFC 4291]。

注意:另一个范围层次称为站点本地,使用的前缀为 fec0:😕 10,最初是由 IPv6 支持的,后来被 [RFC3879] 放弃并用于单播地址。主要问题是包括如何处理这种地址,这是由于它可能被重用于多个站点,以及如何准确定义一个 “站点” 。

链路本地 IPv6 地址(和一些全球性 IPv6 地址)使用 接口标识符(IID) 作为一个单播 IPv6 地址的分配基础。除了地址是以二进制值 000 开始之外, IID 在所有情况下都作为一个 IPv6 地址的低序位,这样它们必须在同一网络中有唯一前缀。IID 的长度通常是 64 位,并且直接由一个网络接口相关的链路层 MAC 地址形成,该地址使用 修改的 EUI-64 格式 [EUI64] ,或者由其他进程随机提供的值形成,可以提供可防范地址跟踪的某种程度的隐私保护(见第 6 章)。

在 IEEE 标准中,EUI 表示 扩展唯一标识符 。EUI-64 标识符开始于一个 24 位的 组织唯一标识符(OUI) ,接着是一个组织分配的 40 位 扩展标识符 ,它由前面 24 位识别。OUI 由 IEEE注册权威机构 [IEEERA] 来维护和分配。EUI 可能是 “统一管理” 或 “本地管理” 的。在 Internet 环境下,这种地址通常是统一管理的。

2.4 CIDR 和 聚合

在采用子网寻址缓解增长带来的痛苦后,Internet 开始面临更严重的规模问题。有三个问题很重要,需要立即引起注意 :

  1. 到 1994 年,一半以上的 B 类地址已被分配。
  2. 32 位的 IPv4 地址被认为不足以应对 Internet 在 21 世纪初期的预计规模。
  3. 全球性路由表的条目(每个网络号对应一条),

针对这些问题,短期的解决方案是有效清楚 IP 地址分类缺陷,并提高层次化分配的 IP 地址的聚合能力。 这些措施将有助于解决问题 1 和 3。IPv6 被设想用于解决问题 2。

2.4.1前缀

扩展 Internet 路由系统以支持无类别域间路由(CIDR)[RFC4632]。这提供了一种方便的分配连续地址的范围方式,包含多于 255 台但是少于 65535 台主机。也就是说,不只是单个 B 类或多个 C 类网络号可分配给站点。使用 CIDR ,未经预定义的任何地址范围可作为一个类的一部分,但是需要一个类似于子网掩码的掩码,有时也称 CIDR 掩码。CIDR 掩码不再局限于一个站点,而是对全球性路由系统都是可见的。因此,除了网络号之外,核心 Internet 路由器必须能解释和处理掩码。这个数字组合称为 网络前缀 ,它用于 IPv4 和 IPv6 地址管理。 、

消除一个 IP 地址中网络号和主机号的预定义分隔,将使更细粒度的 IP 地址分配范围成为可能。与分类寻址类似,地址空间分割成块最容易通过数值连续的地址来实现,以便于某种类型和某些特殊用途。

2.4.2 聚合

通过取消分类结构的 IP 地址,能分配各种尺寸的 IP 地址块。但是这样做并没有解决问题三,缓解路由表的压力。如何在维护 Internet 中到所有目的地的最短路径的同时,又能够显著减少路由表条目数,成为了一个难题。这个问题最有名的解决方法使 20 世纪 70 年代末由 Kleinrock 和 Kamoun 发表的 分层路由研究 [KK77]。他们发现,如果将网络拓扑排列成一棵树,并且以对这个网络拓扑 “敏感的” 方式来分配地址,这样就可以获得一个非常小的路由表,同时保持到所有目的地的最短路径。

比如 根节点被标记为 19.0.0.1 ,并要求其路由表中只有 3 个条目。左侧的所有路由以前缀 19.1 开始,右侧的所有路由器以前缀 19.2 开始。因此,路由器 19.0.0.1 的表中只需要将以 19.1 开始的目的地显示下一跳为 19.1.0.0 将以 19.2 开始的目的地址显示下一跳为 19.2.0.1 。任何其它目的地都被路由到标有 “其它网络” 的云中。结果共有 3 个条目。注意这种行为是递归的这种行为是递归的,树中的任意路由器需要的条目都不会超过它拥有的链路数。这是这种特殊的地址分配方法所带来的直接结果。即使越来越多的路由器加入到这个树中,这个良好属性也保持不变。这是 [KK77] 的分层路由思想的精髓。

在 Internet 环境中,可采用分层路由思想以一种特定方式减少 Internet 路由条目数。这通过一个称为 路由聚合 的过程来实现。通过将相邻的多个 IP 前缀合成一个短前缀(称为聚合),可以覆盖更多地址空间。

2.5 特殊用途地址

  • IPv4 特殊用途地址
前缀特殊用途参考文献
0.0.0.0/8本地网络中的主机。仅作为源 IP 地址使用[RFC1122]
10.0.0.0/8专用网络(内联网)的地址。这种地址不会出现在公共Internet中[RFC1918]
127.0.0.0/8Internet主机回送地址(同一计算机)。通常只用 127.0.0.1[RFC1122]
169.254.0.0/16“链路本地”地址,只用于一条链路,通常会自动分配[RFC3927]
172.16.0.0/12专用网络(内联网)的地址。这种地址不会出现在公共Internet中[RFC1918]
192.0.0.0/24IETF 协议分配(IANA 保留)[RFC5736]
192.0.2.0/24批准用于文档中的 TEST-NET-1 地址。这种地址不会出现在公共Internet中[RFC5737]
192.88.99.0/24用于 6to4 中继(任播地址)[RFC3068]
192.168.0.0/16专用网络(内联网)的地址。这种地址不会出现在公共Internet中[RFC1918]
198.18.0.0/15用于基准和性能测试[RFC2544]
198.51.100.0/24TEST-NET-2 地址。被批准用于文档中[RFC5737]
203.0.113.0/24TEST-NET-3 地址。被批准用于文档中[RFC5737]
224.0.0.0/4IPv4 组播地址(以前的 D 类),仅作为目的地址使用[RFC5771]
240.0.0.0/4保留空间(以前的 E 类),除了 255.255.255.255[RFC1112]
255.255.255.255/32本地网络(受限的)广播地址[RFC0919/22]
  • IPv6 特殊用途地址
前缀特殊用途参考文献
::/0默认路由条目。不用于寻址[RFC5156]
::/128未指定地址,可作为源 IP 地址使用[RFC4291]
::1/128IPv6 主机回送地址,不用于发送出本机的数据报[RFC4291]
::ffff:0:0/96IPv4 映射地址。这种地址不会出现在分组头部,只用于内部主机[RFC4291]
::{ipv4-address}/64IPv4 兼容地址。已过时 未使用[RFC4291]
2001::/32Teredo 地址[RFC4380]
2001:10::/28ORCHI(覆盖可路由加密散列标识符)。这种地址不会出现在公共 Internet 中[RFC4843]
2001:db8::/32用于文档和实例的地址范围。这种地址不会出现在公共 Internet 中[RFC3849]
2002::/166to4 隧道中继的 6to4 地址[RFC3056]
3ffe::/16用于 6bone 实验。已过时,未使用[RFC3701]
5f00::/16用于 6bone 实验。已过时,未使用[RFC3701]
fc00::/16唯一的本地单播地址,不用于全球性的 Internet[RFC4139]
fe80::/10链路本地单播地址[RFC4291]
ff00::/8IPv6 组播,仅作为目的地址[RFC4291]

2.5.1 IPv4/IPv6地址转换

目前已制定可一个用于单播转换的框架 [RFC6144] ,以及一个正在开发的用于组播转换的方案 [IDv 4v6mc] 。其中一种方法为 嵌入IPv4的IPv6地址 ,这种地址在IPv6地址内部包含IPv4地址。它可采用6种格式之一来编码,IPv6的前缀长度必须是下列数值之一:32、40、48、56、64 或 96。

具体方法如下:前缀既可以是一个众所周知的前缀,也可以是组织为转换器分配的唯一前缀。第 64 至 71 位必须设置为 0,以保持与 [RFC4291] 指定标识符的兼容性。后缀的位被保留,并且应设置为 0。然后,采用简单的方法来生成嵌入 IPv4 的 IPv6 地址:将 IPv6 的前缀与 32 位的 IPv4 地址相串联,并确保第 64 至 71 位被设置为 0(如果有必要,插入)。在后缀的后面增加 0 ,直到生成一个128位地址。

例如:嵌入 IPv4 的 IPv6 地址使用 96 位前缀选项时,该选项通常用前面提到的 IPv6 映射地址来表示([RFC4291] 中的2.2(3)节)IPv4:198.51.100.16 --> IPv6:64:ff9b::198.51.100.16

2.5.2 组播地址

IPv4 和 IPv6 支持组播寻址。一个 IP 组播地址(也称为组或组地址)标识一组主机接口而不是单个接口。一般来说,一个组可以跨越整个 Internet。一个组所覆盖的网络部分称为组的范围 [RFC2365] 。常见的范围包括 节点本地(同一计算机)、链路本地(同一子网)、站点本地(适用于一些站点)、全球(整个 Internet)和 管理 管理范围的地址可用于一个网络区域内已手动配置到路由器的地址。站点管理员可将路由器配置为 管理范围边界 ,这意味着相关组的组播流量不会被路由器转发。注意,站点本地和管理范围只在使用组播寻址时有效。

在软件的控制下,每个 Internet 主机中的协议栈能加入或者离开一个组播组。当一台主机向一个组发送数据时,它会创建一个数据报,使用(单播)IP 地址作为源地址,使用组播 IP 地址作为目的地址。已加入组的所有主机将接收发送到该组的任何数据报。发送方通常不知道主机是否接收到数据报除非它们做出明确应答。事实上,发送方甚至不知道通常有多少主机接收它的数据报。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值