ネットワークにおけるエンド・ツー・エンドとは実際には何か
エンド・ツー・エンド接続の実用的な説明、実際のネットワークで失敗する理由、そして traceroute と MTU チェックを使った検証方法。
接続が「エンド・ツー・エンド」だと言うとき、人々はデータが元のソースアプリケーションから宛先アプリケーションまで、途中の何らかのミドルボックスがそれを黙って書き換えたり終了したりせずに、すべての方法で移動することを意味しています。NAT、ファイアウォール、ロードバランサー、プロキシを通して実際のパケットの経路を追跡し始めるまでは、シンプルに聞こえます。
エンド・ツー・エンド原則
この考え方は 1984 年の Saltzer、Reed、Clark による論文に遡ります。その論文は、信頼性と暗号化のような特定の機能はネットワークの中間ではなくエンドポイントに属すべきだと主張していました。コアネットワークはパケットを転送するだけです。エンドポイントはエラー チェック、再送信、および順序付けを処理します。
TCP が最も明確な例です。中間のルーターはシーケンス番号を追跡したり、セグメントを確認応答したりしません。これは TCP スタックを実行している 2 つのホストの仕事です。ネットワーク層 (IP) は単にベストエフォート配信を行い、各エンドの TCP は失われたものや順序が変わったものを修正します。
今日、エンド・ツー・エンドが機能しなくなる場所
モダンネットワークはこの原則に絶えず違反しており、通常は正当な運用上の理由があります:
- NAT はソース IP とポートを書き換えるため、サーバーが受け取るパケットはクライアントが送ったパケットではありません。
- TLS 終端プロキシとロードバランサー (AWS ALB やnginx リバースプロキシなど) は一つの TCP/TLS セッションを終了し、新しいセッションを開始します。クライアントの実際のエンドポイントはアプリサーバーではなく、プロキシです。
- ステートフルファイアウォール は接続状態を追跡し、予期されたシーケンスと一致しないパケットをドロップでき、効果的に自分たちを会話に挿入します。
- CGNAT は ISP ネットワーク上にあり、多くのお客様が 1 つのパブリック IP を共有しているため、IP が単一ホストにマップされるという前提が破れています。
これは実際にデバッグするときに重要です。ユーザーが「接続が切れた」と報告した場合、接続がノートパソコン、ホームルーター、ISP、CDN エッジノード、ロードバランサー、またはオリジンサーバーのどこで切れたのかを知る必要があります。エンド・ツー・エンド思考は、自分のサーバーログをチェックするだけでなく、チェーン全体を追跡することを強制します。
エンド・ツー・エンド接続の検証
成功/失敗だけでなく、実際のパスを表示するいくつかのツール:
# ホップごとにルートをトレースする
traceroute 8.8.8.8
# Linux では、MTR はホップごとに継続的な統計を提供します
mtr google.com
# フラグメント化またはパケットの無音ドロップを引き起こす MTU の問題をチェックする
ping -M do -s 1472 8.8.8.8
その最後のコマンドはよく知る価値があります。パス MTU 発見の失敗は、「エンド・ツー・エンド接続に見えるが実際にはそうではない」という古典的な問題です。TCP SYN のような小さなパケットはうまく通過しますが、フルサイズのペイロードを送信すると、中間のホップが大きすぎるためにそれを無音でドロップしてしまい、ファイアウォールによって「フラグメンテーション必要」の ICMP がブロックされています。接続がハング状態になり、誰もがアプリケーションを非難します。
TCP の場合、両方の終端で tcpdump または ss -ti は、2 つのホストがオープン接続を持つことに同意しているかどうかを示します:
ss -ti dst 203.0.113.5
一方が接続を ESTABLISHED と考えており、もう一方が何も表示しない場合、中間の何か (通常はアイドル接続をタイムアウトするファイアウォール) がそれを無音で殺しました。
セキュリティにとってこれが重要な理由
エンド・ツー・エンド暗号化はこの同じコンセプトのセキュリティ関連版です。ブラウザと CDN エッジ間の TLS はブラウザとオリジンサーバー間の TLS と同じではありません。CDN が TLS を終了し、平文 (または新しい TLS 接続) をバックエンドに転送する場合、1 つの連続した暗号化チャネルではなく、2 つの個別の暗号化ホップがあります。これはほとんどのユースケースでは問題ありませんが、何か機密を扱っている場合は、復号化がどこで行われ、誰が各ホップで平文を見ることができるかを正確に知る必要があります。
同じロジックが VPN に適用されます。「フルトンネル」VPN はデバイスから VPN 出口ノードまでのエンド・ツー・エンド暗号化を提供しますが、出口ノードから実際の宛先サーバーへの接続は、独自のセキュリティ特性を持つ別のホップです。
実用的なポイント
誰かがネットワークパスはエンド・ツー・エンドだと言うとき、正確に「どの 2 つのポイント間のエンド・ツー・エンドか」と聞いてください。クライアントとロードバランサーの間ですか。ロードバランサーとアプリサーバーの間ですか。実際のエンドポイントに名前を付けると、漠然としたネットワークク レームをパケットキャプチャでテストできるものに変えます。
実際のトラフィックのトレースとパケットキャプチャの読み取りについてさらに詳しく知りたい場合は、Korra Studio の DEFENSE_GRID プラットフォーム上の Wireshark と TCP/IP の基礎セグメントをチェックしてください。
この記事は AI の支援を受けて執筆し、Korra Studio の Michal Pilch(CISSP)が確認のうえ公開しました。
これは Korra Studio ナレッジベースの 1 つのノートです。プラットフォームはすべてのトピックと 1 対 1 メンタリングをペアで提供します。
無料で始めるarrow_forward