フリーキーズ | 独学プログラミング

サブネットとVLSM入門!ネットワーク初心者でもわかる基礎知識と実践方法

リンドくん

リンドくん

たなべ先生、「サブネット」って言葉をよく聞くんですけど、何のことかよくわからなくて...

たなべ

たなべ

確かに最初は難しく感じるよね。でも実は、大きなネットワークを小さく区切るっていう、シンプルな考え方なんだよ。
マンションの部屋割りみたいなものかな。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

サブネットとは何か?なぜ必要なのか

ネットワークを学び始めると必ず出会う「サブネット」という概念。
ITエンジニアやネットワーク管理者にとって必須の知識ですが、初心者の方には理解しづらい部分も多いのではないでしょうか?

この記事では、サブネット計算の基礎から、より効率的なネットワーク設計を可能にするVLSM(可変長サブネットマスク)まで、初心者の方でも理解できるよう、できるだけわかりやすく解説していきます。

サブネットの基本概念を理解しよう

リンドくん

リンドくん

そもそも、なんでネットワークを分割する必要があるんですか?

たなべ

たなべ

理由はいくつかあるんだけど、一番大きいのはセキュリティと効率性なんだ。全部屋が繋がった大きな家より、部屋が分かれている方が管理しやすいよね?

サブネットとは

サブネット(Subnet)とは、Subnetwork(サブネットワーク)の略で、大きなネットワークを小さく分割したものを指します。

例えば、会社全体で使うネットワークを、部署ごとに分けて管理する。これがサブネット化の基本的な考え方です。

なぜサブネット化が必要なのか

サブネット化には以下のような重要なメリットがあります。

  • ネットワークの効率化 → ブロードキャストドメインを分割することで、不要なトラフィックを削減できます
  • セキュリティの向上 → 部門ごとにネットワークを分離し、アクセス制御を強化できます
  • 管理のしやすさ → 問題が発生した際に、影響範囲を特定のサブネットに限定できます
  • IPアドレスの効率的な利用 → 必要な規模に応じてアドレス空間を配分できます

IPアドレスとサブネットマスクの関係

IPアドレスは、ネットワーク上のデバイスを識別するための番号です。
そしてサブネットマスクは、そのIPアドレスのどの部分が「ネットワーク部」で、どの部分が「ホスト部」なのかを決定する役割を持っています。

例えば、以下のような表記があります。

IPアドレス: 192.168.1.10
サブネットマスク: 255.255.255.0

これをCIDR表記(後述)で書くと以下のようになります。

192.168.1.10/24

この「/24」という数字は、サブネットマスクの左から24ビットがネットワーク部であることを示しています。

サブネット計算の基礎を身につけよう

リンドくん

リンドくん

計算って聞くと難しそうですね...数学苦手なんですけど大丈夫ですか?

たなべ

たなべ

心配しないで!基本は2進数の理解だけなんだ。それさえ分かれば、あとはパターンを覚えるだけだよ。

IPアドレスの構造

IPアドレス(IPv4)は32ビットの数値で、通常は4つの数字(オクテット)で表現されます。

192.168.1.10

これを2進数で表すと:

11000000.10101000.00000001.00001010

各オクテットは8ビット(0〜255の範囲)で構成されています。

サブネットマスクの役割

サブネットマスクは、IPアドレスを「ネットワーク部」と「ホスト部」に分ける境界線を決めます。

よく使われるサブネットマスク

CIDR表記サブネットマスクホスト数用途例
/24255.255.255.0254小規模オフィス
/25255.255.255.128126部署単位
/26255.255.255.19262チーム単位
/27255.255.255.22430小グループ
/28255.255.255.24014会議室など
/30255.255.255.2522ルーター間接続

実践的なサブネット計算の手順

例として、192.168.1.0/24のネットワークを4つのサブネットに分割してみましょう。

ステップ① 必要なビット数を計算

  • 4つのサブネット = 2² なので、2ビット必要

ステップ② 新しいサブネットマスクを決定

  • 元々 /24 だったので、2ビット追加して /26

ステップ③ 各サブネットの範囲を計算

サブネット① 192.168.1.0/26
  - ネットワークアドレス: 192.168.1.0
  - 使用可能範囲: 192.168.1.1 〜 192.168.1.62
  - ブロードキャストアドレス: 192.168.1.63

