TCP против UDP для связи микропроцессора - PullRequest
2 голосов
/ 06 августа 2010

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

Ответы [ 3 ]

3 голосов
/ 06 августа 2010

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

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

1 голос
/ 06 августа 2010

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

0 голосов
/ 10 августа 2010

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

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

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

...