uIP (программное обеспечение)

Реализация стека сетевых протоколов TCP/IP с открытым исходным кодом
Стабильный релиз
1.0 [1] / 27 марта 2013 г. ; 11 лет назад ( 27 марта 2013 )
Репозиторий
  • github.com/adamdunkels/uip
Платформавстроенные системы
ТипСтек TCP/IP
ЛицензияБСД

uIP это реализация стека сетевых протоколов TCP/IP с открытым исходным кодом, предназначенная для использования с крошечными 8- и 16-битными микроконтроллерами . Первоначально она была разработана Адамом Данкелсом из группы сетевых встраиваемых систем в Шведском институте компьютерных наук , лицензирована по лицензии в стиле BSD и в дальнейшем дорабатывалась большой группой разработчиков.

uIP может быть очень полезен во встраиваемых системах , поскольку он требует очень небольшого количества кода и оперативной памяти. Он был перенесен на несколько платформ, [2] [3] [4] включая платформы DSP . [5]

В октябре 2008 года компании Cisco , Atmel и SICS анонсировали полностью совместимое расширение IPv6 для uIP, названное uIPv6. [6]

Выполнение

uIP делает много необычных решений в дизайне, чтобы сократить требуемые ресурсы. Собственный программный интерфейс uIP разработан для небольших компьютерных систем без операционной системы. Его можно вызывать в синхронизированном цикле, и вызов управляет всеми повторными попытками и другим поведением сети. Драйвер оборудования вызывается после вызова uIP. uIP создает пакет, а затем драйвер отправляет его и, при необходимости, получает ответ.

Для программного обеспечения стека протокола IP нормально хранить много копий различных пакетов IP для передачи, приема и сохранять копии на случай, если их нужно будет повторно отправить. uIP экономичен в использовании памяти, поскольку использует только один буфер пакетов. Во-первых, он использует буфер пакетов полудуплексным способом, используя его поочередно для передачи и приема. Кроме того, когда uIP необходимо повторно передать пакет, он вызывает код приложения таким образом, что запрашивает воспроизведение предыдущих данных.

Другая странность заключается в том, как uIP управляет соединениями. Большинство реализаций IP имеют одну задачу на соединение, и задача взаимодействует с задачей на удаленном компьютере на другом конце соединения. В uIP не предполагается многозадачная операционная система. Соединения хранятся в массиве. При каждом вызове uIP пытается обслужить соединение, выполняя вызов подпрограммы к коду приложения, который отвечает на данные или отправляет их. Размер массива соединений — это число, которое можно изменить при перекомпиляции uIP.

uIP полностью соответствует RFC , определяющим TCP , UDP и IP . Он также реализует обязательный протокол обслуживания ICMP .

Версии

uIP 0.9 [7] — версия с наименьшей зависимостью от операционных систем, наименьшим использованием ресурсов и единственная версия, которая представляет собой API чистого цикла событий , но в своей исходной форме не поддерживает IP версии 6, а только более старый, более распространенный IPv4. Может использоваться во встроенных системах с очень небольшим количеством ресурсов.

Он был поставлен с набором примеров протоколов более высокого уровня, которые также работают в системе цикла событий, включая HTTP (простой веб-сервер), SMTP (простой протокол передачи почты), FTP (протокол передачи файлов), telnet (эмуляция терминала) и другие. Несмотря на примеры и его небольшой размер, uIP 0.9 может быть трудно применять, поскольку он не использует никакой формы API сокетов . [8]

uIP — широко используемый код с хорошо известными недостатками. Конструкция минимизирует и разделяет 32-битную арифметику, чтобы ее можно было настроить или оптимизировать для 8- и 16-битных ЦП. Кроме того, 16-битные программные таймеры (распространенные на небольших микроконтроллерах) могут переполняться и вызывать дефектную работу. Это можно исправить с помощью системы таймеров, которая не переполняется (например, таймеры ведут обратный отсчет или используют модульную арифметику ).

Другая проблема заключается в том, что его единственный пакетный буфер может иметь существенные проблемы с пропускной способностью, поскольку хост ПК обычно задерживает пакет "ACK", ожидая больше пакетов. В медленных реализациях последовательного порта пропускную способность ack можно исправить, изменив uIP для отправки каждого пакета в виде двух полупакетных фрагментов. Системы uIP с быстрым Ethernet или WiFi могут изменить аппаратный драйвер для отправки каждого пакета дважды. [5]

Некоторые ПК некорректно реагируют на быструю систему uIP в локальной сети Ethernet, поскольку система uIP может начать ответный пакет до того, как ПК будет готов его получить. [ сомнительнообсудить ] Решение состоит в том, чтобы вызывать систему uIP реже в основном цикле (ПК с Windows рассчитаны на время отклика около 1 миллисекунды). Типичные реализации uIP имеют фиксированный IP-адрес, что может сделать их непрактичными в реальных сетях, хотя некоторые из них реализовали DHCP . [9] [10]

Более поздние версии uIP, включая эталонную версию uIPv6, интегрированы с Contiki , операционной системой, которая использует сопрограммы для кооперативной многозадачности. Contiki обеспечивает многозадачность, необходимую для упрощенного API сокетов , упрощая использование uIP. Однако эти версии могут быть менее популярны, чем 0.9. Многие примеры встроенного кода не используют их. [11] [12] [13]

Смотрите также

Ссылки

  1. ^ "Release 1.0". 27 марта 2013 г. Получено 18 марта 2019 г.
  2. ^ Метцингер, Зак (25 марта 2008 г.). "ПРИЛОЖЕНИЕ 4205 - Использование стека uIP для сетевого подключения микроконтроллера MAXQ". Maxim Integrated Products, Inc. Получено 2 февраля 2015 г.
  3. ^ "AN057 – uIP V1.0 TCP/IP Stack для eCOG1k и eCOG1X, версия 1.0" (PDF) . Cyan Technology Ltd . 28 января 2008 г. Архивировано из оригинала (PDF) 18 февраля 2012 г. Получено 18 февраля 2012 г.
  4. ^ Кертис, Пол. "UIP Адама Данкеля на Olimex EasyWeb2 и LPC-E2124". Rowley Associates Limited . Получено 2 февраля 2015 г.
  5. ^ ab Barnett, Drew; Massa, Anthony J. (1 февраля 2005 г.). "Inside the uIP Stack". Журнал доктора Доббса . Получено 2 февраля 2015 г.
  6. ^ «Cisco, Atmel и Шведский институт компьютерных наук (SICS) сотрудничают для поддержки будущего, в котором любое устройство может быть подключено к Интернету». Cisco . 14 октября 2008 г. Получено 2 февраля 2015 г.
  7. ^ Данкелс, Адам. "Теги релизов". uIP теги релизов на GitHub . Получено 2 февраля 2015 г.
  8. ^ См. оригинальный веб-сайт Данкеля выше на Wayback Machine.
  9. ^ См. пример кода Code-Red для печатной платы RDB4078, 2012.
  10. ^ Данкель предоставил пример кода для DHCP.
  11. ^ Метцингер, выше
  12. ^ Примеры веб-сайтов FreeRTOS, 2013 г.
  13. ^ Примеры Code-Red приведены выше.
  • источник uIP
  • порт uIP для микроконтроллеров AVR
  • Веб-сервер на базе uIP с использованием встроенной OpenRISC SoC
Взято с "https://en.wikipedia.org/w/index.php?title=UIP_(software)&oldid=1164713666"