1、IPv4地址数组
IPv4地址为32bit地址,分为5类(ABCDE,这里不讨论特殊用途的D和E类)。网络
一般咱们八位一看,写成4个部分,例如:00000000 00000000 00000000 00000000,用点分十进制法就写成0.0.0.0;less
11111111 11111111 11111111 11111111,可写成255.255.255.255。dom
下面统一用紫色标注IP地址中的网络部分,蓝色表示主机部分。下面的说法中基本上“网络段=网络号=IP地址的网络部分”,就不一个个修改了:)性能
A类地址学习
A类地址必须以一个‘0’开头,紧接着的7位表明网络段,剩余24位表示主机段。测试
先不看主机段,网络段的7位全为0或全为1分别表示最小或最大的网络段,即:spa
0 0000000 00000000 00000000 00000000设计
它表明的地址是0.0.0.0;ssl
0 1111111 00000000 00000000 00000000
也即127.0.0.0。但实际上网络位不能全为0或者全为1,全为0表示全部网络,全位1用做网络回路测试。
剩下24位是主机位,那么一共能够有2^24-2个主机,它也要减2是由于主机位一样不能全为0或1,全为0表示网络地址,全为1表示本地广播,在子网掩码部分还会讲到。
所以A类地址的范围是0.0.0.0-127.255.255.255。可用网络段1.X.X.X - 126.X.X.X共126(2^7-2)个,可用主机段X.0.0.1 - X.255.255.254共2^24 - 2个。
B类地址
B类地址必须以一个‘10’开头,后面的14位表示网络段,剩余16位表示主机段。
一样的,先不看主机段:
10 000000 00000000 00000000 00000000
即128.0.0.0;128.0为最小网络段
10 111111 11111111 00000000 00000000
即191.255.0.0;191.255为最大网络段。所以一共是2^14个网络段。
最大地址是191.255.255.255,固然主机号仍是不能全为0或1,有2^16-2个主机段。
C类地址
C类地址必须以一个‘110’开头,后面的21位表示网络段,剩余8位表示主机段。
110 00000 00000000 00000000 00000000
即192.0.0.0;
110 11111 11111111 11111111 00000000
即223.255.255.0;共有2^21个网络段;
最大地址是223.255.255.255,有2^8-2个主机段。
2、子网掩码
利用IP地址的网络段,咱们能够惟一的标识一个物理网络。如今考虑咱们要将一些网络(Network)链接到Internet上来,对于一个Network,不管它拥有的主机数多小,它至少都须要一个C类网络地址,若是它拥有超过255个的主机(或者有拓展到超过255个主机数的可能),那就须要一个B类网络,但对于咱们的IPv4地址,它的地址数是有限的(大约40多亿个),若是是有300个主机的小网络,却不得不使用B类网络(一个B类网络有65534个主机段),那就浪费了6万多个地址,这使得地址的消耗变得很是快(事实上,早在2011年IPv4地址就分配完了……)
而网络段一样也是IPv4地址的一个掣肘,学习路由的相关概念咱们知道,路由器一般要创建一个转发表(Forwarding table)来告知本身怎样到达不一样的主机,所以主机数越多,转发表也越庞大,大的转发表给路由器又带来了性能负担……
为了给IPv4地址“续命”,或者说为了更高效地使用IP地址,人们想出了一种叫作子网(Subnet)的办法。
子网的想法是将一个IP地址分配给一系列的物理网络。固然,这些物理网络是有要求的,它们在距离上应该比较接近,对于一个远程端点来讲,它每每会被视做一个独立的网络(有独立的网络号)。比较理想的子网情景是有某个大公司或者学校内部,它们有不少个物理网络,而且最终做为某个网络(主网络)的子网,外界与它们内部的网络打交道时只要知道主网络与Internet的链接点就好了。
实现子网的方式是使用子网掩码。子网掩码与IP地址相同,也是32位,也分为网络段和主机段,并且它的网络段都是1,主机段都是0(为何是1和0下面解释)。对于简单的IP地址来讲,全部同一个网络下的主机IP都有相同的网络段,而子网掩码则说:全部同一物理网络下的主机都属于相同的子网,这些子网又可能属于同一个主网络,这就使得不一样物理网络下的主机可能拥有相同的网络号。
以一个B类地址128.96.34.15为例,咱们使用按位与运算,将子网掩码的前几位都设置为1,X & 1 = X,而X & 0 = 0,这样咱们将IP地址与子网掩码按位与时,主机部分的信息都被“遮蔽”了。如今假设它的子网掩码是11111111 11111111 11111111 100000000,即255.255.255.128,将它与128.96.34.15按位与,获得128.96.34.0,这就能够获知本身所在的子网号。
考虑以下两个主机:;
H1:所在子网128.96.34.0,子网掩码255.255.255.128,IP是128.96.34.15
H2:所在子网128.96.34.128,子网掩码255.255.255.128,IP是128.96.34.139
若是H1要发东西给H2,那么H1要将H2的地址与本身的子网掩码按位与,发现结果是128.96.32.128,而本身所在子网是129.96.32.0,这说明H1与H2不在同一子网中,所以H1将数据包发送给路由器,由路由器转发给H2.
子网掩码使得咱们将一个IP地址“升格”了,例如128.96.34.0,使用子网掩码255.255.255.128它能够表示从128.96.34.0-128.96.34.127的128个地址(0到127与128按位与都得0),而在外界的目光看来,这些网络其实都是一个网络,是128.96.34.0(主网号),这就大大减小了路由器的负担。
子网掩码的设计:
上面已经讨论过使用按位与运算来保留网络部分的信息而过滤掉主机部分的信息,对于A类网络,它的网络部分(这里也算上开头的‘0’)是前8位,所以A类网络的子网掩码必定是255.X.X.X,相似的B类是255.255.X.X,C类网络是255.255.255.X。
假设咱们申请到一个B类网络段168.195,须要27个子网,要怎么设计子网掩码呢?
27 < 32 = 2^5,意味着咱们至少须要5个二进制位来区分这些子网,即对于“原装的”B类子网掩码255.255.0.0,咱们须要额外的5个二进制位来保存子网网络号信息,而网络段排在主机段前面,所以将255.255.0.0的主机段前5位置1就好了,获得255.255.248.0,11111111 11111111 11111 000 00000000。这样咱们能够保证一个主网IP旗下的IP与子网掩码按位与以后可以获得它。
相似的给定网络段,要求依据每一个子网内的主机数来设计子网掩码,先将原装的子网掩码所有置1,而后从右往左置须要过滤的主机位数个0就好了。每一个子网700个主机就置10个0(512 < 700 < 1024)。
使用子网掩码,咱们必定程度上解决了路由器转发表的问题,但尚未解决上述的IP浪费问题。此外,子网掩码也带来了新的问题,以某B类主网号128.96.0.0为例,若是使用子网掩码255.255.0.0,那么它所指代的网络IP就是从128.96.0.0到128.96.255.255的全部IP,咱们能够发现主网号与旗下的一个网络地址128.96.0.0重叠。这时若是外界说要发送给129.96.0.0,主网就会感到疑惑,它不知道这是要发给本身的仍是要发给旗下的128.96.0.0。
3、CIDR
CIDR的全称是Classless Interdomain Routing,即无类别域间路由。
CIDR表示方法:IP地址/网络ID的位数(网段的划分更加灵活)
咱们知道肯定一个子网须要知道主机地址和子网掩码,但用CIDR的形式,能够简单获得两个数值。举例说吧,192.168.0.0/24”就表示,这个网段的IP地址从192.168.0.1开始,到192.168.0.254结束(192.168.0.0和192.168.0.255有特殊含义,不能用做IP地址);子网掩码是255.255.255.0。 上面的子网掩码怎么来的呢?其实关键就在“24”上。咱们知道IP地址是四个十进制数组成的,至关于32位二进制。用CIDR表示形式,后一个数字将这32位进行了间隔(以24为例):前24位用"1"表示,后面8位用0表示,获得一个二进制数: 11111111 11111111 11111111 00000000。将其转化为十进制,就是:255.255.255.0了。 例如:192.168.1.0/24表示网段是192.168.1.0,子网掩码是24位,子网掩码为:255.255.255.0,用二进制表示为:11111111 11111111 11111111 00000000 ,这里为何是24呢,就是由于子网掩码里面的前面连续的“1”的个数为24个,必定要连续的才行。 再给你举个例子,192.168.1.0/28表示的意思是网段是192.168.1.0,子网掩码为:255.255.255.240,用二进制表示为:11111111 11111111 11111111 11110000。 这时候你也许就疑惑了,就是24和28两个字不同,为何网段是同样的呢? 24位说明网络位是24位,那么主机位就是32-24=8位了,则子网的IP个数是254个,便是从00000001到11111110. 28位说明网络位是28位,那么主机位4位,则子网的IP个数是14个,便是从00000001到00001110.