Перенаправьте соединение TCP

У меня есть что-то как прокси-сервер (записанный в Java) работающий между моими клиентами и фактическим видеосервером (сделанный в C++). Все, что отправляют клиенты, проходит этот прокси и затем перенаправляется к серверу.

Это хорошо работает, но я имею некоторые проблемы и думаю, что было бы лучше, если я мог бы сделать этот прокси-сервер только, чтобы слушать клиентские запросы и затем так или иначе сказать серверу, что запрос был выполнен от стороны клиента, и что это, как предполагается, создает соединение с клиентом непосредственно.

В основном на уровне TCP, что я хочу произойти, что-то вроде этого:

1-каждый раз, когда клиент отправляет SYN в мой прокси, прокси просто отправляет сообщение на реальный сервер, говоря IP и порт клиента.

2-сервер затем отправил бы соответствующий SYN-ACK указанному клиенту, создающему прямое подключение между клиентом и сервером.

Прокси затем просто передал бы начальные запросы (но не более поздняя передача данных) к фактическому серверу. Я просто не знаю, возможно ли это.

Большое спасибо

Nelson R. Perez

7
задан Bilthon 4 June 2010 в 18:35
поделиться

3 ответа

Вы не можете контролировать TCP handshake в пользовательской среде таким образом. Это то, что делают брандмауэры/маршрутизаторы, но все это происходит в ядре. Посмотрите на программное обеспечение брандмауэра для вашей платформы - возможно, вам даже не придется ничего писать.

2
ответ дан 7 December 2019 в 05:18
поделиться

Это очень похоже на то, как это делают некоторые игры (и Fog Creek CoPilot), но для этого требуется поддержка как на сервере, так и на клиенте. По сути, прокси-сервер должен сказать клиенту и серверу: «Попробуйте связаться напрямую с этим IP-адресом и этим портом», и если они не могут пройти (потому что один или оба находятся за NAT или брандмауэром), они возвращаются к работе. через прокси.

Я нашел это хорошее описание «однорангового пробивания отверстий TCP» на http://www.brynosaurus.com/pub/net/p2pnat/

3
ответ дан 7 December 2019 в 05:18
поделиться

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

http://www.wsinnovations.com/softeng/articles/uds.html

Если они находятся на разных машинах, нет возможности передать соединение с сервером. Однако можно проксировать IP-пакеты на сервер, используя VIP (виртуальный IP-адрес). Это ниже сокета, поэтому вы должны использовать интерфейс канального уровня, например DLPI .

3
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: