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

 
 
 
Reply to this topicStart new topic
> TCP/IP for Stellaris, TCP/IP стэк для МК Stellaris
mstumbra
сообщение Jul 21 2011, 12:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 14-04-10
Пользователь №: 56 652



Всем добрый день.
Около полугода назад была необходимость в поднятии собственного высокопроизводительного и простого TCP\IP стека. Могу поделится своими трудами.
Есть вещи которые стоило бы допилить, но в рамках проекта они были не нужны.
С удовольствием выслушаю критику. А если кто-то захочет допилить мелочи, то отвечу на все вопросы.

Ах, да! забыл сказать стек документирован на русском языке santa2.gif

Прикрепленные файлы
Прикрепленный файл  TCP_1_1.7z ( 82.46 килобайт ) Кол-во скачиваний: 41
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 21 2011, 12:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Подозрительно: кода всего 600 строчек. А все RFC, имеющие отношение к TCP, потянут скорее на 600 страниц. Видимо, этот TCP работает только в очень особых случаях.
Go to the top of the page
 
+Quote Post
mstumbra
сообщение Jul 21 2011, 12:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 14-04-10
Пользователь №: 56 652



Цитата(scifi @ Jul 21 2011, 15:35) *
Подозрительно: кода всего 600 строчек. А все RFC, имеющие отношение к TCP, потянут скорее на 600 страниц. Видимо, этот TCP работает только в очень особых случаях.

смотря что вы называете особыми случаями. Если вас интерисуют DNS запросы, работу через gateway, DHCP - то кончено же нет. А если вас например интерисует передача большого объема данных по протоколу UDP в пределах одной подсети - то это то что надо.
TCP реализован не идеально(огрехи описаны в документации), но опять таки, для моей задачи достигнутой пропускной способности было достаточно.
тот же DHCP например дописать для разбирающегося человека - не проблема, другое дело, что в рамках моей задачи он небыл необходим
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 21 2011, 12:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(mstumbra @ Jul 21 2011, 16:45) *
TCP реализован не идеально(огрехи описаны в документации), но опять таки, для моей задачи достигнутой пропускной способности было достаточно.

По-видимому, повторная посылка в случае потери пакета не реализована. То есть при потере пакета сессия TCP повисает. Если так, то это и есть главное ограничение.
Go to the top of the page
 
+Quote Post
mstumbra
сообщение Jul 21 2011, 12:59
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 14-04-10
Пользователь №: 56 652



дока в pdf, вместо odt

Цитата
Цитата(mstumbra @ Jul 21 2011, 16:45) *
TCP реализован не идеально(огрехи описаны в документации), но опять таки, для моей задачи достигнутой пропускной способности было достаточно.

По-видимому, повторная посылка в случае потери пакета не реализована. То есть при потере пакета сессия TCP повисает. Если так, то это и есть главное ограничение.


повторная посылка реализована wink.gif
основное ограничение tcp - следующий пакет данных не посылается до получения подтверждения. то есть данные будут посылаться повторно до получения подтверждения или сброса соеденения(ACK | RST)
Прикрепленные файлы
Прикрепленный файл  description.pdf ( 244.87 килобайт ) Кол-во скачиваний: 185
 
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 21 2011, 13:11
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Ах, да! забыл сказать стек документирован на русском языке


Что-то я там нифига не вижу ни описания, ни примера использования. Так, огрызочек, хотя кое-что можно разобрать.

QUOTE
высокопроизводительного и простого TCP\IP стека.


По поводу высокопроизводительности у меня масса вопросов. malloc там как-то совсем инородно выглядит. Не видать Fast Retransmit и вообще не ясно, как организована работа с подтверждениями и перепосылками.

Собственно говоря, вообще не очень ясен программный интерфейс к собственно стеку, но это к вопросу выше.

Проверки на валидность всех полей в пакетах все-же очень желательна.

Не видно работы с опцией MSS.

Пока писал, появились ответы на некоторые вопросы.

QUOTE
основное ограничение tcp - следующий пакет данных не посылается до получения подтверждения.


О какой производительности стека может идти речь? biggrin.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
mstumbra
сообщение Jul 21 2011, 13:14
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 14-04-10
Пользователь №: 56 652



Цитата(Rst7 @ Jul 21 2011, 16:11) *
О какой производительности стека может идти речь? biggrin.gif

25 Мбит\с

