ip 地址的分类和组成
ip 地址由网络号和主机号组成,由一个长度为 32 位的二进制字符表示。但是为了方便记忆,我们一般都转换为点分十进制格式来表示。
点分十进制
点分十进制是把 ip 地址每 8 个字节划分为一组,然后转换成四个十进制数字,最后用点分隔这四个十进制数字的表示方法,比如 11000000 10101000 00000001 00000001 的点分十进制表示为 192.168.1.1
ip 地址的分类有很多种,这里我们深入讨论一下 A B C D E 这种分类。
ip 地址 32 位二进制字符被划分为固定的位数来表示不同的含义,所以就有了 A B C D E 这五类 ip 地址。
如下图表示:
上图中虚线前面的几位表示网络类别,A 类用 0 表示,B 类是 10,C 类是 110,D 类是 1110,E 类是 1111(这里有争议,按照规律推测应该是 11110)
A 类地址:
网络地址范围:1.0.0.0~126.0.0.0
IP 地址范围:1.0.0.1~126.255.255.254
A 类地址前 8 位表示网络号,而第一位又用来表示网络类型,所以 2-8 这 7 位用来表示网络号,最多可表示 2^7=128 个网络,然而网络号全为 1 的网络和网络号全为 0 的网络有特殊用途,所以 A 类地址最多有 2^7-2=126 个网络,
网络号全为 1:01111111 也就是 127.x.x.x 作为本地软件环回测试,我们常用的是 127.0.0.1 作为本地环回测试,实际上,如果我们本机搭建了服务器环境,并且开启了服务器环境,无论我们在浏览器地址栏输入 127.0.0.2 还是 127.x.x.x 都指向了本地。所以 127 网段整体都被保留为了本地测试 ip。
网络号全为 0:00000000 也就是 0.x.x.x 作为保留地址,保留地址可以在内网中使用,不可以与公网通信。
后面 24 位表示主机号,有 2^24=16777216,然而主机号全为 0 和主机号全为 1 也有特殊用图,所以 A 类地址每个网络上最多有 2^24-2=16777214 台主机。
主机号全为 1:表示该网络上的所有主机,也就是说,主机号全为 1 是该网络上的广播地址,并不表示某台主机。
主机号全为 0:表示该网络的网络地址,而该网络上没有任何主机
有一种特殊情况就是,网络号全为 0,主机号也全为 0,即 0.0.0.0,我们用它来表示没有获取到 ip 地址,即地址缺失。
如上分析,那么最终 A 类地址的范围是:1.0.0.1~126.255.255.254
ip 地址空间共有 2^32=4294967296 个,A 类地址空间占了 2^7 * 2^24 = 2^31 个,占了整个 ip 地址空间的 50%
B 类地址:
网络地址范围:128.1.0.0~191.255.255.0
IP 地址范围:128.1.0.1~191.255.255.254
B 类地址前 2 个字节,也就是前 16 位表示网络号,而前 2 位已经固定为 10 用来表示 B 类网络,所以只剩下 14 位来表示网络号共有 2^14=16384 个,而 128.0.0.0 这个网络是不使用的(具体为何没有找到出处),所以 B 类的网络个数为 16383 个,每个网络上的主机个数为 2^16-2=65534 个,这里同样要除去主机号全为 0 和 主机号全为 1 的 ip,整个 B 类 ip 地址空间有约 2^14 * 2^16 = 2^30 (能用不能用的都算上),大约占整个 ip 地址空间的 25%
C 类地址:
网络地址范围 :192.0.1.0~223.255.255.0
IP 地址范围:192.0.1.1~223.255.255.254
C 类地址前 3 个字节,也就是前 24 位表示网络号,而前 3 位已经固定为 110 用来表示 C 类网络,所以只剩下 21 位来表示网络号共有 2^21=2097152 个,而 192.0.0.0 这个网络也是不使用的(具体为何没有找到出处),所以 C 类的网络个数为 2097151 个,每个网络上的主机个数为 2^8-2 = 254 个,这里同样要除去主机号全为 0 和 主机号全为 1 的 ip,这个 C 类 ip 地址空间约有 2^21 * 2^8 = 2^29 个,占这个 ip 地址空间的 12.5%
D 类地址:
D 类地址作为多播地址使用
E 类地址:
E 类地址保留为科研使用
通过上面的分析,我们可以得到下图
单播和多播:
其中 A B C 类 ip 属于单播地址,D 类 ip 属于多播地址。
专用 IP 地址(私有 IP 地址):
一个公司中或组织中,并不是所有的主机都需要和互联网直接相连的,所以如果 ip 地址不能复用的话,这样会造成严重的浪费,所以设计者就在 A B C 类地址中各保留了一段 ip 地址作为专用地址,它们可以在不同的内网中重复使用。这些地址不会被当作公用地址被分配。
私有地址的 ip 范围如下
那么为什么在 A B C 类地址段都有私有地址段呢?
因为他们容纳的主机数量是不一样的,如果主机数量比较少,那么使用 C 类的私有地址就可以了,如果主机数量比较多(例如超过了 C 类网络可以容纳的主机数量),又想把它们划分在同一个局域网内,那么就应该根据具体数量,选用 B 类私有地址,或 A 类私有地址。
子网掩码概述:
此处我需要引用一段经典的解释来说明子网掩码的存在意义
与 IP 地址关系最为紧密的要算子网掩码,在较复杂的网络中,子网掩码的作用并不比
IP 地址弱。
IP 地址以网络号和主机号来标识网络上的主机,只有在一个网络号下的计算机之间才能
直接互通,不同网络号的计算机要通过网关(Gateway)才能互通,但这样的划分在某些情
况下显得并不十分灵活。为此 IP 网络还允许划分成更小的网络,称为“子网(Subnet)”,这
样就产生了“子网掩码”。
子网掩码用来判断任意两个 IP 地址是否属于同一子网络,只有在同一子网的计算机才能
直接互通。要将一个网络划分为多个子网,网络号将会占用原來的主机位。如对于一个 C 类
地址,标准规定是用 24 位来标识网络号,如要将其划分为两个子网,则需要占用 1 位原来
的主机标识位。此时网络号位变为 25 位,而主机号位则变为 7 位。同理,借用两个主机位
则吋以将一个 C 类网络划分为 4 个子网,依次类推。
计算机可以从子网掩码中看出这一网络是否划分子网。子网掩码和 IP 地址一样有 32 位,
确定子网掩码的方法是将它与 IP 地址中标识网络号的所有对应位都用“1”表示,而与主机
号 对 应 的位都用“0”表示。如分为两个子网的 C 类 IP 地址用 25 位来标识网络号,则其子
网掩码为:11111111 11111111 11111111 10000000,即 255.255.255.128。于是,A 类地址的默
认子网掩码为 255.0.0.0: B 类 EP 地址的默认子网掩码为 255.255.0.0; C 类 IP 地址的默认子
网掩码为 255.255.255.0。这就是在设置一个 IP 地址的子网掩码时通常不用手工输入,而是由
系统根据所配置的 IP 地址自动确定的原因。
子网掩码不能单独存在,它必须结合 IP 地址一起使用才有意义。子网掩码只有一个作用,
就是将某个 IP 地址划分成网络地址和主机地址两部分。子网掩码确定了个 IP 地址的 32 位
二进制数字中哪些是网络号,哪些是主机号。这对于采用 TCP/IP 协议的网络来说非常重要,
只有通过子网掩码,才能表明一台主机所在的子网与其他子网的义系,使网络正常工作。如
在 Windows2000Server 中,给一个网卡指定 IP 地址,系统会自动填入一个默认的子网掩码。
比如,网卡所配置的 IP 地址为“192.168.1.10”,则系统会自动配置它的子网掩码为
“255.255.255.0”。—般情况下,使用默认子网掩码就可以了。
IP 地址的子网掩码设置不是仟意的。如果将子网掩码设置得过大,也就是说子网范围扩
大,那么根据子网寻径规则,很可能发往和本地机不在同一子网内的目的主机的数据,会因
为错误的判断而认为目的机是在同一子网内。这样数据包将在本子网内循环,直到超时被抛
弃,使数据不能正确到达目的机,导致网络传输错误。如果将子网掩码设置得过小,那么就
会将本来属于同一子网内的机器之间的通信当做是跨子网传输,数据包都交给默认网关处
理,这样势必增加默认网关的负担,造成网络效率下降。因此,子网掩码应该根据网络的规
模进行设置。
如果一个局域网的规模不超过 254 台电脑,则可以采用“255.255.255.0”作为子网掩码,
现在大多数局域网都不会超过这个数宇,因此“255.255.255.0”是最常用的 1P 地址子网掩码。
如果超过了 254 台电脑,而又想把所有电脑配置在一个局域网内,就必须使用 B 类地址,但
这是不推荐使用的,因为 B 和 A,以及 C 类中大多数 IP 地址都是公用网使用的,如果在局
域网中采用了公用网的 IP 地址,当局域网中的主机连上因特网时,就会发现一些网站访问不
了,原因就是 IP 地址冲突。当然,如果局域网中的主机根本不上公用网,使用哪类 IP 地址
都可以,但实际上在当今信息社会中这是不可能的。
——摘自《网管员必读——网络基础(第 2 版)》5.1.2 子网掩码概述
子网掩码与 IP 地址计算网络号和主机号:
例如有一个个 C 类地址为 192.9.200.13,按其 IP 地址类型,它的默认子网掩码为 255.255.255.0,则它的网络号和主机号可按如下方法得到:
(1)将 IP 地址 192.9.200.13 转换为二进制数 11000000 00001001 11001000 00001101
(2)将子网掩码 255.255255.0 转换为二进制数 11111111 11111111 11111111 00000000
(3)将以上两个二进制数进行逻辑与(AND)运算,得出的结果即为网络部分。“11000000 00001001 11001000 00001101” 和 “11111111 11111111 11111111 00000000” 进行“与”运算, 得到 “11000000 00001001 11001000 00000000”,即 “192.9.200.0”,这就是这个 IP 地址的网络号,或称为“网络地址”
(4)将子网掩码的二进制数值取反后,再与 1P 地址进行逻辑与(AND)运算,得到的结果,为主机部分。如将“00000000 00000000 00000000 11111111 (子网掩码的值取反)”, 和 “11000000 00001001 11001000 00001101” 进行“与”运算后得到 “00000000 00000000 00000000 00001101”,即“0.0.0.13”,这就是这个 IP 地址的主机号(可简化为“13”)。