IPv4 地址

IPv4 地址IPv4 地址

摘自:《深入理解计算机网络》 王达著 机械工业出版社
相关知识链接
1. IPV4数据报头部格式
2. IPv4数据报的封装与解封装
3. IPv4数据报的分段与重组



IPv4 地址

OSI/RM 的网络层和 TCP/IP 协议体系结果的网际互连层最重要的一个协议就是 IP 协议,目前正处于 IPv4 和 IPv6 这两个版本的交替、过渡时间。这篇博客主要介绍 IPv4 地址。

IPv4 地址基本格式

IPv4 使用 32 位(4 字节)地址,因此整个地址空间有 4 294 967 296( 232 )个地址,也就是近43亿个地址。不过,有一些地址是特殊用途而保留的,如局域网专用地址(约1800万个地址)和组播地址(约2700万个地址),这样一来可直接在广域网上使用、路由的公网 IP 地址数量就更加少了。


说明:公网 IP 地址是指可以子啊广域网上直接使用的,直接被路由(也就是可以被指路径查到),并需向 IP 地址管理机构申请、注册、购买,且全球唯一(不存在多个用户拥有、使用相同的公网 IP 地址的情况)的 IPv4 地址。打个比方,公网 IP 地址就像公民的身份证号码,每个身份证号都是全国唯一的,并且通过这个号码可以查到我们的基本信息,找到我们。公网 IP 地址直接分配给互联网上的主机、服务器或其他设备,可以通过它在全球范围内找到对应的主机、服务器和设备。如各大企业网站通常都是直接使用公网 IP 地址的。

与公网 IP 地址相对应的自然是私网 IP 地址,又称为专用网络 IP 地址或者局域网 IP 地址。私网 IP 地址是指仅可以在各用户自己的局域网内部使用,且不同用户可以重复使用,无须向 IP 地址管理机构申请、注册,也无须购买的 IPv4 地址。私网 IP 地址就相当于我们企业内部的员工编号,仅在内部使用,不能通过这个员工编号来在全国范围内找到我们。企业内部局域网使用的就是私网 IP 地址,具体有哪些地址属于私网 IP 地址我们将会在后面进行详细的介绍。


随着公网地址不断被分配给最终的用户,IPv4 地址枯竭问题也随之产生。虽然基于可变的子网掩码(VLSM)、无类别域间路由(CIDR)和网络地址转换(NAT)的地址结构重构显著地减少了地址的枯竭的速度,但在 2011 年 2 月 3 日,在最后 5 个地址块被分配给 5 个区域互联网注册管理机构之后,IANA 的主要地址池空了,所以现在正在积极推动 IPv6,我们将会在下一篇博客讲解 IPv6 地址。

IPv4 地址在计算机内部是以二进制形式表示的,每个地址都有 32 位,由数字 0 和 1 构成。在这 32 位的二进制数中,其实每个 8 位之间并没有我们所看到的那个用来分隔各段的一个小圆点,只是为了方便我们自己阅读,在每个字节之间用一个小圆点分隔。因为整个 IP 地址有 32 位,无论是书写还是记忆都很不方便,于是我们在日常的 IP 地址管理中把这个 32 位长的二进制 IP 地址分段转换成对应的十进制,在每个字节间用小圆点分隔。引用某个 IPv4地址时,可使用 W.X.Y.Z 的点分十进制表示形式,如 192.168.1.10 等。

由前面介绍的数据转换内容可以知道,每个 8 位二进制所能表示的最大数就是 281=2561=255 (最小数为0),所以 IPv4地址转换成十进制数后,每段8位二进制组的取值范围是 0~255。因为 IP 地址在计算机是以二进制表示的,32位就相当于 4 字节,所以在 IPv4 协议数据报格式,无论是源 IP 字段,还是目的 IP 地址字段都占 4 字节。

子网掩码



子网掩码
子网掩码


要想理解什么是子网掩码,就不能不先了解 IPv4 地址的构成。互联网是由很多小型网络构成的,每个网络上有很多主机,这样便构成了一个有层次的结构。IPv4 地址在设计时就考虑到地址分配的层次特点,将每个 IP 地址都分割成网络 ID 和主机 ID 两部分,以便于 IPv4 地址的寻址操作。那么 IPv4 地址的网络 ID 和主机 ID 各是多少位呢?如果不指定,在寻址时就不知道对应 IPv4 地址中哪些位代表网络 ID、哪些位代表主机 ID,这就需要通过这里所说的子网掩码来实现了。



