UIP (микро IP) - UIP (micro IP)
Стабильный выпуск | 1.0[1] / 27 марта 2013 г. |
---|---|
Репозиторий | |
Платформа | встроенные системы |
Тип | TCP / IP стек |
Лицензия | BSD |
В uIP является Открытый исходный код реализация TCP / IP стек сетевых протоколов, предназначенный для использования с крошечными 8- и 16-битными микроконтроллеры. Первоначально он был разработан Адам Данкелс группы «Сетевые встраиваемые системы» на Шведский институт компьютерных наук, под лицензией в стиле BSD и доработанной широкой группой разработчиков.
uIP может быть очень полезен в встроенные системы потому что для этого требуется очень мало кода и оперативной памяти. Он был перенесен на несколько платформ,[2][3][4] в том числе DSP платформы.[5]
В октябре 2008 г. Cisco, Атмель, и 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 (протокол передачи файлов), телнет (эмуляция терминала) и другие. Несмотря на примеры и небольшой размер, uIP 0.9 может быть трудно применить, потому что он не использует никаких форм сокетов. API.[8]
uIP - это широко используемый код с хорошо известными недостатками. Конструкция минимизирует и разделяет 32-битную арифметику, так что ее можно настроить или оптимизировать для 8- и 16-битных процессоров. Кроме того, 16-битные программные таймеры (часто встречающиеся на небольших микроконтроллерах) могут переполнение и вызвать неисправную работу. Это можно исправить с помощью системы таймера, которая не переполняется (например, таймеры отсчитывают или используют модульная арифметика ).
Другая проблема заключается в том, что его единственный пакетный буфер может иметь значительные проблемы с пропускной способностью, потому что хост ПК обычно задерживает пакет «ACK», ожидая новых пакетов. Медленно, Серийный порт В реализациях пропускная способность подтверждений может быть зафиксирована путем изменения uIP для отправки каждого пакета как двух фрагментов полупакета. системы uIP с быстрым Ethernet или Вай фай может изменить драйвер оборудования, чтобы каждый пакет отправлялся дважды.[5]
Некоторые ПК неправильно реагируют на быструю систему uIP в локальной сети Ethernet, потому что система uIP может запустить отвечающий пакет до того, как ПК будет готов его принять.[сомнительный ] Решение состоит в том, чтобы реже вызывать систему uIP в основном цикле (ПК с Windows рассчитаны на время отклика около 1 миллисекунды). Типичные реализации uIP имеют фиксированный IP-адрес, что может сделать их непрактичными в реальных сетях, хотя некоторые реализовали DHCP.[9][10]
Более поздние версии uIP, включая эталонную версию uIPv6, интегрированы с Contiki, операционная система, которая использует сопрограммы для совместной многозадачности. Contiki обеспечивает многозадачность, необходимую для упрощенного сокета API, упрощая использование uIP. Однако эти версии могут быть менее популярными, чем 0.9. Многие примеры встроенного кода не используют их.[11][12][13]
Смотрите также
Рекомендации
- ^ «Выпуск 1.0». 27 марта 2013 г.. Получено 18 марта 2019.
- ^ Метцингер, Зак (25 марта 2008 г.). «ПРИМЕЧАНИЕ ПО ПРИЛОЖЕНИЮ 4205 - Использование стека uIP для подключения микроконтроллера MAXQ в сеть». Maxim Integrated Products, Inc. Получено 2 февраля, 2015.
- ^ "AN057 - Стек TCP / IP uIP V1.0 для eCOG1k и eCOG1X, версия 1.0" (PDF). Cyan Technology Ltd. 28 января 2008 г. Архивировано с оригинал (PDF) 18 февраля 2012 г.. Получено 18 февраля, 2012.
- ^ Кертис, Пол. "UIP Адама Данкеля на Olimex EasyWeb2 и LPC-E2124". Rowley Associates Limited. Получено 2 февраля, 2015.
- ^ а б Барнетт, Дрю; Масса, Энтони Дж. (1 февраля 2005 г.). "Внутри стека uIP". Журнал доктора Доббса. Получено 2 февраля, 2015.
- ^ «Cisco, Atmel и Шведский институт компьютерных наук (SICS) сотрудничают, чтобы поддержать будущее, в котором любое устройство может быть подключено к Интернету». Cisco. 14 октября 2008 г.. Получено 2 февраля, 2015.
- ^ Данкелс, Адам. «Релизы с тегами». Релизы с тегами uIP на GitHub. Получено 2 февраля, 2015.
- ^ См. Исходный веб-сайт Дункеля выше, на машине обратного пути.
- ^ См. Пример кода Code-Red для печатной платы RDB4078, 2012 г..
- ^ Дункель предоставил образец кода для DHCP.
- ^ Метцингер, выше
- ^ Примеры веб-сайтов FreeRTOS, 2013 г.
- ^ Примеры Code-Red выше.