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

7. Procedure for UDP-based clients (UDPベースクライアントの手順)

UDPベースのクライアント (UDP-based Client) は、UDP ASSOCIATEリクエストへの応答でBND.PORTによって示されるUDPポートで、UDPリレーサーバー (UDP Relay Server) にデータグラムを送信しなければなりません (MUST)。選択された認証方法が、真正性 (Authenticity)、完全性、および/または機密性を目的としたカプセル化を提供する場合、データグラムは適切なカプセル化を使用してカプセル化されなければなりません (MUST)。各UDPデータグラムは、以下のUDPリクエストヘッダー (UDP Request Header) を伴います:

   +----+------+------+----------+----------+----------+
|RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA |
+----+------+------+----------+----------+----------+
| 2 | 1 | 1 | Variable | 2 | Variable |
+----+------+------+----------+----------+----------+

UDPリクエストヘッダーのフィールド:

  • RSV 予約 (Reserved) X'0000'
  • FRAG 現在のフラグメント番号 (Current Fragment Number)
  • ATYP 後続アドレスのアドレスタイプ:
    • IP V4 address: X'01'
    • DOMAINNAME: X'03'
    • IP V6 address: X'04'
  • DST.ADDR 目的の宛先アドレス
  • DST.PORT 目的の宛先ポート
  • DATA ユーザーデータ (User Data)

UDPリレーサーバーがUDPデータグラムをリレーすることを決定した場合、要求しているクライアントに通知することなく、静かに実行します。同様に、リレーできない、またはリレーしないデータグラムをドロップします。UDPリレーサーバーがリモートホスト (Remote Host) から応答データグラムを受信すると、上記のUDPリクエストヘッダー、および認証方法依存のカプセル化を使用してそのデータグラムをカプセル化しなければなりません (MUST)。

UDPリレーサーバーは、UDP ASSOCIATEへの応答で指定されたBND.PORTにデータグラムを送信するクライアントの予想されるIPアドレスを、SOCKSサーバーから取得しなければなりません (MUST)。特定の関連付けについて記録されたもの以外の送信元IPアドレスから到着したデータグラムをドロップしなければなりません (MUST)。

FRAGフィールドは、このデータグラムが複数のフラグメント (Fragment) の1つであるかどうかを示します。実装されている場合、上位ビット (High-Order Bit) はフラグメントシーケンスの終わり (End-of-Fragment Sequence) を示し、X'00'の値はこのデータグラムがスタンドアロン (Standalone) であることを示します。1から127の間の値は、フラグメントシーケンス内のフラグメント位置を示します。各レシーバーには、これらのフラグメントに関連付けられた再アセンブリキュー (REASSEMBLY QUEUE) と再アセンブリタイマー (REASSEMBLY TIMER) があります。再アセンブリタイマーが期限切れになるか、このフラグメントシーケンスに対して処理された最高のFRAG値よりも小さいFRAGフィールドを持つ新しいデータグラムが到着するたびに、再アセンブリキューを再初期化し、関連するフラグメントを破棄しなければなりません。再アセンブリタイマーは、5秒以上でなければなりません (MUST)。可能な限り、アプリケーションによってフラグメンテーション (Fragmentation) を回避することが推奨されます。

フラグメンテーションの実装は任意 (Optional) です。フラグメンテーションをサポートしない実装は、FRAGフィールドがX'00'以外のデータグラムをドロップしなければなりません (MUST)。

SOCKS対応UDP (SOCKS-aware UDP) のプログラミングインターフェース (Programming Interface) は、オペレーティングシステムが提供する実際のスペースよりも小さい、UDPデータグラム用の利用可能なバッファースペース (Buffer Space) を報告しなければなりません (MUST):

  • ATYPがX'01'の場合 - 10+method_dependentオクテット小さい
  • ATYPがX'03'の場合 - 262+method_dependentオクテット小さい
  • ATYPがX'04'の場合 - 20+method_dependentオクテット小さい