SOCKS — мережевий протокол, який дозволяє клієнт-серверним додаткам прозоро використовувати сервіси за міжмережевими екранами (фаєрволами).
Клієнти за міжмережевим екраном, що потребують доступ до зовнішніх серверів, замість цього можуть з'єднуватися з SOCKS проксі-сервером. Такий проксі-сервер контролює права клієнта для доступу до зовнішніх ресурсів і передає запит до сервера. SOCKS може використовуватися і протилежним способом, дозволяючи зовнішнім клієнтам з'єднуватися з серверами за міжмережевим екраном (брандмауером).
На відміну від HTTP проксі-серверів, SOCKS передає всі дані від клієнта, нічого не додаючи від себе, тобто з точки зору кінцевого сервера, SOCKS проксі є звичайним клієнтом. SOCKS більш універсальний - не залежить від конкретних протоколів прикладного рівня (7-го рівня моделі OSI) і базується на стандарті TCP/IP - протоколі 4-го рівня. Зате HTTP проксі кешує дані і може ретельніше фільтрувати вміст переданих даних.
Цей протокол був розроблений Девідом Кобласом (David Koblas), системним адміністратором MIPS Computer Systems. Після того, як в 1992 році MIPS увійшла до складу Silicon Graphics (SGI), Коблас зробив доповідь про SOCKS на Симпозіумі з Безпеки Usenix (Usenix Security Symposium), і SOCKS став публічно доступним. Протокол був розширений до четвертої версії Ін-Да Лі (Ying-Da Lee) з NEC Systems Laboratory
SOCKS 4 призначений для роботи через фаєрвол без аутентифікації для додатків типу клієнт-сервер, що працюють за протоколом TCP, таких, як TELNET, FTP і таких популярних протоколів обміну інформацією, як HTTP, WAIS і GOPHER. По суті, SOCKS-сервер можна розглядати як міжмережевий екран, що підтримує протокол SOCKS.
Типовий запит SOCKS 4 виглядає наступним чином (кожне поле - один байт):
Запит Клієнта до SOCKS-Серверу:
Відповідь Сервера SOCKS-Клієнту:
SOCKS 5 розширює модель SOCKS 4, додаючи до неї підтримку UDP, забезпечення універсальних схем строгої аутентифікації і розширює методи адресації, додаючи підтримку доменних імен і адрес IPv6. Початкова установка зв'язку тепер складається з наступного:
Методи аутентифікації пронумеровані таким чином:
Початковий запит від клієнта:
Сервер повідомляє про свій вибір:
Подальша ідентифікація залежить від обраного методу.
Запит клієнта: