IP与子网掩码的关系图文详解(ip与子网掩码的计算)
IP地址
IP地址是一個(gè)32位的二進(jìn)制數(shù),通常被分割為4個(gè)“8位二進(jìn)制數(shù)”。
IP地址分類
二進(jìn)制表示
| 地址類型 | 二進(jìn)制地址范圍 |
|---|---|
| A類地址 | 00000000 00000000 00000000 00000001 - 01111111 11111111 11111111 11111111 |
| B類地址 | 10000000 00000000 00000000 00000000 - 10111111 11111111 11111111 11111111 |
| C類地址 | 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111 |
| D類地址 | 11100000 00000000 00000000 00000000 - 11101111 11111111 11111111 11111111 |
| E類地址 | 11110000 00000000 00000000 00000000 - 11110111 11111111 11111111 11111111 |
十進(jìn)制表示
| 地址類型 | 十進(jìn)制地址范圍 | 特征 |
|---|---|---|
| A類地址 | 1.0.0.0 - 127.255.255.255 | 第1個(gè)8位中的第1位始終為0 |
| B類地址 | 128.0.0.0 - 191.255.255.255 | 第1個(gè)8位中的第1、2位始終為10 |
| C類地址 | 192.0.0.0 - 223.255.255.255 | 第1個(gè)8位中的第1、2、3位始終為110 |
| D類地址 | 224.0.0.0 - 239.255.255.255 | 第1個(gè)8位中的第1、2、3、4位始終為1110 |
| E類地址 | 240.0.0.0 - 247.255.255.255 | 第1個(gè)8位中的第1、2、3、4、5位始終為11110 |
特殊:
D類地址:用于組播
E類地址:用于科研保留
注意:
A類地址 從1.0.0.0 到126.255.255.255 , 其中127.x.x.x段地址空間是被保留的回環(huán)地址
IP地址構(gòu)成
IP地址 = 網(wǎng)絡(luò)地址 + 主機(jī)地址
| 地址類型 | 網(wǎng)絡(luò)地址 | 主機(jī)地址 |
|---|---|---|
| A類地址 | 前8位 | 后24位 |
| B類地址 | 前16位 | 后16位 |
| C類地址 | 前24位 | 后8位 |
網(wǎng)絡(luò)地址
網(wǎng)絡(luò)地址(Network address)由ip和子網(wǎng)掩碼按位與得出,只有網(wǎng)絡(luò)地址相同的ip才在同一子網(wǎng)內(nèi)
網(wǎng)絡(luò)地址是子網(wǎng)中最小的地址
計(jì)算方式:網(wǎng)絡(luò)地址 = IP & 子網(wǎng)掩碼
主機(jī)地址
主機(jī)(IP)地址即該網(wǎng)段中 主機(jī)的地址編號(hào)
廣播地址
廣播地址(Broadcast Address)是專門用于同時(shí)向網(wǎng)絡(luò)中所有工作站進(jìn)行發(fā)送的一個(gè)地址
廣播地址是該子網(wǎng)主機(jī)地址全1的地址,即子網(wǎng)中最大的地址
計(jì)算方式:廣播地址 = (~子網(wǎng)掩碼) | 網(wǎng)絡(luò)地址
子網(wǎng)掩碼
子網(wǎng)掩碼 (Subnet mask)是一個(gè)32位的2進(jìn)制數(shù) ,它必須結(jié)合IP地址一起使用。
子網(wǎng)掩碼只有一個(gè)作用,就是將某個(gè)IP地址劃分成“網(wǎng)絡(luò)地址”和“主機(jī)地址”兩部分。
縮寫
有時(shí)候我們會(huì)看到192.168.1.123/24這樣的表示方法,其中/24就是子網(wǎng)掩碼255.255.255.0的縮寫
計(jì)算方式:二進(jìn)制子網(wǎng)掩碼中1的個(gè)數(shù)
默認(rèn)子網(wǎng)掩碼
| 網(wǎng)絡(luò)類型 | 默認(rèn)子網(wǎng)掩碼 | 縮寫 |
|---|---|---|
| A類地址 | 255.0.0.0 | /8 |
| B類地址 | 255.255.0.0 | /16 |
| C類地址 | 255.255.255.0 | /24 |
子網(wǎng)容量計(jì)算
子網(wǎng)數(shù)
根據(jù)子網(wǎng)掩碼可劃分的最大子網(wǎng)數(shù)
計(jì)算方式:子網(wǎng)數(shù) = 2^(實(shí)際子網(wǎng)掩碼縮寫 - 相應(yīng)網(wǎng)絡(luò)類型默認(rèn)子網(wǎng)掩碼縮寫)
最大主機(jī)數(shù)
計(jì)算方式:最大主機(jī)數(shù) = 2^(主機(jī)地址的位數(shù))
可用主機(jī)數(shù)
計(jì)算方式:可用主機(jī)數(shù) = 最大主機(jī)數(shù) - 2
因?yàn)橐粋€(gè)子網(wǎng)中主機(jī)號(hào)全為0的是網(wǎng)絡(luò)地址,全為1的是廣播地址,所以要 -2
代碼計(jì)算示例
下面代碼采用C語(yǔ)言編寫(c11)
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar bin1num(uchar num);
void main() {
uchar IP[] = {192,168,1,53}; //IP地址
uchar SubnetMask[] = {255,255,255,224}; //子網(wǎng)掩碼
//網(wǎng)絡(luò)類型和默認(rèn)子網(wǎng)掩碼縮寫
uchar DefaultSubnetMaskAbbr;
if(IP[0]<224) DefaultSubnetMaskAbbr = 24; //C類地址
if(IP[0]<192) DefaultSubnetMaskAbbr = 16; //B類地址
if(IP[0]<128) DefaultSubnetMaskAbbr = 8; //A類地址
//實(shí)際子網(wǎng)掩碼縮寫:二進(jìn)制中1的個(gè)數(shù)
uchar SubnetMaskAbbr = bin1num(SubnetMask[0])+bin1num(SubnetMask[1])+bin1num(SubnetMask[2])+bin1num(SubnetMask[3]);
//網(wǎng)絡(luò)地址:IP & 子網(wǎng)掩碼
uchar Network[] = {IP[0] & SubnetMask[0], IP[1] & SubnetMask[1], IP[2] & SubnetMask[2], IP[3] & SubnetMask[3]};
//廣播地址:(~子網(wǎng)掩碼)|網(wǎng)絡(luò)地址
uchar Broadcast[] = {(~SubnetMask[0])|Network[0], (~SubnetMask[1])|Network[1], (~SubnetMask[2])|Network[2], (~SubnetMask[3])|Network[3]};
//子網(wǎng)數(shù):2^(實(shí)際子網(wǎng)掩碼縮寫-默認(rèn)子網(wǎng)掩碼縮寫)
uint SubnetNum = 1;
for(int i=0; i<SubnetMaskAbbr-DefaultSubnetMaskAbbr; i++) {
SubnetNum *=2;
}
//最大主機(jī)數(shù):2^(32-子網(wǎng)掩碼縮寫)
uint HostNum = 1;
for(int i=0; i<32-SubnetMaskAbbr; i++) {
HostNum *=2;
}
/*打印結(jié)果*/
printf("ip地址:%d.%d.%d.%d\n", IP[0], IP[1], IP[2], IP[3]);
printf("子網(wǎng)掩碼:%d.%d.%d.%d\n", SubnetMask[0], SubnetMask[1], SubnetMask[2], SubnetMask[3]);
if(DefaultSubnetMaskAbbr==8) printf("網(wǎng)絡(luò)類型:A類\n");
if(DefaultSubnetMaskAbbr==16) printf("網(wǎng)絡(luò)類型:B類\n");
if(DefaultSubnetMaskAbbr==24) printf("網(wǎng)絡(luò)類型:C類\n");
printf("子網(wǎng)掩碼縮寫:%d\n", SubnetMaskAbbr);
printf("網(wǎng)絡(luò)地址:%d.%d.%d.%d\n", Network[0], Network[1], Network[2], Network[3]);
printf("廣播地址:%d.%d.%d.%d\n", Broadcast[0], Broadcast[1], Broadcast[2], Broadcast[3]);
printf("子網(wǎng)數(shù):%d\n", SubnetNum);
printf("最大主機(jī)數(shù):%d\n", HostNum);
printf("可用主機(jī)數(shù):%d\n", HostNum-2);
}
//計(jì)算8位二進(jìn)制數(shù)1的個(gè)數(shù)(1必須從第一位開始,每個(gè)1必須相鄰)
uchar bin1num(uchar num) {
uchar Divisor[] = {128,64,32,16,8,4,2,1}; //除數(shù)(8位)
uchar Remainder = num; //余數(shù)
uchar ret; //結(jié)果
for(ret=0; ret<10; ret++) {
if(Remainder>0) Remainder = Remainder%Divisor[ret];
else break;
}
return ret;
}
到此這篇關(guān)于IP與子網(wǎng)掩碼的關(guān)系圖文詳解的文章就介紹到這了,更多相關(guān)IP與子網(wǎng)掩碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
總結(jié)
以上是生活随笔為你收集整理的IP与子网掩码的关系图文详解(ip与子网掩码的计算)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11 Dev 23481.1000
- 下一篇: 位运算 看这篇就够了(位运算的好处)