1 2 3 4

TCP-IP详解 第二章 互联网地址结构

引言

本章讲解在互联网中使用的网络层地址结构,又名 IP 地址
我们将讨论如何为互联网上的设备分配地址、地址分配中的层级如何帮助路由扩展以及如何使用特殊用途的地址(包括广播、组播与任播地址)
我们还会讨论 IPv4 与 IPv6 地址在结构和使用上有什么区别

每一个连接到互联网上的设备至少有一个 IP 地址
在基于 TCP/IP 协议的专用网络中使用的设备也需要 IP 地址
无论那种情况,IP 路由器(见第 5 章)实现的转发程序使用 IP 地址来确定流量应该流向哪里
IP 地址同时也指明了流量是从哪里来的

当设备接入全球互联网时,必须通过协调为它们分配一个没有重复的地址
对专用网络来说,也必须通过协调来避免专用网络中的 IP 地址重复

个人用户一般会由互联网服务提供商(Internet service provider (ISP))分配 IP 地址
ISP 除了提供 IP 地址,同时也会提供路由流量保证,为此需要支付一定的费用。

IP的地址表示

IPv4 地址通常用被称为点分四段或点分十进制符号的方式表示,如:165.195.130.107
点分四段符号由四个十进制数组成,用点分隔
每个数字是一个 0 到 255 之间的非负整数,表示 IP 地址的四分之一
点分四段符号只是整个 IPv4 地址的一种书写方式,使用方便的十进制数字(IPv4 地址本质上是一个 32 位的非负整数)
在许多情况下,我们会关心地址的二进制结构
一些网站提供了在 IP 地址的多种形式间转换的计算器以及一些相关的信息,如:http://www.subnetmask.info
图 2-1 提供了几个 IPv4 地址与它们的二进制表示的例子
image
表 2-1
用点分四段表示法与二进制符号表示的 IPv4 地址的例子

IPv6 地址的长度为 128 位,是 IPv4 地址长度的 4 倍
IPv6 地址由一系列的用冒号分隔的十六进制数表示,每个十六进制数称为块(block)或字段(field)
一个包含 8 个块的 IPv6 地址:5f05:2000:80ad:5800:0058:0800:2023:1d71
十六进制转换为二进制时相对十进制要更容易一点
另外,多个 IPv6 地址的简化方式已经被标准化 [RFC4291]:
一个块中开头的零可以省略
前边的例子中,地址可以被写为:5f05:2000:80ad:5800:58:800:2023:1d71
全为零的块可以被省略,用符号 :: 代替
例如:0:0:0:0:0:0:0:1 可以写为:::1
2001:0db8:0:0:0:0:0:2 可以写为:2001:db8::2
为了避免引起混淆,一个 IPv6 地址中只能使用一次 :: 符号
为了在 IPv6 中兼容 IPv4 地址,可以将 IPv4 嵌入 IPv6 格式中,即用 IPv6 格式表示的 IPv4 地址
此时可以采用一种混合符号,前边 96 为 ::ffff,后边 32 位为 IPv4 地址的值,用点分四段方式表示
例如,IPv6 地址 ::ffff:10.0.0.1 表示 IPv4 地址 10.0.0.1
这被称为 IPv4 映射的 IPv6 地址(IPv4-mapped IPv6 address)
IPv6 的低 32 位可以被写为点分四段符号
如:IPv6 地址 ::0102:f001 可以被写为:::1.2.240.1
这被称为 IPv4 兼容的 IPv6 地址
注意,IPv4 兼容的 IPv6 地址与 IPv4 映射的 IPv6 地址是不一样的
IPv4 兼容的 IPv6 地址的兼容性,只是说它们能够用一种与 IPv4 地址相似方式进行书写或被软件操作
这种类型的地址最初是为了满足从 IPv4 到 IPv6 的过度计划的需要,如今已经不再使用 [RFC4291]

  1. 一个块中开头的零可以省略前边的例子中,地址可以被写为:5f05:2000:80ad:5800:58:800:2023:1d71
  2. 全为零的块可以被省略,用符号 :: 代替,例如:0:0:0:0:0:0:0:1 可以写为:::1,2001:0db8:0:0:0:0:0:2 可以写为2001:db8::2,为了避免引起混淆,一个 IPv6 地址中只能使用一次 :: 符号。
  3. 为了在 IPv6 中兼容 IPv4 地址,可以将 IPv4 嵌入 IPv6 格式中,即用 IPv6 格式表示的 IPv4 地址,此时可以采用一种混合符号,前边 96 为 ::ffff,后边 32 位为 IPv4 地址的值,用点分四段方式表示,例如,IPv6 地址 ::ffff:10.0.0.1 表示 IPv4 地址 10.0.0.1这被称为 IPv4 映射的 IPv6 地址(IPv4-mapped IPv6 address)
  4. IPv6 的低 32 位可以被写为点分四段符号,如:IPv6 地址 ::0102:f001 可以被写为:::1.2.240.1,这被称为 IPv4 兼容的 IPv6 地址,注意,IPv4 兼容的 IPv6 地址与 IPv4 映射的 IPv6 地址是不一样的,IPv4 兼容的 IPv6 地址的兼容性,只是说它们能够用一种与 IPv4 地址相似方式进行书写或被软件操作,这种类型的地址最初是为了满足从 IPv4 到 IPv6 的过度计划的需要,如今已经不再使用 [RFC4291]
    image
    表 2-2
    一些 IPv6 地址的例子与它们的二进制表示

