第1章:ネットワークの基礎

はじめに

NetPracticeでは、TCP/IPネットワークの基礎を実践的に学びます。この知識は、後のwebservやft_ircプロジェクトの基盤となります。

---

1. インターネットの歴史

1.1 ARPANETの誕生

1969年、ARPANET(Advanced Research Projects Agency Network)が誕生しました。これはアメリカ国防総省の研究機関DARPAが資金提供したプロジェクトです。

最初の接続は、UCLAとスタンフォード研究所(SRI)の間で行われました。最初に送信されたメッセージは「LO」でした。「LOGIN」を送信しようとしましたが、「G」を送る前にシステムがクラッシュしたのです。

1.2 TCP/IPの発明

1974年、Vint CerfBob KahnTCP/IPプロトコルを発明しました。これがインターネットの基盤となりました。

TCP/IPの設計原則:

  • パケット交換: データを小さなパケットに分割
  • 分散型: 中央制御なし
  • 堅牢性: 一部が故障しても動作継続

1.3 OSI参照モデル

1984年、ISOはOSI参照モデルを発表しました。これはネットワーク通信を7つの層に分類します:

+-------------------+
| 7. Application    |  HTTP, FTP, SSH
+-------------------+
| 6. Presentation   |  SSL/TLS, 圧縮
+-------------------+
| 5. Session        |  セッション管理
+-------------------+
| 4. Transport      |  TCP, UDP
+-------------------+
| 3. Network        |  IP, ICMP
+-------------------+
| 2. Data Link      |  Ethernet, Wi-Fi
+-------------------+
| 1. Physical       |  ケーブル, 電波
+-------------------+

1.4 TCP/IPモデル

実際のインターネットは、より簡略化されたTCP/IPモデル(4層)を使用します:

+-------------------+
| 4. Application    |  HTTP, FTP, DNS
+-------------------+
| 3. Transport      |  TCP, UDP
+-------------------+
| 2. Internet       |  IP, ICMP
+-------------------+
| 1. Network Access |  Ethernet, Wi-Fi
+-------------------+

---

2. IPアドレス

2.1 IPv4アドレス

IPv4アドレスは32ビットの数値です。通常、4つの8ビット(オクテット)に分けて、ドット区切りの10進数で表記します。

192.168.1.1

2進数表現:
11000000.10101000.00000001.00000001

各オクテットの範囲: 0-255

2.2 クラスフルアドレッシング(歴史的)

初期のIPアドレスはクラスに分類されていました:

| クラス | 先頭ビット | 範囲 | ネットワーク数 | ホスト数/ネットワーク | |--------|-----------|------|----------------|---------------------| | A | 0 | 0.0.0.0 - 127.255.255.255 | 128 | 16,777,214 | | B | 10 | 128.0.0.0 - 191.255.255.255 | 16,384 | 65,534 | | C | 110 | 192.0.0.0 - 223.255.255.255 | 2,097,152 | 254 | | D | 1110 | 224.0.0.0 - 239.255.255.255 | マルチキャスト | | E | 1111 | 240.0.0.0 - 255.255.255.255 | 予約 |

2.3 プライベートIPアドレス

インターネットに直接接続しないネットワークでは、以下のプライベートアドレスを使用します:

| クラス | 範囲 | CIDR表記 | |--------|------|----------| | A | 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | | B | 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | | C | 192.168.0.0 - 192.168.255.255 | 192.168.0.0/16 |

2.4 特殊なアドレス

| アドレス | 用途 | |----------|------| | 0.0.0.0 | デフォルトルート、全インターフェース | | 127.0.0.1 | ループバック(localhost) | | 255.255.255.255 | ブロードキャスト | | 169.254.x.x | リンクローカル(APIPA) |

---

3. サブネットマスク

3.1 サブネットマスクとは

サブネットマスクは、IPアドレスのネットワーク部ホスト部を区別します。

IPアドレス:    192.168.1.100
サブネット:    255.255.255.0

2進数:
IP:     11000000.10101000.00000001.01100100
Mask:   11111111.11111111.11111111.00000000
        |-- ネットワーク部 --|-- ホスト部 --|

ネットワークアドレス: 192.168.1.0
ブロードキャスト:     192.168.1.255
使用可能ホスト:       192.168.1.1 - 192.168.1.254

3.2 CIDR表記

CIDR(Classless Inter-Domain Routing)は、ネットワーク部のビット数で表記します:

192.168.1.0/24

/24 = 24ビットがネットワーク部
    = 255.255.255.0

一般的なサブネット:
/8  = 255.0.0.0       (16,777,214 hosts)
/16 = 255.255.0.0     (65,534 hosts)
/24 = 255.255.255.0   (254 hosts)
/25 = 255.255.255.128 (126 hosts)
/26 = 255.255.255.192 (62 hosts)
/27 = 255.255.255.224 (30 hosts)
/28 = 255.255.255.240 (14 hosts)
/29 = 255.255.255.248 (6 hosts)
/30 = 255.255.255.252 (2 hosts)
/31 = 255.255.255.254 (point-to-point)
/32 = 255.255.255.255 (single host)

3.3 サブネット計算

例: 192.168.1.100/26

