【JAVA】网络与通信--IP地址与子网划分讲解

IP地址与子网划分讲解

IP地址

简介

IP地址分为五类:

·A类用于大型网络(能容纳网络126个,主机1677214台)

·B类用于中型网络(能容纳网络16384个,主机65534台)

·C类用于小型网络(能容纳网络2097152个,主机254台)

·D类用于组播(多目的地址的发送)

·E类用于实验

另外,全零(0.0.0.0.)地址指任意网络。全1的IP地址(255.255.255.255)是当前子网的广播地址。

在因特网中,每台计算机的每个连接都有一个由授权单位分配的用于彼此区别的号码,即IP地址。IP地址采用层次结构,按照逻辑结构划分为两个部分:网络号和主机号。网络号用于识别一个逻辑网络,而主机号用于识别网络中的一台主机的一个连接。因此,IP地址的编址方式携带了明显的位置消息。

一个完整的IP地址由个字节,即32位数字组成,为了方便用户理解和记忆,采用点分十进制标记法,中间使用符号“.”隔开不同的字节。

例如:采用32位形式的IP地址如下

             00001010 00000000 00000000 00000001

      采用十进制数的形式如下

        10.0.0.1

A类地址

(1)    A类IP地址。由1个字节的网络地址和3个字节的主机地址,网络地址的最高位必须是“0”。

如:0XXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)

(2)A类IP地址范围:1.0.0.1---126.255.255.254

(3)A类IP地址中的私有地址和保留地址:

             ① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,             而被用在局域网络中的地址)。

               范围(10.0.0.1---10.255.255.254)

             ② 127.X.X.X是保留地址,用做循环测试用的。

B类地址

(1)    B类IP地址。由2个字节的网络地址和2个字节的主机地址,网络地址的最高位必须是“10”。

如:10XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)

(2) B类IP地址范围:128.0.0.1---191.255.255.254。

(3) B类IP地址的私有地址和保留地址

             ① 172.16.0.0---172.31.255.254是私有地址

             ② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,             而你在网络上又没有找到可用的DHCP服务器。就会得到其中一                     个IP。

       191.255.255.255是广播地址,不能分配。

C类地址

(1)    C类IP地址。由3个字节的网络地址和1个字节的主机地址,网络地址的最高位必须是“110”。

如:110XXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)

(2)C类IP地址范围:192.0.0.1---223.255.255.254。

(3)C类地址中的私有地址:

        192.168.X.X是私有地址。(192.168.0.1---192.168.255.255)

D类地址

(1) D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为          1110。

如:1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)

(2) D类地址范围:224.0.0.1---239.255.255.254

E类地址

(1) E类地址不分网络地址和主机地址,它的第1个字节的前四位固定为          1111。

如:1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)

(2) E类地址范围:240.0.0.1---255.255.255.254

 

子网掩码

简介

       在因特网中A类,B类和C类IP地址经常被使用,经过网络号和主机号的层次划分,它们能适应不同的网络规模。随着计算机和网络技术的发展,小型网络越来越多,它们使用C类网络号是一种浪费。因此在实际应用中,对IP地址进行再次划分,使其第三个字节代表网号,其余部分为主机号。再次划分后的IP地址的网络号部分和主机号部分用子网掩码(也称子网屏蔽码)来区分。

       子网掩码同样也以4个字节来表示,是32位二进制数值,对应于IP地址的32位二进制数值。对于IP地址的32位二进制数值。对于IP地址中的网络号都分在子网掩码中用“1”表示,对于IP地址中的主机号部分在子网掩码中用“0”表示。子网掩码的作用是用来区分网络上的主机是否在同一网络区段内,或者说,子网掩码用来区分IP地址的网络号和主机号。

缺省状态下,如果没有进行子网划分:

A类网络的子网掩码为255.0.0.0,

B类网络的子网掩码为255.255.0.0,

C类网络的子网掩码为255.255.255.0。

有了子网掩码后,IP地址的标识方法如下:

例:192.168.1.1 255.255.255.0或者标识成192.168.1.1/24(24表示掩码中“1”的个数)

怎么计算子网能容纳的电脑数呢?怎么看网络标识呢?

相关计算
示例1计算子网掩码容量

255.255.232.0这个子网掩码可以最多容纳多少台电脑?

方法

第一步:把子网掩码转换为二进制

11111111.1111111.11101000.00000000

第二步:数数后面有几颗0,一共是有11颗,那就是2^11次方,等于2048 (注意:主机号中全0是保留地址,全1是广播地址,所以它们不算可用主号地址。网络号也是一样的。子网号是可以用全0和全1的),所以这个子网掩码最多可以容纳2048-2=2046台电脑。

示例2计算子网掩码

一个教室有50台电脑,组成一个对等局域网,子网掩码设多少最合适?

思路

首先,我们从数量上看判断用ABC中的哪类IP,从50台电脑可知用C类IP最合适但是C类默认的子网掩码是255.255.255.0,可以容纳254台电脑,显然不太合适,那子网掩码设多少合适呢?

方法

2n(子网掩码转换成二进制后的零的个数) >=50

从这个式子我们可以得出:n=6

所以我们就可以得出子网掩码的二进制形式:11111111.1111111.11111111.11000000

然后转换成十进形式:255.255.255.192

所以最合适的子网掩码为:255.255.255.192

