当前位置: 首页 > news >正文

无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)

文章目录

  • 无类别域间路由(CIDR):理解IP网络和子网划分
    • 引言
    • 传统的IP地址类
      • 关于“IP地址的浪费”
    • IP地址与CIDR
      • IP地址概述
      • 网络号与主机号
      • CIDR记法(`网络 = 网络地址/子网掩码`)
      • 网络和广播地址
    • CIDR的优势
      • 减少路由表项
      • 缓解IPv4地址耗尽
      • CIDR地址分配示例
    • 结论
    • 参考文献

在这里插入图片描述

1

无类别域间路由(CIDR):理解IP网络和子网划分

引言

无类别域间路由(Classless Inter-Domain Routing, CIDR)是一种用于在互联网上创建独立的IP地址分配策略的方法。这种方法允许更细粒度的IP地址分配,从而提供了比传统的IP地址类A、B、C更高效的使用2

传统的IP地址类

在早期的互联网历史中,IP地址被分为五个类别:A、B、C、D和E。每一种类别都有一个特定的地址范围,并且被设计用于特定大小的网络。这就是所谓的"分类网络"(Classful Network)。

  • 类A(Class A):这个类别的网络可以支持超过1600万个主机(设备)。类A的地址从1.0.0.0到126.0.0.0,其中前8位(即第一个数字)表示网络部分,剩余24位表示主机部分。

  • 类B(Class B):类B网络可以支持最多65534个主机。类B地址从128.0.0.0到191.255.0.0,其中前16位(即前两个数字)表示网络部分,剩余的16位表示主机部分。

  • 类C(Class C):类C网络可以支持最多254个主机。类C地址从192.0.0.0到223.255.255.0,其中前24位(即前三个数字)表示网络部分,剩余的8位表示主机部分。

类D和类E不用于常规的网络操作。类D地址被保留用于多播,而类E地址被保留作为未来使用或实验性质的用途。

然而,这种分类方法很快显得太过死板,无法适应快速增长和变化的互联网需求。比如,如果一家公司需要超过254台但少于65534台的设备,那么他们只能申请一个类B网络,这就浪费了大量的IP地址。这也是后来发展出CIDR的原因,它允许更灵活的IP地址分配。

关于“IP地址的浪费”

IP地址的浪费主要是由于传统的IP地址分配方式引起的。在CIDR(无类别域间路由)出现之前,IP地址是按照固定的类A、B、C来分配的。

  • 类A网络有16,777,214个可用的IP地址
  • 类B网络有65,534个可用的IP地址
  • 类C网络有254个可用的IP地址

如果一家公司需要超过254台但少于65534台的设备,按照传统的分配方式,他们只能申请一个类B网络。即使他们只使用了其中的一部分IP地址,剩余的IP地址也不能被其他人使用,这就导致了大量IP地址的浪费。

而CIDR通过变长子网掩码(VLSM)可以更灵活地分配IP地址,从而减少了IP地址的浪费。例如,对于需要超过254台但少于65534台设备的公司,可以将一个类B网络分成多个小网络,每个小网络的大小刚好满足公司的需求,剩余的IP地址可以分配给其他需要的人,从而实现IP地址的有效利用。

IP地址与CIDR

IP地址概述

互联网协议地址(Internet Protocol address,IP地址)是指分配给每个连接到互联网的设备的数字标签。在最常见的IPv4中,一个IP地址通常表示为四个十进制数,每个数位介于0和255之间,以点(.)分隔,例如192.0.2.0。

网络号与主机号

在这里插入图片描述

3

