计算机网络如何计算子网掩码

IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过网关(Gateway)才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为子网(Subnet),这样就产生了子网掩码。子网掩码的作用就是用来判断任意两个IP地址是否属于同一子网络,这时只有在同一子网的计算机才能"直接"互通。那么怎样确定子网掩码呢?

前面讲到IP地址分网络号和主机号,要将一个网络划分为多个子网,因此网络号将要占用原来的主机位,如对于一个C类地址,它用24位来标识网络号,要将其划分为2个子网则需要占用1位原来的主机标识位。此时网络号位变为25位,主机标示变为7位。同理借用2个主机位则可以将一个C类网络划分为4个子网……那计算机是怎样才知道这一网络是否划分了子网呢?这就可以从子网掩码中看出。子网掩码和IP地址一样有32bit,确定子网掩码的方法是其与IP地址中标识网络号的所有对应位都用"1",而与主机号对应的位都是"0"。如分为2个子网的C类IP地址用25位来标识网络号,则其子网掩码为:11111111 11111111 11111111 10000000即255.255.255.128。于是我们可以知道,A类地址的缺省子网掩码为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0。下表是C类地址子网划分及相关子网掩码:

子网位数  子网掩码主机数 可用主机数

1  255.255.255.128  128   126

2  255.255.255.192  64   62

3  255.255.255.224  32   30

4  255.255.255.240  16  14

5  255.255.255.248  8   6

6  255.255.255.252  4    2

你可能注意到上表分了主机数和可用主机数两项,这是为什么呢?因为当地址的所有主机位都为"0"时,这一地址为子网的网络地址,而当所有主机位都为"1"时为广播地址。

同时我们还可以使用可变长掩码(VLSM)就是指一个网络可以用不同的掩码进行配置。这样做的目的是为了使把一个网络划分成多个子网更加方便。在没有VLSM的情况下,一个网络只能使用一种子网掩码,这就限制了在给定的子网数目条件下主机的数目。例如你被分配了一个C类地址,网络号为192.168.10.0,而你现在需要将其划分为三个子网,其中一个子网有100台主机,其余的两个子网有50台主机。我们知道一个C类地址有254个可用地址,那么你如何选择子网掩码呢?从上表中我们发现,当我们在所有子网中都使用一个子网掩码时这一问题是无法解决的。此时VLSM就派上了用场,我们可以在100个主机的子网使用255.255.255.128这一掩码,它可以使用192.168.10.0到192.168.10.127这128个IP地址,其中可用主机号为126个。我们再把剩下的192.168.10.128到192.168.10.255这128个IP地址分成两个子网,子网掩码为255.255.255.192。其中一个子网的地址从192.168.10.128到192.168.10.191,另一子网的地址从192.168.10.192到192.168.10.255。子网掩码为255.255.255.192每个子网的可用主机地址都为62个,这样就达到了要求。可以看出合理使用子网掩码,可以使IP地址更加便于管理和控制。

、、、、、、、、、、、、、、、、、、、、、、、、、

定义子网掩码

用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。

定义子网掩码的步骤为:

A、确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”,该网络地址为c类IP地址,网络标识为“210.73.a”,主机标识为“b”。

B、根据我们所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们需要12个子网,将来可能需要16个。用第四个字节的前四位确定子网掩码。前四位都置为“1”,即第四个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。

C、把对应初始网络的各个位都置为“1”,即前三个字节都置为“1”,则子网掩码的间断二进制形式为:“11111111.11111111.11111111.11110000” 。

D、把这个数转化为间断十进制形式为:“255.255.255.240” 。

计算方式

由于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。

根据子网数

利用子网数来计算

在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。

1)将子网数目转化为二进制来表示

2)取得该二进制的位数,为 N

3)取得该IP地址的类子网掩码,将其主机地址部分的前N位置1 即得出该IP地址划分子网的子网掩码。

如欲将B类IP地址168.195.0.0划分成27个子网:

1)27=11011

2)该二进制为五位数,N = 5

3)将B类地址的子网掩码255.255.0.0的主机地址前5位置1(B类地址的主机位包括后两个字节,所以这里要把第三个字节的前5位置1),得到 255.255.248.0

即为划分成27个子网的B类IP地址 168.195.0.0的子网掩码(实际上是划成了32-2=30个子网)。

这一段介绍的是旧标准下计算的方法,关于旧的标准后文在介绍,在新标准中则可以先将27减去1,因为计算机是从0开始计算的,从0到27实际上是有28个,所以说如果需要27个就需要将27减去1。

根据主机数

利用主机数来计算

1)将主机数目转化为二进制来表示

2)如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为 N,这里肯定N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位。

3)使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。

如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:

  1. 700=1010111100

