ネットワーク上でデバイスを識別するためには、IPアドレスとサブネットマスクの理解が不可欠です。IPアドレスはインターネットや社内ネットワークで通信相手を特定するための「住所」であり、サブネットマスクはネットワークを効率的に分割・管理するための仕組みです。

本記事では、IPアドレスとサブネットマスクについて以下の内容を解説します。

  • IPv4アドレスとIPv6アドレスの構造と表記方法
  • クラスフルアドレッシングとCIDR表記の違い
  • サブネットマスクの役割とサブネット計算の方法
  • プライベートIPアドレスとグローバルIPアドレスの使い分け

この記事を読むことで、IPアドレスの構造を正しく理解し、サブネット計算ができるようになります。

前提条件

  • 2進数と10進数の変換について基本的な知識がある
  • OSI参照モデルまたはTCP/IPモデルの概要を理解している(前回記事参照)

特別な環境構築は不要です。Windowsのコマンドプロンプト、macOS/Linuxのターミナルがあれば、自分のIPアドレスを確認できます。

期待される学習成果

本記事を読み終えると、以下のことができるようになります。

  1. IPv4アドレスを2進数と10進数の両方で表現できる
  2. サブネットマスクからネットワーク部とホスト部を特定できる
  3. CIDR表記から利用可能なIPアドレス数を計算できる
  4. プライベートIPアドレスの範囲を正しく判別できる

IPアドレスとは何か

IPアドレス(Internet Protocol Address)は、ネットワークに接続されたデバイスを一意に識別するための論理アドレスです。郵便配達における住所と同様に、IPアドレスによってデータの送信先を特定します。

IPアドレスは、OSI参照モデルの第3層(ネットワーク層)、TCP/IPモデルのインターネット層で使用されます。

graph LR
    A["送信元<br/>192.168.1.10"] -->|パケット| B["ルータ"]
    B -->|転送| C["宛先<br/>203.0.113.50"]
    
    style A fill:#e1f5fe
    style C fill:#e8f5e9

IPアドレスには2つのバージョンがあります。

バージョン ビット長 アドレス数 現在の状況
IPv4 32ビット 約43億個 枯渇済み、現在も主流
IPv6 128ビット 約340澗個 普及拡大中

本記事では、まずIPv4アドレスを中心に解説し、その後IPv6について説明します。

IPv4アドレスの構造

IPv4アドレスは32ビットの数値で構成されています。人間が読みやすいように、8ビットずつ4つに区切り、10進数で表記します。これをドット付き10進表記(dotted decimal notation)といいます。

graph TB
    subgraph "2進数表記(32ビット)"
        B["11000000.10101000.00000001.00001010"]
    end
    
    subgraph "10進数表記"
        D["192.168.1.10"]
    end
    
    B --> D

オクテットとは

IPv4アドレスを構成する8ビットの各部分をオクテット(octet)と呼びます。各オクテットは0から255までの値を取ります。

オクテット 2進数 10進数 取りうる範囲
第1オクテット 11000000 192 0-255
第2オクテット 10101000 168 0-255
第3オクテット 00000001 1 0-255
第4オクテット 00001010 10 0-255

2進数と10進数の変換

IPアドレスを理解するためには、2進数と10進数の変換が必要です。各ビットの位置には以下の重みがあります。

ビット位置 7 6 5 4 3 2 1 0
重み 128 64 32 16 8 4 2 1

例として、2進数「11000000」を10進数に変換します。

11000000
= 1×128 + 1×64 + 0×32 + 0×16 + 0×8 + 0×4 + 0×2 + 0×1
= 128 + 64
= 192

逆に、10進数「168」を2進数に変換する場合は、大きい重みから順に引いていきます。

168 ÷ 128 = 1 余り 40  → 1
 40 ÷  64 = 0 余り 40  → 0
 40 ÷  32 = 1 余り  8  → 1
  8 ÷  16 = 0 余り  8  → 0
  8 ÷   8 = 1 余り  0  → 1
  0 ÷   4 = 0          → 0
  0 ÷   2 = 0          → 0
  0 ÷   1 = 0          → 0

