реклама на сайте
подробности

 
 
> Несколько вопросов о стеке ethernet
esaulenka
сообщение Jan 21 2013, 11:06
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



1) (общетеоретический). Посоветуйте, где достаточно подробно почитать про низкоуровневые (TCP/UDP и "ниже") вещи ? То, что я нарыл, это пяток страничек на каждый уровень, а потом "перейдём к настройке web-сервера". По-русски читаю чуть лучше, чем по-английски :-)


2) (более практический) какой протокол мне выбрать? сейчас железка общается с ПК по своему собственному протоколу через UART и USB (через эмуляцию UART). Есть желание добавить ethernet, а поверх него пустить тот же протокол. Вопрос - что бы такое пустить по ethernet? "Чистый" IP не хочется по избежание геморроя со стороны ПК (сейчас - всевозможные windows, в планах linux, вероятны android/ios). Контроль доставки, который даёт TCP, не очень актуален - сейчас этим занимается наш протокол (не очень оптимально, т.к. задумывалось это под медленные uart'ы, ну да фиг с ним). Сделать UDP ?.. Или для простоты понимания программерами ПК сделать TCP, а с контролем доставки всё-таки разобраться (см. пункт 1) ?


3) (совсем уж практический) в текущем софте RTOS нет, и желания её туда прикручивать у меня немного. Стек TCP(UDP) хорошо бы запихать в обработчик прерывания (с учётом вложенных прерываний это не так страшно, холивар прошу не разводить). Посмотрел uIP и lwIP, они заточены под супер-луп или отдельную задачу в RTOS. Кто-нибудь стек посоветует? Самому писать без опыта (опять см. пункт 1) будет очень долго, подкладывать костыли под тот же uIP - больно некрасиво...
Совсем уж идеально - чтоб автор знал о модуле MAC в контроллерах LPC и не очень пытался затачиваться под что-то совсем другое :-)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
kovigor
сообщение Jan 21 2013, 11:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(esaulenka @ Jan 21 2013, 15:06) *
1) (общетеоретический). Посоветуйте, где достаточно подробно почитать про низкоуровневые (TCP/UDP и "ниже") вещи ? То, что я нарыл, это пяток страничек на каждый уровень, а потом "перейдём к настройке web-сервера". По-русски читаю чуть лучше, чем по-английски :-)

Теория ? Олифера "Компьютерные сети" почитайте. Сейчас, вроде бы, в ходу четвертое издание:
http://padabum.com/d.php?id=2562
И еще фреда Иди "Сетевой и межсетевой обмен данными с микроконтроллерами" ...
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 21 2013, 11:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



По п2 - однозначно UDP
По п3 - если ввести некоторые ограничения на размер пакетов (ну и отказаться от поддержки фрагментирования UDP пакетов), то стек, обрезанный на поддержку только IP+UDP вполне может работать прямо из прерываний (надеюсь что аппаратный MAC у вас все же есть? sm.gif )
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 21 2013, 15:27
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



kovigor, спасибо.


Цитата
отказаться от поддержки фрагментирования UDP пакетов

Извиняюсь, не указал - сейчас размер пакетов от 1 байта до полутора сотен. Планов "а давайте увеличим размер на порядок" пока нет, тьфу-тьфу. Так что фрагментирование не должно потребоваться.


Цитата
аппаратный MAC у вас все же есть?

Как я вычитал в даташите на LPC17xx, есть и MAC, и DMA. Всё это добро самостоятельно принимает пакеты и раскладывает их по порядку в памяти. Аналогично с отправкой. Выглядит просто замечательно, ничего низкоуровнего делать не надо.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jan 22 2013, 07:55
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



2. Я бы выбрал TCP и прикрутил сверху контроль доставки.
3. Вместо RTOS можно попробовать QP framework. Он неплохо поддерживается и есть примеры с lwIP.
Go to the top of the page
 
+Quote Post
Hamster1979
сообщение Jan 23 2013, 05:19
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 26-03-05
Пользователь №: 3 697



Цитата(esaulenka @ Jan 21 2013, 15:06) *
1) (общетеоретический). Посоветуйте, где достаточно подробно почитать про низкоуровневые (TCP/UDP и "ниже") вещи ? То, что я нарыл, это пяток страничек на каждый уровень, а потом "перейдём к настройке web-сервера". По-русски читаю чуть лучше, чем по-английски :-)