サブネット② 192.168.1.64/26
  - ネットワークアドレス: 192.168.1.64
  - 使用可能範囲: 192.168.1.65 〜 192.168.1.126
  - ブロードキャストアドレス: 192.168.1.127

サブネット③ 192.168.1.128/26
  - ネットワークアドレス: 192.168.1.128
  - 使用可能範囲: 192.168.1.129 〜 192.168.1.190
  - ブロードキャストアドレス: 192.168.1.191

サブネット④ 192.168.1.192/26
  - ネットワークアドレス: 192.168.1.192
  - 使用可能範囲: 192.168.1.193 〜 192.168.1.254
  - ブロードキャストアドレス: 192.168.1.255

便利な計算ツール

実務では、以下のようなツールを使って計算を簡単にすることができます。

Pythonでの簡単な計算例

import ipaddress

# ネットワークの定義
network = ipaddress.ip_network('192.168.1.0/24')

# 4つのサブネットに分割
subnets = list(network.subnets(prefixlen_diff=2))

for i, subnet in enumerate(subnets, 1):
    print(f"サブネット{i}: {subnet}")
    print(f"  ネットワークアドレス: {subnet.network_address}")
    print(f"  ブロードキャストアドレス: {subnet.broadcast_address}")
    print(f"  使用可能ホスト数: {subnet.num_addresses - 2}")
    print()

このように、プログラミングを活用することで、複雑な計算も簡単に行えます。

VLSM(可変長サブネットマスク)とは

リンドくん

リンドくん

先生、VLSMって何ですか?普通のサブネット化とは違うんですか?

たなべ

たなべ

そうだね、VLSMは必要な規模に応じて異なるサイズのサブネットを作れるんだ。
マンションで例えると、ワンルームから3LDKまで、色々なサイズの部屋を効率的に配置できるようなものだね。

VLSMの基本概念

VLSM(Variable Length Subnet Mask:可変長サブネットマスク)は、1つのネットワーク内で異なるサイズのサブネットを使用できる技術です。

従来の固定長サブネットマスク(FLSM)では、すべてのサブネットが同じサイズである必要がありましたが、VLSMではそれぞれのサブネットに必要なホスト数に応じて、最適なサイズのサブネットを割り当てることができます。

VLSMのメリット

  • IPアドレスの効率的な利用 → 必要最小限のアドレス空間を各サブネットに割り当てられます
  • 柔軟なネットワーク設計 → 部署や用途に応じて適切なサイズのサブネットを作成できます
  • アドレスの無駄を削減 → 小規模なネットワークに大きなアドレス空間を割り当てる必要がありません

VLSM設計の実践例

例として、以下のような要件があるとします。

会社全体: 192.168.10.0/24
- 営業部: 60台のPC
- 開発部: 28台のPC
- 総務部: 12台のPC
- ルーター間接続: 2つのリンク(各2台)

ステップ① 必要なホスト数を多い順に並べる

  1. 営業部: 60台 → /26が必要(62ホスト)
  2. 開発部: 28台 → /27が必要(30ホスト)
  3. 総務部: 12台 → /28が必要(14ホスト)
  4. ルーター間接続1: 2台 → /30が必要(2ホスト)
  5. ルーター間接続2: 2台 → /30が必要(2ホスト)

ステップ② 大きいサブネットから順に割り当て

営業部: 192.168.10.0/26
  - 範囲: 192.168.10.0 〜 192.168.10.63

開発部: 192.168.10.64/27
  - 範囲: 192.168.10.64 〜 192.168.10.95

総務部: 192.168.10.96/28
  - 範囲: 192.168.10.96 〜 192.168.10.111

ルーター間接続1: 192.168.10.112/30
  - 範囲: 192.168.10.112 〜 192.168.10.115

ルーター間接続2: 192.168.10.116/30
  - 範囲: 192.168.10.116 〜 192.168.10.119

このように、VLSMを使うことで、192.168.10.0/24のアドレス空間を効率的に活用できました。

VLSM設計のポイント

VLSM設計を成功させるには、以下のポイントに注意しましょう。

  1. 必要なホスト数を正確に把握する → 将来の拡張も考慮に入れる
  2. 大きいサブネットから順に割り当てる → アドレス空間の断片化を防ぐ
  3. 成長を見込んだ設計 → 余裕を持ったサイズ選択も重要
  4. ドキュメント化 → 設計内容を必ず記録する