結果: 10101000

ネットワーク部とホスト部

IPアドレスは、ネットワーク部とホスト部の2つの部分で構成されています。

graph LR
    subgraph "IPアドレス: 192.168.1.10"
        N["ネットワーク部<br/>192.168.1"]
        H["ホスト部<br/>.10"]
    end
    
    N --- H
    
    style N fill:#bbdefb
    style H fill:#c8e6c9
部分 役割
ネットワーク部 どのネットワークに属するかを示す 192.168.1
ホスト部 ネットワーク内のどのデバイスかを示す 10

同じネットワーク部を持つデバイス同士は、ルータを経由せずに直接通信できます。異なるネットワーク部を持つデバイスとの通信には、ルータ(デフォルトゲートウェイ)を経由する必要があります。

クラスフルアドレッシング

1990年代まで使用されていたクラスフルアドレッシングでは、IPアドレスの先頭ビットによって自動的にネットワーク部の長さが決まっていました。

graph TB
    subgraph "クラスフルアドレッシング"
        A["クラスA<br/>0.0.0.0 - 127.255.255.255<br/>先頭1ビット: 0"]
        B["クラスB<br/>128.0.0.0 - 191.255.255.255<br/>先頭2ビット: 10"]
        C["クラスC<br/>192.0.0.0 - 223.255.255.255<br/>先頭3ビット: 110"]
        D["クラスD(マルチキャスト)<br/>224.0.0.0 - 239.255.255.255<br/>先頭4ビット: 1110"]
        E["クラスE(予約)<br/>240.0.0.0 - 255.255.255.255<br/>先頭4ビット: 1111"]
    end

各クラスの特徴

クラス 先頭ビット ネットワーク部 ホスト部 ネットワーク数 ホスト数/ネットワーク
A 0 8ビット 24ビット 128 約1,677万
B 10 16ビット 16ビット 16,384 65,534
C 110 24ビット 8ビット 約209万 254

クラスフルアドレッシングの問題点は、アドレスの無駄が発生しやすいことです。たとえば、1,000台のホストが必要な組織には、クラスBを割り当てる必要があり、約64,000個のアドレスが未使用になります。

CIDR表記とサブネットマスク

CIDRとは

CIDR(Classless Inter-Domain Routing、サイダー)は、1993年に導入された柔軟なIPアドレス割り当て方式です。クラスに縛られず、任意の位置でネットワーク部とホスト部を区切ることができます。

CIDR表記では、IPアドレスの後ろにスラッシュとネットワーク部のビット数を付加します。

192.168.1.0/24

この表記は、先頭24ビットがネットワーク部であることを示しています。

サブネットマスクとは

サブネットマスクは、IPアドレスのどの部分がネットワーク部で、どの部分がホスト部かを示すための32ビットの値です。

ネットワーク部に対応するビットは1、ホスト部に対応するビットは0になります。

CIDR表記 サブネットマスク(2進数) サブネットマスク(10進数)
/8 11111111.00000000.00000000.00000000 255.0.0.0
/16 11111111.11111111.00000000.00000000 255.255.0.0
/24 11111111.11111111.11111111.00000000 255.255.255.0
/25 11111111.11111111.11111111.10000000 255.255.255.128
/26 11111111.11111111.11111111.11000000 255.255.255.192
/27 11111111.11111111.11111111.11100000 255.255.255.224
/28 11111111.11111111.11111111.11110000 255.255.255.240

ネットワークアドレスとブロードキャストアドレス

各サブネットには、使用できないアドレスが2つあります。

種類 説明 例(192.168.1.0/24の場合)
ネットワークアドレス ホスト部がすべて0のアドレス。ネットワーク自体を表す 192.168.1.0
ブロードキャストアドレス ホスト部がすべて1のアドレス。ネットワーク内の全ホストに送信 192.168.1.255