А по UDP - 80 Мбит\с

там ведь все написано
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 21 2011, 13:15
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Rst7 @ Jul 21 2011, 17:11) *
О какой производительности стека может идти речь? biggrin.gif

Вы не дочитали описание: предлагается залезть в реестр Windows и отключить Delayed ACK.
Кстати, если я правильно помню, uIP тоже допускает только один неподтверждённый пакет. Там сразу сказано, что это сделано для упрощения и экономии памяти. Здесь, видимо, что-то похожее.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 21 2011, 13:23
Сообщение #9


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
ПРИЛОЖЕНИЕ Б
....


Руки бы отрывал за то, что крутят бездумно эти параметры.

QUOTE
Вы не дочитали описание: предлагается залезть в реестр Windows и отключить Delayed ACK.


Дочитал. Фтопку.

QUOTE
Там сразу сказано, что это сделано для упрощения и экономии памяти.


Это для оправдания рукожопия сделано wink.gif Или нежелания сделать красиво.

QUOTE
25 Мбит\с

А по UDP - 80 Мбит\с


Это не производительность. Нормальный стек дает более 80МБит на TCP.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
mstumbra
сообщение Jul 21 2011, 13:28
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 14-04-10
Пользователь №: 56 652



Цитата
Кстати, если я правильно помню, uIP тоже допускает только один неподтверждённый пакет. Там сразу сказано, что это сделано для упрощения и экономии памяти. Здесь, видимо, что-то похожее.

Если так не делать, то прийдется хранить все время в буффере все неподтвержденные пакеты, что увеличит объем использованной памяти во много раз.
Штука полезная, но мне было проще отключить задержку ACK в WIN

Цитата
Дочитал. Фтопку.

Никто ж не заставляет этот параметр менять) без него скорость падает(точно не помню), но предполагаю, что до 3-5 Мбит\с.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 21 2011, 13:45
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE (scifi @ Jul 21 2011, 14:35) *
Подозрительно: кода всего 600 строчек. А все RFC, имеющие отношение к TCP, потянут скорее на 600 страниц. Видимо, этот TCP работает только в очень особых случаях.


Познавательно меряться размером выходного кода. У меня
CODE
3 718 bytes of CODE memory


Сделан под LPC17xx. Реализован достаточно близко к требованиям RFC; TCP, ICMP, UDP, ARP (упрощенный, без кэша); адекватно работает с отложенными ACK; Fast Retransmit штатно поддерживает только для передачи, можно прикрутить и для приема; практически работает в режиме zero-copy.

Размер каждого TCP-сокета - 49 байт (ну ибо zero-copy).

Программный интерфейс - не bsd-style, а событийный.

Со скоростью там все в порядке wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
mstumbra
сообщение Jul 21 2011, 13:57
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 14-04-10
Пользователь №: 56 652



Цитата
Не видать Fast Retransmit и вообще не ясно, как организована работа с подтверждениями и перепосылками.

а что не ясно то? отсчет таймаутов идет с помощью systick таймера(описано в документации)
по истечении заданного промежутка времени происходит перепосылка данных используя DMA контроллер МК, чтоб не отнимать время у приложения пользователя. Все по-моему логично
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 21 2011, 14:05
Сообщение #13


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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


А не надо так делать. Надо генерировать пакеты по необходимости.

У меня в стеке есть три callback'а для режима передачи

SEND - сгенерить новых данных для передачи (не более стольки-то) и вернуть количество сгенеренных данных.
REGENERATE - откатиться на точку последнего подтверждения
ACK - переместить точку последнего подтверждения на сколько-то байт.

CODE
char *out;
char *ack;

SEND(p,max)
{
   len=max;
   memcpy(p,out,len);
   out+=len;
   return len;
}

REGENERATE(p,max)
{
   len=max;
   memcpy(p,ack,len);
   out=ack;
   return len;
}

ACK(len)
{
   ack+=len;
}


В начале out и ack указывают на начало буфера передачи.

На самом деле в реальности там нет memcpy. Это псевдокод для иллюстрации. На самом деле там какой-то циклический буфер, или железка, или еще чего - например, http-сервер в виде машины состояний, который непосредственно печатает в p, а ack и out для него - не более чем состояние.

QUOTE
а что не ясно то?


Да уже все ясно. Однопакетный стек. Тысячи их, uip впереди колонны шагает.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:51
Рейтинг@Mail.ru


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