Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСети и протоколы

UDP через посредника: что проходит, а что нет

tcpdump_fan
tcpdump_fan
Знаток
сообщений 1010
с июн
1 сентября, 08:32первое сообщение

Задача такая: служебная утилита общается по UDP на свой порт, и весь её трафик надо увести через посредника. Схема http отпала сразу, там команда CONNECT поднимает трубу поверх TCP и другого не умеет.

Взял сокетную схему, прописал в конфиге утилиты, запустил. Рукопожатие с посредником проходит, вижу его на проводе своими глазами. Дальше тишина: ответов ноль, утилита сидит в таймауте до упора.

Полез в спецификацию сокетной схемы и нашёл там отдельную команду под датаграммы, она описана наравне с обычным подключением. Раз описана, должна работать. Или в жизни всё сложнее, чем на бумаге?

слушаю провод, а не догадки
Света Панина
Света Панина
Новичок
сообщений 160
с мар, второй сезон
8 февраля, 11:49#2

а квик тогда тоже не пройдёт, он же поверх udp

dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
15 июля, 14:06#3

Сложнее, конечно. Команда в бумаге есть, поддержка на стороне посредника необязательна, и в жизни её чаще нет.

Порядок действий там трёхступенчатый. Клиент по обычному TCP просит открыть привязку под датаграммы. Посредник отвечает адресом и портом, куда эти датаграммы слать. Каждая датаграмма едет с маленькой шапкой, где записан конечный узел. Споткнуться можно на любой ступени, спотыкаются почти всегда на первой.

Проверяется это одним дампом. Смотрите байт команды в запросе и байт кода в ответе: семёрка означает, что команду тут не держат.

ответ на запрос привязки
ответ на запрос привязки
tcpdump_fan
tcpdump_fan
Знаток
сообщений 1010
с июн
22 декабря, 17:23#4
dobrynin_a: второй байт 07, команду не поддерживают

Снял дамп, у меня ровно этот байт. Значит, упёрся в стену и копать дальше в эту сторону смысла нет. Света Панина, про квик тут ниже ответят точнее меня.

слушаю провод, а не догадки
iron_shell
iron_shell
Знаток
сообщений 1050
с июн
1 мая, 08:40#5

Про квик коротко. Он живёт поверх UDP, поэтому через посредника не уходит вообще. Браузер это понимает сам и откатывается на TCP, чаще всего незаметно для глаза. Если хочется убрать лишнюю попытку и лишние полсекунды на старте, запускайте Chromium с ключом --disable-quic.

С именами узлов та же песня: запрос к службе имён по умолчанию едет датаграммой. Отсюда два выхода: либо сокетная схема с буквой h, где имя разбирает посредник, либо разбор имени по TCP на своей стороне.

hardline
hardline
Знаток
сообщений 970
с июн
8 октября, 11:57#6

Для служебных потоков вроде вашего обычно поднимают переходник. Он слушает UDP на локальном адресе, заворачивает содержимое в обычное TCP-соединение и на удалённой стороне разворачивает обратно. Так ходят и сбор метрик, и журналы по syslog.

Второй путь ещё проще: поставить сборщик рядом с источником, а через посредника гнать уже готовые пачки по HTTP.

tcpdump_fan
tcpdump_fan
Знаток
сообщений 1010
с июн
15 марта, 14:14#7

Поставил переходник, метрики поехали. Оставлю итог одной строкой, чтобы искалось поиском: через посредника ходит TCP, датаграммы упираются в отсутствие поддержки почти везде.

слушаю провод, а не догадки