示例3计算子网数

       第一步:确定该IP是属于A,B,C三类中的哪一类。就可知它们的网络号A类前8位,B类前16位,C类前24位。

       第二步:把子网掩码化成2进制看有多少个1,把该进制中1的个数减去第一步所得出的位数,即为子网位数。

       第三步:如果子网位数为n,则从理论是讲可以划分出2n个子网。

示例4计算网段标识与主机标识
问题

       要怎么判断两个IP地址是同一网段的呢?

分析

要想在同一网段,必需做到网络标识相同,那网络标识怎么算呢?

各类IP的网络标识取法都是不一样的。

A类的,只取第一段。B类,只取第一、二段。C类,只取第一、二、三段。

方法

只要把IP和子网掩码的每位数AND(与)就可以了。

AND方法:0和1=0 0和0=0 1和1=1

例题

       判断IP:12.196.132.54与56.196.56.165是否在同一网段。(默认子网掩码)

       第一步:这些转换成二进制

              IP1:     12.196.132.54   00001100.11000100.10000100.00110110

              IP2:     56.196.56.165   00111000.11000100.00111000.10100101

              子网掩码:255.0.0.0      11111111.00000000.00000000.00000000

       第二步:把IP与子网掩码进行AND运算

              IP1 AND 子网掩码=00001100. 00000000.00000000.00000000

              IP2 AND 子网掩码=00111000. 00000000.00000000.00000000

       第三步:把得到的结果转换成十进制

              IP1的网络标识:12.0.0.0

              IP2的网络标识:56.0.0.0

              所以可知它们不是同一网段的。

 

       计算主机标识

       第一步:把子网掩码取反

              取反后的子网掩码:00000000.11111111.11111111.11111111

       第二步:把它与IP进行AND运算

              IP1 AND 子网掩码=00000000. 11000100.10000100.00110110

              IP2 AND 子网掩码=00000000. 11000100.00111000.10100101

       第三步:把得到的结果转换成十进制

              IP1的主机标识:0.196.132.54

              IP2的主机标识:0.196.56.165

划分子网

       示例:IP:192.160.12.50(这可以是网络号)子网掩码:255.255.255.192

 

       第一步:把IP地址和子网掩码转换成二进制

              IP地址:11000000.10100000.00001100.00110010

              子网掩码:11111111.11111111.11111111.11000000

       第二步:把IP地址和子网掩码进行AND运算

       因为掩码是255.255.255.192 ,因此它们之间的网段间隔是256-192=64

       广播地址:下个子网-1,所以2个子网的广播地址分别是192.160.2.127和192.160.2.191

       第一个子网号:11000000.10100000.00001100.00000000(192.160.12.0)

       第二个子网号:11000000.10100000.00001100.01000000(192.160.12.64)

       第一个广播地址:11000000.10100000.00001100.10111110 (192.160.2.127)

       第三个子网号:11000000.10100000.00001100.10000000(192.160.12.128)

       第二个广播地址:11000000.10100000.00001100.10111111 (192.160.2.191)

       第四个子网号:11000000.10100000.00001100.11000000(192.160.12.192)

       这个网段可以划分出4个子网,但只有2个可用子网(22-2):192.160.12.64和192.160.12.128

 

Java中计算子网掩码可以使用位运算来实现。在计算子网掩码时,我们首先需要知道网络地址和子网掩码的位数。网络地址是一个32位的二进制数,子网掩码是用来标识网络地址中哪些位是网络位和主机位的。 例如,假设网络地址为192.168.0.1,子网掩码为255.255.255.0,我们需要将它们转换成二进制。首先,可以使用Java中提供的InetAddress类的方法将IP地址转换成对应的二进制。 ```java InetAddress inetAddress = InetAddress.getByName("192.168.0.1"); byte[] ipAddress = inetAddress.getAddress(); String ipAddressBinary = ""; for (byte octet : ipAddress) { ipAddressBinary += String.format("%8s", Integer.toBinaryString(octet & 0xFF)).replace(" ", "0"); } System.out.println(ipAddressBinary); ``` 输出结果为: ```bash 11000000101010000000000000000001 ``` 接下来,我们需要将子网掩码转换成二进制。同样可以使用上述的方法将子网掩码转换成二进制。假设使用的子网掩码为255.255.255.0,将其转换成二进制如下: ```bash 11111111111111111111111100000000 ``` 接下来,我们需要计算子网掩码的网络位的个数,也就是子网掩码中连续为1的位数。可以使用Java的位运算来实现: ```java int maskBits = 0; for (char bit : subnetMaskBinary.toCharArray()) { if (bit == '1') { maskBits++; } } System.out.println("网络位个数:" + maskBits); ``` 输出结果为: ```bash 网络位个数:24 ``` 最后,我们可以根据网络位的个数来计算子网掩码的十进制表示形式: ```java int mask = 0xFFFFFFFF << (32 - maskBits); byte[] subnetMask = { (byte) (mask & 0xFF), (byte) ((mask >> 8) & 0xFF), (byte) ((mask >> 16) & 0xFF), (byte) ((mask >> 24) & 0xFF) }; System.out.println("子网掩码:" + InetAddress.getByAddress(subnetMask).getHostAddress()); ``` 输出结果为: ```bash 子网掩码:255.255.255.0 ``` 以上便是使用Java来计算子网掩码的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值