• 关于IP的相关计算


    不论是考研还是考各种计算机类的证,大家或多或少都会遇到网络部分的一种题型,大体的归类就是以下几种:

    1. 已知一个IP是192.XX.XX.XX,子网掩码是255.255.255.0,那么它的网络地址是多少?
    2. 已知某主机的ip地址是192.168.100.200,子网掩码为255.255.255.192,其网络内可用的ip地址个数为多少?
    3. 一个A类ip地址的子网掩码是255.255.240.0,共有几位被用来划分子网?且可以划分多少个子网?每个子网ip地址数量是多少?
    4. 已知IP地址为10.135.255.19,子网掩码为255.255.255.248,那么该网的广播地址为多少?

    这里就详细记录一下这类问题的解决方案,看这些问题之前,先补充一下网络里面一些关于IP的知识。

    IP地址的格式和分类

    IP地址是一个网卡在网络世界的通讯地址,相当于我们现实生活中的门牌号,既然是门牌号就必须要保证唯一,就好比,你住13号楼2单元602,我的地址也是13号楼2单元602,那快递小哥就懵逼了,所以,有时候咱们电脑弹出网络地址冲突,上不去网的情况,多半就是Ip冲突。

    在网际层中,利用 IP 地址将数据传输到目的地。为了能够使数据正确地发送到目标主机上,网络上的 IP 地址必须有一定的规则来识别主机的位置。就拿10.11.12.13来说,这是一个IP地址,这个地址被点分割为四个部分,每个部分8个bit,所以IP地址总共是32位。本来32位的IP设计就导致数量不多,设计者们又将它划分为了5种类型:

    为了便于寻址,了解目标主机的位置,每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络 ID,网络上的一个主机(包括网络上的工作站、服务器和路由器等)有一个主机 ID 与其对应。这个ID的确认就是使用上面提到的32位来进行划分,说白了就是32个二进制位,前几位为网络ID,后几位为主机ID。

    • A 类:前 8 位表示网络 ID,网络 ID 的第一位以 0 开始的地址。后 24 位表示主机 ID;该地址分配给政府机关单位使用。
    • B 类:前 16 位表示网络 ID,网络 ID 的第一位以 10 开始的地址。后 16 位表示主机 ID;该地址分配给中等规模的企业使用。
    • C 类:前 24 位表示网络 ID,网络ID的第一位以 110 开始的地址。后 8 位表示主机 ID;该地址分配给任何需要的人使用。
    • D 类:不分网络 ID 和主机 ID;地址以 1110 开始的地址。该地址用于多播。
    • E 类:不分网络 ID 和主机 ID;地址以 11110 开始的地址。该地址用于实验。

    下面这个表图,详细标明了ABC三类所能包含的主机数量

     

    CIDR(无类域间路由)

    经过上面的介绍,我们似乎发现了一个问题,能给我们使用的似乎只有C类地址,而C类地址的数量有限且不是很多,只有254个,这要是使用的话,一个网吧或者一个稍微大一点的单位就能把254个IP给分干净,而B类的地址又太多,这似乎很不平衡。于是,CIDR(Classless Inter-Domain Routing,CIDR)就诞生了,CIDR中文名字叫做无类域间路由,无类域间路由(Classless Inter-Domain Routing,CIDR)可以将路由集中起来,在路由表中更灵活地定义地址。它不区分 A 类、B 类、C 类地址,而是使用 CIDR 前缀的值指定地址中作为网络 ID 的位数。

    CIDR 标记使用一个斜线  分隔符,后面跟一个十进制数值表示地址中网络部分所占的位数。例如,10.100.122.2/24 中的 24 表示地址中 24位用于网络 ID,后8位用于主机ID,伴随着CIDR的,随之产生了 广播地址 10.100.122.255 和 子网掩码 255.255.255.0

    如何理解子网掩码

    要想理解什么是子网掩码,就不能不了解IP地址的构成。互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。
    IP地址的网络号和主机号各是多少位呢?如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现。什么是子网掩码子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分子网掩码的设定必须遵循一定的规则。与IP地址相同,子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示;右边是主机位,用二进制数字“0”表示。假设IP地址为“192.168.1.1”子网掩码为“255.255.255.0”。其中,“1”有24个,代表与此相对应的IP地址左边24位是网络号;“0”有8个,代表与此相对应的IP地址右边8位是主机号。这样,子网掩码就确定了一个IP地址的32位二进制数字中哪些是网络号、哪些是主机号。这对于采用TCP/IP协议的网络来说非常重要,只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。

    具体的计算

    有了前面的补充,我们开始详细来看一下开篇说的几个问题。

    已知一个IP是192.XX.XX.XX,子网掩码是255.XXX.XXX.0,那么它的网络地址是多少?

    这一类型的思路就是,先将IP地址与子网掩码转化为二进制,然后进行 and 运算。

    假设IP是192.168.2.1,子网掩码是255.255.255.0,

    IP的二进制为:11000000.10101000.00000010.0000000

    子网掩码的二进制:11111111.11111111.11111111.00000000

    进行按位 “与(and)” 计算:

    11000000.10101000.00000010.00000000

    11111111.11111111.11111111.00000000

    得:

    11000000.10101000.00000010.00000000

    8位为一单位转化为10进制:

    网络地址就是:192.168.2.0

    知某主机的ip地址是192.168.100.200,子网掩码为255.255.255.192,其网络内可用的ip地址个数为多少?

    这一类型思路就是,计算网络掩码中主机ID的位数,看看主机ID可以分出多少台机器

    将子网掩码255.255.255.192转换为二进制:11111111.11111111.11111111.11000000

    子网掩码共有26位,还有6位可用。

    即2的6次方减去2(广播地址和网络地址不可用),等于62,即有62个ip地址可用。

    一个A类ip地址的子网掩码是255.255.240.0,共有几位被用来划分子网?且可以划分多少个子网?每个子网ip地址数量是多少?

    首先,固定类型的IP地址的子网掩码数是确定的,根据给出的子网掩码位数与默认的子网掩码位数的差值,可以得出子网数,每个子网的网络号位数已经确认,那么,只需要用总位数(32)减去网络号的位数,可以得到每个子网的主机ID的位数,就能求出每个子网的IP地址数量

    将子网掩码255.255.240.0转换为二进制:11111111.11111111.11110000.00000000

    子网掩码共有20位,而一个A类的ip地址的子网掩码是8位,即有12位被用来划分子网。

    所以子网数为:2的12次方=4096个子网。

    因为ip地址为32位,网络号已为20位,则主机数12位。每个子网中的ip数量为2^12=4096,但是能够分配给计算机使用的只有4096-2=4094个,(减去一个网络地址与一个广播地址)。

    已知IP地址为10.135.255.19,子网掩码为255.255.255.248,那么该网的广播地址为多少?

    要得到广播,先得出网络地址,然后把网络地址的主机位全换成1,便就是广播地址。

    将ip地址10.135.255.19转换为二进制:00001010.10001001.11111111.00010011

    将子网掩码255.255.255.248转换成二进制:11111111.11111111.11111111.11111000

    然后将两者相“与(and)"运算得出网络号:

    00001010.10001001.11111111.00010011

    11111111.11111111.11111111.11111000

    得:00001010.10001001.11111111.00010000,转换成网络地址就是:10.135.255.16

    从子网掩码 11111111.11111111.11111111.11111000 可以看出,这个子网掩码是29位。也就是主机数还有3位可用。

    把网络地址 00001010.10001001.11111111.00010000 的后面三个零全换成1,得出广播地址为:10.135.255.23

  • 相关阅读:
    Java基础之集合Collection一:
    Java基础之字符串String:
    Java基础之Map学习代码示例二:
    Jav基础之字符串缓冲区StringBuffer:
    Java基础之TreeSet集合使用泛型、比较器排序示例:
    Java基础之Map学习代码示例一:
    Java基础之StringBuilder
    Java基础之泛型限定的使用示例:
    Java基础之泛型的应用
    spark.primitives 包中的几个基本类
  • 原文地址:https://www.cnblogs.com/TheGCC/p/14216741.html
Copyright © 2020-2023  润新知