Выбираете стек - и в описаниях стека достаточно разжевано, документацию Адам Данкелс пишет хорошую. Вот еще
http://lwip.wikia.com/wiki/LwIP_Wiki
Цитата(esaulenka @ Jan 21 2013, 15:06) *
2) (более практический) какой протокол мне выбрать? сейчас железка общается с ПК по своему собственному протоколу через UART и USB (через эмуляцию UART). Есть желание добавить ethernet, а поверх него пустить тот же протокол. Вопрос - что бы такое пустить по ethernet? "Чистый" IP не хочется по избежание геморроя со стороны ПК (сейчас - всевозможные windows, в планах linux, вероятны android/ios). Контроль доставки, который даёт TCP, не очень актуален - сейчас этим занимается наш протокол (не очень оптимально, т.к. задумывалось это под медленные uart'ы, ну да фиг с ним). Сделать UDP ?.. Или для простоты понимания программерами ПК сделать TCP, а с контролем доставки всё-таки разобраться (см. пункт 1) ?

TCP или UDP выбирать Вам.
TCP основан на соединении и передаче группы пакетов. UDP - просто транспорт, пакеты, их очередность разбирать приложению.
TCP для некритичных ко времени приложений, UDP - для realtime; для большого кол-ва соединений/клиентов, но короткими посылками.
Поверх TCP куча протоколов (HTTP, HTTPs, FTP, SMTP Telnet ), могут погнадобится в будущем.
TCP - гарантия доставки данных, UDP - ее нет.В TCP есть управление потоком - в UDP нет. В TCP есть восстановление после ошибки, в UDP нет. Но при этом TCP тяжеловеснее, чем UDP.
Цитата(esaulenka @ Jan 21 2013, 15:06) *
3) (совсем уж практический) в текущем софте RTOS нет, и желания её туда прикручивать у меня немного. Стек TCP(UDP) хорошо бы запихать в обработчик прерывания (с учётом вложенных прерываний это не так страшно, холивар прошу не разводить). Посмотрел uIP и lwIP, они заточены под супер-луп или отдельную задачу в RTOS. Кто-нибудь стек посоветует? Самому писать без опыта (опять см. пункт 1) будет очень долго, подкладывать костыли под тот же uIP - больно некрасиво...
Совсем уж идеально - чтоб автор знал о модуле MAC в контроллерах LPC и не очень пытался затачиваться под что-то совсем другое :-)

Использовал LWIP стек + TCP client + TCP server + HTTP server(dynamic pages) + SNTP client в одном устройстве - uIP для всего этого не подошел бы просто. Насчет прерываний - TCP протокол с большим временем отклика (около 250 ms - 500ms), его реализуют как фоновую задачу - поэтому супер луп ну или если с RTOS - фоновая задача с невысоким приоритетом. TCP на прерываниях особо не имеет смысла реализовывать так как тайминг опроса буферов в стеке LWIP ~500ms/250ms, задержки в таких прерываниях могут быть очень большими что плохо.Можно таймер сделать на прерываниях а сам обработчик протокола все равно вызывать из основной программы. Что касается UDP, то так как он более заточенный для быстрого обмена, реал тайма - то можно его реализоавть наверное и по прерываниям(но в стеке LWIP реализовано как вызов периодического обработчика из основной программы если мне не изменяет память, поэтому придется перелопачивать самому - а есть ли смысл?).
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 26 2013, 16:36
Сообщение #7


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(esaulenka @ Jan 21 2013, 15:06) *
2) какой протокол мне выбрать?...

3) в текущем софте RTOS нет, и желания её туда прикручивать у меня немного. Стек TCP(UDP) хорошо бы запихать..


как уже прозвучало протокол за вами. UDP - пакетная. один к одному или один ко многим. гарантируется только отправка пакета. реализовывать - два пальца об асфальт (если без сборки на IP уровне). 10 мбит поднять можно практически на любом современном камне, ручками (это если совсем бюджетно). если с камнем где есть поддержка на аппаратном уровне - то там, как правило уже и о 100 без проблем вести речь.

TCP/IP - потоковая передача. один к одному. гарантируется последовательность доставки данных в потоке. как таковых рассуждать о пакетах на данном уровне (на уровне протокола а не его реализации, это для дюже грамотных вставил фразу) - это ламерство.

если лень пилить стэк - то в сети, в примерах любого арма есть с и без осей решения. но надо внимательней быть - в основном эти решения без сборки пакетов на IP уровне. Т.е. или Вы посылаете не много, величаво и синхронно(по отношению к верхнему уровню софта), либо вникаете в протокол, допиливаете(либо убеждаетесь, что есть в данной реализации) сборку на IP уровне - и ни в чём себе не отказываете (как юзверь данного протокола).

соответственно требования по UDP - смехотворны. По TCP - тут завязки на скорость и более пОлную реализацию протокола (имеется ввиду для сборки фрагментированных на IP уровне пакетов - потребуется где эти пакеты - кусочки IP диаграм - хранить и собирать).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016