3. Procedure for TCP-based clients (Procedura per i client TCP)
Quando un client basato su TCP (TCP-based Client) desidera stabilire una connessione a un oggetto raggiungibile solo tramite un firewall (tale determinazione è lasciata all'implementazione), deve aprire una connessione TCP alla porta SOCKS appropriata sul sistema server SOCKS (SOCKS Server System). Il servizio SOCKS (SOCKS Service) si trova convenzionalmente sulla porta TCP 1080. Se la richiesta di connessione (Connection Request) ha successo, il client entra in una negoziazione (Negotiation) per il metodo di autenticazione (Authentication Method) da utilizzare, si autentica con il metodo scelto e quindi invia una richiesta di relay (Relay Request). Il server SOCKS valuta la richiesta e stabilisce la connessione appropriata o la nega.
Salvo diversa indicazione, i numeri decimali che appaiono nei diagrammi di formato pacchetto rappresentano la lunghezza del campo corrispondente, in ottetti. Quando un determinato ottetto deve assumere un valore specifico, viene utilizzata la sintassi X'hh' per indicare il valore del singolo ottetto in quel campo. Quando viene utilizzata la parola "Variable", indica che il campo corrispondente ha una lunghezza variabile definita da un campo di lunghezza associato (di uno o due ottetti) o da un campo di tipo di dati.
Il client si connette al server e invia un messaggio di identificatore di versione/selezione del metodo (Version Identifier/Method Selection Message):
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+
Il campo VER è impostato su X'05' per questa versione del protocollo. Il campo NMETHODS contiene il numero di ottetti identificatori di metodo (Method Identifier Octet) che appaiono nel campo METHODS.
Il server seleziona uno dei metodi indicati in METHODS e invia un messaggio di selezione METHOD (METHOD Selection Message):
+----+--------+
|VER | METHOD |
+----+--------+
| 1 | 1 |
+----+--------+
Se il METHOD selezionato è X'FF', nessuno dei metodi elencati dal client è accettabile e il client deve chiudere la connessione.
I valori attualmente definiti per METHOD sono:
- X'00' NO AUTHENTICATION REQUIRED (Nessuna autenticazione richiesta)
- X'01' GSSAPI
- X'02' USERNAME/PASSWORD (Nome utente/Password)
- X'03' to X'7F' IANA ASSIGNED (Assegnato da IANA)
- X'80' to X'FE' RESERVED FOR PRIVATE METHODS (Riservato per metodi privati)
- X'FF' NO ACCEPTABLE METHODS (Nessun metodo accettabile)
Il client e il server entrano quindi in una sotto-negoziazione specifica del metodo (Method-Specific Sub-Negotiation).
Le descrizioni delle sotto-negoziazioni dipendenti dal metodo appaiono in memo separati.
Gli sviluppatori di nuovo supporto METHOD per questo protocollo dovrebbero contattare IANA per ottenere un numero METHOD. Il documento ASSIGNED NUMBERS dovrebbe essere consultato per un elenco aggiornato dei numeri METHOD e dei loro protocolli corrispondenti.
Le implementazioni conformi (Compliant Implementation) devono supportare GSSAPI e dovrebbero supportare i metodi di autenticazione USERNAME/PASSWORD.