连接到Internet中的每台设备至少都有一个IP地址,IP地址表示了流量的来源(好比别人要找你玩,需要知道你家的地址;网络中别人需要和你通信,也需要知道IP地址),且Internet中的IP地址必须是唯一的。对于全球性的Internet地址,一个分层结构管理实体帮助用户和服务商来提供分配地址;个人用户通常由Internet服务提供商(ISP)分配地址,通过支付费用来获得地址和执行路由。
IP地址表示
IPv4地址长度32位,通常采用点分四组(点分十进制)表示法,如165.195.130.107。点分四组表示法由四个点分隔的十进制数组成,每个数字是一个非负整数,范围是[0~255]。IP地址的点分四组表示只是简单方式,它也支持二进制来表示,对比如下:
0.0.0.0 00000000 00000000 00000000 00000000
165.195.130.107 10100101 11000011 10000010 01101011
255.255.255.255 11111111 11111111 11111111 11111111
IPv6地址长度是128位,采用冒分十六进制表示法来表示,由冒号来分隔十六进制的块或字段,格式X:X:X:X:X:X:X:X,如
5f05:2000:80ad:5800:0058:0800:2023:1d71
IPv6也有一些已经达到共识的简化表示规则,如下:
· 一个块中前导的零不必书写,如 5f05:2000:80ad:5800:0058:0800:2023:1d71 -> 5f05:2000:80ad:5800:58:800:2023:1d71
· 全零块可以省略,并用::代替(注意:为避免歧义,::在一个IPv6地址中只能使用一次),如 2001:0db8:0000:0000:0000:0302:0003:2020 -> 2001:db8::302:3:2020
· IPv6中嵌入IPv4,格式 X:X:X:X:X:X:d.d.d.d,如 ::ffff:130.113.232.83(IPv6) -> 130.113.232.83(IPv4)
· IPv6的低32位通常采用点分四组表示法,比如::0102:f001相当于::1.2.240.1
在简化过程中需要注意:
· IPv6中的a~f应该小写表示;
· :: 只能用于压缩影响最大的地方(最多零的位置);
· IPv6也可转换为二进制形式,与上述IPv4规则相同(4以点分,6以冒号分)。
IPv6的地址表示在URL中访问应该用 [ ] 符号包围,如: 协议://[X:X:X:X:X:X:X:X]:端口号
IP地址结构
在大量的IP地址情况下,可以方便的将地址空间划分成块,大多数地址块最终又被细分为一个地址,用于识别连接Internet或某些专用的互联网的计算机网络接口,这些地址称为单播地址。除了单播地址以外,还有广播、组播、任播地址以及一些特殊地址。
分类寻址(IPv4)
IPv4地址被分为两个部分:网络部分(网络号),用于识别接口使用的IP地址在哪个网络中可被发现;主机部分(主机号),用于识别由网络部分给出的网络中特定的主机,而通过这种方式的寻址称为分类寻址。
在Internet中,IP地址的划分分为五大类,由地址中的头几位来定义,如下:
类 地址范围 高序位 用途 百分比 网络数 主机数
A 0.0.0.0~127.255.255.255 0 单播/特殊 1/2 128 16777216
B 128.0.0.0~191.255.255.255 10 单播/特殊 1/4 16384 65536
C 192.0.0.0~223.255.255.255 110 单播/特殊 1/8 2097152 256
D 224.0.0.0~239.255.255.255 1110 组播 1/16 N/A N/A
E 240.0.0.0~255.255.255.255 1111 保留 1/16 N/A N/A
子网寻址(IPv4)
上述的分类寻址的范围(如A类B类的主机号空间)依然很大,为了进一步的缩小IP地址查找的范围,子网寻址允许将地址分类后的主机号再分为子网(某类地址可分为多个子网)号和主机号(子网中的主机地址)两个部分。
子网寻址提供额外的灵活性的代价是增加成本,子网和主机字段由站点指定,一个站点中所有路由器和主机需要一种方式来确定地址中的子网部分和主机部分。除网络号外,之后的8位作为子网号,提供256个子网和每个子网中254台主机。
格式大致如下(以B类为例):
比如上图中,B类网络的后16位为子网(站点)的管理员按需分配,8位子网号,8位主机号,允许256个子网,每个子网又包含254个主机地址(第一个和最后一个规定使用)。
子网的大致应用如下图:
来自Internet的流量想要与子网内某个主机通信,首先得经过站点边界路由器,因为该站点边界路由器内包含着站点内子网的分配信息,也包含了由Internet集中分配的网络号。
子网掩码、可变长度子网掩码(IPv4)
子网掩码是主机或路由器使用的分配位,以确定如何从一台主机对应的IP地址中获得网络号和子网信息,子网掩码一旦设置,网络地址和主机地址就固定了。
IP地址的点分四组表示只是简单方式,它也支持二进制来表示。
IP 137.12.2.120
掩码 255.255.255.240
# 转换为二进制计算
10001001 00001100 00000010 01111000 IP
11111111 11111111 11111111 11110000 掩码
10001001 00001100 00000010 01110000 结果
结果转换后得出子网:137.12.2.112(/28),每个网段含1+2+4+8=15台主机。
通过上面的子网掩码将一个分配给站点的网络号进一步细分为多个可分配的大小相同的子网。接下来将通过同一站点的不同部分设置不同长度的子网掩码来提高子网结构的灵活性,同时也增加了管理的复杂性。这便是可变长度子网掩码。
不同的子网掩码被用于站点中的子网128.32.0.0/16: /24、/25、/26。每个子网可提供不同数量的主机: /24前缀的允许有256位;/25前缀的允许有128台;/26前缀的允许有64台。
广播地址(IPv4)
在每个子网中,一个特殊的地址被保留作为子网的广播地址,子网广播地址由子网掩码首先取反,然后与IPv4地址进行`或`运算构建而成,除了子网广播地址,特殊用途地址255.255.255.255被保留为本地网络广播。
如上述的子网137.12.2.112(/28),则广播地址计算为:
10001001 00001100 00000010 01111000 IP
00000000 00000000 00000000 00001111 掩码
10001001 00001100 00000010 01111111 结果
结果转换后得出广播地址:137.12.2.127。
广播用于同时向所在子网中所有主机发生数据报,广播地址可用于IPv4中,IPv6仅使用组播地址。
IPv6地址、接口标识符
IPv6地址使用特殊前缀表示一个地址范围。
一个IPv6地址范围是指它可用的网络规模,有关范围的重要例子包括节点本地(只用于同一计算机中通信)、链路本地(只用于同一网络链路或IPv6前缀中的节点)或全球性(Internet范围)。在IPv6中,无论是单播地址还是组播地址,都需要明确指出地址的有效范围。
链路本地IPv6地址(和一些全球性IPv6地址)使用接口标识符(IID)作为一个单播IPv6地址的分配基础。IID作为IPv6地址的低序位长度为64位,直接由一个网络接日相关的链路层MAC地址形成。
在IEEE标准中, EUI表示扩展唯一标识符。EU1-64标识符开始于一个24位的组织唯一标识符(OUI),接着是一个由组织分配的40位扩展标识符,它由前面24位识别。OUI的长度是24位,并占据EU1-48和EU1-64地址的前3个字节。这些地址的第一个字节的低两位分别是u位和g位。当u位被设置时,表示该地址是本地管理;当g位被设置时,表示该地址是一组或组播类型的地址。
当一个IPv6接口标识符需要一种接口,并且该接口没有由制造商提供EUI-48地址,但是有其他类型的基本地址时(例如AppleTalk),基本地址可用0从左侧填充形成接口标识符。
CIDR
CIDR-无类别域间路由一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法,CIDR是基于前缀的,用于解释IP地址的标准。在IPv4中前缀范围0~32;IPv6中前缀范围0~128,前缀越短就能匹配越多的地址,越长就匹配得越少,前缀带来的好处是可能更细粒度的分配IP地址范围。
使用CIDR,未经过预定义的任何地址范围可作为一个类的一部分,但需要一个类似于子网掩码的掩码(CIDR掩码)。由于CIDR掩码不再局限于一个站点,而是针对全球路由系统,所以核心Internet路由器必须能够解释和处理掩码。
CIDR的另一个好处就是可以进行前缀路由聚合,路由分层的思想便是通过路由聚合的过程来实现,这样能够在达到通信最短路径的同时又有效的控制路由表的条目数。
例如,16个原来的C类(/24)网络现在可以聚合在一起,对外显示了一个/20的网络了(如果这些网络的的地址前20位都相同)。两个对齐的/20网络又可进一步聚合为/19,依此类推。这有效地减少了要对外显示的网络数,防止了`路由表爆炸`。
特殊用途地址
IPv4特殊地址表
前缀 特殊用途、参考文献
0.0.0.0/8 本地网络中的主机,仅作为源IP地址使用[RFC1122]
10.0.0.0/8 专用网络(内联网)的地址。这种地址不会出现在公共Internet中[RFC1918]
127.0.0.0/8 Internet主机回送地址(同一计算机),通常只用127.0.0.1[RFC1122]
169.254.0.0/16 “链路本地”地址,只用于一条链路,通常自动分配[RFC3927]
172.16.0.0/12 专用网络(内联网)的地址[RFC1918]
192.0.0.0/24 IETF协议分配(IANA保留)[RFC5736]
192.0.2.0/24 批准用于文档中的TEST-NET-1地址[RFC5737]
192.88.99.0/24 用于6to4中继(任播地址)[RFC3068]
192.168.0.0/16 专用网络(内联网)的地址[RFC1918]
198.18.0.0/15 用于基准和性能测试[RFC2544]
198.51.100.0/24 TEST-NET-2地址[RFC5737]
203.0.113.0/24 TEST-NET-3地址[RFC5737]
224.0.0.0/4 IPv4组播地址(D类),仅作为目的IP地址使用[RFC5771]
240.0.0.0/4 保留空间(E类),除255.255.255.255[RFC1122]
255.255.255.255/32 本地网络(受限的)广播地址[RFC0919][RFC0922]
IPv6特殊地址表
前缀 特殊用途、参考文献
::/0 默认路由条目,不用于寻址[RFC5156]
::/128 未指定地址,可作为源IP地址使用[RFC4291]
::1/128 IPv6主机回送地址,不用于发送出本地主机的数据报中[RFC4291]
::ffff:0:0/96 IPv4映射地址,不出现在分组头部,只用于内部主机[RFC4291]
::{ipv4-address}/96 IPv4兼容地址,已过时,未使用[RFC4291]
2001::/32 Teredo地址[RFC4380]
2001:10::/28 ORCHI 覆盖可路由加密散列标识符[RFC4843]
2001:db8::/32 用于文档和实例的地址范围[RFC3849]
2002::/16 6to4隧道中继的6to4地址[RFC3056]
3ffe::/16 用于6bone实验,已过时,未使用[RFC3701]
5f00::/16 用于6bone实验,已过时,未使用[RFC3701]
fc00::/7 唯一的本地单播地址,不用于全球性的Internet[RFC4193]
fe80::/10 链路本地单播地址[RFC4291]
Ff00::/8 IPv6组播地址,仅作为目的IP地址使用[RFC4291]
IPv4和IPv6之间的转换使用一种被称为"嵌入IPv4的IPv6地址"方法。该方法规则如下图:
IP地址分配
IP地址空间通常被分配为大的块,这由一些分层次组织的权威机构完成。对于单播IPv4和IPv6的地址空间,IANA将分配权限主要委托给几个地区性Internet注册机构(RIR)。RIR之间通过一个组织互相协作,即2003年创建的号码资源组织(NRO)[NRO]。
加入NRO的地区性Internet注册机构:
· AfriNIC - 非洲网络信息中心 (http://www.afrinic.net)
· APNIC - 亚洲太平洋地区网络信息中心 (http://www.apnic.net)
· ARIN - 美洲Internet号码注册机构 (http://www.arin.net)
· LACNIC - 拉丁美洲和加勒比地区的IP地址注册 (http://lacnic.net/en/index.html)
· RIPE NCC - 欧洲网络协调中心 (http://www.ripe.net)
以上机构为对于地区的国家运营的小型注册机构和大型ISP分配地址空间,然后ISP又向客户提供地址空间。
PA - 供应商聚合地址空间,用户登记Internet服务时,他们通常以地址前缀形式使用ISP地址空间的一部分(通常很小),它们包含一个或多个前缀,并可与ISP的其他前缀实现聚合。
PI - 应商独立地址空间,从PI空间分配的地址可以直接分配给用户,并且可以由任何ISP来使用。它们不能聚合。
小结
IP地址用于识别和定位整个Internet系统(单播地址)中设备的网络接口,也用于识别多个接口(组播、广播或任播地址)。
IPv4和IPv6都支持同时指向多个网络接口的地址格式。IPv4支持广播地址和组播地址;IPv6只支持组播地址。
IDR的开发和部署是Internet核心路由系统的一个根本性变化。CIDR成功地为分配地址空间提供更多灵活性,并通过聚合提升路由的可扩展性。
参考:
《TCP IP 详解卷1:协议》