|
TCP или UDP?, Подскажите способ реализации |
|
|
|
Dec 28 2007, 06:36
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Поздравляю всех с наступающими праздниками!!! А вопрос у меня такой. Есть классическая ситуация - некоторое устройство управляется компом по сети, причем находятся они в одной локалке, т.е. все быстро и условно надежно. Устройство получает от компа команды, возвращает результаты замеров, статусы и проч. Встает вопрос что использовать: TCP или UDP? В пользу TCP говорит тот факт, что не надо проверять доставку (а иногда важная команда должна быть обязательно доставлена, причем выполнена только один раз). Тут появляется большое "но". Фактически, те данные, которые я буду передавать (например, команды) - это пакеты. Т.е. явная пакетная передача данных. А TCP потоковый! Он мне даже не скажет, где одна команда закончилась и новая началась. Т.е. мне надо вводить некий механизм синхронизации чтобы отлавливать начало очередного пакета. Первое что в голову приходит - самому на своем уровне добавлять в пакет его длину. Но если одна из сторон хоть раз ошибется или сетка сглючит и длина пакета окажется неправильной, то я никогда уже не поймаю начало очередного пакета. Можно вместо длины (или вместе с ней) пометить сигнатурой начало пакета, а в самом пакете делать байт-стаффинг чтобы она там не повторилась. Не нравится - как-то тяжеловесно получается. Можно сделать по UDP, но там придется городить подтверждение доставки и контроль на недублирование пакетов. Тоже гемор. Короче, варианты решения я вижу, но все они мне не нравятся. Мне кажется, что есть какое-то простое и красивое решение, а я заблудился в трех соснах. Т.к. ситуация классическая для большинства встроенных систем, поделитесь плз опытом, кто как решает подобные задачи.
|
|
|
|
|
 |
Ответов
|
Jan 17 2008, 10:07
|
Участник

Группа: Участник
Сообщений: 68
Регистрация: 19-07-06
Пользователь №: 18 918

