第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 CerfとBob KahnがTCP/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つのホストが直接通信するには:
6.3 ルーティング条件
異なるネットワーク間の通信には:
---
まとめ
本章で学んだこと:
次章では、サブネット計算の詳細を学びます。