エンドツーエンド原理

エンドツーエンド原理（End-to-End Principle）は、コンピュータネットワークの古典的設計原理でありピーター・J・デニングの「コンピューティングの大原則」の1つ、1981年に Jerome H. Saltzer、David P. Reed、デービッド・ダナ・クラークらの論文 End-to-end arguments in system design で初めてその概念が提唱された。通信プロトコルの操作は可能な限り通信システムの終端で行い、また制御対象のリソースになるべく近いところで行うべきであるというもの。

 概要 
エンドツーエンド原理では、アプリケーション固有の機能がネットワーク終端のホストで「完全かつ正しく」実装できるなら、ネットワーク内の中間ノードではなく終端のホストで実装されるべきだとする。この考え方はバランが1960年代に行った信頼できない部品で信頼性のあるネットワークを構築する研究にまで遡り、ネットワークに機能を追加しようとしたとき、（ネットワークでの実装のレベルによらず）結局は「完全かつ正しい」実装のために終端のホストにも実装しなければならなくなるという知見に基づく。下層の通信システムの機能の多くは上位層クライアントのために実装されているものの、クライアントがその機能を必要としないこともあり、クライアントが同等機能をエンドツーエンド的に再実装するような冗長な状況が存在し、性能的に無駄が生じるとした。

もう1つの典型的な例としてファイル転送がある。信頼性のあるファイル転送プロトコルやファイル転送プログラムではチェックサム機能を持ち、転送が完了した時だけチェックサムを検証する。ディスク障害やソフトウェア障害を考慮すると、エンドツーエンドのチェックサムが必要となる。ファイル転送でのキーとなるリソースはファイルシステムである。エンドツーエンド原理に従えば、ファイル転送でファイルシステムにアクセスするソフトウェアが転送の進み具合を制御し、最小の遅延で再転送を開始させることになる。

典型例として、それなりの大きさの分散ネットワークで信頼性のある2点間のファイル転送を行う場合が挙げられる。2つの終端が完全な信頼性のあるファイル転送を行うには、転送先の終端でファイル全体のチェックサムを確認して終端間（エンドツーエンド）で肯定応答を行う必要がある。そのようなシステムで下位層がファイルより小さな単位でチェックサムと応答のプロトコルを実装することは性能最適化の手段としてのみ正当化され、ファイル転送アプリケーション自体の高い信頼性要求を達成する手段としては不十分である。

ネットワーク中立性での議論では、エンドツーエンド原理は「中立」または「」ネットワークを前提として解釈される。

 基本的内容 
エンドツーエンド原理の背景にある基本的考え方は、2つのプロセスが何らかの通信手段を用いて互いに通信する際、その通信手段の提供する「信頼性」だけでプロセスに要求されている信頼性を完全に達成することは期待できないというものである。特にそれなりの大きさのネットワークに隔てられたプロセス間で通信する際に非常に高い信頼性が求められる場合、そのコストは単純な肯定応答と再送（ARQなど）で達成できる信頼性要求を満たす場合より高くなる。ある一定のマージンを超えて信頼性を得るには「中間ノード」内の機構よりも「終端ホスト」内の機構の方がずっと容易で扱いやすく、特に終端ホストの方が中間ノードよりも制御しやすい場合はそうである契約上の救済策を強制できる可能性があったとしても、非決定的な形で中間のリソースを共有するネットワークでは完全な信頼性を達成するのは不可能である。それはせいぜい統計的な平均的性能を示す程度である。。エンドツーエンドで肯定応答と無限に再試行する再送のプロトコル（PAR、Positive Acknowledgment with Re-transmission プロトコル）を使うと、データ転送の成功確率がゼロより大きい任意のネットワークで任意の高い信頼性を達成できる。

エンドツーエンド原理をエンドツーエンドの誤り制御・訂正以外に拡張して適用することは簡単ではない。例えば、レイテンシやスループットといった通信パラメータの向上に直接エンドツーエンド原理で寄与することはできない。Saltzer（最初のエンドツーエンド原理に関する論文の主著者）との個人的やりとりに基づき、BlumenthalとClarkは2001年の論文で次のように記している。

 歴史 
エンドツーエンド原理の意味は提唱された当初から継続的に再解釈されてきた。また Saltzer, Reed, Clark の1981年の論文より前に、注目すべきエンドツーエンド原理的な概念の明確な表現も見られる。

 信頼できない部品群による信頼性の達成 
1960年代、ポール・バランとドナルド・デービスはARPANET以前のネットワークを研究し、信頼性について後のエンドツーエンド原理に通じるコメントを残している。バランの1964年の論文には次のように記している。



同様にデービスはエンドツーエンドの誤り制御について次のように記している。

 ARPANETでの体験 
