IP 地址大解密

以前觉得IP协议距离工作很遥远,结果腾讯云设置一个安全组就马上凉凉了,最后不得以为之,只能认真将网络IP协议相关的啃一遍了。

先说问题,腾讯云安全组,我想设置某一个端口,只能被集群内有所的机器访问,但是如果一个个设置就非常麻烦了,所以要通过设置子网掩码的方式,来进行IP范围设置,关于ip中什么是网络号、主机号、子网、子网掩码等,会在下面一一给大家介绍。

一、IP地址

在根据TCP/IP协议进行通信时,要用IP地址来标识主机或路由器。在IPv4中,IP地址是一个32位的整数。所以最多可以表示的数字IP地址是:2^32(大约是43亿)。

IP地址由网络号和主机号两部分来标识。 处于不同网段内的主机必须有不同的网络标识。而处于同一网段内的主机的网络号表示相同,但主机号标识必须不同。所以,在某网段内新增一台主机后,该主机的网络号与该网段的网络号相同,但是主机号不能与该网段里的其他主机的主机号相同。

通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的。

有一种DHCP技术,可以自动为网段内新增结点主机分配IP地址。一般的路由器都带有DHCP功能,因此路由器可以看做一个DHCP服务器。

通过将IP地址划分为网络号和主机号来标识,可以有如下特点:

  1. IP地址管理机构在分配IP地址时只分配网络号。剩下的主机号由得到该网络号的单位自行分配,这样就方便了管理就够的管理;

  2. 路由器在寻找目的主机的IP地址时,只需找到目的主机所在的局域网,再在该局域网内寻找目的主机。

  3. 具有不同网络号的局域网必须有路由器进行连接,所以路由器总是有两个或两个以上网络号不同的IP地址

那么该如何划分网络号和主机号呢?

二、IP地址分类

IP地址可以分为五类:A~E类。各类别的网络号和主机号分别对应如下:

各类地址的表示范围是:

A类:0.0.0.0~127.255.255.255

B类:128.0.0.0~191.255.255.255

C类:192.0.0.0~223.255.255.255

D类:224.0.0.0~239.255.255.255

E类:240.0.0.0~247.255.255.255

A类地址的网络号占1个字节,只有7位可以使用。可以指派的A类网络号为126(27-2)个。A类IP地址中网络字段全0表示的是“本网络(A类网络)”的意思,不用于分配给具体的主机。IP地址中网络号全1表示的是本地环回地址,用于测试本主机的进程之间的通信,即网络号为127的IP地址。A类地址的主机号占3个字节,所以一个A类网络中可以连接的最大主机数为:224-2。主机号全0表示该主机连接的单个网络地址(某个A类网络),主机号全1表示该网络中的所有主机。

B类地址的网络号占2个字节,只有14位可以使用。可以指派的B类网络号为214-1(128.0.0.0)不用,最小的网络号为:128.1.0.0。每一个B类网路可以连接的最大主机数为:216-2=65534。(扣除主机号全0和全1的IP地址)。

C类地址的网络号占3个字节,只有21位可以使用。可以指派的C类网络号为221(192.0.0.0不用),最小的网络号为:192.0.1.0。每一个C类主机可以连接的最大主机数为:28-2=254(扣除主机号为全0和全1的IP地址)。

在上述的分类中,存在以下问题:

  1. IP地址空间的利用率降低:一个B类网络中最多可以表示的IP地址为65534个,而某些种类网络由于链路的特点能够连接的结点个数有限,所以就会造成大量的IP地址浪费;由于C类网络能连接的结点个数有限。所以,单位会申请B类网络,但一般又用不了这么多的IP地址,所以会造成IP地址的浪费。同理,A类网络的IP地址也会造成大量的浪费;

  2. 如果给每一个物理网络都分配一个网络号,就会导致路由表过大。此时就会造成路由表的管理成本增加,同时查询的效率也会增加。

  3. 当一个单位申请了一个网络号。他想将该网络能表示的IP地址再分给它下属的几个小单位时。如果在申请新的网络就会造成浪费。

为了解决上述的问题,引入子网划分的概念。

三、子网划分和子网掩码

子网划分

子网划分实际是在将原A类,B类,C类网络中的主机号的部分作为子网号,将原来的ABC类网络细化的过程,将原来的一个网络分为多个网络,但是在对外表现上,还是表现为原来的一个网络。

所以,此时,IP地址组成为:网络号+子网号+主机号。

在数据进行通信的过程中,首先根据目的IP地址找到目标主机所在的网络(路由器),再根据目的IP地址的子网号找到目标主机所在的子网,最后找到目标主机。

