Вопрос или проблема
Я знаю, что SSH может перенаправлять TCP порты, но не UDP. Я не ищу помощи, чтобы обойти это ограничение, этот вопрос уже обсуждался здесь.
Мне интересно, почему SSH никогда не получила возможности перенаправления UDP. На данный момент ответы на уже упомянутый вопрос не объясняют этого.
Поиск в Google дал мне много ответов “SSH не может” и несколько “это не тривиально”. Все равно нет ответа, почему.
Мои предположения на данный момент:
- Приложения используют UDP по определенной причине, в основном из-за его низкой задержки. SSH со своим шифрованием и TCP-трафиком замедлит процесс, что идет вразрез с тем, зачем изначально использовался UDP.
- Спрос на UDP-туннелирование через SSH так низок (возможно, из-за вышеуказанного), что, если бы это было реализовано, функция стала бы (первой?) одной из ненужных фишек.
Прав ли я? Есть ли еще причины? Может быть, существуют серьезные технические сложности с реализацией?
Ответ или решение
Причина, по которой SSH не поддерживает проброс UDP-портов, в основном связана с различиями в принципах работы протоколов TCP и UDP, а также с архитектурными решениями, заложенными в сам SSH.
-
Природа TCP и UDP: SSH (Secure Shell) работает исключительно с TCP, который является протоколом с установкой соединения. TCP обеспечивает надежную передачу данных, гарантируя, что пакеты будут доставлены в правильном порядке и без ошибок. UDP (User Datagram Protocol), напротив, является протоколом без установления соединения, который не обеспечивает контроль доставки и порядок пакетов. Это означает, что при попытке туннелирования UDP через SSH пользователю понадобилось бы разрабатывать дополнительные механизмы для обработки потери пакетов и проблем с порядком, что усложняет реализацию.
-
Задержка и производительность: Как вы правильно заметили, UDP часто используется для приложений, где критична низкая задержка, например, в потоковом видео или в VoIP. Использование SSH, который добавляет дополнительную нагрузку на установление соединения и шифрование данных, противоречит основному назначению UDP. Проброс UDP-портов через SSH может привести к увеличению задержек и снизить общую производительность, что делает данный подход менее привлекательным для пользователей, которым важна скорость передачи.
-
Сложности внедрения: Интеграция поддержки UDP в SSH потребовала бы значительной переработки его архитектуры. Это связано с тем, что многие функции SSH, такие как аутентификация, шифрование и управление сессией, ориентированы на TCP. Динамичное изменение статуса соединения UDP и управление потерей пакетов добавили бы новый уровень сложности в инфраструктуру, уже имеющую свои устоявшиеся механизмы.
-
Низкий спрос на функциональность: Как вы отметили, существует невысокий спрос на проброс UDP через SSH. Пользователи, как правило, предпочитают использовать специализированные инструменты для туннелирования UDP (например, VPN), которые более подходят для этой задачи, поскольку они уже спроектированы с учетом требований протокола UDP.
Таким образом, отсутствие проброса UDP в SSH обусловлено как техническими, так и практическими аспектами. Это не просто вопрос одной решения, а комплексная проблема, затрагивающая архитектурные особенности и предназначение протоколов. В силу всего вышесказанного, SSH остается ориентированным на надежную работу с TCP, оставляя поддержку UDP другим специализированным решениям.