Socks funciona em Camada OSI 5 (A camada de sessão) , para que possa adicionar informações adicionais sobre o fluxo, incluindo as informações de destino. Isso é conhecido como Gateway no nível de circuito .
Para conexão TCP de proxy, quando uma conexão de socks é solicitada por um cliente, entre o proxy de socks e o destino, o cliente envia um comando CONNECT, com as informações de destino. Neste momento, o servidor observa o endereço / porta do cliente, para saber qual cliente o solicitou.
O servidor proxy estabelece então uma conexão TCP com o servidor de destino, que envolve a negociação de um número de sequência. Esse número pode ser usado para vincular todos os pacotes na conexão e para a solicitação inicial do cliente.
Nas conexões subseqüentes ao proxy, o cliente usa o verbo BIND, que permite ao servidor distinguir o primeiro fluxo do cliente de seu segundo, terceiro, ... nth. Tudo o que é necessário lembrar é a informação do cliente e os números de sequência.
Para proxies de fluxos UDP, o cliente inicial - > A comunicação proxy é tratada no TCP, chamando o verbo UDP ASSOCIATE, que permite que o proxy vincule a conexão UDP ao cliente e forneça uma identidade pela qual possa enviar fluxos UDP para o cliente.
Veja os detalhes das especificações aqui: link