IPv4
1.什么是IPv4
IPv4是英文Internet Protocol version 4的缩写,中文名为互联网协议版本4。IPv4是互联网协议开发过程中的第四个修订版本(网际网协四版),也是此协议第一个被广泛部署的版本。
IPv4是一种无连接的协议,操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付分组,意即它不保证任何分组均能送达目的地,也不保证所有分组均按照正确的顺序无重复地到达。这些方面是由上层的传输协议(如传输控制协议)处理的。
IPv4与IPv6均是标准化互联网络的核心部分。IPv4依然是使用最广泛的互联网协议版本,直到2011年,IPv6仍处在部署的初期。
IPv4在IETF于1981年9月发布的RFC 791中被描述,此RFC替换了于1980年1月发布的RFC 760。
2.IPv4协议结构
Version - 4位字段,指出当前使用的 IP 版本。
IP Header Length (IHL) ─ 指数据报协议头长度,具有32位字长。指向数据起点。正确协议头最小值为5。
Type-of-Service ─ 指出上层协议对处理当前数据报所期望的服务质量,并对数据报按照重要性级别进行分配。这些8位字段用于分配优先级、延迟、吞吐量以及可靠性。(即TOS)
Total Length ─ 指定整个 IP 数据包的字节长度,包括数据和协议头。其最大值为65,535字节。典型的主机可以接收576字节的数据报。
Identification ─ 包含一个整数,用于识别当前数据报。该字段由发送端分配帮助接收端集中数据报分片。
Flags ─ 由3位字段构成,其中低两位(最不重要)控制分片。中间位(DF)指出数据包是否可进行分片。低位(MF)指出在一系列分片数据包中数据包是否是最后的分片。第三位即最高位不使用。
Fragment Offset ─ 13位字段,指出与源数据报的起始端相关的分片数据位置,支持目标IP适当重建源数据报。
Time-to-Live ─ 是一种计数器,在丢弃数据报的每个点值依次减1直至减少为0。这样确保数据包无止境的环路过程(即TTL)。
Protocol ─ 指出在 IP 处理过程完成之后,有哪种上层协议接收导入数据包。
Header Checksum ─ 帮助确保 IP 协议头的完整性。由于某些协议头字段的改变,如生存期(Time to Live),这就需要对每个点重新计算和检验。Internet 协议头需要进行处理。
Source Address ─ 源主机IP地址。
Destination Address ─ 目标主机IP地址。
Options ─ 允许 IP 支持各种选项,如安全性。
Data ─ 包括上层信息。
3.IPv4地址
IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(232)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约18百万个地址)和多播地址(约270百万个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管理机构之后,IANA的主要地址池空了。
这些限制刺激了仍在开发早期的IPv6的部署,这也是唯一的长期解决方案。
1.地址格式
IPv4地址可被写作任何表示一个32位整数值的形式,但为了方便人类,它通常被写作点分十进制的形式,即四个字节被分开用十进制写出,中间用点分隔。
下表展示了几种不同的格式:
格式 | 值 | 从点分十进制转换 |
点分十进制 | 192.0.2.235 | 不适用 |
点分十六进制 | 0xC0.0x00.0x02.0xEB | 每个字节被单独转换为十六进制 |
点分八进制 | 0300.0000.0002.0353 | 每个字节被单独转换为八进制 |
十六进制 | 0xC00002EB | 将点分十六进制连在一起 |
十进制 | 3221226219 | 用十进制写出的32位整数 |
八进制 | 030000001353 | 用八进制写出的32位整数 |
此外,在点分格式中,每个字节都可用任意的进制表达。如,192.0x00.0002.235是一种合法(但很不常用)的表示。
2.分配
最初,一个IP地址被分成两部分:网络识别码在地址的高位字节中,主机识别码在剩下的部分中。这使得创建最多256个网络成为可能,但很快人们发现这样是不够的。
为了克服这个限制,在随后出现的分类网络中,地址的高位字节被重定义为网络的类(Class)。这个系统定义了五个类别:A、B、C、D和E。A、B和C类有不同的网络类别长度,剩余的部分被用来识别网络内的主机,这就意味着每个网络类别有着不同的给主机编址的能力。D类被用于多播地址,E类被留作将来使用。
在1993年左右,无类别域间路由(CIDR)正式地取代了分类网络,后者也因此被称为“有类别”的。
CIDR被设计为可以重新划分地址空间,因此小的或大的地址块均可以分配给用户。CIDR创建的分层架构由互联网号码分配局(IANA)和区域互联网注册管理机构(RIR)进行管理,每个RIR均维护着一个公共的WHOIS数据库,以此提供IP地址分配的详情。
3.特殊用途的地址
保留的地址块:
CIDR地址块 | 描述 | 参考资料 |
0.0.0.0/8 | 本网络(仅作为源地址时合法) | RFC 5735 |
10.0.0.0/8 | 专用网络 | RFC 1918 |
127.0.0.0/8 | 环回 | RFC 5735 |
169.254.0.0/16 | 链路本地 | RFC 3927 |
172.16.0.0/12 | 专用网络 | RFC 1918 |
192.0.0.0/24 | 保留(IANA) | RFC 5735 |
192.0.2.0/24 | TEST-NET-1,文档和示例 | RFC 5735 |
192.88.99.0/24 | 6to4中继 | RFC 3068 |
192.168.0.0/16 | 专用网络 | RFC 1918 |
198.18.0.0/15 | 网络基准测试 | RFC 2544 |
198.51.100.0/24 | TEST-NET-2,文档和示例 | RFC 5737 |
203.0.113.0/24 | TEST-NET-3,文档和示例 | RFC 5737 |
224.0.0.0/4 | 多播(之前的D类网络) | RFC 3171 |
240.0.0.0/4 | 保留(之前的E类网络) | RFC 1700 |
255.255.255.255 | 广播 | RFC 919 |
4.专用网络
在IPv4所允许的大约四十亿地址中,三个地址块被保留作专用网络。这些地址块在专用网络之外不可路由,专用网络之内的主机也不能直接与公共网络通信。但通过网络地址转换,他们即能做到后者。
下表展示了三个被保留作专用网络的地址块(RFC 1918):
名字 | 地址范围 | 地址数量 | 有类别的描述 | 最大的CIDR地址块 |
24位块 | 10.0.0.0–10.255.255.255 | 16,777,216 | 一个A类 | 10.0.0.0/8 |
20位块 | 172.16.0.0–172.31.255.255 | 1,048,576 | 连续的16个B类 | 172.16.0.0/12 |
16位块 | 192.168.0.0–192.168.255.255 | 65,536 | 连续的256个C类 | 192.168.0.0/16 |
5.虚拟专用网络
以专用网络地址作目的地址的报文会被所有公共路由器忽略,因此在两个专用网络之间直接通信(如两个分支办公室间)是不可能的。这需要使用IP隧道或虚拟专用网络(VPN)。
VPN在公共网络上创建连接两个专用网络的隧道。在这种功能中,隧道一端的主机将报文封装在一个公共网路上可以接受的协议层中,然后这些报文就可以被送达隧道的另一端,在那里,附加的协议层被去掉,报文也被送达其原定的目的地。
此外,封装过的报文也可能被加密以保证其在公共网络上传输时的安全性。
6.链路本地地址
RFC 5735中将地址块169.254.0.0/16保留为特殊用于链路本地地址,这些地址仅在链路上有效(如一段本地网络或一个端到端连接)。这些地址与专用网络地址一样不可路由,也不可作为公共网络上报文的源或目的地址。链路本地地址主要被用于地址自动配置:当主机不能从DHCP服务器处获得IP地址时,它会用这种方法生成一个。
当这个地址块最初被保留时,地址自动配置尚没有一个标准。为了填补这个空白,微软创建了一种叫自动专用IP寻址(APIPA)的实现。因微软的市场影响力,APIPA已经被部署到了几百万机器上,也因此成为了事实上的工业标准。许多年后,IETF为此定义了一份正式的标准:RFC 3927,命名为“IPv4链路本地地址的动态配置”。
7.环回地址(Loopback Address)
地址块127.0.0.0/8被保留作环回通信用。此范围中的地址绝不应出现在主机之外,发送至此地址的报文被作为同一虚拟网络设备上的入站报文(环回),主要用于检查TCP/IP协议栈是否正确运行和本机对本机的链接。
8.以0或255结尾的地址
一个常见的误解是以0或255结尾的地址永远不能分配给主机:这仅在子网掩码至少24位长度时(旧的C类地址,或CIDR中的/24到/32)才成立。
在有类别的编址中,只有三种可能的子网掩码:A类:255.0.0.0,B类:255.255.0.0,C类:255.255.255.0。如,在子网192.168.5.0/255.255.255.0(即192.168.5.0/24)中,网络识别码192.168.5.0用来表示整个子网,所以它不能用来标识子网上的某个特定主机。
广播地址允许数据包发往子网上的所有设备。一般情况下,广播地址是借由子网掩码的比特补数并和网络识别码运行 OR 的比特运算就能获得,这也就是说,广播地址是子网中的最后一个地址。在上述例子中,广播地址是192.168.5.255,所以为了避免歧义,这个地址也不能被分配给主机。在A、B和C类网络中,广播地址总是以255结尾。
但是,这并不意味着每个以255结尾的地址都不能用做主机地址。比如,在B类子网192.168.0.0/255.255.0.0(即192.168.0.0/16)中,广播地址是192.168.255.255。在这种情况下,尽管可能带来误解,但192.168.1.255、192.168.2.255等地址可以被分配给主机。同理,192.168.0.0作为网络识别码不能被分配,但192.168.1.0、192.168.2.0等都是可以的。
随着CIDR的到来,广播地址不一定总是以255结尾。比如,子网203.0.113.16/28的广播地址是203.0.113.31。
一般情况下,子网的第一个和最后一个地址分别被作为网络识别码和广播地址,任何其它地址都可以被分配给其上的主机。
9.地址解析
互联网上的主机通常被其名字(如zh.wikipedia.org、www.berkeley.edu等)而不是IP地址识别,但IP报文的路由是由IP地址而不是这些名字决定的。这就需要将名字翻译(解析)成地址。
域名系统(DNS)提供了这样一个将名字转换为地址和将地址转换为名字的系统。与CIDR相像,DNS也有一个层级的结构,使不同的名字空间可被再委托给其它DNS服务器。
域名系统经常被描述为电话系统中的黄页:在那里人们可以把名字和电话号码对应起来。
4.IPv4地址空间枯竭
从20世纪80年代起,一个很明显的问题是IPv4地址在以比设计时的预计更快的速度耗尽。这是创建分类网络、无类型域间路由,和最终决定重新设计基于更长地址的互联网协议(IPv6)的诱因。
一些市场力量也加快了IPv4地址的耗尽,如:
互联网用户的急速增长;
总是开着的设备:ADSL调制解调器、缆线调制解调器等;
移动设备:笔记本电脑、PDA、移动电话等。
随着互联网的增长,各种各样的技术随之产生以应对IPv4地址的耗尽,如:
网络地址转换(NAT);
专用网络的使用;
动态主机设置协议(DHCP);
基于名字的虚拟主机;
区域互联网注册管理机构对地址分配的控制;
对互联网初期分配的大地址块的回收。
随着IANA把最后5个地址块分配给5个RIR,其主地址池在2011年2月3日耗尽。许多地址分配和消耗的模型都预测第一个耗尽地址的RIR会在2011年的下半年出现。
广泛被接受且已被标准化的解决方案是迁移至IPv6。IPv6的地址长度从IPv4的32位增长到了128位,以此提供了更好的路由聚合,也为最终用户分配最小为264个主机地址的地址块成为可能。迁移过程正在进行,但其完成仍需要相当的时间。