IPv4中的A,B,C类网及子网掩码那些事

IP 地址的主要类型有五种 A B C D 和 E 一般 A B C 类地址更为常用 每类地址都是由 32 位或 4 个字节组成

A类地址:

在 A 类地址中第一个 8 位字节表示网络部分 其余 3 个 8 位字节用来标识主机 如图 1-4 所示A 类 IP 地址的第一段数字范围为 1-127,每个 A 类地址可连接 16387064 台主机(254*254*254), Internet 上有 126 个 A类地址(0不用,127不用)

B 类地址:
在 B 类地址中 两个 8 位字节表示网络部分 其余两个 8 位字节表示主机 如图 1-5 所示 B 类IP 地址的第一段数字范围为 128-191, 每个 B 类地址可连接 64516 台主机(254*254), Internet 上有 16256 个 B 类地址 //(191-128+1)*254

C类地址:

C 类地址使用 3 个 8 位字节作为网络部分 只有一个 8 位字节留给主机 如图 1-6 所示 C 类 IP地址的第一段数字范围为 192-223, 每个 C 类地址可连接 254 台主机(一个网关,一个广播,不能做主机) Internet 上有 2054512 个 C 类地址//(223-192+1)*254*254

D 类地址:用作多目的地信息的传输 作为备用, D 类 IP 地址的第一段数字范围为 224-239

E 类地址:保留 仅作为 Internet 的实验和开发之用, E 类 IP 地址的第一段数字范围为 240-254

关于子网掩码:

可以发现 A 类或 B 类网络拥有数以千计或数以百万计的主机,这是不切合实际的,因为不可能有任何一个网,其主机数会有这么多 为了解决这个问题人们发明子网 Subnet(子网) 的概念,就是把 A B 类地址进一步地细化

子网掩码是一个 二进制为32 位的值,其中网络 ID 和子网 ID 部分全部被置 1,主机的部分被置零,当知道了子网掩码和一个主机的 IP 地址,如果想得到网络号和子网号 可以把子网掩码和 IP 地址进行位运算中的 AND 运算 这样就去掉了主机号,剩下的网络号
和子网号可以通过地址类型来进行分离

来举个栗子:

146.64.127.7  子网掩码  255.255.255.0 ,求网络号,子网号,主机号

255.255.255.0的二进制为11111111,11111111,11111111,00000000

146.64.127.7 AND 255.255.255.0 =146.64.127.0 //这一步去掉了主机号,这样主机号也确定了,是7

接下来146.64.127.0怎么分别子网号和网络号呢?

我们来看第一段:146,根据上面分辨,这是个B类地址,B类地址的网络号为前两段,也就是:146.64

那么子网号也出来了:127

下面说说关于类似192.168.1.0/24这个问题,其实如果上面认真看了,这个一说就明白了,/24就表示子网掩码,前24位置1,即子网掩码为255.255.255.0

再举个例子,192.168.1.0/16子网掩码是多少?没错,就是255.255.0.0

时间: 2025-01-06 19:20:17

IPv4中的A,B,C类网及子网掩码那些事的相关文章

ArcGIS Engine问答:为什么地理数据库中不能产生同名要素类

之所以产生这样的问题,其原因是无论一个要素类是直接放在工作空问中,还是放在工作空问的一个要素数据集中,这些差别仅仅是逻辑上的,而它们的物理组成都是数据库中的一张二维表,并目表名就是要素类的名字,在一个数据库中不能出现两个同名的二维表,因此也就不能产生两个同名的要素类. 也就是说如果在工作空问中存在一个名为A的要素类和B的要素数据集,B中如果再产生一个名为A的要素类是不会成功的. 因此可以使用IFeatureWorkspace::OpenFeatureClass方法可以打开工作空问中的任何一个要素

ios 中Category类别(扩展类)专题总结

原创地址   http://www.code4blog.com/archives/294 类别 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,包括那些没有源代码的类. 类别使得无需创建对象类的子类就能完成同样的工作 一.创建类别 1.声明类别 声明类别与声明类的形式很相似 @interface  NSString(NumberConvenienc

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

Python中父类和子类间类属性(非实例属性)的设置获取的传递

前几天做一个项目,遇见类似这样一个问题.父类是个公用类,很多子项目中都运用到了,而子类也要作为一个基本类在该项目中的很多地方都要用到,但是的原始父类里面有些类属性(注意这里是类属性,不是实力属性).在程序运行时候要进行重新设置. 背景:Python中父类的类属性,类方法,实力属性都能够被子类继承,实力属性的再设置很简单,当然为了控制类属性的访问权限(Python中不能完全实现控制),也可以用@preproty装饰符优化和控制实力属性的设置,父类的类属性被子类继承,可以很容易的获得父类属性的内容,

java中的URLEncoder和URLDecoder类的联系与区别

今天碰到了这个问题,就查找了些资料总结下:java中的URLEncoder和URLDecoder类的联系与区别. 首先说这两者的联系与区别: URLEncoder是编码,URLDecoder是解码.两者的转换过程刚好是相反的.URLEncoder该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法:URLDecoder该类包含了将 String 从 application/x-www-form-urlencoded MI

c++中两个头文件定义同名类的解决办法

今天考虑了一个问题,如果两个头文件比如time.h times.h里面都定义了一个time的类,要怎么解决?vs编译器只对cpp文件进行编译,在编译阶段,这两个头文件的实现文件都不会出错,如果不在主函数中用到time这个类,程序也不会有问题.但是如果用到,那就是disaster!!!,如果你不得不在两个头文件中定义同名类,下面是我自己思考出来的最简单的解决方式--->>用不同的作用域包含 #ifndef TIME_H #define TIME_H namespace time1 { class

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法