モジュール 02ターム1 · 基礎9 ポスター項目

インターネットは実際どう動いているのか

ログインすると、進捗を複数のデバイスで保存できます。ログインするまでは、このブラウザに保存されます。

なぜ重要なのか

本番環境の「謎の」バグの多くはネットワークが原因です。まだ伝播していない DNS の変更、期限切れの TLS 証明書、遠くにいるユーザーにだけ遅いリクエスト。頭の中に描けないものは、デバッグできません。

学習目標

  1. ブラウザからデータベースまで、1つのリクエストを往復で追跡し、すべてのホップを名指しできる。
  2. DNS の名前解決、TTL、そして変更が「時間がかかる」理由を説明できる。
  3. TCP と UDP の違い、HTTP/2 と HTTP/3 で何が変わるかを説明できる。
  4. TLS を正しく設定し、内部トラフィックも暗号化できる。
  5. レイテンシを正しく測定できる:平均値ではなくパーセンタイルで。

レッスン

2.1 リクエストの一生

ブラウザ → DNS ルックアップ → TCP(または QUIC)接続 → TLS ハンドシェイク → CDN エッジ → リバースプロキシ/ロードバランサー → アプリサーバー → データベース/キャッシュ/サードパーティ API → 戻り。ホップを1つ経るごとにレイテンシが加わり、障害点も1つ増えます。

2.2 DNS (97)

  • レコード:A/AAAA(アドレス)、CNAME(エイリアス)、MX(メール)、TXT(検証、SPF、DKIM、DMARC)、CAA(どの CA が証明書を発行できるか)。
  • TTL はキャッシュを制御します。TTL はマイグレーションの最中ではなく、前日に下げておきます。
  • よくある障害:ドメインの期限切れ、間違った CNAME、メール関連レコードの欠落(メールが迷惑メールに振り分けられる)、DNS プロバイダーの障害。

2.3 TCP と UDP (98)、HTTP のバージョン (99)

  • TCP: 信頼性があり、順序が保証されます。パケットを1つ失うと、その後ろのすべてが止まります(head-of-line blocking)。
  • UDP: 保証はなく、オーバーヘッドが小さい。動画、音声、ゲーム、DNS、QUIC で使われます。
  • HTTP/1.1: 1つの接続につき、同時に1つのリクエストのみ。
  • HTTP/2: 1つの TCP 接続上で多数のストリームを多重化します。ただし TCP の head-of-line blocking は残ります。
  • HTTP/3: UDP 上の QUIC で動作します。ストリームが独立し、ハンドシェイクが速く、ネットワークの切り替え(Wi-Fi からモバイルへ)にも耐えます。通常は CDN を使えば追加の手間なく利用できます。

2.4 TLS、通信の暗号化 (71, 73)

  • 最低でも TLS 1.2、できれば TLS 1.3 を使います。証明書は自動化します(Let's Encrypt、または利用しているプラットフォームの機能)。
  • HSTS ヘッダーを設定し、ブラウザが HTTP にダウングレードしないようにします。
  • 内部トラフィックも暗号化します(アプリから DB、サービス間)。「VPC の中だから大丈夫」はセキュリティ対策ではありません。
  • データベース接続:SSL を必須にします(sslmode=require またはそれ以上に厳格な設定)。

2.5 レイテンシ、スループット、パーセンタイル (91〜94)

  • レイテンシ: 1リクエストにかかる時間。スループット: 1秒あたりのリクエスト数。
  • 平均値は報告しないでください。p50、p95、p99 を報告します。100 回に1回の遅いリクエストはまれに聞こえますが、バックエンドを 20 回呼び出すページでは、ページ読み込みのかなりの割合が p99 に当たります。これがテールレイテンシの増幅です。
  • すべてのエンジニアが知っておくべき目安:同一リージョン内のネットワーク往復は約 1 ms 以下、シンガポールから米国西部までは往復約 170 ms、LLM の呼び出しには数秒かかります。最も遅いホップを前提に設計してください。

Lab 2:追跡と測定

  1. 自分のドメインに dig を実行し、すべてのレコードと TTL を記録します。CAA を追加し、メールドメインの SPF/DKIM/DMARC を確認します。
  2. 2つのリージョンから、アプリに対して curl -w によるタイミング計測(dns、connect、tls、ttfb、total)を実行します。
  3. オンラインの TLS 診断ツールで TLS 設定をチェックし、A 評価になるまで修正します。
  4. k6 で1つのエンドポイントに 10、50、100 の仮想ユーザーで負荷テストを行い、p50/p95/p99 をグラフにします。

完了の定義(Definition of Done)

AI プロンプト集

  • 「すべての外部 HTTP 呼び出しについて、DNS、接続、TTFB をログに記録するタイミング計測を追加してください。」
  • 「設定ファイルをもとに、このアプリのリクエスト経路をホップごとに説明してください。TLS のないホップがあれば指摘してください。」