子网掩码(subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址 的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP 地址一起使用。子网掩码只有一个作用,就是将某个IP 地址划分成网络地址和主机地址两部分。
子网掩码 (subnet mask) 是每个网管必须要掌握的基础知识,只有掌握它,才能够真正理解 TCP/IP协议 的设置。以下我们就来深入浅出地讲解什么是子网掩码。
要想理解什么是子网掩码,就不能不了解 IP 地址的构成。互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP 地址在设计时就考虑到地址分配的层次特点,将每个 IP 地址都分割成网络号和主机号两部分,以便于 IP 地址的寻址操作。
IP 地址的网络号和主机号各是多少位呢?如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现。
子网掩码的设定必须遵循一定的规则。与 IP 地址相同,子网掩码由 1 和 0 组成,且 1 和 0 分别连续。子网掩码的长度也是 32 位,左边是 网络 位, 用二进制数字 “1” 表示, 1 的数目等于网络位的长度;右边是主机位,用二进制数字 “0” 表示, 0 的数目等于主机位的长度。这样做的目的是为了让掩码与 ip 地址做 AND 运算时用 0 遮住原主机数,而不改变原网络段数字,而且很容易通过 0 的位数确定子网的主机数( 2 的主机位数次方 -2 ,因为主机号全为 1 时表示该 网络广播地址,全为 0 时表示该网络的网络号,这是两个特殊地址)。只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。
子网掩码的术语是扩展的 网络前缀 码不是一个地址,但是可以确定一个网络层地址哪一部分是 网络号 ,哪一部分是主机号, 1 的部分代表网络号,掩码为 0 的部分代表主机号。子网掩码的作用就是获取主机 IP 的网络地址信息,用于区别主机通信不同情况,由此选择不同路由。其中 A类地址 的默认子网掩码为 255.0.0.0 ; B类地址 的默认子网掩码为 255.255.0.0 ; C类地址 的默认子网掩码为: 255.255.255.0 。
使用子网是为了减少 IP 的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多 IP 地址,所以要划分子网。
通过 IP 地址的二进制与子网掩码的二进制进行与运算,确定某个设备的网络地址和主机号,也就是说通过子网掩码分辨一个网络的网络部分和主机部分。子网掩码一旦设 置,网络地址和主机地址就固定了。子网一个最显著的特征就是具有子网掩码。与 IP 地址相同,子网掩码的长度也是 32 位,也可以使用十进制的形式。例如,为 二进制形式的子网掩码: 1111 1111.1111 1111.1111 1111.0000 0000 ,采用十进制的形式为: 255.255.255.0 。
子网掩码是一个 32 位地址,是与 IP 地址结合使用的一种技术。它的主要作用有两个,一是用于屏蔽 IP 地址的一部分以区别网络标识和主机标识,并说明该 IP 地址是在局域网上,还是在远程网上。二是用于将一个大的 IP 网络划分为若干小的子网络。
用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。
定义子网掩码的步骤为:
A 、确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b” ,该网络地址为 C 类 IP 地址,网络标识为 “210.73.a” ,主机标识为 “.b” 。
B 、根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。 比如我们现在需要 12 个子网,将来可能需要 16 个。用第四个字节的前四位确定子网掩码。前四位都置为 “1” (即把第四字节的最后四位作为主机位,其实在这 里有个简单的规律,非网络位的前几位置 1 原网络就被分为 2 的几次方个网络,这样原来网络就被分成了 2 的 4 次方 16 个子网),即第四个字节为 “11110000” ,这个数我们暂且称作新的二进制子网掩码。
C 、把对应初始网络的各个位都置为 “1” ,即前三个字节都置为 “1” ,第四个字节低四位置为 “0” ,则子网掩码的间断二进制形式为: “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 ,得到 255.255.248.0
即为划分成 27 个子网的 B 类 IP 地址 168.195.0.0 的子网掩码。
二、利用主机数来计算
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 地址,可写成主机号为 0 的掩码。如 IP 地址 210.73.140.5 ,掩码为 255.255.255.0 ,也可以缺省掩码,只写 IP 地址。
有子网时,一定要二者配对出现。以 C 类地址为例。
( 以下一段没有指定掩码为 27 位 , 在掩码为 27 位的情况下才成立 ~~)
1.IP 地址中的前 3 个字节表示网络号,后一个字节既表明子网号,又说明主机号,还说明两个 IP 地址是否属于同一个 网段 。 如果属于同一网络区间,这两个地址间的信息交换就不通过路由器。如果不属同一网络区间,也就是子网号不同,两个地址的信息交换就要通过路由器进行。例如: 对于 IP 地址为 210.73.140.5 的主机来说,其主机标识为 00000101 ,对于 IP 地址为 210.73.140.16 的主机来说它的主机标识为 00010000 ,以上两个主机标识的前面三位全是 000 ,说明这两个 IP 地址在同一个网络区域中,这两台主机在交换信息时不需要通过路由器进行。 210.73.60.1 的主机标识为 00000001 , 210.73.60.252 的主机标识为 11111100 ,这两个主机标识的前面三位 000 与 111 不同,说明二者在不同的网络区域,要交换信息需要通过路由器。其子网上主机号各为 1 和 252 。
2. 掩码的功用是说明有子网和有几个子网,但子网数只能表示为一个范围,不能确切讲具体几个子网,掩码不说明具体子网号,有子网的掩码格式 ( 对 C 类地址 ) 。
子网掩码通常有以下 2 种格式的表示方法:
1. 通过与 IP 地址格式相同的点分十进制表示
如: 255.0.0.0 或 255.255.255.128
2. 在 IP 地址后加上 "/" 符号以及 1-32 的数字,其中 1-32 的数字表示子网掩码中网络标识位的长度
如: 192.168.1.1/24 的子网掩码也可以表示为 255.255.255.0
以下均为 C 类网
子网掩码是用来判断任意两台计算机的 IP 地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的 IP 地址与子网掩码进行 AND 运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。
运算演示之一: aa
I P 地址 192.168.0.1
子网掩码 255.255.255.0
AND 运算 (AND 运算法则: 1 与 1 = 1 ,1 与 0 = 0 ,0 与 1 = 0 ,0 与 0 = 0 , 即当对应位均为 1 时结果为 1 ,其余为 0 。 )
转化为二进制进行运算:
I P 地址 11000000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
AND 运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
运算演示之二:
I P 地址 192.168.0.254
子网掩码 255.255.255.0
AND 运算
转化为二进制进行运算:
I P 地址 11000000.10101000.00000000.11111110
子网掩码 11111111.11111111.11111111.00000000
AND 运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
运算演示之三:
I P 地址 192.168.0.4
子网掩码 255.255.255.0
AND 运算
转化为二进制进行运算:
I P 地址 11000000.10101000.00000000.00000100
子网掩码 11111111.11111111.11111111.00000000
AND 运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
通过以上对三组计算机 IP 地址与子网掩码的 AND 运算后,我们可以看到它运算结果是一样的。均为 192.168.0.0
所以计算机就会把这三台计算机视为是同一子网络,然后进行通讯的。我现在单位使用的 代理服务器 ,内部网络就是这样规划的。
也许你又要问,这样的子网掩码究竟有多少个 IP 地址可以用呢?你可以这样算。
根据上面我们可以看出,局域网内部的 ip 地址是我们自己规定的(当然和其他的 ip 地址是一样的),这个是由子网掩码决定的通过对 255.255.255.0 的分析。可得出:
前三位 IP 码由分配下来的数字就只能固定为 192.168.0 所以就只剩下了最后的一位了,那么显而易见了, ip 地址只能有( 2 的 8 次方 -2 ),即 256-2=254 ,一般主机地址全为 0 或者 1 (二进制)有其特殊的作用。
那么你可能要问了 : 如果我的子网掩码不是 255.255.255.0 呢?你也可以这样做啊假设你的子网掩码是 255.255.128.0
那么你的局域网内的 ip 地址的前两位肯定是固定的了
这样,你就可以按照下边的计算来看看同一个子网内到底能有多少台机器
1 、十进制 128 = 二进制 1000 0000
2 、 IP 码要和子网掩码进行 AND 运算
3 、
I P 地址 11000000.10101000.1*******.********
子网掩码 11111111.11111111.10000000.00000000
AND 运算
11000000.10101000.10000000.00000000
转化为十进制后为:
192 . 168. 128 . 0
4 、可知我们内部网可用的 IP 地址为:
11000000.10101000.10000000.00000000
到
11000000.10101000.11111111.11111111
( 也可以是: 11000000.10101000.00000000.00000000 到 11000000.10101000.01111111.11111111)
5 、转化为十进制:
192 . 168.128.0 到 192 . 168.255.255 (或者 192.168.0.0 到 192.168.127.255 )
6 、 0 和 255 通常作为网络的内部特殊用途。通常不使用。
7 、于是最后的结果如下:我们单位所有可用的 IP 地址为:
192.168.128.1-192.168.128.254
192.168.129.1-192.168.129.254
192.168.130.1-192.168.130.254
192.168.131.1-192.168.131.254
. . . . . . . . . . . . .
192.168.139.1-192.168.139.254
192.168.140.1-192.168.140.254
192.168.141.1-192.168.141.254
192.168.142.1-192.168.142.254
192.168.143.1-192.168.143.254
. . . . . . . . . . . . .
192.168.254.1-192.168.254.254
192.168.255.1-192.168.255.254
8 、总数为 (255-128+1)*(254-1+1) =128 * 254 = 32512
子网内包含的机器数目应该是 2^n-2 ,比如说上面的子网掩码是 255.255.128.0 , 那么他的网络号是 17 位,主机号是 15 位,只要主机号不全是 0 或者 1 就是可以的,所以 ip 地址是 192.168.192.0(11000000.10101000.11000000.00000000) 也允许,除掉全 0 全 1 ,结果为 2^15-2=32766, 上面的落了好多地址
9 、看看的结果是否正确
(1) 、设定 IP 地址为 192.168.128.1
Ping 192.168.129.233 通过测试
访问 http://192.168.129.233 可以显示出主页
(2) 、设定 IP 地址为 192.168.255.254
Ping 192.168.255.254 通过测试
访问 http://192.168.255.254 可以显示出主页
10 、结论
以上证明我们的结论是对的。
现在你就可以看你的子网中能有多少台机器了
255.255.255.128
分解:
11111111.11111111.11111111.10000000
所以你的内部网络的 ip 地址只能是
xxxxxxxx.xxxxxxxx.xxxxxxxx.0???????
到
xxxxxxxx.xxxxxxxx.xxxxxxxx.01111111
子网掩码
子网 TCP/IP 网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的。网间网规模的迅速扩展对 IP 地址模式的威胁并不 是它不能保证主机地址的唯一性,而是会带来两方面的负担:第一,巨大的网络地址管理开销;第二,网关寻径急剧膨胀。其中第二点尤为突出,寻径表的膨胀不仅 会降低网关寻径效率(甚至可能使寻径表溢出,从而造成寻径故障),更重要的是将增加内外部路径刷新时的开销,从而加重网络负担。
因此,迫切需要寻求新的技术,以应付网间网规模增长带来的问题。仔细分析发现,网间网规模的增长在内部主要表现为网络地址的增减,因此解决问题的思路集中在:如何减少网络地址。于是 IP 网络地址的多重复用技术应运而生。
通过复用技术,使若干物理网络共享同一 IP 网络地址,无疑将减少网络地址数。
子网编址( subnet addressing )技术,又叫子网寻径( subnet routing ),英文简称 subnetting ,是最广泛使用的 IP 网络地址复用方式,目前已经标准化,并成为 IP 地址模式的一部分。一般的, 32 位的 IP 地址分为两部分,即网络号和主机号,我们分别把他们叫做 IP 地址的 “ 网间网部分 ” 和 “ 本地部分 ” 。子网编址技术将本地部分进一步划分为 “ 物理网络 ” 部 分和 “ 主机 ” 部分,如图:网间网部分物理网络主机
|← 网间网部分 →|←———— 本地部分 —————→|
|← 物理网络 →|←— 主机部分 ——→|
其中 “ 物理网络 ” 用于标识同一 IP 网络地址下的不同物理网络即是 “ 子网 ” 。
(2) 子网掩码 IP 协议标准规定:每一个使用子网的网点都选择一个 32 位的位模式,若位模式中的某位置 1 ,则对应 IP 地址中的某位为网络地址(包括网间网部分和物理网络号)中的一位;若位模式中的某位置 0 ,则对应 IP 地址中的某位为主机地址中的一位。例如位模式:
11111111 11111111 11111111 00000000 中,前三个字节全 1 ,代表对应 IP 地址中最高的三个字节为网络地址;后一个字节全 0 ,代表对应 IP 地址中最后的一个字节为主机地址。这种 位模式叫做子网模( subnet mask )或 “ 子网掩码 ” 。
为了使用的方便,常常使用 “ 点分整数表示法 ” 来表示一个 IP 地址和子网掩码,例如 c 类地址子网 掩码( 11111111 11111111 11111111 00000000 )为: 255.255.255.0 IP 协议关于子网掩码的定义提供一种有趣的灵活性,允许子网掩码中的 “0” 和 “1” 位不连续。但是,这样的子网掩码给分配主机地址和理解寻径表都带来一定 困难,并且,极少的路由器支持在子网中使用低序或无序的位,因此在实际应用中通常各网点采用连续方式的子网掩码。像 255.255.255.64 和 255.255.255.160 等一类的子网掩码不推荐使用。
(3) 子网掩码与 IP 地址结合使用,可以区分出一个网络地址的网络号和主机号。
例如:有一个 C 类地址为: 192 . 9 . 200 . 13 其缺省的子网掩码为: 255 . 255 . 255 . 0 则它的网络号和主机号可按如下方法得到:
① 将 IP 地址 192 . 9 . 200 . 13 转换为二进制 11000000 00001001 11001000 00001101
② 将子网掩码 255 . 255 . 255 . 0 转换为二进制 11111111 11111111 11111111 00000000
③ 将两个二进制数逻辑与( AND )运算后得出的结果即为网络部分
11000000 00001001 11001000 00001101 AND 11111111 11111111 11111111 00000000
11000000 00001001 11001000 00000000 结果为 192.9.200.0 ,即网络号为 192.9.200.0 。
④ 将子网掩码取反再与 IP 地址逻辑与( AND )后得到的结果即为主机部分 11000000 00001001 11001000 00001101 AND 00000000 00000000 00000000 11111111 结果为 00000000 00000000 00000000 00001101 转化为十进制得到 0.0.0 .13 ,即主机号为 13 。
子网掩码一共分为两类。一类是缺省(自动生成)子网掩码,一类是自定义子网掩码。缺省子网掩码即未划分子网,对应的网络号的位 [1] [2] 都置 1 ,主机号都置 0 。
A 类网络缺省子网掩码: 255.0.0.0
B 类网络缺省子网掩码: 255.255.0.0
C 类网络缺省子网掩码: 255.255.255.0
自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机号。 形式如下:
未做 子网划分 的 ip 地址:网络号+主机号
做子网划分后的 ip 地址:网络号+子网号+子网主机号
也就是说 ip 地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。子 网掩码是 32 位二进制数,它的子网主机标识用部分为全 “0” 。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的 IP 地址分别与它们的子网掩码 相 “ 与 ” 后的结果相同,则说明这两台主机在同一子网中。
可变长子网掩码 (VLSM) 的作用 : 节约 IP 地址空间 ; 减少路由表大小 . 使用 VLSM 时 , 所采用的路由协议必须能够支持它 , 这些路由协议包括 RIPv2,OSPF,EIGRP 和 BGP. 关于更多的 VLSM 知识 , 可以去 Google 进行搜索
2 的 x 次方 -2(x 代表掩码位 , 即 2 进制为 1 的部分,现在的网络中,已经不需要 -2 ,已经可以全部使用,不过需要加上相应的配置命令,例如 CISCO 路由器需要加上 ip subnet zero 命令就可以全部使用了。 )
2 的 y 次方 -2(y 代表主机位 , 即 2 进制为 0 的部分 )
有效子网号 =256-10 进制的子网掩码 ( 结果叫做 block size 或 base number)
广播地址 = 下个子网号 -1
忽略子网内全为 0 和全为 1 的地址剩下的就是有效主机地址 . 最后有效 1 个主机地址 = 下个子网号 -2( 即广播地址 -1)
子网划分 分为两种: ◆ 给定网络地址,划分子网。 ◆不给定网络地址,根据主机数量,自由确定网络地址,进而划分子网。 【实例1】给定网络地址,划分子网。 我们单位有计算机100台左右,原来都是在 192.168.0.0 (给定网络地址)这个C类网络中,为了提高网络的性能,加强网络的安全性。我把单位的计算机按财务、人事、配件、售后...
51 三菱PLC可读不可写Q:MT8102IQ和三菱Q系列PLC通讯,屏无法写入PLC,但是可以读取PLC的状态和数值?A:PLC程序中"允许RUN中写入"打钩,程序下载重启后解决。52 控制不了输入点Q:触摸屏做了三菱PLC的X点的元件,但是控制不了X输出?A:是的,PLC端X点无法通过触摸屏控制输出,屏上只能做X点的显示。53 M...
传统方法(仅适用于普通项目): 1、在vscode中安装 Live Server 插件: 2、安装成功后,vscode右下角会有 Go Live 标识点击: 3、cmd ipconfig 查询自己电脑的ip地址: 4、复制地址替换端口前的地址(http://127.0.0.1:8080修改为http://192.168....
ngx_http_geo_module模块,默认情况下,nginx会加载,除非人为的 --without-http_geo_module。 这个模块提供了一个非常好用的geo指令,可以用它来创建变量,诞生其值依赖于客户端IP地址。 ngx_http_geo_module 模块官网地址 http://nginx.org/en...
uboot启动Linux内核过程分为4大步骤: 问题2: uboot阶段DDR的分区的问题 上述步骤2和步骤4中,有将uboot/kernel拷贝纸DDR的步骤,具体要拷贝到DDR的什么位置呢? 分清楚这两个概念: 链接地址:链接时指定的地址(指定方式为:Makefile中用-Ttext,或者链接脚本) 运行地址:程序实际运行...
在Linux系统中,以32bit x86系统来说,进程的4GB内存空间(虚拟地址空间)被划分成为两个部分 ------用户空间和内核空间,大小分别为0-3G,3-4G。 用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间。 每个进程的用户空间存放用户的程序和代码(堆栈,数据区,代码区等)...