したがって、実際にホストに割り当てられるアドレス数は「2^(ホスト部のビット数) - 2」となります。

graph TB
    subgraph "192.168.1.0/24 のアドレス範囲"
        NA["192.168.1.0<br/>(ネットワークアドレス)"]
        H1["192.168.1.1"]
        H2["192.168.1.2"]
        HN["..."]
        H254["192.168.1.254"]
        BA["192.168.1.255<br/>(ブロードキャストアドレス)"]
    end
    
    NA --> H1
    H1 --> H2
    H2 --> HN
    HN --> H254
    H254 --> BA
    
    style NA fill:#ffcdd2
    style BA fill:#ffcdd2
    style H1 fill:#c8e6c9
    style H254 fill:#c8e6c9

サブネット計算の実践

計算例1: /24ネットワーク

192.168.1.0/24 のサブネット情報を計算します。

IPアドレス: 192.168.1.0
サブネットマスク: 255.255.255.0 (/24)

ネットワーク部: 24ビット
ホスト部: 32 - 24 = 8ビット

アドレス総数: 2^8 = 256
使用可能ホスト数: 256 - 2 = 254

ネットワークアドレス: 192.168.1.0
最初のホストアドレス: 192.168.1.1
最後のホストアドレス: 192.168.1.254
ブロードキャストアドレス: 192.168.1.255

計算例2: /26ネットワーク

10.0.0.0/26 のサブネット情報を計算します。

IPアドレス: 10.0.0.0
サブネットマスク: 255.255.255.192 (/26)

ネットワーク部: 26ビット
ホスト部: 32 - 26 = 6ビット

アドレス総数: 2^6 = 64
使用可能ホスト数: 64 - 2 = 62

ネットワークアドレス: 10.0.0.0
最初のホストアドレス: 10.0.0.1
最後のホストアドレス: 10.0.0.62
ブロードキャストアドレス: 10.0.0.63

計算例3: 任意のIPアドレスからネットワークアドレスを求める

172.16.45.123/20 のネットワークアドレスを求めます。

手順は以下のとおりです。

  1. IPアドレスを2進数に変換
  2. サブネットマスクを2進数に変換
  3. 論理AND演算を実行
172.16.45.123 を2進数に変換:
172 = 10101100
 16 = 00010000
 45 = 00101101
123 = 01111011

IPアドレス:    10101100.00010000.00101101.01111011
サブネットマスク: 11111111.11111111.11110000.00000000 (/20)
--------------------------------------------------
AND演算結果:   10101100.00010000.00100000.00000000

結果を10進数に変換: 172.16.32.0

ネットワークアドレス: 172.16.32.0

プライベートIPアドレスとグローバルIPアドレス

グローバルIPアドレス

グローバルIPアドレスは、インターネット上で一意に識別されるアドレスです。IANA(Internet Assigned Numbers Authority)によって管理され、ISP(インターネットサービスプロバイダ)を通じて割り当てられます。

プライベートIPアドレス

プライベートIPアドレスは、組織内のネットワーク(LAN)で自由に使用できるアドレスです。インターネットに直接ルーティングされないため、異なる組織で同じアドレスを使用しても問題ありません。

RFC 1918で定義されているプライベートIPアドレスの範囲は以下のとおりです。

クラス アドレス範囲 CIDR表記 アドレス数
クラスA 10.0.0.0 - 10.255.255.255 10.0.0.0/8 約1,677万
クラスB 172.16.0.0 - 172.31.255.255 172.16.0.0/12 約104万
クラスC 192.168.0.0 - 192.168.255.255 192.168.0.0/16 約6.5万
graph TB
    subgraph インターネット
        G1["グローバルIP<br/>203.0.113.1"]
        G2["グローバルIP<br/>198.51.100.1"]
    end
    
    subgraph "企業A社内LAN"
        R1["ルータ/NAT<br/>グローバル: 203.0.113.1"]
        P1["192.168.1.10"]
        P2["192.168.1.20"]
    end
    
    subgraph "企業B社内LAN"
        R2["ルータ/NAT<br/>グローバル: 198.51.100.1"]
        P3["192.168.1.10"]
        P4["192.168.1.20"]
    end
    
    G1 --- G2
    R1 --- P1
    R1 --- P2
    R2 --- P3
    R2 --- P4
    G1 --- R1
    G2 --- R2
    
    style P1 fill:#e3f2fd
    style P2 fill:#e3f2fd
    style P3 fill:#fff3e0
    style P4 fill:#fff3e0

