Loading AI tools
网际协议的第4版 来自维基百科,自由的百科全书
网际协议版本4(英语:Internet Protocol version 4,缩写:IPv4,又称网际网路通讯协定第四版)是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署和使用的版本。其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。
IPv4在IETF于1981年9月发布的 RFC 791 中被描述,此RFC替换了于1980年1月发布的 RFC 760。
IPv4是一种无连接的协议,操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付数据包,意即它不保证任何数据包均能送达目的地,也不保证所有数据包均按照正确的顺序无重复地到达。这些方面是由上层的传输协议(如传输控制协议)处理的。
IPv4使用32位(4字节)地址,因此地址空间中只有约四十亿(4,294,967,296,232)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管理机构之后,IANA的主要地址池已经用尽。
这些限制刺激了仍在开发早期的作为目前唯一的长期解决方案的IPv6的部署。
IPv4地址可被写作任何表示一个32位整数值的形式,但为了方便人类阅读和分析[1],它通常被写作点分十进制的形式,即四个字节被分开用十进制写出,中间用点分隔。
下表展示了几种不同的格式:
此外,在点分格式中,每个字节都可用任意的进制表达。如,192.0x00.0002.235是一种合法(但不常用)的表示。点分格式也支持零省略的写法,例如127.1..1等同于127.1.0.1。
描述 | A类IPv4地址 | B类IPv4地址 | C类IPv4地址 | D类IPv4地址 | E类IPv4地址 |
---|---|---|---|---|---|
网络标志位 | 0 | 10 | 110 | 1110 | 1111 |
IP地址范围 | 0.0.0.0~127.255.255.255 | 128.0.0.0~191.255.255.255 | 192.0.0.0~223.255.255.255 | 224.0.0.0~239.255.255.255 | 240.0.0.0~255.255.255.255 |
可用IP地址范围 | 1.0.0.1~127.255.255.254 | 128.0.0.1~191.255.255.254 | 192.0.0.1~223.255.255.254 | ||
是否可以分配给主机使用 | 是 | 是 | 是 | 否 | 否 |
网络数量(个) | 126 (27-2) | 16384 (214) | 2097152 (221) | --- | --- |
每个网络中可容纳主机数(个) | 16777214 (224-2) | 65534 (216-2) | 254 (28-2) | --- | --- |
适用范围 | 大量主机的大型网络 | 中等规模主机数的网络 | 小型局域网 | 留给Internet体系结构委员会(IAB)使用
多播地址 |
保留,仅作为搜索、Internet的实验和开发用 |
备注 | 0.0.0.0为特殊地址,表示本网主机 | 255.255.255.255为特殊地址,用于定向广播 |
说明:D类与E类IPv4地址不区分网络地址与主机地址
网络号 | 主机号 | 是否可以作为源地址 | 是否可以作为目的地址 | 备注/描述 |
---|---|---|---|---|
全为0 | 全为0 | 允许 | 禁止 | 表示本网主机 |
全为0 | Host ID | 允许 | 禁止 | 表示特定主机 |
全为1 | 全为1 | 禁止 | 允许 | 定向广播地址 |
127 | 任意合法的值 | 允许 | 允许 | 迂回地址,用于本地测试 |
Network ID | 全为1 | 禁止 | 允许 | 直接广播地址 |
最初,一个IP地址被分成两部分:网路识别码在地址的高位字节中,主机识别码在剩下的部分中。
为了克服这个限制,在随后出现的分类网络中,地址的高位字节被重定义为网络的类(Class)。这个系统定义了五个类别:A、B、C、D和E。A、B和C类有不同的网络类别长度,剩余的部分被用来识别网络内的主机,这就意味着每个网络类别有着不同的给主机编址的能力。D类被用于多播地址,E类被留作将来使用。
1993年,无类别域间路由(CIDR)正式地取代了分类网络,后者也因此被称为“有类别”的。
CIDR被设计为可以重新划分地址空间,因此小的或大的地址块均可以分配给用户。CIDR创建的分层架构由互联网号码分配局(IANA)和区域互联网注册管理机构(RIR)进行管理,每个RIR均维护着一个公共的WHOIS数据库,以此提供IP地址分配的详情。
CIDR地址块 | 描述 | 参考资料 |
---|---|---|
0.0.0.0/8 | 本网络(仅作为源地址时合法) | RFC 6890 |
10.0.0.0/8 | 专用网络 | RFC 1918 |
100.64.0.0/10 | 电信级NAT | RFC 6598 |
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/32 | 受限广播 | RFC 919 |
在IPv4所允许的大约四十亿地址中,三个地址块被保留作专用网络。这些地址块在专用网络之外不可路由,专用网络之内的主机也不能直接与公共网络通信。但通过网络地址转换(NAT),使用这些地址的主机可以像拥有共有地址的主机在互联网上通信。
下表展示了三个被保留作专用网络的地址块(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 |
通常情况下,路由器根据数据报文的目的地址决定转发数据报文的下一跳地址。使用专用网络地址作为目的地址的数据包通常无法被公共路由器正确送达,因为公共路由器没有相应的路由信息,即无法得知如何才能转发到该IP地址。因此,这就需要通过一种方法,将指引数据报文转发的下一跳地址和真正要传输的目的地址分离开。于是就使用虚拟专用网,将IP报文封装在其他报文内,以便于通过公网上的公共路由器,达到能处理该封包内层数据的网络设备上解除封包后,该数据包可以被继续转发到目的地址。
将数据报文封装的过程中,可以将数据报文封装于IP报文中,也可以使用多协议标签交换协议等,通过其他协议引导数据报文转发。也可以封装同时加密数据,以保护数据内容。
RFC 5735中将地址块169.254.0.0/16保留为特殊用于链路本地地址,这些地址仅在链路上有效(如一段本地网络或一个端到端连接)。这些地址与专用网络地址一样不可路由,也不可作为公共网络上报文的源或目的地址。链路本地地址主要被用于地址自动配置:当主机不能从DHCP服务器处获得IP地址时,它会用这种方法生成一个。
当这个地址块最初被保留时,地址自动配置尚没有一个标准。为了填补这个空白,微软创建了一种叫自动专用IP寻址(APIPA)的实现。因微软的市场影响力,APIPA已经被部署到了几百万机器上,也因此成为了事实上的工业标准。许多年后,IETF为此定义了一份正式的标准:RFC 3927,命名为“IPv4链路本地地址的动态配置”。
地址块127.0.0.0/8被保留作环回通信用。此范围中的地址绝不应出现在主机之外,发送至此地址的报文被作为同一虚拟网络设备上的入站报文(环回),主要用于检查TCP/IP协议栈是否正确运行和本机对本机的链接。
一个常见的误解是以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(主机位全1)。在这种情况下,尽管可能带来误解,但192.168.1.255、192.168.2.255等地址可以被分配给主机。同理,192.168.0.0作为网路识别码不能被分配,但192.168.1.0、192.168.2.0等都是可以的。
随着CIDR的到来,广播地址不一定总是以255结尾(广播地址是指主机位都为1的地址,255只是其中一种情况)。比如,子网路203.0.113.16/28的广播地址是203.0.113.31。过程如下:
网络:203.0.113.16
掩码:255.255.255.240
掩码反码:0.0.0.15
OR操作:
00010000 | 00001111 = 00011111 =31
一般情况下,子网路的第一个和最后一个地址分别被作为网路识别码和广播地址,任何其它地址都可以被分配给其上的主机。
互联网上的主机通常被指定,但IP报文的路由是由IP地址而不是这些名字决定的。这就需要将域名翻译(解析)成地址。
域名系统(DNS)提供了域名转换为IP地址的服务。与CIDR相像,DNS是层级结构。
从20世纪80年代起,一个很明显的问题是IPv4地址在以比设计时的预计更快的速度耗尽。[4] 这是创建分类网络、无类别域间路由,和最终决定重新设计基于更长地址的互联网协议(IPv6)的诱因。
一些市场力量也加快了IPv4地址的耗尽,如:
随著互联网的增长,各种各样的技术随之产生以应对IPv4地址的耗尽,如:
随著IANA把最后5个地址块分配给5个RIR,其主地址池在2011年2月3日耗尽。[5] 许多地址分配和消耗的模型都预测第一个耗尽地址的RIR会在2011年的下半年出现。[6]ARIN在2015年用完可用的供应,APNIC、LACNIC和AFIC根据其社区政策定量供应[7]。
广泛被接受且已被标准化的解决方案是迁移至IPv6。IPv6的地址长度从IPv4的32位增长到了128位,以此提供了更好的路由聚合,也为最终用户分配最小为264个主机地址的地址块成为可能。迁移过程正在进行,但其完成仍需要相当的时间。
对地址的快速分配和其造成的地址短缺促成了许多有效应用地址的方法,其中一种就是网络地址转换(NAT)。
IP报文包含IP首部和数据部分
IPv4报文的首部包含14个字段,其中13个是必须的,第14个是可选的(红色标出),并命名为:“选项”字段。首部中的字段均以大端序包装,在以下的图表和讨论中,最高有效位(Most Significant bit)被标记为0。
字段 | 长度(位) | 描述 |
---|---|---|
备份 | 1 | 当此选项需要被备份到所有分片中时,设为1。 |
类 | 2 | 常规的选项类别,0为“控制”,2为“查错和措施”,1和3保留。 |
数字 | 5 | 指明一个选项。 |
长度 | 8 | 指明整个选项的长度,对于简单的选项此字段可能不存在。 |
数据 | 可变 | 选项相关数据,对于简单的选项此字段可能不存在。 |
数据字段不是首部的一部分,因此并不被包含在首部检验和中。数据的格式在协议首部字段中被指明,并可以是任意的传输层协议。
一些常见协议的协议字段值被列在下面:
参见IP协议号列表以获得完整列表。
互联网协议(IP)是整个互联网架构的基础,可以支持不同的物理层网络,即IP层独立于链路层传输技术。不同的链路层不仅在传输速度上有差异,还在帧结构和大小上有所不同,不同MTU参数描述了数据帧的大小。为了实现IP数据包能够使用不同的链路层技术,需要将IP数据包变成适合链路层的数据格式,IP报文的分片即是IP数据包为了满足链路层的数据大小而进行的分割。
在IPv6不要求路由器执行分片操作,而是将检测路径最大传输单元大小的任务交给了主机。
当设备收到IP报文时,分析其目的地址并决定要在哪个链路上发送它。MTU决定了数据载荷的最大长度,如IP报文长度比MTU大,则IP数据包必须进行分片。每一片的长度都小于等于MTU减去IP首部长度。接下来每一片均被放到独立的IP报文中,并进行如下修改:
例如,对于一个长20字节的首部和一个MTU为1,500的以太网,分片偏移量将会是:0、(1480/8)=185、(2960/8)=370、(4440/8)=555、(5920/8)=740、等等。
如果报文经过路径的MTU减小了,那么分片可能会被再次分片。
比如,一个4,500字节的数据载荷被封装进了一个没有选项的IP报文(即总长为4,520字节),并在MTU为2,500字节的链路上传输,那么它会被破成如下两个分片:
# | 总长 | 更多分片(MF)? | DF | 分片偏移量 | |
---|---|---|---|---|---|
首部 | 数据 | ||||
1 | 2500 | 是 | 0 | 0 | |
20 | 2480 | ||||
2 | 2040 | 否 | 0 | 310 | |
20 | 2020 |
现在,假设下一跳的MTU为1,500字节,那么每一个分片都会被再次分成两片(由于数据片段只有在目的主机才重新被组成数据报,因此再次分片是针对每个在网络中传输的数据帧):
# | 总长 | 更多分片(MF)? | DF | 分片偏移量 | |
---|---|---|---|---|---|
首部 | 数据 | ||||
1 | 1500 | 是 | 0 | 0 | |
20 | 1480 | ||||
2 | 1020 | 是 | 0 | 185 | |
20 | 1000 | ||||
3 | 1500 | 是 | 0 | 310 | |
20 | 1480 | ||||
4 | 560 | 否 | 0 | 495 | |
20 | 540 |
第3和4片是从原始第2片再次分片而来,所以除了分片后的最后一个分片外MF为都为1。
当一个接收者发现IP报文的下列项目之一为真时:
它便知道这个报文已被分片,并随即将数据、标识符字段、分片偏移量和更多分片标志一起储存起来。
当接受者收到了更多分片标志未被设置的分片时,它便知道原始数据载荷的总长。一旦它收齐了所有的分片,它便可以将所有片按照正确的顺序(通过分片偏移量)组装起来,并交给上层协议栈。
互联网协议定义并激活了网络层,它使用一个逻辑地址系统。IP地址并不以任何永久的方式绑定到硬件,而且事实上一个网络接口可以有许多IP地址。为了正确地交付一份报文,主机和路由器需要其它机制来识别设备接口和IP地址之间的关联。地址解析协议(ARP)为IPv4执行这种IP地址到物理地址(MAC地址)的转换。
此外,反向操作有时候也是必须的,比如,一台主机在启动时需要知道自己的IP地址(除非地址已经被管理员预先设置)。目前被用于这一用途的协议有动态主机设置协议(DHCP)、引导协议(BOOTP)和比较不常用的RARP。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.