子網掩碼基礎知識
子網掩碼基礎知識
子網掩碼由連續的1和連續的0組成,1表示網絡位,0表示主機位。
1. 基礎概念
- IPv4地址:由32位二進制組成,通常表示為4個十進制數(如
192.168.1.0)。 - 子網掩碼:用于劃分網絡和主機部分。例如,
255.255.255.0(即/24)表示前24位為網絡號,后8位為主機號。
2. 地址數量計算
-
公式:
可用主機地址數 = (2^{(32 - \text{子網掩碼位數})} - 2)
(減2是因為去掉網絡地址和廣播地址) -
常見子網示例:
/24(如255.255.255.0):
(2^8 - 2 = 254)個可用地址(范圍192.168.1.1~192.168.1.254)。- 超過256的情況:
若子網掩碼位數更小(如/23),則主機部分有9位,地址數為 (2^9 - 2 = 510)個。
3. 為什么會有誤解?
/24子網確實有256個地址(含網絡和廣播地址),但可用主機地址是254個。- 更大的子網(如
/16)可包含(2^{16} - 2 = 65534)個可用地址。
4. 關鍵結論
- 子網地址數不限于256,實際由子網掩碼決定。
- 最小子網是
/30(4個地址,2個可用),最大可達/8(約1600萬個地址)。
5. 計算子網的ip數量方法
- 子網掩碼為255.255.240.0,計算為(256-240)*256=4096個
- 子網掩碼為255.255.248.0,計算為(256-248)*256=2048個
示例表
| 子網掩碼 | 主機位數 | 總地址數 | 可用地址數 | 掩碼 |
|---|---|---|---|---|
| /24 (前24位) | 8 | 256 | 254 | 255.255.255.0 |
| /23 (前23位) | 9 | 512 | 510 | 前23位是1,后9位是0 |
| /16 (前16位) | 16 | 65536 | 65534 | 255.255.0.0 |
前23位掩碼計算步驟:
二進制轉換
前23位的二進制表示:
11111111.11111111.11111110.00000000
(前23位全1,第24位為0,剩余全0)
分段轉換為十進制
第一段(前8位):11111111 → 255
第二段(9-16位):11111111 → 255
第三段(17-24位):11111110 → 254(因為11111110 = 128+64+32+16+8+4+2 = 254)
第四段(剩余位):00000000 → 0
最終結果
前23位的子網掩碼為:
255.255.254.0
java中ip地址轉數值的方式
/**
* ipV4地址轉換成Long類型
* @param ipAddress
* @return
*/
public static long ConvertIpv4ToLong(String ipAddress) {
String[] ipSegments = ipAddress.split("\\.");
long result = 0;
for (int i = 0; i < ipSegments.length; i++) {
int power = 3 - i;
int segmentValue = Integer.parseInt(ipSegments[i]);
result += segmentValue * Math.pow(256, power);
}
return result;
}
/**
* ipV6地址轉換成Long類型
* @param ipV6Address
* @return
*/
public static long ConvertIpv6ToLong(String ipV6Address) {
String[] hexSegments = ipV6Address.split(":");
long result = 0;
for (int i = 0; i < hexSegments.length; i++) {
int power = 7 - i;
int segmentValue = Integer.parseInt(hexSegments[i], 16);
result += segmentValue * Math.pow(65536, power);
}
return result;
}
浙公網安備 33010602011771號