网络管理基础

之前写了篇文章讲解了IPv4地址跟无符号整型的相互转换:PHP: 详解ip2long和long2ip 。本篇将详细讲解IPv4地址的分类和子网、子网掩码以及单播、广播和多播。本文只从IPv4的角度去考虑问题,不涉及链路层帧格式。

IPv4分类

有五类IPv4地址,地址长32bit,如下图所示:

162831_XQ2J_182025.jpg

A、B、C是常用的三类地址;D类地址用于多播(组播);E类地址为将来使用保留,主要用于Internet试验和开发。依上图很容易判断一个IPv4地址是属于哪类地址,只要拿到高8位进行判断即可。以IP:157.23.56.90 来举例说明,157就是高8位,本文的示例假设用于测试的IPv4地址都是合法的,因此不对给出的IPv4地址做合法性校验。代码如下:

<?php
function getIPv4Class($h8)
{
	if ((($h8 >> 7) & 0x1) == 0x0)
	{
		return 'A';
	}
	else if ((($h8 >> 6) & 0x3) == 0x2)
	{
		return 'B';
	}
	else if ((($h8 >> 5) & 0x7) == 0x6)
	{
		return 'C';
	}
	else if ((($h8 >> 4) & 0xf) == 0xe)
	{
		return 'D';
	}
	else if ((($h8 >> 3) & 0x1f) == 0x1e)
	{
		return 'E';
	}

	return 'Unknown';
}

echo "ip: 157.23.56.90是 " . getIPv4Class(157) . " 类地址\n";

$ php -f test.php
ip: 157.23.56.90是 B 类地址

如果您不熟悉十六进制,则希望您能记住下图,并且记住十六进制的一位相当于二进制的四位,从低位算起,高位不足则补0:

173057_6t59_182025.jpg

我们经常用的回环地址127.0.0.1就是A类地址,这是因为127的二进制表示为:01111111,它的最高位为0,所以是A类地址。

网络ID

A、B、C这三类地址都是由网络号和主机号组成的。网络号用于区分网络,主机号用于区分不同的主机。对于IP: 157.23.56.90 来说,要取得它的网络ID,首先需要知道它是属于哪类地址。很明显它是属于B类地址,我们之前计算过了。B类地址是由16位网络号和16位主机号所组成,因此将这16位网络号移到低位所对应的十进制就是它的网络ID,代码如下:

<?php
// ip: 157.23.56.90
// B类地址的网络号是高16位,因此是由157和23组成
$netID = ((157 << 8) | 23) & 0xffff;
echo "ip: 157.23.56.90的网络ID是: " . $netID . "\n";

$ php -f test.php
ip: 157.23.56.90的网络ID是: 40215

主机ID

主机ID的计算跟网络ID的计算类似,先获取IPv4地址类型,再取对应的主机号计算出来,代码如下:

<?php
// ip: 157.23.56.90
// B类地址的主机号是低16位,因此是由56和90组成
$hostID = ((56 << 8) | 90) & 0xffff;
echo "ip: 157.23.56.90的主机ID是: " . $hostID . "\n";

$ php -f test.php
ip: 157.23.56.90的主机ID是: 14426

子网ID

子网ID是从主机ID中抽出若干位来形成的(将主机ID中的若干位置1),并且只能由高位开始并且是连续的。一般是由连续的8位组成,但这个并没有限制,这主要取决于网络管理员如何来规划子网。比如对于B类网络(157.23),可由低16位主机号中若干位来划分子网。如果取1位来划分子网,则可分为2个子网157.23.0和157.23.1,主机号变成由低15位组成;如果取2位来划分子网,则可分为4个子网157.23.0、157.23.1、157.23.2和157.23.3,主机号变成由低14位组成。对于取2位来划分子网,则子网ID分别为:0b00,0b01,0b10,0b11,结果分别为0,1,2,3。

子网掩码

子网掩码类似于IPv4也是用32位整型来表示。将网络号和子网号全部置1,主机号全部置0则得到子网掩码。对于没有划分子网的IPv4来说,将网络号全部置1,主机号全部置0则得到网络掩码。每类IPv4地址都有默认的网络掩码,根据前面的图我们可以知道:A类地址8位网络号,则它的默认掩码是:255.0.0.0;B类地址16位网络号,则它的默认掩码是:255.255.0.0;C类地址24位网络号,则它的默认掩码是:255.255.255.0。

子网掩码的表示方式

子网掩码一般用形如:255.255.255.0这种方式来书写,但也提供了另一种书写方式。比如在设置路由表时,使用ip/n的方式。其中ip是有效的ip地址,n是子网掩码中1的个数。因为子网掩码是连续的1和连续的0组成的,所以可使用这种方式。比如对于IP: 157.23.56.90来说,子网掩码255.255.0.0,是连续的16个1,它是B类地址的默认掩码,因此可以写成:157.23.56.90/16。

子网掩码的作用

对于IP: 157.23.246.90来说,这是B类地址是毋庸置疑的,它的网络号为157.23,主机号为246.90。如果要知道157.23.246.90所处的网段,则需要提供子网掩码。因为246的二进制数为:11110110,如果没有提供子网掩码,则不能确定是否从主机号中抽出了若干位来形成子网。例如:157.23.246.90/16,则表示没有被划分子网,它的网络掩码即是B类地址的默认网络掩码255.255.0.0。再如:157.23.246.90/18,很明显是从主机号中抽出了2(18-16)位来形成子网ID,它的子网掩码是255.255.192.0,至于192是如何得到的,您只需计算二进制11000000的值。

网络地址

将主机号全部置0,其它位不变则得到网络地址。比如对于B类IP: 157.23.246.90/16来说,它的网络地址为: 157.23.0.0,而对于IP: 157.23.246.90/18来说,它的网络地址为: 157.23.192.0。

单播

单播是一对一的通信,通常情况下我们使用的都是单播方式。A、B、C类地址都是单播地址。

广播

广播可以分为几种。这里只涉及到指向网络的广播和指向子网的广播。

指向网络的广播

指向网络的广播地址是主机号全为1的地址。对于B类IP: 157.23.246.90/16来说,它的广播地址为: 157.23.255.255。

指向子网的广播

指向子网的广播地址是主机号全为1且有特定子网号的地址。对于B类IP: 157.23.246.90/18来说,它的指向子网的广播地址跟具体的子网号有关,这里就不进行具体的计算,只要分别针对各子网来计算即可。

多播

多播也称组播,D类地址就是是用于多播的。多播用于向多个目标主机发送报文,这点跟广播是有区别的。广播是向整个网络或整个子网发送报文。多播组ID是由28位来表示的,多播组地址包括最高4位的1110和多播组ID,范围从224.0.0.0到239.255.255.255。


转载于:https://my.oschina.net/goal/blog/199192

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值