ARPANETは世界初の大規模汎用パケット通信ネットワークであり、バランやデービスが指摘した点を考慮し、エンドツーエンド原理の観点から重要な特徴をいくつか備えていた。

 パケット交換は、一部の論理機能を通信終端に分担させる。
 分散ネットワークがパケット通信を前提とするなら、パケットの順序入れ違えや重複の検出といった機能は必然的に論理的なネットワーク終端の機能となる。結果としてARPANETは機能を2つの階層に分けることを特徴とした。1つは隣接するネットワークノード (IMP) 間でデータパケットを転送することを扱う下層で、もう1つはデータ転送の終端間（エンドツーエンド）の側面を扱う上層である。エンドツーエンド原理の論文の筆者の1人クラークは「パケットの発見はエンドツーエンド論の結果ではない。パケットによりエンドツーエンド論が適切なものとなった」(slide 31) と結論付けている。
 終端間（エンドツーエンド）の肯定応答と再送の機構がなければ、高信頼データ転送は不可能である。
 ARPANETは、コンピュータが周辺機器と入出力チャネルでやりとりするときのように、ネットワークの任意の2終端間で高信頼なデータ転送を提供するよう設計された。パケット転送で発生しうる障害に対処するため、通常のARPANETメッセージは隣接ノード間で肯定応答と再送の方式を使って確実に手渡される。手渡しが成功したらそれらが処分され、パケット喪失の際に発信元から宛先まで再送するということはない。しかし多大な努力にもかかわらず、初期のARPANET仕様で想定していた完全な信頼性は、この方式では提供不可能であることが判明した。ARPANETが初期の4ノード構成から成長するにしたがって、そのことがますます明らかとなっていった。そこでARPANETは隣接ノード間の信頼性機構の持つ本質的制約に対処し真のエンドツーエンド信頼性を追求しようとした。
 信頼性、レイテンシ、スループットにはトレードオフの関係がある。
 完全な信頼性を追求することは、データ転送の他の重要なパラメータ、特にレイテンシとスループットを低下させる可能性がある。予測可能なスループットと低レイテンシは、対話型のリアルタイム音声アプリケーションなどで重要であり、その場合完全な信頼性は全く必要とされない。そのような用途のため、ARPANETでは低レイテンシのデータ転送サービスをホストに提供するため、各種信頼性保証手段を省いたサービスを提供した。

 TCP/IP 
インターネットでは、コネクションレスのデータグラムサービスで送達もQoSも保証しないIPプロトコルがほとんど全ての通信に使われている。
IP上で任意のプロトコルが動作する。
音声など一部の用途では再送による信頼性は必要とされないので、IPにおける信頼性機構はIPヘッダのチェックサムのみとなっている（低品質の経路でパケットを送信する際のビット誤り検出に必須である）。
エンドツーエンドの肯定応答と再送は、IPの上に置かれるコネクション指向のTCPで実装している。
IPとTCPで機能的に分割したのは、用途によってエンドツーエンド原理を選択可能にしたためである。
さらにネットワークが適切に機能するためには、輻輳状態となるような負荷を排除するような手段も必要とされる。
インターネットのほとんどのアプリケーションが通信にTCPを使っている。
バン・ジェイコブソンらがTCP向けのエンドツーエンドの輻輳制御アルゴリズムを考案したのは、TCPが標準化されてから7年後のことである。

 エンドツーエンド接続性 

エンドツーエンド接続性（End-to-End Connectivity）は、ネットワーク上の全ノードが、他の任意のノードにパケットを送信できることをいう。

インターネットを構成する要素や技術（例えばネットワークアドレス変換）は、エンドツーエンド接続性を保持していない。そのため、何らかの方法でTCP/IPに準拠しなければ、アプリケーションはインターネットを利用することが困難である。

エンドツーエンド接続性は、以下のような実用的理由で意図的に放棄された:
 IPアドレス枯渇問題のため。
 輻輳制御のため。
 セキュリティのため例えば、アドレス変換を行ってルーティング範囲を制限する。これにより、ネットワークアドレス変換(NAT)を隔てた位置にあるコンピュータは信頼されていない領域から直接アクセスできない。。

この傾向により、インターネットのユーザーは2種類に分かれる。一方はインターネット接続が自在に可能な人々で、もう一方は外向きのTCP接続でしかインターネットを利用できない人々である。

 脚注 

 注釈 

 出典 

 外部リンク
 MIT homepage of Jerome H. Saltzer 
 http://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf
 http://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.txt
 http://web.mit.edu/Saltzer/www/publications/endtoend/ANe2ecomment.html
MIT homepage of David D. Clark

Category:インターネット技術
Category:インターネットのプロトコル
Category:プログラミングパラダイム