|
Вставлю свои 5 копеек.... Если надо бытро и легко передавать по сети команды то существет такой замечательный протокол SNMP. Там все уже придумано до нас. Связь идет по UDP, но для любителей предсмотрен режим связи по TCP (имхо не нужен, подтверждение не пришло - перепосылка по таймауту+сообщение пользователю). Софт для компа тоже существует, правда большинство решений платные, но где же наша не пропадала. В snmp менеджер компилятся нужные mib, что создашь то и будет. Ну а на устройство пишется простенькое ПО для отработки snmp (или не совсем простенькое, если авторизация нужна). И не надо городить web-сервер и тем более придумывать собственные протоколы.
|
|
|
|
|
Jan 17 2008, 16:12
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(GL_basik @ Jan 17 2008, 13:07)  Вставлю свои 5 копеек.... Если надо бытро и легко передавать по сети команды то существет такой замечательный протокол SNMP. Там все уже придумано до нас. Связь идет по UDP, но для любителей предсмотрен режим связи по TCP (имхо не нужен, подтверждение не пришло - перепосылка по таймауту+сообщение пользователю). Софт для компа тоже существует, правда большинство решений платные, но где же наша не пропадала. В snmp менеджер компилятся нужные mib, что создашь то и будет. Ну а на устройство пишется простенькое ПО для отработки snmp (или не совсем простенькое, если авторизация нужна). И не надо городить web-сервер и тем более придумывать собственные протоколы. Протокол SNMP, насколько я понимаю, требует IP формата кадров. Т.е. по накладным расходам мало чем отличается от UDP. Поэтому со стороны прибора с небольшим микроконтроллером внутри особого облегчения не наблюдается. Hи по ресурсам, ни по быстродействию. В то же самое время, RAW-пакеты имеют оверхед по-минимуму. Поэтому выглядят более привлекательно для использования в embedded system со связью по Ethernet, и по ресурсам, и по быстродействию. По-существу, конструкция начинает напоминать широко распространенный MODBUS по RS-485, только на два порядка быстрее. По этой причине, конструкторам малых систем имеет смысл отказаться от IP вообще и не вспоминать больше никакие UDP, TCP или SNMP. Что касается городить web-сервер, то лучше его все-таки городить, т.к. сильно облегчает создание и сопровождение FrontEnd-ов. Городить этот сервер надо не в приборе, а на http:\\localhost, который, уже в свою очередь, перекодирует http-запросы в RAW-пакеты и обратно. Для этого существует прекрасно себя зарекомендовавший WinPCap, кстати бесплатный. Я сейчас как раз этим занимаюсь и пока все получается нормально.
|
|
|
|
|
Jan 17 2008, 16:52
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Aprox @ Jan 17 2008, 19:12)  По этой причине, конструкторам малых систем имеет смысл отказаться от IP вообще и не вспоминать больше никакие UDP, TCP или SNMP. ... Городить этот сервер надо не в приборе, а на http:\\localhost, который, уже в свою очередь, перекодирует http-запросы в RAW-пакеты и обратно. Сразу пара вопросов.. 1. Сколько удаленных пользователей Ваш прибор может обслужить одновременно? 2. Реализован ли в вашем приборе механизм транзакций? Поясню суть второго вопроса подробнее.. Допустим, с Вашим прибором через удаленные терминалы могут одновременно работать 100 операторов. Допустим также, что в программе прибора существует ULONG переменная "Counter" и каждый из операторов может нажатием кнопки на HTML-странице в броузере IE увеличить значение переменной "Counter" на единицу. (Т.е. "отправить команду"). Пусть начальное значение переменной "Counter", которое мы видим в окне браузера равно 0. Пусть также значение переменной "Counter", которое мы видим в окне браузера после нажатия кнопки равно 50. Вопрос - можем ли мы быть уверенными в том, что: 50 = 49 + результат_нажатия_кнопки_в_окне_нашего_браузера, или 50 = 50, а результат_нажатия_кнопки_в_окне_нашего_браузера_где_то_потерялся?
|
|
|
|
|
Jan 18 2008, 08:21
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(blackfin @ Jan 17 2008, 19:52)  Сразу пара вопросов.. 1. Сколько удаленных пользователей Ваш прибор может обслужить одновременно? В теории- число клиентов ограничено лишь диапазоном физических MAC адресов. Hо на практике я встречался только с распределенными системами, когда клиент один, например SCADA на компьютере, а серверов много, несколько десятков- удаленные приборы управления и сбора информации. Цитата 2. Реализован ли в вашем приборе механизм транзакций?
Поясню суть второго вопроса подробнее..
Допустим, с Вашим прибором через удаленные терминалы могут одновременно работать 100 операторов. Допустим также, что в программе прибора существует ULONG переменная "Counter" и каждый из операторов может нажатием кнопки на HTML-странице в броузере IE увеличить значение переменной "Counter" на единицу. (Т.е. "отправить команду"). Пусть начальное значение переменной "Counter", которое мы видим в окне браузера равно 0. Пусть также значение переменной "Counter", которое мы видим в окне браузера после нажатия кнопки равно 50.
Вопрос - можем ли мы быть уверенными в том, что:
50 = 49 + результат_нажатия_кнопки_в_окне_нашего_браузера, или 50 = 50, а результат_нажатия_кнопки_в_окне_нашего_браузера_где_то_потерялся? В окне броузера будет отображен установленное оператором значение. Hо в удаленном приборе это не гарантировано, поскольку позже управление может быть перезаписано другим оператором с другого клиента. Однако, если предусмотрен периодический Reload страницы, то все операторы спустя некоторое время увидят фактическое значение управления в удаленном приборе. Необходимо напомнить, что я имею ввиду локальные сети в промышленной и научно-технической сферах. Типичное для таких сетей- один клиент и много серверов. В настоящий момент, единственное, что сдерживает применение Ethernet в таких сетях,- это избыточные навороты с протоколами и TCP/IP стеками. Мне представляется, переход к Raw-пакетам в данном случае выглядит разумным.
|
|
|
|
|
Jan 18 2008, 09:01
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Aprox @ Jan 18 2008, 11:21)  Необходимо напомнить, что я имею ввиду локальные сети в промышленной и научно-технической сферах. Причем сети, построенные исключительно с помощью хабов, а они уже, насколько мне известно, являются большой редкостью. Цитата(Aprox @ Jan 18 2008, 11:21)  Типичное для таких сетей - один клиент и много серверов. Если сеть со временем меняет топологию или расширяется, рано или поздно возникнет ситуация когда два клиента попытаются обратиться к одному серверу. Цитата(Aprox @ Jan 18 2008, 11:21)  В настоящий момент, единственное, что сдерживает применение Ethernet в таких сетях,- это избыточные навороты с протоколами и TCP/IP стеками. ИМХО, ничто не сдерживает применение Ethernet Internet'a в таких сетях, ибо никакой избыточности в TCP/IP нет. Может, есть недостаток ресурсов выбранного МК, но это вопрос грамотности разработчика. Цитата(Aprox @ Jan 18 2008, 11:21)  Мне представляется, переход к Raw-пакетам в данном случае выглядит разумным. Мне, напротив, это кажется неразумным, но нужно ли спорить о вкусах?
|
|
|
|
|
Jan 18 2008, 16:13
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(blackfin @ Jan 18 2008, 12:01)  Причем сети, построенные исключительно с помощью хабов, а они уже, насколько мне известно, являются большой редкостью. Делаю распределенную систему на базе свитча, но не хаба. К свитчу пока нареканий нет. Цитата Если сеть со временем меняет топологию или расширяется, рано или поздно возникнет ситуация когда два клиента попытаются обратиться к одному серверу. После того, как система сдана и запущена в работу на промышленном производстве, заказчик костьми ляжет, но не допустит никаких смен топологии. Расширение же производится установкой другого свитча, с большим числом портов. При этом появление новых клиентов в сети недопустимо, т.к. означает смену топологии. Заказчик против. Цитата ИМХО, ничто не сдерживает применение Ethernet Internet'a в таких сетях, ибо никакой избыточности в TCP/IP нет. Может, есть недостаток ресурсов выбранного МК, но это вопрос грамотности разработчика. Как показывает обсуждение в данном треде, и в ряде других на форуме, разработчики активно ищут пути не использовать стандартные решения TCP/IP. Потому, что для целей простого приборостроения этот стек протоколов дает большие накладные расходы по софту и быстродействию. Можно смириться с избыточностью софта и подобрать нужный МК, но поднять скорость передачи данных, увеличить загрузку сети, практически невозможно.
|
|
|
|
|
Jan 19 2008, 10:38
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Aprox @ Jan 18 2008, 19:13)  Делаю распределенную систему на базе свитча, но не хаба. К свитчу пока нареканий нет. Switch, конечно, тоже будет работать, но ограничение на максимальное кол-во хостов в Вашей локальной сети остается - максимум 96 хостов. Возможно, в Вашем конкретном случае это не проблема. Цитата(Aprox @ Jan 18 2008, 19:13)  При этом появление новых клиентов в сети недопустимо, т.к. означает смену топологии. Заказчик против. Новые клиенты могут появиться, если пользователь запустит несколько экземпляров браузера на одном компьютере.. Что тогда? Цитата(Aprox @ Jan 18 2008, 19:13)  Можно смириться с избыточностью софта и подобрать нужный МК, но поднять скорость передачи данных, увеличить загрузку сети, практически невозможно. Согласен, если число пакетов в секунду велико, а размер каждого пакета мал, переход к RAW-ethernet пакетам может дать существенный выигрыш в производительности сети.. Но стоит ли рассчитывать на устойчивую работу сети на пределе производительности? Кроме того, при использовании switch'а лишенного внутреннего буфера для хранения пакетов могут появиться проблемы с коллизиями пакетов в сегменте switch<->PC. Как следствие - потеря пакетов и т.д. и т.п. Впрочем, насколько мне известно, Вы эту проблему уже обсуждали: подключение устройства к ethernet.
|
|
|
|
|
Jan 20 2008, 16:29
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(blackfin @ Jan 19 2008, 13:38)  Новые клиенты могут появиться, если пользователь запустит несколько экземпляров браузера на одном компьютере.. Что тогда? Да, на такую возможность следует заложиться. Hапример, ограничить число подключений к серверу одной штукой. Цитата Согласен, если число пакетов в секунду велико, а размер каждого пакета мал, переход к RAW-ethernet пакетам может дать существенный выигрыш в производительности сети.. Но стоит ли рассчитывать на устойчивую работу сети на пределе производительности? Именно это я и хочу проверить. Искал похожие примеры реализаций, но не нашел. Приходится самому. Цитата Кроме того, при использовании switch'а лишенного внутреннего буфера для хранения пакетов могут появиться проблемы с коллизиями пакетов в сегменте switch<->PC. Как следствие - потеря пакетов и т.д. и т.п. Впрочем, насколько мне известно, Вы эту проблему уже обсуждали: Да, сегмент switch<->PC предполагается делать на 1Г Ethernet. Такие свитчи имеются а продаже. Сейчас я не готов обсуждать, какие подводные камни ждут на этом пути. Будем пробовать, и набивать шишки. Цитата(GL_basik @ Jan 18 2008, 12:09)  Если есть время сначала создавать устройство, потом писать под него софт, а потом под устройство подстраивать топологию сети, тогда можно использовать все что угодно. Но времени обычно нет. А обычно есть сеть и есть информационная система, которая собирает данные о состоянии сети. Соотвественно при проектировании устройства нужно ориентироваться на стандартные протоколы. Чтоб монтажник мог придти в подъезд обжать кабель подключить девайс и уйти, а дейвайс сам бы себя сконфигурил и вписался в информационную систему. Здесь уж RAW пакетами не обойтись... Полностью согласен- при наращивании уже готовой сети следует придерживаться тех протоколов и форматов, которые уже действуют в этой сети. Hо, когда система создается с нуля и поставляется в комплексе, то можно себе позволить некую свободу действий.
|
|
|
|
Сообщений в этой теме
gladov TCP или UDP? Dec 28 2007, 06:36 Postoroniy_V Цитата(gladov @ Dec 28 2007, 15:36) Поздр... Dec 28 2007, 07:57 gladov Цитата(Postoroniy_V @ Dec 28 2007, 10:57)... Dec 29 2007, 21:35  Postoroniy_V Цитата(gladov @ Dec 30 2007, 06:35) Это з... Dec 30 2007, 05:37  tag Цитата(gladov @ Dec 30 2007, 00:35) Читал... Jan 10 2008, 07:36   gladov Цитата(tag @ Jan 10 2008, 10:36) ...есть ... Jan 10 2008, 10:56 Rst7 ЦитатаНо если одна из сторон хоть раз ошибется или... Dec 28 2007, 08:18 tag ...вы противоречите сами себе. Если TCP гарантируе... Dec 28 2007, 08:28 iosifk Цитата(gladov @ Dec 28 2007, 09:36) Поздр... Dec 28 2007, 09:30 KRS Цитата(gladov @ Dec 28 2007, 09:36) А TCP... Dec 28 2007, 11:20 Rst7 ЦитатаПорядок безусловно будет соблюден, но кто га... Dec 30 2007, 12:54 Aprox Может, я чего-то не понимаю в тонкостях задачи, но... Jan 9 2008, 12:23 Rst7 Цитата(Aprox @ Jan 9 2008, 14:23) Может, ... Jan 10 2008, 06:44  vvs157 Цитата(Rst7 @ Jan 10 2008, 09:44) Это хор... Jan 10 2008, 12:03   Rst7 Цитата(vvs157 @ Jan 10 2008, 14:03) Испол... Jan 10 2008, 12:39    vvs157 Цитата(Rst7 @ Jan 10 2008, 15:39) Вот тут... Jan 10 2008, 16:58  Aprox Цитата(Rst7 @ Jan 10 2008, 09:44) Это хор... Jan 10 2008, 17:17 Rst7 ЦитатаВопрос традиций
Вот и я думаю, зачем челове... Jan 11 2008, 06:28 vvs157 Цитата(Rst7 @ Jan 11 2008, 09:28) Вот и я... Jan 11 2008, 12:20  Rst7 Цитата(vvs157 @ Jan 11 2008, 14:20) Весьм... Jan 11 2008, 12:39   gladov Цитата(Rst7 @ Jan 11 2008, 15:39) Давай м... Jan 11 2008, 20:56    vvs157 Цитата(gladov @ Jan 11 2008, 23:56) Полно... Jan 11 2008, 21:37    Kirill Frolov Цитата(gladov @ Jan 11 2008, 23:56) Полно... Jan 12 2008, 08:46    Aprox Цитата(gladov @ Jan 11 2008, 23:56) Полно... Jan 14 2008, 08:36     blackfin Цитата(Aprox @ Jan 14 2008, 11:36) ... до... Jan 14 2008, 08:52      Aprox Цитата(blackfin @ Jan 14 2008, 11:52) Ага... Jan 14 2008, 10:48 Aprox Цитата(Rst7 @ Jan 11 2008, 09:28) HTML ст... Jan 11 2008, 13:45 Kirill Frolov Цитата(gladov @ Dec 28 2007, 09:36) В пол... Jan 11 2008, 14:01 Rst7 ЦитатаКогда начинаются разговоры, о том дескать, ч... Jan 12 2008, 09:31 vvs157 Цитата(Rst7 @ Jan 12 2008, 12:31) А может... Jan 12 2008, 21:36 Kirill Frolov Цитата(Rst7 @ Jan 12 2008, 12:31) Я тоже ... Jan 13 2008, 08:20 blackfin Цитата(Kirill Frolov @ Jan 11 2008, 17:01... Jan 12 2008, 09:36 Rst7 ЦитатаНа телнет неделю?
Об этом - чуть ниже, не В... Jan 13 2008, 12:31 Kirill Frolov Цитата(Rst7 @ Jan 13 2008, 15:31) Допусти... Jan 13 2008, 17:47 vvs157 Цитата(Rst7 @ Jan 13 2008, 15:31) А Вы за... Jan 13 2008, 21:00 Rst7 ЦитатаУгу. Ошибка. Такое в реальной жизни не работ... Jan 13 2008, 18:35 Rst7 Цитатагадить потребителю тоже не подобает серьезны... Jan 14 2008, 06:32 Rst7 ЦитатаНа "низшей меге" реализовать полно... Jan 14 2008, 09:09 blackfin Цитата(Rst7 @ Jan 14 2008, 12:09) Ну это ... Jan 14 2008, 09:52  Dog Pawlowa Без рассмотрения:
- структуры прибора
- объема пе... Jan 17 2008, 16:35 Rst7 ЦитатаПо этой причине, конструкторам малых систем... Jan 17 2008, 16:27 GL_basik Если есть время сначала создавать устройство, пото... Jan 18 2008, 09:09 Rst7 Цитатано ограничение на максимальное кол-во хостов... Jan 19 2008, 13:46 blackfin Цитата(Rst7 @ Jan 19 2008, 16:46) Это отк... Jan 19 2008, 17:23 Rst7 ЦитатаА что, существуют switch'и на большее чи... Jan 19 2008, 18:27 prottoss Привет всем!
Прочитал в теме про упоминание A... Feb 8 2008, 13:22 Aprox Цитата(prottoss @ Feb 8 2008, 16:22) Прив... Feb 9 2008, 15:04  Aprox Цитата(Aprox @ Feb 9 2008, 18:04) Я польз... Feb 10 2008, 08:13   prottoss Цитата(Aprox @ Feb 10 2008, 15:13) дабы н... Feb 10 2008, 09:21 Rst7 ЦитатаВозможно у кого нибудь есть наработки по это... Feb 8 2008, 13:42 prottoss Цитата(Rst7 @ Feb 8 2008, 20:42) Наработо... Feb 8 2008, 13:51 prottoss Все оказалось на много проще, чем я думал....пока ... Feb 8 2008, 15:46 Rst7 ЦитатаКогда все отработаю, естественно встанет воп... Feb 10 2008, 13:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|