実践LESSON 03

この教材で学ぶこと TCP/IPの動作を、通信障害の切り分けまでつなげて理解します。

TCP/IP 詳解 — 応用情報・実務レベル

前提知識: OSI参照モデルの概要。本教材ではプロトコルの詳細とトラブルシューティングを扱います。


1. TCP の状態遷移(応用情報頻出)

クライアント                    サーバー
    |                              |
    |──── SYN ─────────────────>   | LISTEN
    |                              | SYN_RCVD
    |   <──── SYN+ACK ──────────   |
    | ESTABLISHED                  |
    |──── ACK ─────────────────>   | ESTABLISHED
    |                              |
    |  ← データ転送 →              |
    |                              |
    |──── FIN ─────────────────>   | CLOSE_WAIT
    | FIN_WAIT_1                   |
    |   <──── ACK ──────────────   |
    | FIN_WAIT_2                   |
    |   <──── FIN ──────────────   | LAST_ACK
    | TIME_WAIT                    |
    |──── ACK ─────────────────>   | CLOSED
    | (2MSL待機後CLOSED)            |

TIME_WAIT が重要な理由

  • 最後の ACK がロストした場合にサーバーが FIN を再送できるようにする
  • ネットワーク上に残った古いパケットが新しい接続に混入しないようにする
  • 実務での問題: 短命な接続を大量に張ると TIME_WAIT が枯渇 → net.ipv4.tcp_tw_reuse=1 で対処

2. TCP ヘッダーの重要フィールド(応用情報で問われる)

フィールド ビット数 内容
送信元ポート 16
宛先ポート 16
シーケンス番号 32 送信バイトの先頭番号
確認応答番号 32 次に期待する受信バイト番号
データオフセット 4 ヘッダー長(32bit単位)
フラグ 6 URG/ACK/PSH/RST/SYN/FIN
ウィンドウサイズ 16 受信バッファの残量(フロー制御)
チェックサム 16 誤り検出
緊急ポインタ 16 URGフラグ時のみ有効

ウィンドウサイズとスループット

スループット上限 = ウィンドウサイズ / RTT

例: ウィンドウサイズ 64KB、RTT 100ms
  = 65536 bytes / 0.1s = 655,360 bytes/s ≒ 5.2 Mbps

→ 回線が1Gbpsでも、RTTが大きければウィンドウサイズがボトルネックになる
→ TCP Window Scaling(RFC 7323)で最大1GB まで拡張可能

3. HTTP/1.1 vs HTTP/2 vs HTTP/3

機能 HTTP/1.1 HTTP/2 HTTP/3
多重化 ❌(1接続1リクエスト) ✅(ストリーム) ✅
ヘッダー圧縮 ❌ ✅(HPACK) ✅(QPACK)
サーバープッシュ ❌ ✅ ✅
トランスポート TCP TCP QUIC(UDP)
HoL ブロッキング あり TCP層ではあり なし

HTTP/2 のストリームとフレーム

1本のTCP接続

Stream 1 ──[HEADERS][DATA][DATA]──────────────>
Stream 3 ───────[HEADERS][DATA]────────────>
Stream 5 ────────────[HEADERS][DATA][DATA]─>

↑ 多重化:複数リクエストを並列で処理

4. TLS 1.3 ハンドシェイク(応用情報・セキュリティで頻出)

クライアント                    サーバー
    |                              |
    |── ClientHello ─────────────> | (サポートするCipher Suite、乱数)
    |   <── ServerHello ─────────  | (選択したCipher Suite、証明書、公開鍵)
    |                              |
    | 証明書検証(CAの公開鍵で署名確認)
    |                              |
    |── Finished ────────────────> | (共有鍵で暗号化)
    |   <── Finished ────────────  |
    |                              |
    |  ← 暗号化通信開始 →          |

TLS 1.3 の改善点(vs TLS 1.2):

  • ハンドシェイクが 1-RTT(1.2は2-RTT)
  • 脆弱な暗号スイート(RSA鍵交換等)を廃止
  • 前方秘匿性(PFS)を必須化 — 秘密鍵が漏洩しても過去の通信は守られる

5. DNS の仕組み(応用情報必須)

名前解決の流れ

ブラウザ → OSキャッシュ → スタブリゾルバ(/etc/resolv.conf)
  → フルサービスリゾルバ(例: 8.8.8.8)
      → ルートDNSサーバー(.)
      → TLDサーバー(.jp, .com)
      → 権威DNSサーバー(example.com)
  → 回答をキャッシュ(TTL秒間)

重要なレコードタイプ

レコード 意味 例
A IPv4アドレス example.com → 1.2.3.4
AAAA IPv6アドレス
CNAME 別名 www → example.com
MX メールサーバー 優先度付き
TXT テキスト SPF・DKIMなど
NS ネームサーバー
SOA ゾーン情報 TTL・管理者等
PTR 逆引き 1.2.3.4 → example.com

DNS トラブルシューティング

# 権威DNSに直接問い合わせ(キャッシュを経由しない)
dig +trace example.com

# TTL確認
dig example.com | grep -A1 "ANSWER SECTION"

# 逆引き
dig -x 8.8.8.8

# DNSサーバーの指定
dig @1.1.1.1 example.com

# 特定レコードタイプ
dig example.com MX
dig example.com TXT | grep spf

6. NAT・IPマスカレード

[Private: 192.168.1.10:50000] → [NAT変換] → [Public: 203.0.113.1:60001]
                                                         ↓
                                              [Internet Server: 8.8.8.8:80]

NATテーブル:
192.168.1.10:50000 ↔ 203.0.113.1:60001
192.168.1.11:50001 ↔ 203.0.113.1:60002

NAPT(IPマスカレード): 複数のプライベートIPを1つのグローバルIPに変換
AWS の場合: NATゲートウェイがこの役割 → プライベートサブネットからのアウトバウンドを可能にする


7. 応用情報 午後問題 — ネットワーク頻出パターン

サブネット計算(確実に解けるようにする)

問題: 172.16.0.0/20 のネットワーク
  → サブネットマスク: 255.255.240.0
  → ホストアドレス数: 2^12 - 2 = 4094台
  → ネットワークアドレス: 172.16.0.0
  → ブロードキャスト: 172.16.15.255
  → 使用可能範囲: 172.16.0.1 ~ 172.16.15.254

VLAN と トランク

アクセスポート: 1つのVLANのみ(エンドデバイス接続)
トランクポート: 複数VLANを束ねる(スイッチ間・スイッチ-ルーター間)
タグなしVLAN(ネイティブVLAN): タグなしフレームが属するVLAN

スパニングツリー(STP)

  • ループ防止プロトコル(L2ネットワークでのブロードキャストストームを防ぐ)
  • ルートブリッジ選出 → 最小コストのパスを有効化 → 冗長パスをブロック
  • RSTP(Rapid STP): STPの高速版(収束時間を数秒に短縮)

🔗 次のステップ

  • DNS・TLS・HTTP詳解 — アプリ層プロトコル深掘り(今後追加予定)
  • ネットワークセキュリティ — TLSとセキュリティ(今後追加予定)
  • AWSネットワーク設計 — AWSでのネットワーク応用(今後追加予定)