3. Procedure for TCP-based clients (TCPベースクライアントの手順)
TCPベースのクライアント (TCP-based Client) が、ファイアウォール経由でのみ到達可能なオブジェクトへの接続を確立したい場合(そのような判断は実装に委ねられます)、SOCKSサーバーシステム (SOCKS Server System) の適切なSOCKSポート (SOCKS Port) へのTCP接続を開かなければなりません。SOCKSサービス (SOCKS Service) は、通常TCPポート1080に配置されます。接続リクエスト (Connection Request) が成功すると、クライアントは使用する認証方法 (Authentication Method) のネゴシエーション (Negotiation) を開始し、選択された方法で認証し、その後リレーリクエスト (Relay Request) を送信します。SOCKSサーバーはリクエストを評価し、適切な接続を確立するか、拒否します。
特に断りのない限り、パケットフォーマット図に表示される10進数は、対応するフィールドの長さをオクテット単位で表します。特定のオクテットが特定の値を取る必要がある場合、構文X'hh'を使用して、そのフィールドの単一オクテットの値を示します。「Variable」という単語が使用される場合、対応するフィールドが、関連する(1または2オクテットの)長さフィールド、またはデータ型フィールドによって定義される可変長を持つことを示します。
クライアントはサーバーに接続し、バージョン識別子/メソッド選択メッセージ (Version Identifier/Method Selection Message) を送信します:
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+
VERフィールドは、このバージョンのプロトコルではX'05'に設定されます。NMETHODSフィールドには、METHODSフィールドに表示されるメソッド識別子オクテット (Method Identifier Octet) の数が含まれます。
サーバーは、METHODSで指定されたメソッドの1つから選択し、METHOD選択メッセージ (METHOD Selection Message) を送信します:
+----+--------+
|VER | METHOD |
+----+--------+
| 1 | 1 |
+----+--------+
選択されたMETHODがX'FF'の場合、クライアントがリストしたメソッドのいずれも受け入れられないため、クライアントは接続を閉じなければなりません (MUST)。
METHODに現在定義されている値は次のとおりです:
- X'00' NO AUTHENTICATION REQUIRED (認証不要)
- X'01' GSSAPI
- X'02' USERNAME/PASSWORD (ユーザー名/パスワード)
- X'03' to X'7F' IANA ASSIGNED (IANA割り当て)
- X'80' to X'FE' RESERVED FOR PRIVATE METHODS (プライベートメソッド用予約)
- X'FF' NO ACCEPTABLE METHODS (受け入れ可能なメソッドなし)
その後、クライアントとサーバーは、メソッド固有のサブネゴシエーション (Method-Specific Sub-Negotiation) に入ります。
メソッド依存のサブネゴシエーションの説明は、別のメモに記載されています。
このプロトコルの新しいMETHODサポートの開発者は、METHOD番号についてIANAに連絡すべきです。METHOD番号とそれに対応するプロトコルの現在のリストについては、ASSIGNED NUMBERSドキュメントを参照すべきです。
準拠実装 (Compliant Implementation) は、GSSAPIをサポートしなければならず (MUST)、USERNAME/PASSWORD認証方法をサポートすべきです (SHOULD)。