第2章 Internet地址结构 [TCP/IP详解 卷1:协议]
本章介绍了Interent中使用的网络层地址,又称为IP地址。连接到Interent的每个设备至少有一个IP地址。基于TCP/IP协议的专用网络中使用的设备也需要IP地址。在任何情况下,IP路由器实现的转发程序使用IP地址来识别流量去向,IP地址也表示流量来源。
成组的IP地址被分配给用户和组织,这些拥有者再将它们分配给设备,这通常根据某些“编号方案”进行。对于全球性的Interent地址,一个分层结构管理实体帮助用户和服务提供商分配地址。个人用户通常由Interent服务提供商(ISP)分配地址,通过支付费用来获得地址和执行路由。
最流行的地址类型:IPv4地址。这些地址通常采用所谓的点分四组或点分十进制表示法,例如165.195.10.107。在IPv6中,地址的长度是128位,是IPv4地址长度的4倍。IPv6地址的传统表示方法是采用称为块或字段的四个十六进制数,这些被称为块或字段的数由冒号分隔。 例如,一个包含8个块的IPv6地址可写为5f05:2000:80ad:5800:0058:0800:2023:1d71。 某些情况下(例如表示一个包含地址的URL时),IPv6地址中的冒号分隔符可能与其他分隔符混淆,例如IP地址和端口号之间使用的冒号。在这种情况下,用括号字符[和]包围IP地址。 TCP(传输控制协议) 例如URL http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/ 是指IPv6主机2001:0db8:85a3:08d3:1319:8a2e:0370:7344中的端口号443使用HTTP、TCP和IPv6协议。
由于拥有大量地址(特别是IPv6),可以方便地将地址空间划分成块。IP地址可根据类型和带小分组。大多数IPv4地址块最终被细分为一个地址,用于识别连接Interent或某些专用的内联网的计算机网络接口。这些地址称为单播地址,其他类型的地址包括广播、组播和任播地址,它们可能涉及多个接口,还有一些特殊用途的地址。
当最初定义Interent地址结构时,每个单播IP地址都有一个网络部分,用于识别接口使用的IP地址在哪个网络中可被发现;以及一个主机地址,用于识别由网络部分给出的网络中的特定主机。因此,地址中的一些连续位称为网络号,其余位称为主机号。当时,大多数主机只有一个网络接口,因此术语接口地址和主机地址有时交替使用。
现实中的不同网络可能有不同数量的主机,每台主机都需要一个唯一的IP地址。一种划分方法是基于当前或预计的主机数量,将不同大小的IP地址空间分配给不同的站点。地址空间的划分涉及五大类。每类都基于网络中可容纳的主机数量,确定在一个32位的IPv4地址中分配给网络号和主机号的位数。
IPv4地址空间最初分为五大类。A、B、C类用于为Interent(单播地址)中的接口分配地址,以及其他一些特殊情况下使用。类由地址中的头几位来定义:0为A类,10为B类,110为C类等。D类(1110)地址供组播使用,E类(1111)地址保留。
分类地址结构:
A类:0.0.0.0~127.255.255.255
B类:128.0.0.0~191.255.255.255
C类:192.0.0.0~223.255.255.255
D类:224.0.0.0~239.255.255.255
E类:240.0.0.0~255.255.255.255
在一个站点接入Internet后为其分配一个网络号,然后由站点管理员进一步划分本地的子网数。实现这个想法需要改变一个IP地址的网络部分和主机部分的限制,但这样做只是针对一个站点自身而言;Interent其余部分将只能“看到”传统的A类、B类和C类部分,支持此功能的方法称为子网寻址。通过子网寻址,一个站点被分配一个A类、B类或C类的网络号,保留一些剩余主机号进一步用于站点内分配。该站点可能将基础地址中的主机部分进一步划分为一个子网号和一个主机号。从本质上来说,子网寻址为IP地址结构增加了一个额外部分,但它没有为地址增加长度。
子网寻址提供额外灵活性的代价是增加成本。由于当前的子网字段和主机字段的定义是由站点指定的(不是由网络号分类决定),一个站点中所有路由器和主机需要一种新的方式,以确定地址中的子网部分和其中的主机部分。在出现子网之前,这个信息可直接从一个网络号中获得,只需知道是A类、B类或C类地址(由地址的前几位表示)。
子网掩码是由一台主机或路由器使用的分配位,以确定如何从一台主机对应IP地址中获得网络和子网信息。IP子网掩码与对应的IP地址长度相同(IPv4为32位,IPv6为128位)。它们通常在一台主机或路由器中以IP地址相同的方式配置,既可以是静态的(通常是路由器),也可以使用一些动态方式,例如动态主机配置协议(DHCP)。子网掩码可以用点分十进制表示(255.255.254.0),也可以用前缀长度表示(/23)。
掩码由路由器和主机使用,以确定一个IP地址的网络/子网部分的结束和主机部分的开始。
注意,Interent路由系统其余部分不需要子网掩码的知识,因为站点之外的路由器做出路由决策只基于地址的网络号部分,并不需要网络/子网或主机部分。因此,子网掩码纯粹是站点内部的局部问题。
我们发现在同一站点的不同部分,可将不同长度的子网掩码应用于相同网络号。虽然这样增加了地址配置管理的复杂性,但也提高了子网结构的灵活性,这是由于不同子网可容纳不同数量的主机。目前,大多数主机、路由器和路由协议支持可变长度子网掩码(VLSM)。
注意,主机和路由器的每个接口都需要用IP地址和子网掩码来描述,但掩码决定了网络拓扑的不同。基于路由器中运行的动态路由协议(例如OSPF、IS-IS、RIPv2),流量能正确地在同一站点中的主机之间流动,以及通过Internet前往或来自外部站点。
在每个IPv4子网中,一个特殊地址被保留作为子网广播地址。子网广播地址通过将IPv4地址的网络/子网部分设置为适当值,以及主机部分的所有位设置为1而形成。子网广播地址的构建方式为:对子网掩码取反,(即将所有的0位改变为1,反之亦然),并与子网中任意计算机的地址(或等值的网络/子网前缀)进行按位或运算。
从历史上看,使用广播地址作为目的地的数据报,也被称为定向广播。至少在理论上,这种广播可作为一个单独的数据报通过Internet路由直至到达目标子网,再作为一组广播数据报发送给子网中所有主机。
除了子网广播地址,特殊用途地址255.255.255.255被保留为本地网络广播(也称为有限广播),它根本不会被路由器转发。
广播地址通常与某些协议一起使用,例如UDP/IP或ICMP,因为这些协议不涉及TCP/IP那样的双方会话。IPv6没有任何广播地址;广播地址可用于IPv4中,而IPv6仅使用组播地址。
IPv6地址使用特殊前缀表示一个地址范围。一个IPv6地址范围是指它可用的网络规模。有关范围的重要例子包括节点本地(只用于同一计算机中通信)、链路本地(只用于同一网络链路或IPv6前缀中的节点)或全球性(Internet范围)。在IPv6中,大部分节点通常在同一网络接口上使用多个地址。
链路本地IPv6地址(和一些全球性IPv6地址)使用接口标识符(IID)作为一个单播IPv6地址的分配基础。
在IEEE标准中,EUI表示扩展唯一标识符。EUI-64标识符开始于一个24位的组织唯一标识符(OUI),接着是一个由组织分配的40位扩展标识符,它由前面24位识别。
为了帮助缓解IPv4地址(特别是B类地址)的压力,分类寻址方案通常使用一个类似VLSM的方案,扩展Internet路由系统以支持无类别域间路由(CIDR)。
对于IPv4和IPv6,没有指定作为特殊、组播或保留地址的地址范围可供单播使用。一些单播地址空间被保留用于构建专用网络。来自这些范围的地址可用于一个站点或组织内部的主机和路由器之间的通信,但不能跨越全球性的Internet。因此,这些地址有时也被称为不可路由的地址。也就是说,它们不能在公共Internet中路由。
IPv4和IPv6支持组播寻址。一个IP组播地址(也称为组或组地址)标识一组主机接口,而不是单个接口。一般来说,一个组可以跨越整个Internet。一个组所覆盖的网络部分称为组的范围。常见的范围包括节点本地(同一计算机)、链路本地(同一子网)、站点本地(适用于一些站点)、全球(整个Internet)和管理。管理范围的地址可用于一个网络区域内已手动配置到路由器的地址。站点管理员可将路由器配置为管理范围边界,这意味着相关组的组播流量不会被路由器转发。注意,站点本地和管理范围只在使用组播寻址时有效。
在软件的控制下,每个Internet主机中的协议栈能加入或离开一个组播组。当一台主机向一个组发送数据时,它会创建一个数据报,使用(单播)IP地址作为源地址,使用组播IP地址作为目的地址。已加入组的所有主机将接受发送到该组的任何数据报。
至此,原有的组播服务模型已成为大家所知的任意源组播(ASM)。在这种模型下,任何发送方可以发送给任何组;一个加入组的接收方被指定唯一的组地址。一种新方案称为源特定组播(SSM),在每个组中只使用一个发送方。在这种情况下,当一台主机加入一个组后,它会被指定一个信道地址,其中包括一个组地址和一个源IP地址。SSM避免了ASM模型部署时的复杂性。尽管有多种组播形式在整个Internet中广泛使用,但SSM是当前更受欢迎的候选者。
任播地址是一个单播IPv4或IPv6地址,这些地址根据它所在的网络确定不同的主机。这是通过配置路由器通知Internet中多个站点有相同单播路由来实现。因此,一个任播地址不是指Internet中的一台主机,而是对于任播地址“最合适”或“最接近”的一台主机。任播地址最常用于发现一台提供了常用服务的计算机。
IP地址空间通常被分配为大的块,这由一些分层次组织的权威机构完成。
对于单播IPv4和IPv6的地址空间,IANA将分配权限主要委托给几个地区性Internet注册机构(RIR)。
在IPv4和IPv6中,组播地址(即组地址)可根据其范围来描述,它们需要确定组播方式(静态、动态的协议或算法),以及是否使用ASM或SSM。
【总结】:
IP地址用于识别和定位整个Internet系统(单播地址)中设备的网络接口。它也用于识别多个接口(组播、广播或任播地址)。每个接口有一个最少32位的IPv4地址,并且通常有几个128位的IPv6地址。
IPv4和IPv6都支持同时指向多个网络接口的地址格式。IPv4支持广播地址和组播地址,但IPv6只支持组播地址。广播允许一人对所有人通信,而组播允许一人对多人通信。
可以说CIDR(无类别域间路由)的开发和部署是Internet核心路由系统的一个根本性变化。CIDR成功地为分配地址空间提供更多灵活性,并通过聚合提供路由的可扩展性。