子网掩码示例
子网掩码示例


IPv4 地址的基本分类

IPv4 地址共有 232 个,最初把一个地址分成两部分:“网络识别码”在地址的最高的字节当中,”主机识别码“在剩下的部分中。这样划分的话,就使得最多只能分配给 256 个网络,显然这样是远远不够的。

为了克服这个限制,在随后出现的分类网络中,地址的最高位字节被重新定义为网路的类别(即网络 ID),共 5 个:A、B、C、D 和 E。A、B 和 C 类用于单播通信中设备 IP 地址分配;D 类属于组播地址,用于组播通信;E类是保留地址。他们均有不同的网络类别(也就是网络 ID) 长度,剩余部分用来识别网络内的主机(称为主机 ID)。网络 ID 用来确定每类网络中有的网络数,而主机 ID 用来确定每个网络中的 IP 地址数。下面分别介绍这五类地址的结构。

A 类 IPv4 地址



A 类地址的结构
A 类地址的结构


在分类中规定,A 类 IPv4 地址中网络 ID 的最高位固定为 0,后面 7 位可变。这样一来,A 类网络的总数从 256( 28 )个减少到 128( 27 )个。但实际可以使用的只有 126 个,即整个 IPv4 地址中可构建 126 个 A 类网络,因为网络 ID 为 0 和 127 的 A 类网络不可用的。网络 ID 全为 0 的地址为保留地址,不能被分配;而网络 ID 为 0(相当于十进制的 127)的地址专用本地环路测试(也就是通常所说的环路地址),也是不能分配的。也就是以 0 或者 127 开头的地址是不能分配给节点使用的。

又因为 A 类 IPv4 地址中主机 ID 又24 位,所有可以使用的主机 ID 数,也就是可以每个 A 类网络中拥有的 IPv4 地址数为 166 777 216( 224 )。但主机 ID 全为 0 的地址为网路地址,而主机全为 1 的地址为广播地址,不能分配给主机使用,所以实际上可用的地址数为 166 777 214( 2242 )。A 类网络中可以构建的网络数最少,但每个网络中拥有的地址数是最多的,也就是可以构建的网络规模最大,适用于大型企业和运营商。

A 类 IPv4 地址的子网掩码固定为 255.0.0.0,因为子掩码就是网络 ID 部分全为 1,主机 ID 部分全为 0,而 A 类地址中网络 ID 部分就是最高的那个字节。

B 类 IPv4 地址



B 类地址结构
B 类地址结构


B 类 IPv4 地址的网络 ID 的最高两位固定分别为 1、0,后面 14 位可变。由此可知 B 类网络的总数从 65536( 216 )减少到 16384( 214 )个;B 类 IPv4 地址中主机 ID 为 16 位,所以可用的主机数,也就是每个 B 类网络拥有的 IPv4 地址数为 65536( 216 )个。同样因为主机 ID 全为 0 的地址是网络地址,而主机 ID 全为 1 的地址为广播地址,不能分配给主机使用,所以实际上可以使用的地址数为 65534 个。

B 类 IPv4 地址的子网掩码为固定的255.255.0.0,因为 B 类地址中网络 ID 部分是最高的两字节,每个字节均为 8 个连续的 1,转换成十进制后每个字节就是 255 了。

C 类 IPv4 地址



C 类地址的结构
C 类地址的结构