在某些情况下(如:表示包含 IP 地址的 URL 时)
IPv6 中的冒号定界符可能会与其它分隔符产生混淆(如 IP 地址与端口号之间的冒号)
在这种情况下,可以使用中括号 [ 与 ] 将 IPv6 地址括起来
如 URL:http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/
表示 IPv6 主机 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 的 443 端口,使用了 HTTP/TCP/IPv6 协议

[RFC4291] 的灵活性会导致不必要的混淆,因为它让一个 IPv6 地址有多种表示方式

  1. 为了对这种情况进行补救,[RFC5952] 利用一些规则来减小选择的范围,同时又与 [RFC4291] 兼容:开头的零必须省略(如:2001:0db8::0022 变为 2001:db8::22)
  2. :: 结构必须效果最大化,即必须代表最多的连续零,且如果只有 16 位零则不允许使用如果多个连续块包含同样多的零,那么应该在第一次出现的连续零处使用 ::
  3. 十六进制数字 a 到 f 应该使用小写字母

基本的地址结构

IPv4 有 4,294,967,296 个可能的地址,IPv6 有 340,282,366,920,938,463,463,374,607,431,768,211,456
IP 地址被按照类型与数量分组
大多数 IPv4 地址分组可以继续划分为单个地址,用于识别连入互联网或某些专用内联网的计算机上的单个网络接口
这些对应单个网络接口的地址被称为单播(unicast)地址
大多数 IPv4 地址空间都是单播地址空间
大多数 IPv6 地址空间目前还没有被使用
除了单播地址,其它类型的地址还包括广播、组播、任播,它们都指向超过一个的网络接口,以及一些特殊用途的地址

分类寻址

在最初定义互联网地址结构的时候
每个单播 IP 地址都有一个网络(network)部分和一个主机(host)部分
网络部分用于识别其所在网络,主机部分用于识别其网络部分对应的网络中的某个特定的主机
因此,地址中的某些连续的位被称作网络号(net number),剩下的位被称为主机号(host number)
当时,大多数主机只有一个网络接口
因此在一些以前的文献中,接口地址(interface address)与主机地址(host address)可以互换