CIDR记法(网络 = 网络地址/子网掩码

CIDR在表示IP地址和其相关网络时,会采用一个"斜线"记法。例如,192.0.2.0/24就代表了一个包含256个IP地址的网络,其中192.0.2.0是网络的基础地址,24表示子网掩码的位数,即这个网络中有24位是网络前缀,剩下的8位是用于该网络内部的主机。

表示一个网络 192.0.2.0/24
这个网络的网络部分 (192.168.2).x
这个网络的主机部分 192.0.2.(x)

ip_network = '192.0.2.0/24'
base_address = ip_network.split('/')[0]
subnet_mask = int(ip_network.split('/')[1])

网络和广播地址

在一个CIDR块中,有两个地址不能被赋予主机:网络地址和广播地址。网络地址是CIDR块中的第一个地址,广播地址是最后一个。例如,在192.0.2.0/24中,192.0.2.0是网络地址,192.0.2.255是广播地址。

network_address = '192.0.2.0'
broadcast_address = '192.0.2.255'

CIDR的优势

减少路由表项

CIDR的引入极大地减少了路由表项的数量。在CIDR出现之前,每一个IP地址都需要在路由表中单独列出。但是,通过将IP地址组织成CIDR块,可以使用一个表项来表示整个块,从而显著降低了路由表的大小4

缓解IPv4地址耗尽

通过更灵活的分配IP地址,CIDR也有助于缓解IPv4地址空间的耗尽问题。在CIDR出现之前,IP地址只能按照固定大小的块(类A、B或C)进行分配。这种方式在处理小型网络时浪费了大量的地址。然而,CIDR允许任何大小的地址块被分配,从而使得地址空间的使用变得更加高效5

CIDR地址分配示例

例如,如果一个公司需要500个IP地址,按照早期的策略,他们将会被分配一个类B地址,即使他们只使用了其中的一小部分,其余的大约65000个地址将无法被其他组织使用,从而造成浪费。

然而,在CIDR中,地址可以按照任何大小进行划分。对于上述例子,我们可以为这家公司分配一个/23(包含512个地址)的网络,或者两个/24网络(每个包含256个地址)。这种方式下,公司能够得到接近他们所需数量的地址,同时也极大地减少了未使用地址的浪费。

# Example of allocating one /23 networks
network1 = '192.0.2.0/23',地址范围从192.0.2.0 - 192.0.3.255,共512个地址# Or allocate two /24 network
network1 = '192.0.2.0/24',地址范围从192.0.2.0 - 192.0.2.255,共256个地址
network2 = '192.0.6.0/24',地址范围从192.0.6.0 - 192.0.6.255,共256个地址

这种灵活的地址分配策略使得IPv4地址空间的使用变得更加高效,并且缓解了因为过度分配而导致的IPv4地址耗尽问题。

结论

CIDR是一种强大且灵活的工具,它使得IP地址的分配和管理变得更加简单和高效。无论是在减少路由表的大小,还是在缓解IPv4地址空间的耗尽方面,CIDR都起到了重要的作用。因此,对于任何需要理解或管理IP地址的人来说,理解CIDR都是非常重要的。

参考文献


  1. 参考文章:计算机网络(第四章)二 ↩︎

  2. Wikipedia: Classless Inter-Domain Routing ↩︎

  3. 参考文章:一文完全理解IP ↩︎

  4. How CIDR Works ↩︎

  5. RFC 4632 - Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan ↩︎

相关文章:

无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)

文章目录 无类别域间路由(CIDR):理解IP网络和子网划分引言传统的IP地址类关于“IP地址的浪费” IP地址与CIDRIP地址概述网络号与主机号CIDR记法(网络 网络地址/子网掩码)网络和广播地址 CIDR的优势减少路由表项缓解IP…...

合宙Air724UG LuatOS-Air LVGL API-概念

概念 在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性: Position (位置) Size (尺寸) Parent (父母) Cli…...

【C语言】位段,枚举和联合体详解

目录 1.位段 1.1 什么是位段 1.2 位段的内存分配 1.3 位段的跨平台问题 2.枚举 2.1 枚举类型的定义 2.2 枚举的优点 3. 联合(共用体) 3.1 联合类型的定义 3.2 联合的特点 3.3 联合大小的计算 1.位段 1.1 什么是位段 位段的声明和结构体是类…...

python学习-文件管理

文件管理 shutil 文件拷贝 shutil.copy(src,dst) 注:srcrE:\python\.vscode\文件操作 windows上运行时候,如果不加r,上述文件路径在代码运行时会报错,因为其会先将双引号”“去掉,然后系统看到了文件路径中有\nc&…...

【LeetCode 算法】Number of Ways of Cutting a Pizza 切披萨的方案数-记忆化

文章目录 Number of Ways of Cutting a Pizza 切披萨的方案数问题描述:分析代码递归 Tag Number of Ways of Cutting a Pizza 切披萨的方案数 问题描述: 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: A…...

机器视觉之光流

光流(Optical Flow)是计算机视觉领域的一个重要概念,用于描述图像中物体的运动模式。光流可以用来跟踪图像中物体的运动,检测运动中的物体,或者在机器视觉任务中估计物体的速度和位移。 光流的基本思想是根据图像像素…...

C++:list使用以及模拟实现