C 类 IPv4 地址的网络ID的最高三位固定分别为 1、1、0,后面的 21 位可变。由此得知 C 类网络总数从 166 777 216( 224 )减少到 2 097 152( 222 )个。C 类地址中主机 ID 仅为 8 位,所以可用的主机 ID 数,也就是每个 C 类网络拥有的 IPv4 地址数为 256( 28 个。同样因为主机 ID 全为 0的地址为网络地址,而主机 ID 全为1的地址为广播地址,不能分配给主机使用,所以实际上可用的地址数为 254( 282 )。

C 类单播地址的子网掩码为固定的255.255.255.0,因为 C 类地址中网络 ID 部分是最高的前 3 个字节,每个字节均为 8 个连续的 1,转换成十进制后每个字节就是 255 了。

下表总结了A、B 和 C三类 IPv4 地址的主要特征

类别 w 的值 网络 ID 部分 主机 ID 部分 网络 ID 数 每个网络的主机 ID 数
A 1-126 w x.y.z 126 16 777 214
B 128-191 w.x y.z 16 384 65 534
C 192-223 w.x.y z 2 097 152 254

D 类 IPv4 地址

D 类 IPv4 地址是组播地址,用于 IPv4 组播通信中。通过组播 IPv4 地址,组播时源主机(组播源)只需发送一份数据,就可以使对应组播组(组播组使用 D IPv4 地址标识)中的一个主机或者多个主机收到这份数据的副本的通信方式,但只有组播组内的主机可以接收到该数据。

IP 组播技术有效地解决了单点发送多点接受的问题,实现了 IP 网络中点到多点的高效数据传输,能够大量节约网络带宽、降低网络负载。还可以利用网络的组播特性方便地提供一些新的增值服务,包括在线直播、网络电视、远程教育、远程医疗、网络电台、实时视频会议等互联网的信息服务领域。



D 类 IPv4 地址结构
D 类 IPv4 地址结构


整个组播 IPv4 地址根据不同的应用环境和用途又可以分为预留组播地址、公用组播地址、临时组播地址、本地管理组播地址四大类。

(1)预留组播地址

预留组播地址(又称永久组播地址)就是由 IANA 保留不分配给特定用户使用,仅为公用的组播路由协议分配使用的组播地址,地址范围为 224.0.0.0 ~ 224.0.0.255。使用这些预留组播地址的组播协议包括 IGMP(Internet 组管理协议)、CGMP(Cisco 组管理协议)、IGMP Snooping(IGMP 侦听)和 PIM(协议无关组播)等。使用这段组播地址的 IP 包不被路由器转发。

在这个地址组段中,224.0.0.0 不分配;224.0.0.1 分配给本地组播网络所有支持组播的主机;224.0.0.2 分配给本地组播网络中的所有组播路由器;224.0.0.4 分配给本地组播网络中的所有 SVMRP 路由器;224.0.0.5 分配给本地组播网络中的所有 OSPF 路由器;224.0.0.6 分配给本地组播网络中的所有 OSPF 指定路由器(DR);224.0.0.9 分配给本地组播网络中的所有 RIPv2 路由器;224.0.0.10 分配给组播网络中所有 IGRP 路由器;224.0.0.13 分配给本地组播网络中的所有 PIMv2 路由器;224.0.0.22 分配给本地组播网络中的所有 IGMPv3 路由器。

(2)公用组播地址

公用组播地址就是在全球范围内可以直接在互联网上使用的组播地址,就像前面介绍的公网单播 IPv4 地址一样。公用组播地址范围为 224.0.1.0 ~ 224.0.1.255,也是有 IANA 为提出申请并付费的用户分配。

(3)临时组播地址

临时组播地址就是由企业用户在本企业局域网内部使用的组播地址,地址范围为 224.0.2.0 ~ 238.255.255.255,仅在本地局域网有效,就像前面介绍的局域网 IPv4 地址一样。

(4)本地管理组播地址

本地管理组播地址也是保留使用的,专用于局域网内部测试,地址范围为 239.0.0.0~238.255.255.255,仅在特定的本地网络范围有效。

当网络层收到组播报文时,根据组播目的查找组播转发表,对报文进行转发。在私网中,组播时不需要再工作站配置的,只需要在网络中的路由器或者支持组播协议的三层交换机上进行配置。私网工作站被分配的组播地址都是 224.0.0.1,就像环路地址 127.0.0.1 一样,无需另外配置。只要在路由器中启用了组播协议后就可以对加入到组播组中。公网中,工作站组播地址选择 224.0.1.0 ~ 238.255.255.255 范围中的一个就可以了。

另外,要注意的是,在进行组播通信时,在数据链路层目的 MAC 地址封装的也是组播 MAC 地址。IANA 把 0.:00:5E 开头的以太网 MAC 块作为组播地址对应的二层组播 MAC 地址。组播 MAC 地址的范围是 01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF(前 24 位为 MAC 头,固定不变,第 25 位为 0),并要求将 IPv4 组播地址的后 28 位(因为最高的 4 位是固定不变的)映射到 48 位的 MAC 地址空间中。

具体的映射方法是将组播 IPv4 地址中的低 23 位放入 MAC 地址的低 23 位,如下图所示。至于为什么要映射后面的23位,原因在于根据 IANA 给出组播 MAC 地址段是前 3 字节(也就是 24 位)来标识单位或者厂商,只有后面的 24 位来和 IP 地址映射;而给定的地址空间后 3 字节的最高位相同,都为0,那么给定的 MAC 地址段内只有 23 位了,所以最终只能丢弃 28 位 IPv4 地址中的 5 位,剩下的 23 位和 MAC 的 23 位相映射。注意,这个映射无须手动进行,在路由器启动组播协议,站点加入到组播后就会自动生成。

由于 IPv4 多播地址的后 28 位中只有 23 位被映射到 MAC 地址,这样会有 32 个( 25 ,IPv4 多播地址中有 5 位可变)IP 多播地址映射到同一 MAC 地址上。



多播 IP 地址到 MAC 地址的映射
多播 IP 地址到 MAC 地址的映射


E 类 IPv4 地址



E 类 IPv4 地址结构
E 类 IPv4 地址结构


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212202.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午8:35
下一篇 2026年3月18日 下午8:35


相关推荐

  • 冒泡排序算法(C语言版)

    冒泡排序算法(C语言版)1 基本原理冒泡排序是一种稳定排序 时间复杂度平均为 O n 2 最好的时间复杂度为 O n 最坏为 O n 2 排序时每次只比较当前元素与后一个元素的大小 如果当前元素大于后一个元素 则交换 如此循环直到队尾 每轮排序都可以保证将当前排序下最大的元素送到未排序部分的队尾 每次大排列中都要比较当前元素与后一个元素的大小 每轮要比较 n 1 次 但是因为之前的每一轮都将一个元素放置到了正确的

    2026年3月18日
    2
  • Linux 的解压缩文件命令「建议收藏」

    Linux 的解压缩文件命令「建议收藏」博客园首页新随笔联系管理随笔-122 文章-0 评论-14 压缩文件 tar -zcvf my.tarabcabc.txtar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。常用格式:单个文件压缩打包tarczvfmy.tarfile1多个文件压缩打包tarczvfmy.tarfile1file2,…单个目录压缩打包tarczvfmy.tar…

    2022年5月16日
    50
  • js——职责链模式(责任链模式)[通俗易懂]

    js——职责链模式(责任链模式)[通俗易懂]js——职责链模式(责任链模式)使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些处理请求的对象形成一个链,并沿着这个链传递请求,直到有一个对象处理它为止。如公交车:乘客就是请求,公交路线就是职责链,每个站点都是一个职责处理对象。乘客上车了,他只有一个目的地,但公交车并不知道是哪,所以公交车要做的就是一站挨着一站的开,等到乘客到了目的地,自然就下车了。放到程序上就是,接收到一个请求,但是有好几个对象都可以处理该请求,但不知道哪个最合适,所以就将这些对象连接起来形成一个职

    2025年6月3日
    8
  • windows DLL注入之注册表注入

    windows DLL注入之注册表注入windows下的注入之注册表注入:1.概念介绍:注入与Hook:注入与hook经常被人们混淆,其实注入和hook是两种windows下的编程技术(当然,其他平台也有相关的技术),由于在安全编程中,两项技术经常被同时结合起来使用,所以常常导入混淆。今天我们就谈谈windows下的注入技术。1.1Hook:hook的中文名叫钩子,hook是程序设计中最为灵活多变的技巧之一,hook对指…

    2022年5月16日
    55
  • IntelliJ IDEA 整理代码格式 快捷键[通俗易懂]

    IntelliJ IDEA 整理代码格式 快捷键[通俗易懂]一、前言在开发的过程中,项目代码格式尤为重要,但是有些开发人员经常会不注意细节,导致代码阅读性很差,如下图所示:二、解决方案打开IDEA,按Ctrl+Alt+L键,进行整理代码格式,可以看到代码已经进行整理PS:如果和qq热键冲突的话,需要先将qq的热键Ctrl+Alt+L设置为无,如下图所示:…

    2022年10月12日
    5
  • 0基础Nano Banana教程!不会画画也能制作超萌商用IP

    0基础Nano Banana教程!不会画画也能制作超萌商用IP

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号