설명
SOCKS5는 RFC 1928에 정의된 전송 계층 프록시 프로토콜입니다. HTTP 요청과 응답을 이해하고 파싱하는 HTTP 프록시와 달리, SOCKS5 프록시는 더 낮은 수준에서 작동합니다. 즉, 페이로드를 검사하거나 수정하지 않고 사용자와 대상 간에 원시 TCP 또는 UDP 패킷을 전달합니다. 이는 SOCKS5 프록시가 웹 트래픽뿐만 아니라 TCP 또는 UDP 상에서 실행되는 모든 프로토콜을 전달할 수 있음을 의미합니다.
SOCKS5는 SOCKS 프록시 프로토콜의 최신 버전으로, IPv6, UDP 포워딩, 인증 방식(인증 없음, 사용자명/비밀번호, GSS-API) 지원을 추가했습니다. 대부분의 레지덴셜 및 ISP 프록시 제공업체는 클라이언트가 자신의 스택에 맞는 프로토콜을 선택할 수 있도록 HTTP와 SOCKS5 모두로 엔드포인트를 제공합니다.
HTTPS를 통한 웹 스크래핑의 경우, HTTP CONNECT 프록시와 SOCKS5 프록시는 거의 동일하게 작동합니다. 둘 다 결국 암호화된 TCP 트래픽을 터널링하게 됩니다. 클라이언트가 HTTP가 아닌 프로토콜(FTP, SMTP, IRC, BitTorrent, 게임)을 사용하거나 특별히 UDP 지원이 필요한 경우에 차이가 의미를 갖게 됩니다.
작동 방식
클라이언트가 SOCKS5 프록시에 연결하면, 인증 방법을 지정하는 작은 핸드셰이크를 전송한 다음, 대상 호스트와 포트가 포함된 CONNECT 명령을 전송합니다. 프록시는 해당 대상으로 TCP 연결을 열고, 그 시점부터는 클라이언트와 대상 사이에서 단순히 바이트를 중계합니다. HTTP 계층에 대한 인식이 없으므로, 프록시는 URL, 헤더, 응답 본문을 읽지 않습니다.
이러한 전송 계층 투명성 덕분에 SOCKS5는 모든 TCP 기반 프로토콜에서 작동합니다. UDP 지원은 별도의 UDP ASSOCIATE 흐름을 사용하는데, 클라이언트가 UDP 데이터그램을 프록시로 보내면 프록시가 이를 대상으로 전달합니다. 인증을 사용하는 경우, 초기 핸드셰이크 중 한 번만 이루어지며 전체 세션에 적용됩니다.