2)该二进制为十位数,N = 10

3)将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255

然后再从后向前将后10位置0,即为: 11111111.11111111.11111100.00000000

即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址168.195.0.0的子网掩码。

子网掩码最直接的作用是判断IP地址与另一个IP地址是否在同一个网段内。

下面先简单看一个电脑上IP的基本配置

IP地址:192.168.0.5

子网掩码:255.255.255.0

默认网关:192.168.0.1

如上的例子,IP地址、子网掩码、默认网关。假如现在上边的电脑A(IP地址192.168.0.5)要给电脑B(IP地址为192.168.0.22)发送数据,首先A将数据发到路由器,路由器经过判断B的地址和A的地址在同一个网段内,然后路由器就将数据直接发送给B。

路由器具体使用子网掩码来判断IP地址是先将这些IP地址和子网掩码都换成二进制,然后按照子网掩码的最长位数的1来比较。

第一步:转换为二进制

A的IP地址:11000000,10101000,00000000,00000101

子网掩码:11111111,11111111,11111111,00000000

B的IP地址:11000000,10101000,00000000,00010110

第二步:按照子网掩码最长1来比较

看上边的内容,子网掩码在左边一共有24位为1,那这样的意思就是如果两个IP地址的前24位都相同的话,那这两个IP地址就是在同一个网段内,看到我红色标记的A和B的地址都相同,那这就说明A和B在同一个网段内。

再看一个例子,如果还是A地址的数据发到C地址,C的IP地址为192.168.56.21

第一步:转换为二进制

A的IP地址:11000000,10101000,00000000,00000101

子网掩码:11111111,11111111,11111111,00000000

C的IP地址:11000000,10101000,00111000,00010101

第二步:按照子网掩码最长1来比较

看上边的A和C,按照子网掩码的要求,如果C的前24位和A的前24位都相同的话,那么A和C才是同一网段的,看上边C的地址,我用蓝色来标注不同的位数,这样A 和C就不在同一个网段内,路由器就不能直接把A要发给C的数据直接经过一个路由器给发送过去,这样路由器就要先将A的数据转发到另外一个路由器(一个不行就继续往下发),然后再发到C上。

问题扩展:

一:上边的例子中子网掩码为255.255.255.0,那么能不能把子网掩码给修改呢,完全可以。

在上边A和C的例子中,如果把子网掩码改成255.255.0.0,再看一下

A的IP地址:11000000,10101000,00000000,00000101

子网掩码:11111111,11111111,00000000,00000000

C的IP地址:11000000,10101000,00111000,00010101

这样A和C就在同一个网段内了

二:扩展子网

在一个公司或者学校内部,已经分配好了网络号,按照内部行政结构的不同,再将网络分配成子网络号。

举例:如果一个公司主机已经分配好的网络按照255.255.0.0的子网掩码来区分主机号,现在由于公司有两个部门,想要按照部门来划分成两个子网络来,那么可以简单的用子网掩码来划分。现在来考虑,有两个部门,按照二进制的做饭,那么只要有一位的数字0和1来区分就可以了。

按照255.255.0.0(11111111,11111111,00000000,00000000)来划分,前边了16位是网络号,按照子网掩码是按照最长1来匹配,那么现在就在17位划分位0和1来区分成两个。那么可以给一个部门的子网掩码划分为255.255.128.0,另一个划分为255.255.0.0,用二进制来比较一下

255.255.0.0:11111111,11111111,00000000,00000000

255.255.128.0:11111111,11111111,10000000,00000000

这样就简单的将两个部门来划分开了

三:路由的时候选择最长1来匹配

路由的时候为什么选择最长1来匹配,理由是这样的:如果是在好几个可以匹配的网段内(还是按照子网掩码)选择最长的那个,可以很快的找到匹配。如果是按照最短的,那么需要匹配的主机就多,还有一种可能是一个路由器转发不了,还要换另一个路由,很可能造成包在网络内循环,最后直至包被丢弃。

四:网关的概念

在开始的例子中提到默认网关的概念,先来看网关的概念。

网关实质上是一个网络通向其他网络的IP地址,网关的IP地址是具有路由功能的设备的IP地址,按照上边的192.168.0.1网关的例子,网关就是有那么一台机子或者是PC机或者是服务器它的IP地址是192.168.0.0,这个设备有路由功能。按照这个理论,一个设备的IP必须和自己的网关在同一个网段内,这是必须的。

说完网关,再说默认网关,默认二字就没有太多解释的了,这里举例说明:网关可能不止一个,有网关一、网关二等等,默认网关就是选择其中之一做为默认值。

作者:吴业鹏
链接:https://www.jianshu.com/p/1d900d1c4d45
來源:简书

你可能感兴趣的:(网络,java,面试)