网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

IP地址中的无类寻址方式

更新时间:2026年03月27日   作者:spoto   标签(Tag):

网络地址用于标识互联网上的某个特定网络。它用于确定该网络内的IP地址范围,同时还可以计算出该网络中可能存在的主机总数。
子网掩码是一个32位的二进制值,用于区分IP地址中的网络部分和主机部分。当对IP地址与子网掩码进行按位与运算时,得到的数值就代表了该IP地址对应的网络地址。

在类地址编址方式中,每个IP地址类别都有一个预定义的默认子网掩码。这个子网掩码决定了地址中网络部分与主机部分之间的边界。

  • A类——255.0.0.0
  • B类地址 – 255.255.0.0
  • C类地址 – 255.255.255.0

问题:已知 IP 地址为 132.6.17.85,且默认的子网掩码为 Class B 子网掩码,请找出网络地址。

解决方案:对于B类地址来说,默认的子网掩码是255.255.0.0。这意味着,前两个字节表示网络部分,而后两个字节则表示主机部分。通过将主机位设置为0,就可以得到网络地址。因此,这里的网络地址就是132.6.0.0。

子网划分

子网划分是指将一大块IP地址划分为多个较小的、连续的子块,然后将这些子块分配给不同的网络。这种技术被广泛应用于无类别地址分配中,以便更有效地管理和利用IP地址空间。

子网是一种对较大网络进行逻辑上的划分方式。通过子网划分,可以减少不必要的网络流量,从而提高网络的效率。这样一来,数据可以在网络内部沿着更短的路径传输,从而减少了需要通过多个路由器传输的情况,进而提升了整体性能。

无类地址分配

无类别寻址是一种改进的IP地址分配系统,其目的是为了减少IP地址的浪费。这种分配方式允许灵活地分配地址块。与有类别寻址方式不同,无类别寻址并不依赖于固定的网络类别。相反,它利用部分主机位作为网络位,根据实际需求来创建子网。

在无类地址分配中,IP地址会与前缀长度一起被表示出来,通常用“/”符号来表示前缀长度。例如,192.168.1.1/28。前缀长度表示在32位的IP地址中,有多少位用于网络部分。子网掩码则通过将指定数量的位置设置为1,其余位置设置为0来生成。例如,/28前缀对应的子网掩码就是255.255.255.240。

CIDR还支持超级网络结构,即可以将多个连续的C类网络合并成一个更大的网络,例如/23或/22这样的网络。这样能够实现高效的路由功能,同时更好地利用IPv4地址空间。在无类别地址分配方式中,IP地址块是根据特定的规则来动态分配的,而不是按照固定的类别来分配。

  • 不再依赖A类、B类和C类资源。
  • 使用主机位作为额外的网络位。
  • IP地址后面会加上一个前缀长度来表示具体的网络段,例如 /28。
  • 子网掩码是从前缀中派生出来的。
  • 减少了IP地址的浪费
  • 支持超级网络划分与路由聚合功能
  • 提升了可扩展性和路由效率。

在子网划分过程中计算出的某些数值:

子网数量:2个(用于掩码的位数——默认掩码中的位数)

2. 子网地址:即子网掩码与给定的IP地址进行逻辑与运算后的结果。

3. 广播地址:将主机位设置为1,同时保留与IP地址相同的网络位。

每个子网中的主机数量:2台(32位掩码中的给定位)2

5. 第一个主机ID:子网地址 + 1(在子网的二进制表示中加上1)

6. 最后一个主机ID:子网地址 + 主机数量