当意识到不同的网络可能会有不同的主机数量,并且每个主机需要一个唯一的 IP 地址之后
人们想出了一个划分地址的方式,根据当时以及未来计划使用的主机数量,为不同的站点分配不同大小的 IP 地址空间
地址空间被划分为了五类(class)
如图 2-1,每类地址以不同的比例将一个 32 位的 IPv4 地址分为两部分:固定的位数表示网络号,剩下的位数表示主机号
image
图 2-1
IPv4 地址空间最初被分为 5 类
A、B、C 类为互联网接口分配地址(单播地址),以及用作一些特殊用途
前几位用来表示地址分类:0 代表 A 类, 10 代表 B 类, 110 代表 C 类,以此类推
D 类地址用于组播(见第 9 章),E 类地址被保留(暂时没用)

可以看到,地址被分为 A、B、C、D、E 五类
A、B、C 类地址空间用来表示单播地址
表 2-3 展示了各类地址的结构,有时被称为 classful addressing 结构
image
表 2-3
最初的(“classful”)IPv4 地址空间划分
表 2-3 展示了分类地址结构主要是如何为拥有不同数量用户的集合分配单播地址的
地址分类划分是在网络数量与某个网络中的主机数量之间进行权衡
如,一个被分配了 A 类网络号 18.0.0.0(MIT)的站点拥有 2^24 个可分配给主机的地址(即:IPv4 地址范围 18.0.0.0 – 18.255.255.255)
但整个互联网只能拥有 127 个 A 类网络
一个被分配了 C 类网络号的站点,如 192.125.3.0,每个网络只能分配 256 个主机(即:192.125.3.0 – 192.125.3.255)
但可以使用超过两百万个的 C 类网络号
上边提到的数量与实际情况有一些差异
一些单播地址一般无法获得,特别是地址范围中第一个和最后一个地址通常都是不可用的
例如上边的例子中,被分配 18.0.0.0 的站点,实际只能分配 2^24 - 2 = 16,777,214 个单播 IP 地址

互联网发展的前十年(到二十世纪八十年代初),地址分类的方法大部分都保留了下来
后来人们渐渐开始意识到了它的扩展性问题
每次要向互联网中加入一个新的网段时,都中心化地协调分配一个新的 A、B 或 C 类网络号变得越来越不方便
而且,分配 A 类和 B 类的网络号,会浪费非常多的主机号
而分配 C 类网络号对许多站点来说又无法提供足够多的主机

子网寻址

Internet发展遇到一个困难就是很难接入Internet的新网段分配一个新的网络号。为了解决这个问题,在一个站点接入Internet后为其分配一个网络号,然后由站点管理员进一步划分本地的子网数。
实现这个想法需要改变一个IP地址的网络部分和主机部分的限制,但这样做只是针对一个站点自身而言;Internet其余部分将只能“看到”传统的A类,B类和C类部分。支持此功能的方法称为子网寻址 。通过子网寻址,一个站点被分配一个A类,B类或C类的网络号,保留一些剩余主机号进一步用于站点内分配。从本质上来说,子网寻址为IP地址结构增加了一个额外部分,但它没有为地址增加长度。
子网寻址提供额外;灵活性的代价是增加成本。由于当前的子网字段和主机字段的定义是由站点指定的,一个站点中所有路由器和主机需要一种新的方式,以确定地址中的子网部分和其中的主机部分。
image

图2-2是一个B类地址被“划分子网”的例子。假设Internet中的一个站点已被分配一个B类网络号。改站点将每个地址的前16位固定为某些特定号码,这是由于这些位已被分配给核心机构。后16位现在可以由站点的网络管理员按需分配。在这个例子中,8位被选定为子网号,剩下8位为主机号。这个特殊配置允许站点支持256个子网,每个子网最多可包含254台主机。
image
本图显示了一个虚拟的站点,使用一个边界路由器连接Internet和两个内部局域网。x的值可以是在[0,255]范围内的任意值。每个意外网是一个IPv4子网,整体分配为B类地址的网络号128.32。Inter中的其他站点要访问这个站点,目的地址以128.32开始的所有流量直接由Internet路由系统交给边界路由器。

