1. IP地址的表示
目前IP地址表示有两种,IPv4以及IPv6。
1.1 IPv4表示
IPv4通常采用点分十进制表示,代表一个32位非负整数,下图是一些示例。
1.2 IPv6表示
IPv6地址长度2位128位,传统表示方法是采用称为块或字段的四个十六进制数,块之间使用冒号分隔,例如5f05:2000:80ad:5800:0058:0808:2023:1d71。
下图是一些示例:
从上图可以看出,IPv6地址存在简化表示法,其原则如下(详细见【RFC4291】):
- 一个块中前导的零不必书写。比如前面的例子中,地址可写为5f05:2000:80ad:5800:58:808:2023:1d71。
- 全零的块可以省略,并用符号::代替。例如,IPv6地址0:0:0:0:0:0:0:1可简写为::1。同样,地址2001:0db8:0:0:0:0:0:2,可简写为2001:db8::2。一个IPv6地址中符号::只能使用一次。
- IPv6格式中嵌入IPv4地址可使用混合符号形式,紧接着IPv4部分的地址块的值为ffff,地址的其余部分使用点分十进制格式。例如,IPv6地址::ffff:10.0.0.1可表示IPV4地址10.0.0.1。
- IPv6地址的低32位通常采用点分十进制表示法。因此,IPv6地址::0102:f001相当于地址::1.2.240.1。
在某些情况下(例如表示一个包含地址的URL时),IPv6地址中的冒号分隔符可能与其他分隔符混淆,例如IP地址和端口号之间使用冒号。在这种情况下,用括号字符[]包围IPv6地址。
例如,URL
https://[2001:db8:85a3:8d3:1319:8a2e:370:7344]:443/
是指IPv6主机2001:db8:85a3:8d3:1319:8a2e:370:7344中的端口号443使用https、tcp和IPv6协议。
2. IP地址分类
IP地址可以根据类型和大小分组,比如单播、组播、广播地址以及任播。
单播:有具体目标地址的帧从源到达目标地址的过程。比如你对张三汉“张三”,那么只有张三应答你。
组播:就是帧送往定义在一组内的地址。比如你喊:“年龄15岁的都过来一人发一百块钱”。那么15岁的都会过来,其他年龄的就不会过来。
广播: 就是把帧发往所有能到达的地址。比如你在学校的广播喊“今天放假”。那么全校的都会很高兴。
任播: IPv6中保留地址,指定给一个或多个可能属于不同物理层节点的网络接口。其属性为发送到任播地址的数据分组会按照路由选择协议的距离方法,被路由选择到有该地址的最近接口。
2.1 分类寻址
每个单播IP地址都有一个网络部分,用于识别接口使用的IP地址在哪个网络中可以被发现;以及一个主机地址,用于识别由网络部分给出的网络中的特定主机。因此,地址中的一些连续位
称为网络号,其余位称为主机号。下图显示了这个基本思路(IPv4)。
IPv4地址空间最初分为五大类。A、B、C类用于Internet(单播地址)中接口分配地址,以及其他一些特殊情况下使用。
类由地址的头几位来定义:0为A类、10为B类、110为C类等。D类地址组播、E类地址保留。
下图为最初(”分类“)的IPv4地址空间划分表。
从上表可以看出一些问题,整个Internet中只有127个A类网络,C类网络(比如192.125.3.0)只能容纳256台主机。也就是说A类和B类网络号
通常会浪费太多主机号,而C类网络号不能为很多站点提供足够的主机号。
2.2 子网寻址
随着Internet发展,人们首先遇到一个困难,那就是很难为接入Internet的新网段分配一个新的网络号,尤其是随着局域网(LAN)发展和增加,该问题
变的更加棘手。为了解决这个问题,人们想到了一个办法,在一个站点接入Internet后为其分配一个网络号,然后由站点管理员进一步划分本地的子网数,
同时不改变Internet核心路由基础设施。支持该功能的方法就是子网寻址,下图是一个使用子网寻址的例子(IPv4)。
一个B类地址被划分子网的地址。它使用8位作为子网ID,提供256个子网和每个子网中254台主机。这种划分可由网络管理员改变。下图是一个子网寻址如何工作的图示。
某个站点被分配一个典型的B类网络号128.32。网络管理员决定用于站点范围内的子网掩码为255.255.255.0,提供256个子网,每个子网可
容纳256 - 2 = 254台主机。同一子网中每台主机的IPv4地址拥有相同的子网号。左侧的据网段的IPv4地址开始于128.32.1,右侧的所有主机开始
于128.32.2。
Internet中的其他站点要访问这个站点,目的地址以128.32开始的所有流量直接由Internet路由系统交给边界路由器(特别是其接口的IPv4地址
137.164.23.30)。在这个站点上,边界路由器必须区分128.32网络中的不同子网。特别是,它必须能够区分和分离目的地址128.32.1.x和128.32.2.x
的流量。这些地址分别表示子网号1和2,它们都采用128.32的B类网络号。
2.3 子网掩码
子网掩码是由一台主机或路由器使用的分配位,以确定如何从一台主机对应IP地址中获得网络和子网信息。IP子网掩码与对应IP地址长度相
同(IPv4为32位,IPv6为128位)。它们通常在一台主机或路由器中以IP地址相同的方式配置,既可以是静态的(通常是路由器),也可以使用
一些动态方式,例如动态主机配置协议(DHCP)。对于IPv4,子网掩码可以IPv4d点分十进制编写。子网掩码以一些1后跟一些0构成,下表给出
一些示例。
下表为IPv6的一些列子。
掩码由路由和主机使用,以确定一个IP地址的网络/子网部分的结束和主机部分的开始。子网掩码中的一位设为1表示IP地址
的对应位与一个地址的网络/子网部分的对应位相结合,并将结果作为转发数据报的接触。相反,子网掩码中的一位设为0,表示
一个IP地址的对应位作为主机ID的一部分。例如,当子网掩码为255.255.255.0时,如何处理IPv4地址128.32.1.14。
一个IP地址可以与一个子网掩码使用按位与操作,以形成用于路由的地址的网络/子网标识符(前缀)。在这个例子中,
IPv4地址128.32.1.14使用长度为24的掩码得到前缀128.32.1.0/24。
子网掩码纯粹时站点内部的局部问题,Internet路由系统其余部分不需要子网掩码的只是,因为站点之外的路由器做出路由决策
只基于地址的网络号部分,并不需要网络/子网或主机部分。
2.4 可变长度子网掩码(VLSM)
不同长度的子网掩码可应用于相同网络号,虽然增加 地址配置管理的复杂性,但提高了子网结构的灵活性,不同的子网可容纳不同数量的主机。
下图所示的网络拓扑,它使用VLSM为之前的子网寻址扩展了两个额外的子网。
上图中,三个不同的子网掩码被用于站点中的子网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前往
或来自外部站点。
2.5 广播地址
在每个IPv4子网中,一个特殊地址被保留作为子网广播地址。子网广播地址由首先子网掩码取反,然后与IPv4地址进行按位或运算的结果。
如下图所示:
上图演示了广播地址的计算过程,其中子网是128.32.1.0/24,IP地址为128.32.1.14,掩码取反后与IPv4地址按位或运算
得到广播地址128.32.1.255。
使用广播地址作为目的地的地址,也被称为定向广播。至少在理论上,这种广播可作为一个单独的数据报通过Internet路由
直至到达目标子网,再作为一组广播数据报发送给子网中所有主机。
定向广播是一个大问题,从安全的角度来看,它们至今在Internet中仍被禁用。现代路由器默认禁止转发定向广播,甚至完全
不支持该功能。
除了子网广播地址,特殊用途地址255.255.255.255被保留为本地网络地址(也称为有限广播),它根本被会被路由转发。
IPv6没有任何广播地址,而IPv6仅使用组播。