C++
#include<bits/stdc++.h>使用命名空间标准;字符串无类别的IP地址(字符串ip){// 将第一个八位字节提取出来,然后将其转换为整数,使用 stoi 函数进行转换。整数首个八位字节=站着不动(ip.基底/基础(0,ip.找到('.')));if(首个八位字节>=0以及首个八位字节<=127){// 指的是A类IP地址。返回ip+“/8”;}if(首个八位字节>=128以及首个八位字节<=191){// 这意味着该IP地址属于B类地址。返回ip+“/16”;}if(首个八位字节>=192以及首个八位字节<=223){// 这意味着该IP地址属于C类网络。返回ip+“/24”;}返回保留的IP地址。无效。;}//驱动程序代码整数主要/核心(){// 会将IP地址作为输入存储在ip变量中。字符串ip;cout<<请输入IP地址:;cin>>ip;cout<<无类别的IP地址(ip)<<结束;// 这段代码由 Himesh Singh Chauhan 贡献而来。返回0;}
C
#include<stdio.h>#include<stdlib.h>#include<string.h>字符/字母*无类别的IP地址(字符/字母*IP地址){整数i,j,k;整数八位字节[4];字符/字母*面具=(字符/字母*)malloc(sizeof(字符/字母)*16);整数比特=0;为了(i=0,j=0,k=0;i<strlen(IP地址);i++){if(IP地址[i]=='.'){八位字节[j++]=阿托伊(IP地址+k);k=i+1;}}八位字节[j]=阿托伊(IP地址+k);为了(i=0;i<4;i++){整数八位组=八位字节[i];为了(j=7;j>=0;j--){if(八位组>=(1<<j)){比特++;八位组-=(1<<j);}否则if(比特%8!=0){打破/中断;}}}sprintf(面具,“%s/%d”,IP地址,比特);返回面具;}整数主要/核心(){字符/字母IP地址[16];printf(请输入类式表示的IP地址:);scanf(“%s”,IP地址);printf(无类别的地址:%s\n",无类别的IP地址(IP地址));返回0;}
Python
def 无类别的IP地址(IP地址):'''将会返回无类别的IP地址。'''    除了默认子网掩码的信息之外,还可以指定用于NID的位数以及用于HID的位数。因为这些数值实际上取决于网络类别的不同。    # 主机的数量也可以根据输入的IP地址来指定。        # 通过字符串切割的方式获取第一个八位组    首八位字节=整数(IP地址[:IP地址.指数(‘.’))    if(0<=首八位字节<=127):      # 这意味着这是一个A类IP地址。        返回 IP地址+'/8'    伊莉芙(128<=首八位字节<=191):      这意味着这是一个B类IP地址。        返回 IP地址+'/16'    伊莉夫(192<=首八位字节<=223):      这意味着这是一个C类IP地址。        返回 IP地址+'/24'    否则:        打印(“这是一个被保留的IP地址,无效!!”)                ip=输入(请输入类式表示的IP地址:)打印(无类别的IP地址(ip))# 这段代码由Himesh Singh Chauhan贡献而来。
C#
使用系统/体系;类别/等级程序/计划{静态的字符串IpClassless(字符串ip地址){// 初始化一些变量整数j=0,k=0;整数[]八位字节=新的整数[4];整数比特=0;为了(整数i=0;i<ip地址.长度;i++){// 如果遇到了‘.’,就提取其对应的八位字节。if(ip地址[i]==‘.’){八位字节[j++]=整数.解析(ip地址.子字符串(k,i-k));// 将八进制数转换为整数,并将其存储起来。k=i+1;// 将下一个八位组的起始位置移动到“.”之后的字符位置上。}}// 提取最后一位八位字节八位字节[j]=整数.解析(ip地址.子字符串(k));为了(整数i=0;i<4;i++){整数八位组=八位字节[i];为了(j=7;j>=0;j--){if(八位组>=(1<<j)){比特++;八位组-=(1<<j);// 从八位字节的值中减去该位的值}否则if(比特%8!=0){打破/中断;// 如果当前位的值为0,且位数不是8的倍数,那么停止计数。}}}}返回ip地址+“/”+比特;// 返回包含位数的输入IP地址}静态的无效/无意义主要/核心(字符串[]参数/输入项){控制台.WriteLine(请输入类式表示的IP地址:);字符串ip地址=控制台.ReadLine();控制台.WriteLine(无类别的地址:”+IpClassless(i
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料