1

Если к sock-прокси может быть подключено несколько клиентов, каждый из которых отправляет и получает данные одновременно, как прокси-сервер отслеживает каждый отдельный запрос?

Поскольку все они подключены к одному и тому же IP-адресу на одном и том же порту, как прокси-сервер может узнать, кому и зачем нужно было отправить ответ?

1 ответ1

2

Socks работает на уровне 5 OSI (уровень сеанса), поэтому он может добавлять дополнительную информацию о потоке, включая информацию о месте назначения. Это известно как шлюз уровня схемы.

Для прокси-соединений TCP. Когда клиент запрашивает соединение socks, между socks proxy и пунктом назначения, клиент отправляет команду CONNECT с информацией о месте назначения. В это время сервер отмечает адрес / порт клиента, поэтому он знает, какой клиент запросил его.

Затем прокси-сервер устанавливает TCP-соединение с целевым сервером, что включает согласование порядкового номера. Этот номер можно использовать для связывания всех пакетов в соединении и для первоначального запроса клиента.

При последующих подключениях к прокси клиент использует глагол BIND, который позволяет серверу отличать первый поток клиентов от его второго, третьего, ... n-го. Все, что нужно помнить, это информация о клиенте и порядковые номера.

Для прокси-потоков UDP исходная связь client -> proxy обрабатывается в TCP, вызывая глагол UDP ASSOCIATE, который позволяет прокси-серверу связать UDP-соединение с клиентом и присвоить ему идентификатор, с помощью которого он может отправлять потоки UDP на клиент.

Подробности спецификации здесь: http://www.faqs.org/rfcs/rfc1928.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .