Перейти к содержанию
    

Несколько вопросов о стеке ethernet

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 и не очень пытался затачиваться под что-то совсем другое :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Теория ? Олифера "Компьютерные сети" почитайте. Сейчас, вроде бы, в ходу четвертое издание:

http://padabum.com/d.php?id=2562

И еще фреда Иди "Сетевой и межсетевой обмен данными с микроконтроллерами" ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По п2 - однозначно UDP

По п3 - если ввести некоторые ограничения на размер пакетов (ну и отказаться от поддержки фрагментирования UDP пакетов), то стек, обрезанный на поддержку только IP+UDP вполне может работать прямо из прерываний (надеюсь что аппаратный MAC у вас все же есть? :) )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

kovigor, спасибо.

 

 

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

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

 

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Я бы выбрал TCP и прикрутил сверху контроль доставки.

3. Вместо RTOS можно попробовать QP framework. Он неплохо поддерживается и есть примеры с lwIP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Выбираете стек - и в описаниях стека достаточно разжевано, документацию Адам Данкелс пишет хорошую. Вот еще

http://lwip.wikia.com/wiki/LwIP_Wiki

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.

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 реализовано как вызов периодического обработчика из основной программы если мне не изменяет память, поэтому придется перелопачивать самому - а есть ли смысл?).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2) какой протокол мне выбрать?...

 

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

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...