Step 1: サブネットマスクを計算
/26 = 11111111.11111111.11111111.11000000
    = 255.255.255.192

Step 2: ネットワークアドレスを計算
IP:   11000000.10101000.00000001.01100100 (192.168.1.100)
Mask: 11111111.11111111.11111111.11000000 (255.255.255.192)
AND:  11000000.10101000.00000001.01000000 (192.168.1.64)

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

Step 3: ブロードキャストアドレスを計算
ホスト部を全て1にする:
      11000000.10101000.00000001.01111111 (192.168.1.127)

ブロードキャスト: 192.168.1.127

Step 4: 使用可能なホスト範囲
最初のホスト: 192.168.1.65
最後のホスト: 192.168.1.126
ホスト数: 62 (2^6 - 2)

---

4. ルーティング

4.1 ルーティングとは

ルーティングは、パケットを宛先ネットワークへ転送するプロセスです。ルーターはルーティングテーブルを参照して、次のホップ(転送先)を決定します。

4.2 ルーティングテーブル

Destination     Gateway         Genmask         Flags   Interface
0.0.0.0         192.168.1.1     0.0.0.0         UG      eth0
192.168.1.0     0.0.0.0         255.255.255.0   U       eth0
10.0.0.0        192.168.1.254   255.255.255.0   UG      eth0

各フィールドの意味:

  • Destination: 宛先ネットワーク
  • Gateway: 次のホップのIPアドレス(0.0.0.0は直接接続)
  • Genmask: サブネットマスク
  • Flags: U=使用中, G=ゲートウェイ経由
  • Interface: 出力インターフェース
  • 4.3 デフォルトルート

    デフォルトルート(0.0.0.0/0)は、他のルールに一致しないパケットの転送先です:

    Destination: 0.0.0.0
    Gateway: 192.168.1.1  (ルーターのアドレス)
    Genmask: 0.0.0.0
    
    → 行き先がわからないパケットは、全て192.168.1.1に送る
    

    4.4 ルーティングの決定プロセス

    パケットの宛先が10.0.0.100の場合:

    1. ルーティングテーブルを上から順に確認
    
    2. 10.0.0.100 AND 255.255.255.0 = 10.0.0.0
       → 10.0.0.0ネットワークのエントリに一致
    
    3. Gateway 192.168.1.254 に転送
    
    4. 一致しなければ、デフォルトルート(0.0.0.0)を使用
    

    ---

    5. ネットワーク機器

    5.1 スイッチ(Layer 2)

    スイッチはMACアドレスを使ってフレームを転送します。同一ネットワーク内の通信を処理します。

    +--------+     +--------+     +--------+
    | PC A   |-----| Switch |-----| PC B   |
    +--------+     +--------+     +--------+
    192.168.1.1              192.168.1.2
    
    スイッチは両方のPCが同じネットワークにいることを認識
    

    5.2 ルーター(Layer 3)

    ルーターはIPアドレスを使ってパケットを転送します。異なるネットワーク間の通信を処理します。

    +--------+     +--------+     +--------+
    | PC A   |-----| Router |-----| PC B   |
    +--------+     +--------+     +--------+
    192.168.1.1   |        |   10.0.0.1
                  |        |
            192.168.1.254  10.0.0.254
    

    5.3 ゲートウェイ

    ゲートウェイは、あるネットワークから別のネットワークへの出口です。通常、ルーターのインターフェースアドレスです。

    ネットワーク 192.168.1.0/24 のゲートウェイ: 192.168.1.254
    → このネットワーク外への通信は、全て192.168.1.254に送る
    

    ---

    6. NetPracticeの基本ルール

    6.1 同一ネットワーク判定

    2つのホストが同じネットワークにいるかどうかを判定:

    bool isSameNetwork(uint32_t ip1, uint32_t ip2, uint32_t mask) {
        return (ip1 & mask) == (ip2 & mask);
    }
    
    // 例
    IP1 = 192.168.1.1   (11000000.10101000.00000001.00000001)
    IP2 = 192.168.1.100 (11000000.10101000.00000001.01100100)
    Mask = 255.255.255.0 (11111111.11111111.11111111.00000000)
    
    IP1 & Mask = 192.168.1.0
    IP2 & Mask = 192.168.1.0
    
    → 同じネットワーク
    

    6.2 通信可能条件

    2つのホストが直接通信するには:

  • 同じネットワークに属する(サブネットマスクで判定)
  • 有効なIPアドレス(ネットワークアドレスでもブロードキャストでもない)
  • IPアドレスが重複しない
  • 6.3 ルーティング条件

    異なるネットワーク間の通信には:

  • 正しいゲートウェイ設定(同じネットワーク内のルーターのアドレス)
  • ルーティングテーブルのエントリ(宛先ネットワークへの経路)
  • 戻り経路(双方向の通信に必要)
  • ---

    まとめ

    本章で学んだこと:

  • インターネットの歴史: ARPANET、TCP/IP
  • IPアドレス: クラス、プライベートアドレス
  • サブネットマスク: CIDR、計算方法
  • ルーティング: ルーティングテーブル、デフォルトルート
  • ネットワーク機器: スイッチ、ルーター、ゲートウェイ

次章では、サブネット計算の詳細を学びます。