TCP и UDP для связи микропроцессора



Я использую TCP для связи с arduino (просто откройте сокет и ждите соединения), используя экран ethernet, наблюдая/читая о различных других проектах, которые используют какой-то сетевой интерфейс для связи, все они, кажется, используют UDP вместо TCP для связи. Мне было интересно, что я выиграю, если вместо этого использую UDP?

513   3  

3 ответов:

Стек UDP значительно проще, чем стек TCP. Вы можете легко написать стек UDP с нуля самостоятельно, TCP немного сложнее, выполнимо, но сложнее. TCP имеет встроенные повторы и другие вещи, так что вы не теряете надежность с UDP напрямую, это то, что вы делаете с ним, что может сравниться. UDP значительно быстрее, чем TCP, и именно поэтому он используется или использовался для видео и различных вещей в прошлом. Кроме того, такие вещи, как видео, могут потерять пакет здесь и там, и им все равно. Для встроенного UDP довольно приятно быть маленьким, быстрым и т. д. Если вы используете чью-то библиотеку elses, то UDP, скорее всего, не будет сильно экономить на ресурсах памяти/flash, это все равно будет немного быстрее. Именно когда вы реализуете свой собственный UDP, вы экономите совсем немного на памяти, потому что вы можете срезать углы. Вы можете делать такие вещи, как только реализовать arp и udp и ничего больше (хотя ping полезен, но как-то болезненно), и вы можете сократить углы на arp/rarp в зависимости от того, что вам нужно сделать с эта вещь. Вы можете реализовать поддержку только для интересующего вас размера пакета. Нумерация пакетов и то, что запрашивающая сторона отправляет два или три из них и отвечает на каждый запрос, может значительно уменьшить проблему потерянного пакета. Сохранение размера пакета очень маленьким помогает решить проблему встроенных ресурсов и избежать любых mtu или других проблем на этом пути. Для простоты вы можете даже форсировать определенную длину пакета.

Я всегда задаю вопрос по-другому, что выиграю ли я от использования TCP? Бывают случаи, когда он полезен, встроенный, настольный или серверный, хотя я все еще задаю этот вопрос каждый раз и должен оправдать использование TCP над UDP, иначе я не буду его использовать.

Вы получаете многоадресную рассылку, но теряете надежность.

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

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

Асинхронный протокол команд-ответов с таймаутами, где все команды и ответы помещаются в один пакет UDP, а команды являются идемпотентными (могут применяться много раз и поддерживать правильный результат), является довольно надежным протоколом.

Comments

    Ничего не найдено.