list使用以及模拟实现 list介绍list常用接口1.构造2.迭代器3.容量4.访问数据5.增删查改6.迭代器失效 list模拟实现1.迭代器的实现2.完整代码 list介绍 list是一个类模板&#xff0c;加<类型>实例化才是具体的类。list是可以在任意位置进行插入和删除的序列式容器。list的…...

深度学习基础知识-pytorch数据基本操作

1.深度学习基础知识 1.1 数据操作 1.1.1 数据结构 机器学习和神经网络的主要数据结构&#xff0c;例如 0维&#xff1a;叫标量&#xff0c;代表一个类别&#xff0c;如1.0 1维&#xff1a;代表一个特征向量。如 [1.0&#xff0c;2,7&#xff0c;3.4] 2维&#xff1a;就是矩…...

Springboot使用QueryDsl实现融合数据查询

SpringbootQueryDsl技术 1、添加依赖 <!--基于JPA--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--QueryDSL支持--> <dependenc…...

解决方案 | 电子签打通消费电子行业数智化经营通路

技术迭代不断驱动产业快速增长&#xff0c;从PC电脑到手机平板、再到可穿戴设备的兴起&#xff0c;每一次设备的迭代都代表着技术为产品注入了新的发展动能。与此同时&#xff0c;消费电子设备迭代更新周期的不断缩短&#xff0c;市场增长疲缓等因素&#xff0c;也对行业的流转…...

JVM理论知识

一、JVM内存结构 java的内存模型主要分为5个部分&#xff0c;分别是&#xff1a;JVM堆、JVM栈、本地栈、方法区还有程序计数器&#xff0c;他们的用途分别是&#xff1a; JVM堆&#xff1a;新建的对象都会放在这里&#xff0c;他是JVM中所占内存最大的区域。他又分为新生区还…...

idea - 报错 Mybatis提示Tag name expected的问题< 小于号 无法识别

问题&#xff1a;Mybatis提示Tag name expected 原因&#xff1a; 当我们在mapper中编写sql语句的时候会发现使用"<“符号会提示一个Tag name expected。这是因为xml文件中不识别”<"符号和“&”符号。防止与xml本身的元素命名混淆&#xff0c;导致无法解…...

合宙Air724UG LuatOS-Air LVGL API--对象

对象 概念 在 LVGL 中&#xff0c;用户界面的基本构建块是对象。例如&#xff0c;按钮&#xff0c;标签&#xff0c;图像&#xff0c;列表&#xff0c;图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性&#xff1a; Position (位置) Size (尺寸) Parent (父母…...

Java将PDF文件转为Word文档

Java将PDF文件转为Word文档 一、创建Springboot Maven项目 二、导入依赖信息 <repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories&g…...

vite创建项目命令

1.第一步运行创建命令&#xff08;npm&#xff09; npm create vitelatest也可以使用yarn yarn create vite还可以 pnpm create vite注意的地方&#xff1a;首次创建的时候会出现这个 Need to install the following packages:create-vitelatest Ok to proceed? (y) 直接y就…...

解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

前端加springboot实现Web Socket连接通讯以及测试流程(包括后端实现心跳检测)

【2023】前端加springboot实现Web Socket连接通讯&#xff08;包括后端实现心跳检测&#xff09; 一级目录二级目录三级目录 前言一、Web Socket 简绍1 为什么用 websocket&#xff1f; 二、代码实现1、前端&#xff08;html&#xff09;1.1、无前端向后端发送消息1.2、有前端向…...

node使用高版本的oracledb导致连接oracle的Error: NJS-138异常

异常信息如下 Error: NJS-138: connections to this database server version are not supported by node-oracledb in Thin mode 我的oracle版本是11g&#xff0c;之前的使用正常&#xff0c;今天却报错了&#xff0c;显示不支持thin模式&#xff0c;后面回退版本就可以了。...

RabbitMQ手动签收消息

RabbitMQ手动签收消息 这里讲解SpringBoot使用RabbitMQ进行有回调的用法和消费者端手动签收消息的用法。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"h…...

Unity 3d角色展示脚本(旋转 平移 缩放)展示界面

不考虑性能 很简陋的一个功能&#xff0c;主要是用于角色渲染的观察用&#xff0c;比simplecontroller要好用一点 using System; using UnityEngine;public class CharacterViewer : MonoBehaviour {public Transform target; // 人物模型的Transformpublic float rotationSpee…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...