比如,一个B类IP地址为:192.168.0.0。先将该网络划分多个子网,假定子网号占用了8位。由于原B类网络中主机号一共占用了16位,子网络拿走8位之后,一个子网中的主机号所占的位数就变成了8位。假定其中一个子网为192.168.5.0。在数据通信时,目的主机为该子网中的IP地址为192.168.5.8的主机。因此,在数据传输过程中,首先会根据目的IP地址找到该主机所在的网络192.168.0.0(其实是找到该网络上的路由器),再通过IP地址找到目的主机所在的子网192.168.5.0。最后在该子网内找到目的主机。

此时,可以将网络号和子网号统一为网络标识。

子网掩码

当数据报到达目的主机所在网络的路由器时,如何将它转发到子网上呢?

为了使目的主机所在网路的路由器能够很方便的找到目的子网,引入“子网掩码”的概念。子网掩码也是一个32位的整数,它是由一串1和一串0构成,1对应于目的主机所在的网络号和子网号,0对应于目的主机所在的主机号。对于没有划分子网的网络号,也有子网掩码,此时子网掩码中的1对应于网络号,0对应于主机号。将网络号和子网号统称为网络号后,子网掩码中的1就对应于网络号,0对应于主机号。

将目的主机的IP地址与子网掩码进行按位与操作,便可以确定目的主机所在的网络号。

如下图:

此时,将目的主机IP与子网掩码按位与之后得到就是该目的主机所在的网络地址IP。在本例中,该子网的主机IP的表示范围是:145.13.3.0~145.13.3.255。能够连接的主机个数为254台(去除主机号为全0和全1的IP地址)。

上述中,子网掩码与主机IP按位与之后得到网络地址,然后主机号由全0到全1即表示该子网的地址范围。

子网掩码除了上述的表示方法外,还有一种表示方法:在每个IP地址之后追加网络地址的位数。如上例中:

145.13.3.10/24。表示的是IP地址为145.13.3.10的主机IP,子网掩码的高24位为全1。因此网络地址的高24位与该IP地址相同即145.13.3.0。

所以,在路由表中既要有目的网络地址,也要有该网络的子网掩码。才能判断目的IP是否与目的网络地址对应。

特殊的IP地址

与上述的ABC类相同,主机号为全0的表示“该网络”,主机号为全1的表示“所有主机”即广播地址。127.开头的为本机环回测试,一般为127.0.0.1。

CIDR

由于A类的所能派发的网络号有限,而C类网络能连接的主机个数有相对较少,所以一般的单位在申请网络时,都会申请B类网络,这就导致了B类网络的严重缺乏。

所以,开始放弃IP地址的分类,采用任意长度分割IP地址的网络标识和主机标识,它与ABC类的划分没有任何关系。称为CIDR。它可以不受IP地址分类的限制,自由进行分配。

此时的IP地址可以表示为:网络号+主机号(这个网络号可以是任意长度的)。

当申请到一个任意长度的网络号之后,也可以在网络内进行子网划分。所以对于任一个子网也对应一个子网掩码。使用方法与上述相同。

CIDR更有效的利用了当前的IPv4地址,同时也减轻了路由器的负担。它可以将多个连续C类地址合并为一个网络(和你宝贵的个数以2,4,8,...呈现)。 例如:将两个C类网络:192.168.224.0和192.168.225.0合并为一个网络。此时合并后的网络中可以连接的主机数增加到2^9-2=510台。在未合并之前,需要在路由表中占用两行来表示两个C类网络,合并后只需用一行就可以表示。

四、腾讯云安全组ip实战

IP地址大家都清楚了,那我们就可以回到刚开始的问题了,如何设置一个端口只能被集群内网访问(集群内网指的是云服务器的内网ip地址)?那我们的问题也就是,如何设置子网掩码,让所有的云服务器内网ip都能在同一个子网下面?

比如我们的内网ip为:10.1.0.12、10.1.0.2、10.1.0.16、10.1.0.30、10.1.0.7

如果我们设置为:10.1.0.0/24,那子网掩码是:11111111 11111111 11111111 00000000,其中网络号有24位,主机号有8位

计算网络地址

网络地址就是:把IP地址转成二进制和子网掩码进行与运算

10.1.0.0转为二进制地址:11001010 01110000 00001110 10001001

IP地址&子网掩码

00001010 00000001 00000000 00000000
 
11111111 11111111 11111111 00000000
 
------------------------------------------------------
 
00001010 00000001 00000000 00000000

即网络地址为:10.1.0.0

计算广播地址

广播地址:网络地址的主机位全部变成1 ,11111111 即255 ,即:10.1.0.255

主机地址范围是:网络地址+1 至 广播地址-1,也就是10.1.0.1-10.1.0.254。

所以我们只需要设置10.1.0.0/24,就可以将内网所有机器全部涵盖在里面了,是不是超级方便啊~

-----------------------

公众号:林老师带你学编程

网站:wolzq.com

代码无非增删改查,关注老师给你Coding

林老师带你学编程https://wolzq.com

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页