サブネット計算を効率化するテクニック

リンドくん

リンドくん

計算は理解できたんですけど、毎回計算するのは大変そうですね...

たなべ

たなべ

そこで便利なのが計算ツール覚えておくべきパターンなんだ。実務では効率が大事だからね。

覚えておくべき重要な数値

サブネット計算で頻繁に使う数値を覚えておくと、計算が格段に速くなります。

2のべき乗表

2¹ = 2
2² = 4
2³ = 8
2⁴ = 16
2⁵ = 32
2⁶ = 64
2⁷ = 128
2⁸ = 256

サブネットマスクの対応表

プレフィックスサブネットマスクブロックサイズホスト数
/30255.255.255.25242
/29255.255.255.24886
/28255.255.255.2401614
/27255.255.255.2243230
/26255.255.255.1926462
/25255.255.255.128128126
/24255.255.255.0256254

オンライン計算ツール

実務では、以下のようなオンラインツールを活用するのも効果的です。

  • ipcalc → コマンドラインツール
  • Subnet Calculator → Webベースの計算ツール
  • 各種ネットワークシミュレータ → Cisco Packet Tracerなど

Pythonスクリプトで自動化

実務では、以下のようなスクリプトを用意しておくと便利です。

import ipaddress

def vlsm_calculator(base_network, requirements):
    """
    VLSM設計を自動計算する関数
    
    Args:
        base_network: ベースとなるネットワーク (例: '192.168.1.0/24')
        requirements: 各サブネットの要件 [(名前, ホスト数), ...]
    """
    network = ipaddress.ip_network(base_network)
    available = [network]
    allocations = []
    
    # ホスト数の多い順にソート
    requirements.sort(key=lambda x: x[1], reverse=True)
    
    for name, hosts in requirements:
        # 必要なプレフィックス長を計算
        required_prefix = 32 - (hosts + 2).bit_length()
        
        # 使用可能なネットワークから割り当て
        for i, net in enumerate(available):
            if net.prefixlen <= required_prefix:
                # サブネットを作成
                subnets = list(net.subnets(new_prefix=required_prefix))
                allocated = subnets[0]
                allocations.append((name, allocated))
                
                # 残りを更新
                available.pop(i)
                available.extend(subnets[1:])
                break
    
    return allocations

# 使用例
base = '192.168.10.0/24'
requirements = [
    ('営業部', 60),
    ('開発部', 28),
    ('総務部', 12),
    ('ルーター1', 2),
    ('ルーター2', 2)
]

result = vlsm_calculator(base, requirements)
for name, subnet in result:
    print(f"{name}: {subnet}")
    print(f"  使用可能範囲: {list(subnet.hosts())[0]} 〜 {list(subnet.hosts())[-1]}")
    print()

このようなツールを活用することで、複雑なVLSM設計も効率的に行えます。

まとめ

リンドくん

リンドくん

最初は難しそうだと思ったんですけど、基本を押さえれば意外と理解できそうですね!

たなべ

たなべ

その通り!基礎をしっかり理解することが一番大事なんだ。あとは実践を重ねることで、自然と身についていくよ。ぜひ実際に計算してみたり、ツールを使って設計してみてね!

この記事では、サブネット計算とVLSMの基礎から実践的な応用まで解説してきました。

重要なポイントをおさらいしましょう。

  • サブネット化の目的 → ネットワークの効率化、セキュリティ向上、管理のしやすさ
  • 基本的な計算手順 → IPアドレスとサブネットマスクの関係を理解し、2進数で考える
  • VLSMの活用 → 必要なホスト数に応じて柔軟にサブネットサイズを調整

サブネット設計は、ネットワークエンジニアにとって必須のスキルです。
最初は複雑に感じるかもしれませんが、基礎をしっかり理解し、実際に手を動かして計算してみることで、確実に身につけることができます。

今後、クラウドサービスやIoTデバイスがさらに普及する中で、効率的なネットワーク設計の重要性はますます高まっていくでしょう。
ぜひこの記事で学んだ知識を活かして、実際のネットワーク設計に挑戦してみてください。

この記事をシェア

関連するコンテンツ