Работа за NAT ами - схема связи устройства
Я пытаюсь найти решение, обеспечивающее обмен данными между встроенным устройством (на основе xMega128(C)) и приложениями для Android. Подвох заключается в том, что обмен данными должен осуществляться через Интернет, и как встроенное устройство, так и мобильное устройство, на котором запущено приложение, могут находиться за разными NAT, подключаясь с использованием разных интернет-провайдеров, 3G, LTE и т. Д.
Я пробовал UDP дырокол, но он не работает с симметричными NAT. Многократное перфорирование с предсказанием также не гарантирует 100% надежности. Я также подумал об использовании ICE, но библиотеки ICE C (pjnath, libnice) несовместимы с выбранным оборудованием (libs требуют ОС). Прямо сейчас я рассматриваю возможность внедрения или использования (если существует) сервера ретрансляции трафика, но это просто кажется мне взломом.
Есть ли другие варианты, которые я не рассматривал? Любая помощь будет оценена.
В идеале схема связи должна быть:
100% надежный
относительно низкая задержка (максимум 3 секунды)
масштабируемый (скажем, до 500 тыс. устройств в будущем)
инициализируется как приложением, так и устройством
многопользовательский - одно устройство будет подключаться ко многим приложениям для Android
Кроме того, если это помогает, обмен данными между устройством и приложением не очень интенсивный - примерно 1 сеанс в час, ~50 сообщений в сеансе с 10-20 секундами между ними, каждое сообщение весит около 100 байтов.
2 ответа
То, что вы описываете, фактически одноранговое или его подмножество, и для того, чтобы это работало надежно, это большая работа. Там, где одноранговый отказывает, вы обычно возвращаетесь к серверу ретрансляции. Это можно сделать, но объем работы для этого достаточно велик. Ваш список требований также довольно крутой...
100% надежный
Там нет такого понятия, как надежное соединение. Вам нужно встроить отказоустойчивость в приложение, чтобы оно было надежным.
относительно низкая задержка (максимум 3 секунды)
Довольно часто вы будете ограничены физикой, то есть скоростью света. Низкая задержка это трудно.
масштабируемый (скажем, до 500 тыс. устройств в будущем)
Я не знаю, что это значит, т.е. это параллельные соединения?
Из википедии по NAT Traversal
Существует множество методов, но ни один из них не работает в каждой ситуации, поскольку поведение NAT не стандартизировано. Многие методы обхода NAT требуют помощи от сервера по общедоступному IP-адресу. Некоторые методы используют сервер только при установлении соединения, в то время как другие основаны на ретрансляции всех данных через него, что увеличивает затраты на пропускную способность и увеличивает задержку, вредную для голосовой и видеосвязи в реальном времени.
то есть он будет работать иногда, то есть он будет ненадежным, поэтому вам нужно использовать несколько методов, чтобы сделать его надежным.
Пока обе конечные точки находятся за разными NAT, которые вы не контролируете, это не будет работать надежно. Ни за что. Вам нужно реле.