子网掩码

子网掩码是由一台主机或者路由器使用的分配为,以确定如何从一台主机对应IP地址中获得网络和子网信息。IP子网掩码与对应的IP地址长度相同(IPv4为32位,IPv6位129位)他们通常在一台主机或路由器中已IP地址相同的方式配置,既可以是静态的,也可以使用一些动态方式,例如动态主机配置协议。

可变长度子网掩码

目前,大多数主机,路由器和路由协议支持可变长度子网掩码。
image
图2-5显示的更复杂的例子中,三个不同的子网掩码被用于站点中的子网128.32.0.0/16,/24,/25和/26。

广播地址

每个IPv4子网中,一个特殊地址被保留作为子网广播地址。子网广播地址通过将IPv4地址的网络/子网部分设置为适当值,以及主机部分的所有位置为1而形成。子网广播地址的构建方式:对子网掩码取反,并与子网中任意计算机的地址进行按位或运算。
image

IPv6地址和接口标识符

IPv6使用特殊前缀表示一个地址范围。一个IPv6地址范围是指它可用的网络规模。有关范围的重要例子包括节点本地,链路本地或全球性。在IPv6中,大部分节点通常在同一网络接口上使用多个地址。
链路本地IPv6地址使用接口标识符作为一个单播IPv6地址的分配基础。除了地址是以二进制000开始之外,IID的长度通常是64位,并直接由一个网络接口相关的链路层MAC地址形成,该地址使用修改的EUI-64格式,或者由其他进程随机提供的值形成,以提供可防范地址跟踪的某种程度的隐私保护。
在IEEE标准中,EUI表示扩展唯一标识符。

CIDR和聚合

20世纪90年代初,Internet开始面临更严重的规模问题。有三个问题很重要

  1. 到1994年,一半以上的B类地址已被分配。
  2. 32位的IPv4地址呗认为不足以应付Internet在21世纪出的预期规模。
  3. 全球性路由表的条目数,1995年大约为65000个条目,目前仍在增长中。随着越来越多A类,B类和C类路由条目出现,路由性能将受到影响。

前缀

为了帮助缓解IPv4的压力,分类寻址方案通常使用一个类似VLSM的方案,扩展Internet路由系统以支持无类别域间路由。使用CIDR,未经过预定义的任何地址范围可作为一个类的一部分,但需要一个类似于子网掩码的掩码,有时也称为CIDR掩码。
消除一个IP地址中网络和主机号的预定义分隔,将使更细粒度的IP地址分配范围成为可能。与分类寻址类似,地址空间分割成块最容易通过数值连续的地址来实现,以便用于某种类型或某些特殊用途。
image

聚合

通过取消分类结构的IP地址,能分配各种尺寸的IP地址块。
在Internet环境中,可采用分层路由思想以一种特定方式减少Internet路由条目数。这通过一个称为路由聚合的过程来实现。通过将相邻的多个IP前缀合并成一个短前缀,可以覆盖更多地址空间。
image

特殊用途地址

IPv4和IPv6地址空间中都包括几个地址范围,他们被用于特殊用途。
image

IPv4/IPv6地址转换

在有些网络中,可能需要IPv4和IPv6之间转换。目前,已制定了一个用于单播转换的框架[RFC6144],以及一个长在开发的用于组播转换的方案[IDv 4v6mc]。一个基本功能是提供自动,基于算法的地址转换。
该方案使用一种特殊地址格式,称为嵌入IPv4的IPv6地址。这种地址在IPv6地址内部包含IPv4地址。它可采用6中格式之一来编码,IPv6前缀长度必须是下列数值之一:32,40,48,56,64或者96。
image

组播地址