企業Aと企業Bで同じプライベートIPアドレス(192.168.1.10)を使用していても、それぞれのネットワーク内で完結するため問題は発生しません。

特殊なIPアドレス

プライベートIPアドレス以外にも、特別な用途に予約されているアドレスがあります。

アドレス範囲 用途
127.0.0.0/8 ループバック(自分自身への通信)。127.0.0.1がlocalhostとして使用される
169.254.0.0/16 リンクローカル(DHCP取得失敗時に自動割り当て)
0.0.0.0/8 「このネットワーク」を表す
255.255.255.255 限定ブロードキャスト

IPv6アドレスの基礎

IPv4アドレスの枯渇に対応するため、IPv6が開発されました。IPv6は128ビットのアドレス空間を持ち、事実上無限に近いアドレス数を提供します。

IPv6アドレスの表記

IPv6アドレスは、16ビットずつ8つのブロックに分け、16進数で表記します。各ブロックはコロン(:)で区切ります。

2001:0db8:85a3:0000:0000:8a2e:0370:7334

表記を簡略化するルールがあります。

  1. 各ブロックの先頭の0は省略可能
  2. 連続する0のブロックは「::」で1回だけ省略可能
元の表記: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
簡略化:   2001:db8:85a3::8a2e:370:7334

IPv6アドレスの種類

種類 プレフィックス 説明
グローバルユニキャスト 2000::/3 インターネットでルーティング可能
リンクローカル fe80::/10 同一リンク内でのみ有効
ユニークローカル fc00::/7 プライベートネットワーク用
ループバック ::1 自分自身への通信
マルチキャスト ff00::/8 グループへの一斉送信

IPv4との主な違い

項目 IPv4 IPv6
アドレス長 32ビット 128ビット
表記 10進数(ドット区切り) 16進数(コロン区切り)
アドレス数 約43億 約340澗(3.4×10^38)
ヘッダ長 可変(20-60バイト) 固定(40バイト)
チェックサム あり なし(上位層で処理)
NAT 必要 原則不要

IPアドレスの確認方法

Windowsでの確認

コマンドプロンプトで以下のコマンドを実行します。

1
ipconfig

詳細情報を表示する場合は以下を使用します。

1
ipconfig /all

実行結果の例:

イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .:
   IPv4 アドレス . . . . . . . . . . . .: 192.168.1.10
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.1.1

macOS/Linuxでの確認

ターミナルで以下のコマンドを実行します。

1
ip addr show

または従来のコマンド:

1
ifconfig

実行結果の例:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::1  prefixlen 64  scopeid 0x20<link>

まとめ

本記事では、IPアドレスとサブネットマスクの基礎について解説しました。

重要なポイントを振り返ります。

  1. IPアドレスの構造: IPv4は32ビット、IPv6は128ビットで構成され、ネットワーク上のデバイスを一意に識別する
  2. ネットワーク部とホスト部: IPアドレスはサブネットマスクによって2つの部分に分けられる
  3. CIDR表記: /24のようなプレフィックス長でネットワーク部のビット数を表現する
  4. サブネット計算: ネットワークアドレス、ブロードキャストアドレス、使用可能ホスト数を計算できる
  5. プライベートIPアドレス: 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16の3つの範囲が組織内で自由に使用可能

次回の記事では、パケットがどのようにネットワーク間を転送されるか、ルーティングとデフォルトゲートウェイの仕組みについて解説します。

参考リンク