一. IPv4地址格式
网络互连的一个重要前提条件是要有一个有效的地址结构,并且所有的互连网络用户都应遵守这个地址结构。因为只有这样所有的互连网络用户才能在统一的规定下相互之间通讯。这个地址结构可以有许多不同的形式,可以用二进制表示、十进制表示,甚至用十六进制表示,如:204.71.200.68转为八进制形式可表示为0314.0107.0310.0104,IP地址204.71.200.68转为十六进制形式可表示为0xCC.71.0310.0x44。目前使用的IPv4地址使用32位二进制的地址,即在IPv4的地址空间中有2的32次幂(4,294,967,296,约为43亿)个地址可用。IPv4地址在1981年9月实现标准化,在计算机中用四个八位二进制位组表示,分为网络位和主机位,
为了人们的使用方便,使用十进制地址表示,IP地址中的每个8位位组用0~255之间的一个十进制数表示,数与数之间用点(.)分割,即所谓的点分十进制格式。最小的IPv4地址是0.0.0.0,最大的IPv4地址是255.255.255.255,但这两个值是保留的,没有分配给私人的端系统。因为TCP/IP协议规定全0的地址(无论有多少0)表示本地网络,保留为识别子网自身;32比特全为1的地址用于本网广播,该地址叫做有限广播地址(limited
broadcast address)。而主机位全为1的网络地址,叫做直接广播(directed boradcasting)地址,在网间网上的任何一点均可向其他任何网络进行直接广播。所谓广播,指同时向网上所有主机发送报文。对于 直接广播(directed boradcasting)地址,路由器等网络寻址设备允许其通过,并帮助其寻址,所以直接广播(directed
boradcasting)地址有穿透子网的能力。对于有限广播地址(limited broadcast address)只能用于本网的广播,对子网没有穿透能力。
二. IPv4地址的结构
点分十进制数表示的IPv4分为五类,以适应大中小不同的网络类型,这些类的不同之处用于表示网络的位数与用于表示主机的位数之间的差别。这五类是:
• A类地址
• B类地址
• C类地址
• D类地址
• E类地址
其中:
• A类地址:A类地址的第一个八位位组表示网络位,且网络位的第一个bit总是0,1-7bit表示网络标识,即格式总为:0××××××××。后三个八位位组表示主机位,由A类地址的格式可以知道A类地址的网络标识有效范围是00000001~011111111,用十进制表示即1.0.0.0到126.0.0.0 共有64+32+16+8+4+2+1=127个可能的A类网络,主机标识为2的24次幂减2个(去掉全0和全1的地址)。即每个网络主机数为16777214个,这一类地址支持巨型网络,一般分配给具有大量主机的网络使用。
从技术上讲127.0.0.0也是一个A类地址,但他已被保留作闭环(look back)测试用而不能分配给一个网络。TCP/IP协议规定,一、含网络号127的分组不能出现在任何网络上;二、主机和网关不能为该地址广播任何寻径信息。
• B类地址:B类地址的前两个八位位组表示网络位,且网络位的前两个个bit总是10,3-15bit表示网络标识,即格式总为:10×××××× ××××××××。后两个八位位组表示主机位,由B类地址的格式可以知道B类地址的网络标识有效范围是10000000 00000001~10111111 11111110,用十进制表示即128.1.0.0~191.254.0.0,主机标识个数为2的16次幂减2个(去掉全0和全1的地址)。即每个网络主机数为65534个,这类地址一般分配给中等规模的网络使用。
• C类地址:C类地址的前三个八位位组表示网络位,且网络位的前三个bit总是110,4-23bit表示网络标识,即格式总为:110××××× ×××××××× ××××××××。后一个八位位组表示主机位,由C类地址的格式可以知道C类地址的网络标识有效范围是11000000 00000000 00000001~11011111 11111111 11111110,用十进制表示即192.0.1.0~223.255.254.0,故其有效网络数为2097152。主机标识个数为2的8次幂减2个(去掉全0和全1的地址)。即每个网络主机数为254个,这类地址一般分配给小型网络使用。
• D类地址:用于在IP网络中的组播(multicasting,又叫多目广播),前4位bit设置恒为1110。一个组播地址是一个唯一的网络地址。它能指导报文到达预定义的IP地址组,这样一台机器可以把数据同时发送到多个接受端,从而比为每个接受端创建一个不同的流有效的减少了网络流量。因为D类地址用于在一个私有网中传输组播报文至IP地址定义的端系统组中,而不用于互连单独的端系统或网络,所以没有必要把地址中的8位位组或地址位分开来表示网络和主机,相反,整个地址空间用于标识一个IP地址组(可以是A、B或C类地址)。因此D类地址空间的范围从224.0.0.0到239.255.255.254。
• E类地址:被IETF保留作研究之用,Internet上没有可用的E类地址。前4位bit设置恒为1111。 有效地址范围240.0.0.0到255.255.255.255
在IP地址范围内,还有一些非路由地址。IANA(Internet Assigned Numbers Authority)将一部分地址保留作为私人IP地址空间,专门用于内部局域网使用,这些地址如下:
A类地址中的:10.0.0.0~10.255.255.255
B类地址中的:172.16.0.0~172.31.255.255
C类地址中的:192.168.0.0~192.168.255.255
这些地址不会被Internet分配,因此它们在Internet上也从来不会被路由,虽然它们不能直接和Internet网连接,但仍旧可以被用来和Internet通讯,我们可以根据需要来选用适当的地址类,在内部局域网中将这些地址当作公用IP地址一样地使用。在Internet上,那些不需要与Internet通讯的设备,如打印机、可管理集线器等也可以使用这些地址,以节省IP地址资源。
三.IP地址进阶
1.分子网
为了解决相对比较简单的两层结构IP地址带来的问题,RFC917和RFC950提出了一个叫做分子网的(subnetting)的解决方案。
RFC950中规范的分子网方法能使A、B、C类IP地址再细分为更小的网络号。一个被子网化的IP地址包括三部分:
Ÿ 网络号
Ÿ 子网号
Ÿ 主机号
具体做法是把主机部分一分为二,用一部分用于识别子网,一部分用于标识主机,所以分子网的能力依赖于被子网化的IP地址类型。即A类的大于B类,B类的大于C类。如:一个C类地址
2.子网掩码和ip地址
由于分子网的需要,导致了我们常说的子网掩码在这里出现。使用子网掩码目的是,告诉网络中的端系统(可能使路由器和其他主机)IP地址的多少位用于识别网络和子网。子网掩码中用于标识网络号的位置为1,主机位置为0。
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分,如图1。
各个不同的地址类有其各自的默认子网掩码,A类为255.0.0.0。B类为255.255.0.0.。C类为255.255.255.0。
子网掩码的二进制形式与IP地址的二进制形式相与后的结果即是其IP地址的网络的地址。由二进制与运算的性质我们很容易得到象11111111 11111111 11111111 11000000(255.255.255.192)这样的掩码在子网里能产生多少个可能的主机。因为有6位为0的主机位所以子网可能的主机共有2的6次方减2个,减2是因为,当主机位全0时保留为识别子网自身(即11111111 11111111 11111111 11000000时),当主机位位全1时用于在子网内的广播(即11111111 11111111
11111111 11111111时),
3.可变长子网掩码(VLSM)
可变长子网掩码(VLSM)的提出是为了能够使用多个子网掩码分子网,这样当更改子网的大小时就不必改变整个网络的子网掩码了,原先单纯的分子网,当用户选择了一个子网掩码后,就意味着整个网络中每个子网内的的主机数已经确定。
可变长子网掩码(VLSM)即提供一个允许使用不同大小的子网的掩码的方法。对于扩展网络前缀的大小能用斜杠(/)后跟一个网络或子网位数的值表示。如192.125.61.8/24即表示有24为网络位,即二进制的前24位11000000.0111101.00111101表示网络,后8位00001000表示主机。
4.无类域间路由(CIDR)
CIDR用于解决原先分类地址策略的低效性,以便使路由器更有效的汇聚不同网络地址成单一的路由表项。
主要通过以下几个特性来完成:
Ÿ 消除地址分类
Ÿ强化的路由汇聚 即使路由表中的一个表项能够表示许多网络地址空间。
Ÿ超网化 即把一块连续的C类地址空间模拟成一个单一的更大的地址空间。
其中:
Ÿ 消除地址分类 使用网络前缀代替IP地址中类的划分,且前缀可以是长度,从而可以根据网络大小分配网络地址空间,而不是在预定义的网络地址空间中作裁减。每一个CIDR网络地址和一个相关的掩码一起广播,这个掩码用于识别网络前缀的长度。如以前的一个C类地址192.168.125.61.8,其网络号是192.168.61,主机号是8。但使用了CIDR后,8位边界的结构限制不在存在,可以变网络位为任意的位数,例如当网络号为20位时网络号为:11000000.01111101.0011,其主机号为:1101.00001000.所以从数学上说这个IP地址可标识的网络数有2的20次幂个。
四.IP地址的相关计算
在计算此之前我们应该熟悉2从0到的8的各次幂时多少。如下表:
结果 128 64 32 16 8 4 2 1
2 的幂次 7 6 5 4 3 2 1 0
如对划分子网数的划分,如要划分四个子网,每个子网中有58台主机,这是可以选择一个 主机位有六位的C类地址,因为2的6次幂为64,最接近58,所以你可以用剩下的28位作网络位,
对于一个带子网掩码的IP地址的网络地址的计算,应是用IP地址的二进制形式和子网掩码的二进制形式做相与运算,其结果即是改地址所在的子网网络地址。如:
I P 地址 192.168.0.1
子网掩码 255.255.255.0
AND运算
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
AND运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
即192.168.0.1 255.255.255.0所在的子网地址是192.168.0.0
子网掩码和子网中主机数的计算:
当知道一个网络地址和要求划分的子网个数时,可以先确定其网络位的位数,再从其网络位的位数得知其主机位的位数,从而我们可以进一步得出每个网络中的主机个数,由于所有位都是2的倍数,所以各个子网中的主机号可以累加计算,举例说明:
例子一:
已知网络地址为211.134.12.0,要有4个子网,求子网掩码及各个主机块。
由4个子网可知,网络位的大小最小应为8,因为若为4时去掉全0和全1的网络位,只有2个子网可用,并不满足要求。网络位大小位8即意味着网络位有3位,对于地址211.134.12.0来说,它是一个C类地址,那剩下的主机位应为8-3=5位。从数学上讲即有2的5次幂,共有32个主机,这是每个子网中的主机数,但去掉全0的本地网络和全1的广播地址,每个子网实际可以分配的主机个数时30个。对于子网的个数来说,共有2的3次幂减2个,共6个子网,若我们把这八个子网分别用0~7标识,主机用0~255标识一下可知:
子网代码 网络位 主机位范围 子网中的主机块范围
子网0 000 000 00000~000 11111 0~31 (本地网络,应去除)
子网1 001 001 00000~001 11111 32~63
子网2 010 010 00000~010 11111 64~95
子网3 011 011 00000~011 11111 96~127
子网4 100 100 00000~100 11111 128~159
子网5 101 101 00000~101 11111 160~191
子网6 110 110 00000~110 11111 192~223
子网7 111 111 00000~111 11111 224~255 (子网广播,应去除)
除去网络位中和主机位中全0和全1的地址,实际可以应用的地址是:
子网代码 网络位 主机位范围 子网中的主机块范围
子网1 001 001 00001~001 11110 33~62
子网2 010 010 00001~010 11110 65~94
子网3 011 011 00001~011 11110 97~126
子网4 100 100 00001~100 11110 129~158
子网5 101 101 00001~101 11110 161~190
子网6 110 110 00001~110 11110 193~222
而我们根据子网掩码的定义可知,其作用是用来划分子网的,所以其子网掩码可表示为211.134.12.X,其中X是网络位的大小,即二进制的111,十进制的224,所以子网掩码是211.134.12.224。其实我们由每个二进制位组的大小都是256可知,用256减去每个子网中的主机数(主机块)即得掩码的数值。在此例中是用256减去32即得224。
通过对以上的关系的总结可以得到如下关系的表示:
(1) 子网掩码=256-每个子网可分配的IP地址块大小
(2) 每个子网可分配的IP地址块大小=256/可分配子网块大小
(3) 可分配子网块大小=256/I每个子网可分配的IP地址块大小
(4) 每个子网实际可分配的IP地址数=每个子网可分配的IP地址块大小-2
(5) 可分配子网数=可分配子网块大小-2
其实从上例中可以知道每个子网的网络地址就是其子网中的主机块范围中第一个主机的地址,而每个子网的广播地址就是其子网中的主机块范围中最后一个主机的地址,如子网3中,其网络地址就是主机位96主机的地址,而其子网的广播地址就是其子网中的主机位是127的主机地址。当然我们在实际计算时可以利用其2的倍数的性质用加法进行计算。如我们算出每个子网的主机数是32时,即可知第一个子网范围是0~31;第二个子网的第一个主机是32,而最后一个是在第一个子网的最后一个主机31的基础上再加32,即31+32=63,第二个子网的范围即是32~63;第三个子网的第一个主机是64,而最后一个是在第一个子网的最后一个主机63的基础上再加32,即63+32=95,第三个子网的范围即是64~95。依次类推,第四个、第五个···
···而如此计算出的子网中的主机范围还不能用,因为还要除去每个子网中的主机块的第一个和最后一个地址,即第一个子网是0和31,第二个子网是32和63,第三个子网是64和95,其中前面小的那个是本地的网络地址,后面大的是本地的广播地址。
其实每个子网中的本地的网络地址必然是一偶数(因为要全0,最后一位为0确定了这个值是偶数),每个子网中的本地的广播地址必然是一奇数(因为要全1,最后一位为1确定了这个值是奇数);同时每个子网中的第一个可用的地址是其网络地址加1(因其网络地址为偶,所以其第一个可用的地址必为奇数),每个子网中的最后一个可用的地址是其广播地址减1(因其广播地址为奇,所以其最后一个可用的地址必为偶数),且它们必定两两相邻,即 第n-1个子网的网络地址 - 第n-1个子网中第一个可用的地址………第n-1个子网中最后一个可用的地址
- 第n-1个子网的广播地址 —— 第n个子网的网络地址-第n个子网中第一个可用的地址…….…第n个子网中最后一个可用的地址 - 第n个子网的广播地址 —— 第n+1个子网的网络地址 - 第n+1个子网中第一个可用的地址………第n+1个子网中最后一个可用的地址 - 第n+1个子网的广播地址……
例子二:
一个公司有530台电脑,组成一个对等局域网,子网掩码设多少最合适?
首先,无疑,530台电脑用B类IP最合适(A类不用说了,太多,C类又不够,肯定是B类),但是B类默认的子网掩码是255.255.0.0,可以容纳6万台电脑,显然不太合适,那子网掩码设多少合适呢?我们先来列个公式。
2的m次方=560
首先,我们确定2一定是大于8次方的,因为我们知道2的8次方是256,也就是C类IP的最大容纳电脑的数目,我们从9次方一个一个试2的9次方是512,不到560,2的10次方是1024,看来2的10次方最合适了。子网掩码一共由32位组成,已确定后面10位是0了,那前面的22位就是1,最合适的子网掩码就是:11111111.11111111.11111100.00000000,转换成10进制,那就是255.255.252.0。
五.附录:
在此列出A、B、C三类网络子网数目与子网掩码的转换表,以供参考。
A类:
子网数目 占用位数 子网掩码 子网中主机数
2 1 255.128.0.0 8,388,606
4 2 255.192.0.0 4,194,302
8 3 255.224.0.0 2,097,150
16 4 255.240.0.0 1,048,574
32 5 255.248.0.0 524,286
64 6 255.252.0.0 262,142
128 7 255.254.0.0 131,070
128 8 255.255.0.0 65,534
B类:
子网数目 占用位数 子网掩码 子网中主机数
2 1 255.255.128.0 32,766
4 2 255.255.192.0 16,382
8 3 255.255.224.0 8,190
16 4 255.255.240.0 4,094
32 5 255.255.248.0 2,046
64 6 255.255.252.0 1,022
128 7 255.255.254.0 510
256 8 255.255.255.0 254
C类:
子网数目 占用位数 子网掩码 子网中主机数
2 1 255.255.255.128 126
4 2 255.255.255.192 62
8 3 255.255.255.224 30
16 4 255.255.255.240 14
32 5 255.255.255.248 6
64 6 255.255.255.252 2
表ABC类地址网络/地址的范围/结构
A类:
|―――8位网络位―――|―――――――――32位主机位―――――――――|
B类:
|――――――16位网络位――――――|――――――16位主机位――――――|
C类:
|―――――――――32位网络位―――――――――|――― 8 位主机位―――|
A类:
|―――0××××××××―――|――――――――32位主机位――――――――|
B类:
|―――10×××××× ××××××××―――|―――――― 16 位主机位―――――|
C类:
|――― 110××××× ×××××××× ×××××××× ―――|――― 8 位主机位―――|