IPv4和IPv6支持组播寻址。一个IP组播地址表示一组主机接口,而不是单个接口。一个组可以跨越整个Internet。一个组所覆盖的网络部分称为组的范围。常见的范围包括节点本地,链路本地,站点本地,全球和管理。管理范围的地址可用于一个网络区域内已手动配置到的路由器的地址。站点管理员可将路由器配置为管理范围边界,这意味着相关组的组播流量不会被路由器转发。

IPv4组播地址

对于IPv4,D类空间(224.0.0.0~239.255.255.255)已被保留支持组播。28位空闲一位置可提供\(2^{28}=268435456\)个主机组 。
这个地址空间被分为几个主要部分,它建立在对路由分配和处理的基础上[IP4MA]。
image
image
到244.255.255.255的地址块被分配给某些应用协议或组织使用。
image

IPv6组播

对于IPv6,对组播的使用相当积极,前缀ff00::/8已被预留给组播地址,并且112位可用于保存组号,可提供的组数为\(2^{112}=519229685853482762853049632920096\)。其一般格式如下:
image
IPv6组播地址的第二字节包含一个4位标志字段和一个4位范围ID字段。
image
很多IPv6组播地址由IANA分配为永久使用,并且估计跨越多个地址范围。
image
IPv6保留地址
image

任播地址

任播地址是一个单播IPv4或IPv6,这些地址根据它所在的网络确定不同的主机。这是通过配置路由器通知Internet中多个站点有相同单播路由来实现。
因此,一个任播地址不是指Internet中的一台主机,而是对于任播地址“最合适”或者“最接近”的一台主机。

分配

IP地址空间通常被分配为大的块,这由一些分层次组织的权威机构完成。

单播

对于IPv4和IPv6的地址空间IANA将分配权限主要委托给几个地区性Internet注册机构(RIR)。RIR之间通过一个组织互相协作,即2003年创建的号码资源组织(NRO)。
image

组播

在IPv4和IPv6中,组播地址可根据其范围来描述,他们需要确定组播方式(静态,动态的协议和算法),以及是否使用ASM或SSM。这些组的分配策略已被制定。

单播地址分配

一个站点分配了单播IP地址范围后-通常是从自己的ISP处获得,站点或网络管理员需要决定如何为每个网络接口指定地址,以及如何建立子网结构。如果这个站点只有一个物理网段,这个过程相对简单。

单个供应商/无网络/单个地址

目前我们可获得的最简单的Internet服务是由ISP提供一个在一台计算机上使用的IP地址。
为了在Linux上查看一台主机使用的组播地址,我们可以使用ifconfig和netstat命令查看正在使用的IP地址和组:
image

单个供应商/单个网络/单个地址

很多拥有多态计算机的Internet用户发现,只有一台计算机连接到Internet并不是理想情况。因此,他们通常有用家庭局域网或无线局域网,并使用一台路由器或主机作为路由器连接Internet。这种配置与单个计算机的情况相似,除了路由器将分组从家庭网络转发到ISP,它们也执行NAT,在于ISP通信时重写分组中的IP地址。从ISP的角度来看,只有一个IP地址被使用。

单个供应商/多个网络/多个地址

很多组织发现仅分配一个淡泊地址,特别是当它只是暂时分配时,通常无法满足自己的上网需求。对于运行Internet服务器的组织,通常希望拥有一个固定的IP地址。
image

多个供应商/多个网络/多个地址(多宿主)

对于一些依赖Internet接入来保证持续运营的组织,他们通常使用一个以上的供应商,以便在失效时或其他情况下提供冗余连接。由于CIDR,只有一个ISP组织通常拥有与该ISP相关联的PA地址。如果他们又使用一个ISP,这样会出现每个主机使用哪个IP地址的问题。目前,已针对多个ISP同时运行的方法,以及在ISP之间转换的指导原则。
image

与IP地址相关的攻击

IP地址基本上都是数字,只有少数网络攻击涉及它们。一般情况下,执行攻击可发送“欺骗”数据包或其他相关活动。

posted @ 2022-11-18 09:43  无序  阅读(251)  评论(0编辑  收藏  举报