UDP チェックサムの計算のために疑似ヘッダーが UDP データグラムの先頭に追加されるのはなぜですか? この背後にある合理的な理由は何ですか?
5 に答える
「馬の口からまっすぐに」答えに最も近いのは、次のリンクの David P. Reed からのものです。
http://www.postel.org/pipermail/end2end-interest/2005-February/004616.html
答えの短いバージョンは、「歴史的な理由から疑似ヘッダーが存在する」です。
もともと、TCP/IP は単一のモノリシック プロトコル (単に TCP と呼ばれていました) でした。彼らがそれを TCP と IP (およびその他) に分割することを決定したとき、2 つをそれほど明確に分離しませんでした。IP アドレスは依然として TCP の一部と考えられていましたが、IP 層から「継承」されただけでした。 TCP ヘッダーで繰り返されるのではなく、TCP チェックサムが IP ヘッダーの一部 (IP アドレスを含む) で動作する理由は、暗号化を使用して TCP ペイロードを暗号化および認証することを意図しており、疑似ヘッダー内の IP アドレスおよびその他の TCP パラメーターを認証コードによって保護されています。これにより、中間者が送信元 IP アドレスと送信先アドレスを改ざんすることが不可能になります。中間のルーターは改ざんに気付かず、
さまざまな理由で、その壮大な暗号化計画は実現しませんでしたが、代わりに使用された TCP チェックサムは、疑似ヘッダーに対して、あたかもそれが有用なことであるかのように動作します。はい、ランダムエラーに対する追加の保護を少し提供しますが、それが存在する理由ではありません. 率直に言って、これはなくした方がよいでしょう。TCP と IP の結合は、IP を変更するときに TCP を再定義する必要があることを意味します。したがって、IPv6 の定義には、TCP および UDP 疑似ヘッダーの新しい定義が含まれています (RFC 2460、s8.1 を参照)。IPv6 設計者が、この結合を廃止する機会を利用するのではなく、永続化することを選択した理由は、私にはわかりません。
TCP または UDP の観点からは、パケットには IP アドレスが含まれていません。(IP はその下のレイヤーです。)
したがって、適切なチェックサムを行うために、「疑似ヘッダー」が含まれています。実際には UDP データグラムの一部ではないため、「疑似」です。これには、IP ヘッダーの最も重要な部分、つまり送信元アドレスと宛先アドレス、プロトコル番号、およびデータ長が含まれています。
これは、UDP チェックサムがこれらのフィールドを考慮に入れるようにするためです。
これらのプロトコルが設計されていたとき、彼らの深刻な懸念は、パケットが自分のものではないのに自分のものだと思ってホストが受信することでした。転送中に IP ヘッダーで数ビットが反転し、パケットの進路が変更された場合 (ただし、IP チェックサムは依然として正しい)、リダイレクトされた受信者の TCP/UDP スタックは、パケットを拒否することを認識できます。
疑似ヘッダーは層の分離のイディオムを破りましたが、信頼性の向上には許容できると見なされました。