メインコンテンツまでスキップ

3. Overview of Operation (動作の概要)

本節は説明のみです。

STUNはクライアント-サーバープロトコルです。クライアントはサーバーにリクエストを送信し、サーバーはレスポンスを返します。2つのタイプのトランザクション (transactions) があります:リクエスト/レスポンストランザクション (request/response transaction) とインディケーショントランザクション (indication transaction) です。

すべてのSTUNメッセージは、20バイトのヘッダーと、それに続く0個以上の属性 (Attributes) で構成されます。ヘッダーには、STUNメッセージタイプ、マジッククッキー (magic cookie)、トランザクションID (transaction ID)、およびメッセージ長が含まれます。

STUN属性は、タイプ-長さ-値 (Type-Length-Value, TLV) 形式でエンコードされ、長さにはパディングは含まれません。

STUNは単一のリクエスト/レスポンスペアを定義します。バインディングリクエスト (Binding request) は、クライアントからサーバーに送信されます。バインディングリクエストがサーバーに到着すると、1つ以上のNATを通過している可能性があります。その結果、サーバーが受信したリクエストの送信元トランスポートアドレス (送信元IPアドレスと送信元ポート) は、NATによって割り当てられた公開IPアドレスとポートになります。サーバーは、この送信元トランスポートアドレスをバインディングレスポンス (Binding response) のSTUN属性にコピーし、レスポンスをクライアントに返送します。クライアントは、バインディングレスポンスのSTUN属性を調べ、そこから反射トランスポートアドレス (reflexive transport address) を学習します。

STUNは、2つの基本的な認証とメッセージ完全性メカニズムを提供します。1つ目は、共有秘密 (shared secret) に基づくメッセージ完全性を提供します。2つ目は、ユーザー名とパスワードに基づくメッセージ完全性と認証を提供します。両方のメカニズムはHMAC-SHA1を使用します。

STUNは、同じトランスポートアドレス上で多重化された他のプロトコルからSTUNメッセージを区別するために使用できるFINGERPRINT属性も定義しています。