Как пробросить tcp соединение через reverse proxy и хранить tcp сессию?

Имеется вот такая схема
5d83d83d93ca2216015995.png
Как видно из схема проблема заключается в большой задержке по спутниковому каналу. Если с запросами клиента через http\http's и кэшированием данных, материала я нашёл достаточно для изучения и написания прокси сервера, то для tcp соединений нашёл очень мало, мне интересен вопрос о том, как пересылать tcp или udp соединение изначально не зная куда будет обращаться клиент? моё предположение использовать пакет gopacket для выхватывания протокола адреса и порта куда пересылать соединение,а так же как хранить эти самые сессии при повторном подключение, примерно понимаю что нужен кэш, но что конкретно в нём хранить? подскажите что почитать и куда двигаться.
  • Вопрос задан
  • 448 просмотров
Решения вопроса 1
tumbler
@tumbler
бекенд-разработчик на python
как пересылать tcp или udp соединение изначально не зная куда будет обращаться клиент?

Для tcp - никак. Соединение TCP характеризуется четверкой (src_ip, src_port, dst_ip, dst_port). Не зная куда будет обращаться клиент, четверку получить нельзя, а значит и пересылать не получится.
UDP - вообще протокол без соединений. Каждое сообщение (датаграмма) пересылается независимо от предыдущих/последующих.

нужен кэш, но что конкретно в нём хранить?

В кэше хранятся часто используемые данные.

Как видно из схема проблема заключается в большой задержке по спутниковому каналу.

Выставите большой keepalive и socket timeout.

Вообще, я так и не понял, в чем состоит проблема, описанная в вопросе. Если Вы пишете reverse proxy, почитайте про то, как работают директивы *upstream в nginx - может каши поубавится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы