動態

詳情 返回 返回

子網掩碼基礎知識 - 動態 詳情

子網掩碼基礎知識

子網掩碼由連續的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;
    }

Add a new 評論

Some HTML is okay.