《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构

发布于:2025-05-31 ⋅ 阅读:(19) ⋅ 点赞:(0)

基本的IP地址结构

分类寻址

早期Internet采用分类地址(Classful Addressing),将IPv4地址划分为五类:

在这里插入图片描述

在这里插入图片描述

A类和B类网络号通常浪费太多主机号,而C类网络号不能为很多站点提供足够的主机号。


子网寻址

子网(Subnet) 是在一个IP网络中划分出的更小的逻辑网络。通过借用主机位作为子网位,可以实现更灵活的网络划分,有助于减小广播域并提高地址利用率。

在这里插入图片描述

在这个例子中,8位被选定为子网号,剩下8位为主机号。这个特殊配置允许站点支持256个子网,每个子网最多可包含254台主机(当前每个子网的第一个和最后一个地址无效,即从整个分配范围中除去第一个和最后一个地址)。注意,只有划分子网的网络中的主机和路由器知道子网结构。

在这里插入图片描述
边界路由器必须能区分和分离目的地址为128.32.1.x和目的地址128.32.2.x.的流量。这些地址分别表示子网号1和2,它们都采用128.32的B类网络号。而这一步通过子网掩码实现。


子网掩码

子网掩码(Subnet Mask) 用于划分IP地址中的网络部分和主机部分。其本质是一个32位的二进制数,与IP地址进行按位与操作可提取出网络地址。子网掩码在每个网络中是固定的,意味着所有子网的划分都是基于相同的位数。

在这里插入图片描述

掩码由路由器和主机使用,以确定一个IP地址的网络/子网部分的结束和主机部分的开始。子网掩码中的一位设为1表示一个IP地址的对应位与一个地址的网络/子网部分的对应位相结合,并将结果作为转发数据报的基础。相反,子网掩码中的一位设为0,表示一个IP地址的对应位作为主机ID的一部分。

可变长子网掩码

可变长子网掩码(VLSM, Variable Length Subnet Mask) 是一种支持对不同子网使用不同长度子网掩码的技术,提升了地址空间的利用率。VLSM允许网络根据实际需求分配IP空间,通常结合CIDR使用。

在这里插入图片描述
三个不同的子网掩码被用于站点中的子网128.32.0.0/16:/24、/25和/26。这样,每个子网可提供不同数量的主机。主机数受IP地址中没有被网络 / 子网号使用的剩余位限制。对于IPv4和/24前缀,允许有32-24=8位(256台主机);

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

广播地址

在IPv4中,每个子网都保留有一个广播地址,用于向该子网中所有主机发送信息。广播地址的构造方法是:将子网掩码按位取反后,与该子网中任意一个IP地址进行按位或运算。

这样生成的地址,其网络部分保持不变,而主机部分的所有位都为1。

在这里插入图片描述

这种类型的广播称为定向广播。从理论上说,数据报可以跨越路由器到达目标子网,并在该子网上作为广播数据报分发给所有主机。然而,出于安全和网络负载的考虑,大多数现代路由器默认禁止转发定向广播。因此,这种广播方式主要用于本地网络范围内,不需要路由器转发,通常由链路层的广播机制支持。

IPv6完全取消了广播机制,取而代之的是组播(Multicast)方式,用于实现类似功能。

IPv6地址和接口标识符

IPv6地址长度为128位,是IPv4的四倍,支持更大的地址空间。IPv6使用地址前缀来区分不同的作用范围,包括节点本地、链路本地和全球性三种常见范围。节点通常会在同一接口上拥有多个IPv6地址,这种方式在IPv6中很普遍。

链路本地地址和一些全球地址会使用接口标识符(IID)来形成完整的单播地址。IID通常占IPv6地址的低64位,在大多数情况下是基于网络接口的MAC地址生成的。最常见的生成方式是使用修改的EUI-64格式,它通过将一个48位的MAC地址扩展为64位地址实现。

在这里插入图片描述

EUI-64由24位的组织唯一标识符(OUI)和由组织分配的40位扩展标识符组成。在从EUI-48生成EUI-64时,会在中间插入FF:FE,并将u位取反。

若接口没有标准的MAC地址,例如隧道或串行链路,可以使用其他接口的地址、节点相关标识符或手动方式生成接口标识符。IPv6还支持使用随机生成的IID以提供更好的隐私保护。

CIDR和聚合

前缀

CIDR(无类别域间路由,Classless Inter-Domain Routing)取消了传统的A/B/C类地址分类方式,转而使用前缀长度表示网络部分的位数。前缀通常写作“地址/长度”的形式,如 192.0.2.0/24 表示前24位是网络号,后8位用于主机号。这种方式提供了更灵活的地址划分机制,使地址分配更有效,并减缓了IPv4地址枯竭。

CIDR前缀不仅用于地址分配,还广泛用于路由表匹配。在转发数据包时,路由器会选择与目的地址最长前缀匹配(Longest Prefix Match)的路由项。

在这里插入图片描述

聚合

CIDR还引入了地址聚合的概念,也称为“超网(supernetting)”。多个连续的IP地址块可以被合并为一个更短的前缀,从而减少路由表项数量。

在这里插入图片描述

特殊用途地址

IPv4和IPv6地址转换

IPv4 和 IPv6 协议栈之间的互操作需要使用地址映射机制。最常见的一种是使用 IPv4映射地址(IPv4-mapped IPv6 address),这种地址常用于双协议栈主机,以便可以通过IPv6接口访问IPv4服务。

在这里插入图片描述

组播地址

组播地址用于将数据发送给一组接收者,而不是单一主机(单播)或所有主机(广播)。组播是一种一对多的通信方式,支持高效资源利用,常用于视频传输、路由协议(如OSPF、RIPng)等。

IPv4 和 IPv6 都支持组播,但机制和地址空间不同。组播地址只能作为目的地址,不能用于源地址。

IPv4组播地址

IPv4组播地址范围是 224.0.0.0/4,即从 224.0.0.0239.255.255.255。其中:

在这里插入图片描述

在这里插入图片描述

  • 224.0.0.0/24 保留为本地链路多播,不能被路由。例如 224.0.0.1 表示本地子网上的所有主机,224.0.0.9 用于RIPv2。
  • 其他地址可用于Internet范围内的多播应用,但需要特定的配置支持。

IPv4组播使用 IGMP(Internet Group Management Protocol)进行组成员管理,主机通过 IGMP 加入或离开某个组。

IPv6组播地址

IPv6 取消了广播,因此组播是IPv6中唯一的“多目标”通信机制。IPv6组播地址以 FF00::/8 开头,后跟4位作用域字段和112位组ID。作用域(Scope)标识组播地址的作用范围,如:

  • FF01::1 节点本地所有进程
  • FF02::1 链路本地所有节点
  • FF05::2 站点本地所有路由器
    在这里插入图片描述
    在这里插入图片描述

IPv6 使用 MLD(Multicast Listener Discovery)协议代替 IGMP,用于组成员管理。每个IPv6节点必须监听特定的组播地址,例如所有节点都监听 FF02::1

任播地址

任播(Anycast)地址是一种特殊的单播地址,它可以被分配给多个接口,但数据包只会路由到“最近”的一个节点,根据路由协议定义的距离或开销来决定。它不像组播会复制数据,而是“单点选择传送”。

任播最常见的用途是在基础设施中部署服务副本,如DNS根服务器使用多个节点共享一个任播地址。这样,客户端可以自动选择延迟最低或路由最近的服务器。