Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > AVR |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AVR460: Встраиваемый Веб-сервер1. Введение Все больше и больше популярных в последнее время систем "Умный дом" подключаются к сети Интернет и требуют микроконтроллер для связи с другими сетевыми устройствами. Встраиваемый Веб-сервер на микроконтроллере AVR поможет упростить процесс проектирования приложений со встраиваемыми Веб-серверами. В состав разработки встраиваемого Веб-сервера на МК AVR входит завершенный Веб-сервер с поддержкой TCP/IP и интерфейсом Ethernet. Он также поддерживает отправку писем и содержит программу для автоматической конфигурации Веб-сервера в сети. Опорная разработка Веб-сервера на МК AVR содержит полный исходный код программы, написанный на Си. Подробное руководство по всем компонентам сервера позволит разработчикам встраиваемых систем быстро освоить разработку встраиваемых Веб-серверов. 2. Описание системы Опорная разработка встраиваемого Веб-сервера на основе МК AVR предназначена для интеграции в цифровое оборудование. Она также может быть подключена к любому интерфейсу Ethernet, при этом, поддерживается связь со стандартным Web-браузером. На рисунке 2 приведены некоторые ситуации, в которых необходим web-сервер. Как показано на рисунке 2 разнообразная пользовательская электроника может управляться компьютером через сеть Интернет. Web-страницей для встраиваемого Web-сервера на МК AVR является "Control Center" (центр управления).
Предположим, что встраиваемый Web-сервер на МК AVR интегрирован в несколько бытовых блоков. Каждый сервер подключен к сети. Домашний компьютер, как показано на рисунке 2, управляет всеми устройствами и может принимать запросы от других компьютеров через Internet. Web-сервер идентифицирован своим собственным уникальным IP-адресом и может управляться дистанционно из любого места по всему миру при наличии авторизация.
3. Протокольный набор TCP/IP Протокольный набор TCP/IP позволяет компьютерам любой конфигурации, работающих под различными операционными системами, связываться между собой. Он является основой для построения так называемой всемирной сети Internet, связывающей несколько миллионов компьютеров. 3.1. Набор слоев TCP/IP Набор слоев TCP/IP - сочетание различных протоколов на различных слоях. TCP/IP обычно рассматривается, как 4-слойная система, как показано на рисунке 3.
3.1.1. Прикладной слой Прикладной слой манипулирует над деталями конкретного приложения. К общим приложениям TCP/IP относятся:
Три последних слоя не рассматривают специфику самого приложения, а только отвечают за особенности организации связи. 3.1.2. Транспортный слой TCP отвечает за надежную передачу потока данных между двумя хостами. Обычно TCP разделяет данные на куски определенного размера, отправляет их в более низкий сетевой слой, ожидает подтверждения и при необходимости повторно отправляет потерянные пакеты. Поскольку вопросы надежной передачи потока данных относятся к транспортному слою, то в прикладном слое они не затрагиваются. UDP (протокол передачи дейтаграмм пользователя) - наиболее прост для прикладного слоя в плане взаимодействия с ним. Он отправляет пакеты данных, называемые дейтаграммы, от одного хоста другому, но, не гарантируя, что дейтаграммы достигнуть другого конца. Желаемый уровень надежности должен быть добавлен на прикладном уровне. 3.1.3. Сетевой слой Данный слой по-другому называется слой Интернета. Он манипулирует над передачей пакетов данных по сети. Например, здесь выполняется маршрутизация пакетов. IP (протокол Интернет) и ICMP (протокол управления сообщениями Интернета) составляют сетевой слой протокола TCP/IP. 3.1.4. Канальный слой По иному данный слой называется слой канала данных или слой сетевого интерфейса. Канальный слой обычно содержит драйвер устройства в операционной системе и соответствующий сетевой интерфейс (сетевая карта) в компьютере. Совместно они отвечают за взаимодействие с электронной частью и физическое подключение к кабелю. На рисунке 4 показывается пример с двумя хостами в локальной сети (LAN) Ethernet с использованием HTTP.
На одной стороне расположен клиент, а на другой сервер. Сервер выполняет некоторый тип функций для клиента. В данном случае это доступ к web-страницам на сервере. Каждый слой имеет один или более протоколов для связи с равноправным пользователем на одном и том же слое. Один протокол, например, позволяет связаться двум слоям TCP, а другие слои позволяют связать два IP-слоя. Прикладной слой обычно реализуется на уровне пользовательского ПО, а остальные три уровни реализуются в ядре операционной системы. 3.1.5. Номера порта Некоторые приложения могут использовать TCP или UDP в любое время. Протоколы транспортного слоя записывают идентификатор в заголовки, которые они генерируют для идентификации приложения. TCP и UDP используют 16-разрядные номера портов для идентификации приложений. TCP и UDP запоминают номер исходящего порта и номер порта назначения в этих соответствующих заголовках. Серверы обычно знают собственный номер порта. Каждая реализация TCP/IP с сервером FTP выполняют данное обслуживание на порте 21 TCP. Каждый сервер Telnet работает через порт 23 TCP. Обслуживание, выполняемое любой реализацией, осуществляется через хорошо известные номера портов между 1 и 1023. За назначение этих портов отвечает "Центральный координатор по присвоению уникальных параметров протоколов Internet (IANA)". Клиент обычно не беспокоится о том, какой номер порта он использует на своей стороне. Независимо, какой номер порта он использует, для удостоверения ему необходим только уникальный номер своего хоста. Номера портов клиента называются эфемерными, что означает их непродолжительное время существования. Это связано с тем, что клиент действует только тогда, когда пользователь запускает необходимые функции клиента, а серверы обычно действуют все время пока есть питание. Большинство реализаций TCP/IP назначают эфемерные номера портов между 1024 и 5000. Номера портов выше 5000 предусмотрены для других функций (которые не распространены в сети Интернет). Сочетание IP-адреса и номера порта называется сокет (от socket). 3.2. Инкапсуляция Если приложение отправляет данные с помощью TCP, то данные отправляют вниз по протокольному стеку вплоть до отправки их в виде битового потока по сети. Каждый слой добавляет информацию к данным путем присоединения заголовков и добавления трейлеров к получаемым данным. На рисунке 5 показан данный процесс.
Некоторые сокращения:
IP (протокол Интернет) добавляет идентификатор к IP-заголовку для индикации, к какому слою принадлежат данные. IP выполняет это путем добавления 8-разрядного значения в свой заголовок, называемое протокольным полем. Аналогично, многие разнообразные приложения могут использовать TCP или UDP в любое время. Протокол транспортного слоя запоминает идентификатор в заголовке, который он генерирует для идентификации приложения. TCP и UDP используют 16-разрядные номера портов для идентификации приложений. TCP и UDP запоминают исходный номер порта и номер порта назначения в их соответствующих заголовках. Сетевой интерфейс отправляет и принимает посылки от имени IP, ARP, RARP. В заголовке Ethernet должна быть некоторая форма идентификации, показывающая, какой сетевой протокольный слой генерирует данные. Для выполнения этого в заголовке Ethernet предусмотрено 16-разрядное поле типа посылки. 3.3. Адреса Интернет Каждый интерфейс в Интернет имеет свой уникальный адрес (IP-адрес). Адрес задается 32-разрядным числом. На рисунке 6 показана структура и 5 различных классов адресов Интернет.
Ссылки по теме: 32-рарзядный адрес обычно записывается как 4 десятичных числа, которые выражают значение каждого байта адреса (см. таблицу 1). Данное представление называется десятичным с разделительными точками. Поскольку каждый интерфейс в Интернет должен иметь свой уникальный IP-адрес, то должна быть централизованная организация, которая отвечает за распределение адресов в Интернет. Такой организацией является NIC (Internet Network Information Center, центр сетевой информации Internet). Таблица 1. Диапазоны IP-адресов различных классов
Всего существует три типа IP-адресов: одиночный (от Unicast, предназначен для одного хоста), широковещательный (от Broadcast, предназначен для всех хостов в данной сети) и мультивещательный (от Multicast, предназначен для нескольких выделенных компьютеров (группе)). 4. IP: протокол Интернет Все TCP-, UDP- и ICMP-данные передаются, как IP-дейтаграммы. IP является ненадежной службой доставки сообщений, которая не требует установления связи. Она не гарантирует успешность доставки IP-дейтаграммы по назначению. Если что-либо выполняется не правильно, то IP использует простой алгоритм обработки ошибок: отбрасывается дейтаграмма и выполняется попытка отправки ICMP-сообщения обратно к источнику. Необходимый уровень надежности должен быть обеспечен верхними слоями. Отсутствие установления связи означает, что IP не обрабатывает какую-либо информацию об успешности передачи дейтаграмм. Каждая дейтаграмма обрабатывается независимо от всех других дейтаграмм. Это означает, что IP-дейтаграммы могут быть доставлены в нарушенном состоянии. 4.1. IP-заголовок На рисунке 7 показан формат IP-дейтаграммы. Нормальный размер IP-заголовка равен 20 байтам, если исключены опции. Старший значащий бит имеет номер 0 и расположен слева, а младший значащий бит 32-разрядного значения имеет номер 31 и расположен справа. 4 байта в 32-разрядном значении передаются в следующем порядке: разряды 0 - 7, затем биты 8 - 15 и т.д. Такой порядок называется "Big-Endian" и используется во всех бинарных целых в заголовках TCP/IP, передаваемых по сети. В связи с этим, такой порядок назван сетевым порядком байт. Поля IP-заголовка описаны ниже. 4.1.1. Версия В настоящее время используется 4-ая версия протокола, поэтому, IP иногда называется IPv4.
4.1.2. Длина заголовка Длина заголовка - количество 32-разрядных слов (4 байта на слово) в заголовке, включая любые опции. Этим ограничивается длина заголовка до 60 байт. 4.1.3. Тип обслуживания (TOS) Поле TOS состоит из 32-разрядного предшествующего поля (которое в текущий момент игнорируется), 4 бит TOS и неиспользуемого бита, который должен быть равен 0. 4 бита TOS минимизируют задержку, максимизируют производительность, максимизируют надежность и минимизируют денежную стоимость. Только 1 из этих 4 бит может быть равен 1. Если все 4 бита равны 0, то подразумевается обычное обслуживание. 4.1.4. Общий размер Это общая длина IP-дейтаграммы в байтах. Используя данное поле и поле длины заголовка, мы знаем, где начинается порция данных IP-дейтаграммы и ее длину. Поскольку поле 16-разрядное, то максимальный размер IP-дейтаграммы 65535 байт. 4.1.5. Идентификация Данное поле однозначно идентифицирует каждую дейтаграмму, отправленную хостом. Оно обычно увеличивается на 1 при каждой отправке дейтаграммы. 4.1.6. Время существования Время существования устанавливает верхний предел по количеству маршрутов, по которым может передаваться дейтаграмма. Этим ограничивается время существования дейтаграммы. Количество маршрутов инициализируется отправителем к некоторому значению (часто 32 или 64) и декрементируется на 1 при прохождении каждого маршрута. Когда данное поле достигает 0, дейтаграмма отвергается и отправитель уведомляется ICMP-сообщением. Этим предотвращается зацикливание передачи пакета. 4.1.7. Протокол Протокол используется IP для демультиплексирования входящих дейтаграмм. Он идентифицирует, какой протокол дал данные IP для отправки. 4.1.8. Контрольная сумма заголовка Контрольная сумма заголовка вычисляется только для IP-заголовка, не охватывая каких-либо данных вслед за заголовком. ICMP, UDP и TCP имеют контрольную сумму в своем собственном заголовке для охвата их собственного заголовка и данных. Каждая IP-дейтаграмма содержит IP-адрес источника и IP-адрес назначения. Они являются 32-разрядными значениями. 4.1.9. Опциональное поле Это список переменной длины опциональной информации для дейтаграмм. Опции редко используются и не все хосты и маршрутизаторы поддерживают опции. 5. UDP: протокол дейтаграммы пользователя UDP обеспечивает для приложения путь отправки инкапсулированных необработанных IP-дейтаграмм и отправляет их без необходимости установки связи. Протокол ориентирован на трансакции. Доставка и двойная защита не гарантируется. 5.1. Заголовок UDP Заголовок UDP состоит из 8 байт. Длина поля UDP равна длине байт дейтаграммы пользователя, включая заголовок и данные. Контрольная сумма UDP вычисляется и запоминается отправителем, а затем проверяется получателем. Процедура такая же, как при использовании TCP.
6. TCP: протокол управления передачей TCP и UDP используют один и тот же сетевой слой (IP), но TCP выполняет полностью другое обслуживание в прикладном слое. TCP отвечает за надежную передачу байтового потока на уровне соединения. Термин на уровне соединения означает, что два приложения, использующие TCP, (обычно рассматривается клиент и сервер) должны установить TCP-соединение друг с другом прежде, чем они начнут обмен данными. TCP обеспечивает надежность за счет следующего:
Поток 8-разрядных байт передается поперек TCP-соединения между двумя приложениями. При этом нет каких-либо маркеров записи, автоматически вставляемых TCP. Это называется обслуживанием байтного потока. Если приложение на одном конце записывает 10 байт, затем 20 байт, а затем 50 байт, то приложение на другом конце может считать 80 байт за четыре подхода по 20 байт в каждом. В одном конце поток байт помещается в TCP и такой же идентичный поток байт появляется на другом конце. Однако TCP вообще не интерпретирует содержимое байт. TCP понятия не имеет в какой форме передаются обмениваемые данные: в двоичной, в виде символов ASCII или другой форме. Интерпретация данного байтного потока выполняется приложением на каждом конце соединения. 6.1. Заголовок TCP TCP-данные инкапсулируются в IP-дейтаграмму, как показано на рисунке 9.
На рисунке 10 показан формат TCP-заголовка. Его нормальный размер равен 20 байтам, если не выбран другой размер. Каждый TCP-сегмент содержит номер порта источника и получателя для идентификации отправляющего и принимающего приложения. Эти два значения вместе с IP-адресами источника и получателя в IP-заголовке однозначно идентифицирую каждое соединение. Сочетание IP-адреса и номера порта называется "сокет". TCP - полнодуплексная служба, что означает возможность следования данных в обоих направлениях, независимо один от другого. Таким образом, в каждом конце соединения должен содержаться порядковый номер данных, следующих в каждом направлении. 6.2. Порядковый номер Он идентифицирует байтовый поток данных от передающего TCP до принимающего TCP, который в этом сегменте представляет первый байт данных. TCP присваивает каждому байту порядковый номер. Порядковый номер - 32-разрядное беззнаковое значение, которое переходит к 0 после достижения 232-1. 6.3. Номер подтверждения Он содержит номер следующей последовательности, которую отправитель подтверждения ожидает принять. Таким образом, имеется порядковый номер + 1 последнего успешно принятого байта данных. Данное поле действительно только в том случае, если установлен флаг ACK. 32-разрядное поле номера подтверждения всегда является частью заголовка, когда есть флаг ACK. Данное поле всегда устанавливается и флаг ACK всегда включен. 6.4. Длина заголовка Представляет длину заголовка в 32-разрядных словах. Это требуется в связи с тем, что длина поля может варьироваться. Если поле 4-разрядное, то размер заголовка TCP ограничен 60 байтами. Однако если не было особых выборов, то нормальный размер равен 20 байтам.
6.5. Битовые флаги Имеется шесть битовых флагов в заголовке TCP - один или более из них могут измениться одновременно:
6.6. Размер окна Управление потоком со стороны TCP выполняется в конце каждого объявленного размера окна. Размер окна - количество байт, начиная с первого байта поля номера подтверждения, которое приемник желает принять.16-разрядное поле ограничивает размер окна 65535 байтами. 6.7. Контрольная сумма Контрольная сумма охватывает TCP-сегмент: TCP-заголовок и TCP-данные. Это обязательное поле и оно должно вычисляться и запоминаться отправителем, а затем проверяться получателем. 6.8. Указатель срочности Указатель срочность действителен, только если установлен флаг URG. Данный указатель - положительное смещение, которое необходимо добавить к порядковому номеру поля сегмента, чтобы определить номер сегмента последнего байта срочных данных. Срочный режим TCP - способ для отправителя передать важные данные на другой конец. 6.9. Контрольная сумма Наиболее типичная опция этого поля - MSS (максимальный размер сегмента). В каждом конце соединения обычно задается данная опция после обмена первым сегментом (первая отправка с установленным флагом SYN для установления связи). Этим определяется максимальный размер сегмента, который отправитель ожидает принять. 6.10. Данные Часть данных в заголовке TCP является опциональной. Заголовок без данных используется для подтверждения принятых данных, если нет данных для передачи в этом направлении. Имеются некоторые случаи, связанные с истечением выдержек времени ожидания, когда сегмент передается без каких-либо данных. 6.11. Ethernet-инкапсуляция Термин Ethernet обычно ссылается на стандарт, опубликованный в 1982 году компаниями Digital Equipment, Intel и Xerox. Он является преобладающей формой локальных сетевых технологий, используемых в настоящее время совместно с TCP/IP. Он использует метод доступа, называемый CSMA/CD (множественный доступ с контролем несущей и обнаружением конфликтов). Он ориентирован на скорости 10/100 Мбит/сек и использует 48-разрядные адреса. Используется две инкапсуляции, описываемых RFC 1042 и RFC 894. Наиболее часто используется инкапсуляция RFC 894. Рисунок 11 демонстрирует инкапсуляцию RFC 894. Формат посылки использует 48-разрядные (6-байтные) адреса назначения и источника. Протоколы ARP и RARP устанавливают соответствие между 32-разрядными IP-адресами и 48-разрядными аппаратными адресами.
6.11.1. Адрес назначения Определяет 48-разрядный адрес назначения. 6.11.2. Адрес источника Определяет 48-разрядный адрес источника. 6.11.3. Тип Ethernet Идентифицирует тип следуемых данных. 6.11.4. CRC Циклическая избыточностная контрольная сумма, используемая для детекции ошибок в оставшейся части посылки. 6.11.5. Минимальный размер Для посылки Ethernet это 46 байт. Для выполнения этого в посылку вставляются холостые байты до достижения требуемого размера. 6.12. ARP и RARP - протокол разрешения адресов и протокол определения сетевого адреса по местоположению узла Разрешение адреса заключается в установлении соответствия между двумя различными формами адресов: 32-разрядным IP-адресом и любым типом адреса, который используется в канальном слое. Протокол ARP определен в RFC 826. ARP динамически устанавливает соответствие IP-адреса соответствующему аппаратному адресу. Термин динамический употреблен в связи с автоматическим выполнением процесса, который обычно не требует внимания ни со стороны пользователя приложения, ни со стороны системного администратора. Протокол RARP используется многими бездисковыми системами для получения их IP-адресов по завершении начальной загрузки. Формат пакета RARP практически идентичен ARP-пакету. Для эффективной работы ARP каждому хосту важно иметь кэш. В кэше хранятся недавно установленные соответствия Интернет-адресов и аппаратных адресов. Нормальное время истечения входа в кэш равно 20 минутам с момента создания кэша. 6.12.1. Формат ARP пакета На рисунке 12 показан формат ARP пакета запроса и ответа, которые используются в сетях Ethernet для разрешения IP-адреса. 6.12.2. Ethernet-адреса источника и назначения Специальный Ethernet адрес назначения из всех 48 единичных бит (0xFFFFFFFFFFFF) является широковещательным адресом. Все интерфейсы Ethernet в локальной сети принимают данные посылки. 6.12.3. Тип посылки Ethernet Тип посылки определяет тип следуемых данных. Для ARP запроса или ARP ответа данное поле равно 0x0806. Определения "аппаратный" и "протокольный" используются для описания полей ARP-пакетов. Например, ARP-запрос отвечает за соответствие аппаратного адреса протокольному адресу. 6.12.4. Аппаратный тип Определяет тип аппаратного адреса. Для Ethernet его значение равно 1. 6.12.5. Протокольный тип Определяет тип протокольного адреса. Его значение равно 0x0800 для IP-адреса. 6.12.6. Аппаратный размер и протокольный размер Аппаратный размер и протокольный размер задают размеры в байтах аппаратного адреса и протокольных адресов. Для ARP запроса или ответа для IP-адреса в сети Ethernet они равны 6 и 4, соответственно. 6.12.7. Код операции Определяет, является ли операция ARP-запросом (значение 1), ARP-ответом (2), RARP-запросом (3), RARP-ответом (4). Данное поле требуется, т.к. поле типа посылки одинаково и для ARP-запроса и для ARP-ответа. 6.12.8. Отправитель аппаратного адреса В этом примере Ethernet-адрес, протокольный адрес отправителя (IP-адрес), целевой аппаратный адрес и целевой протокольный адрес. Для ARP-запроса все поля заполнены, за исключением целевого аппаратного адреса. Когда система принимает ARP-запрос, то заполняется аппаратный адрес, обмениваются два адреса отправителя с двумя целевыми аппаратными адресами, устанавливается поле OP равным 2 и отправляется ответ. 7. DHCP - протокол динамической конфигурации хоста DHCP отвечает за конфигурацию параметров Internet-хостов. Хосты могут отправлять DHCP-пакет во время загрузки, а DHCP-серверы (если присутствует) отвечает на это сообщение и предоставляет хосту параметры, необходимые для перезагрузки.
DHCP предоставляет следующие параметры: IP-адрес, IP-адрес шлюза, IP-адрес DHCP-сервера, имя хоста сервера и срок предоставления IP-адреса. Этим обеспечивается динамичность и простота обслуживания сети и IP-адресов для сетевого администратора, а также автоматическая конфигурация сетевых клиентов. IP-адрес дается на определенный период, обычно на 90 дней, но может быть отменен, если хост в нем более не нуждается. Если адрес используется половину времени предоставления, то хост должен запросить новое время предоставления. Если время предоставления адреса не обновлено, то по истечении текущего срока предоставления адреса хост должен отказаться от своего IP-адреса и ожидать выделение нового IP-адреса. 8. HTTP - протокол передачи гипертекстовых файлов HTTP-протокол, который позволяет (web) клиенту запросить файлы или другие ресурсы из сервера. Ряд типов запросов могут отправляться клиентом. Основными запросами являются "GET" и "POST", которые используются для выборки и отправки данных, соответственно. Сервер обрабатывает запрос, возвращает заголовок с кодом статуса, а также файл или HTML-документ за заголовком. В итоге, сервер закрывает соединение. 8.1. HTTP - сообщение HTTP-сообщение состоит из запросов от клиента к серверу и ответов сервера клиенту. Формат сообщения очень похож на используемый в Internet Mail и Multipurpose Internet Mail Extension (MIME, многоцелевые расширения электронной почты в сети Internet), определенные в RFC 822 и RFC 1521. 8.1.1. HTTP запрос сообщения Запрос сообщения состоит из строки-запроса, которая следует за некоторой строкой заголовка, определяющего запрос. Пример (POST) запроса показан в таблице 2. Таблица 2. Пример POST-запроса
8.1.2. HTTP сообщение отклика Сообщения отклика состоят из строки запроса, следующей за строками заголовка и телом объекта. Тело объекта разделено от заголовков пустой линией. Пример (GET) отклика показан в таблице 3. Таблица 3. Пример отклика GET
8.2. HTTP-методы Первое слово в строке запроса - имя метода, подлежащего исполнению. Поскольку метод определен таким способом, то HTTP может быть расширен для охвата потребностей будущих объектно-ориентированных приложений. Общие методы перечислены ниже в таблице 4. Таблица 4. Типичные встроенные методы HTTP-запросов
8.3. Коды статуса На каждый запрос дается отклик, начиная со строки статуса. Строка статуса состоит из версии протокола, который следует за числовым кодом статуса и связанной с ним текстовой фразой. Типичные коды статуса протокола HTTP/1.0 приведены ниже в таблице 5. Таблица 5. Типичные коды статуса
9. SMTP - простой протокол электронной почты Протокол SMTP определен в RFC 821. Он разработан для передачи электронных писем через надежный канал с упорядоченным потоком данных. При отправке писем через Internet для транспортировки используется протокол TCP. 9.1. Передача писем с помощью SMTP Отправитель устанавливает соединение с приемником через порт и идентифицирует себя с помощью команды HELO. Затем отправитель передает адреса источника и назначения с помощью команд MAIL и RCPT. Если приемник может принять почту, то каждая из этих команд повторяется 250 раз. Затем отправитель передает команду DATA. Если получатель ответит значением 354, то отправитель может начать передачу сообщения. Конец сообщения индицируется <CRLF>. После успешного приема получатель отвечает значением 250, а отправитель затем может отправить команду QUIT для закрытия соединения. Получатель может отвечать различными кодами ошибок в процессе выполнения всех описанных выше шагов. Таблица 6. Наиболее часто используемые SMTP-команды
9.2. Диагностическая программа: PING (отправитель пакетов Internet) Как правило, в диагностических целях используются программы ping и traceroute. Они могут работать из Unix или из MSDOS. Программа Ping была написана Майком Муссом и предназначена для тестирования любого доступного хоста. Программа отправляет хосту ICMP сообщение запроса отклика, а затем ожидает возврат ICMP отклика. Ping измеряет время передачи сообщения туда и обратно, что косвенно индицирует, на сколько далеко расположен хост. Программа Ping, которая отправляет запрос отклика, называется клиент, а адресованный хост называется сервер. Большинство TCP/IP реализаций поддерживают Ping-сервер непосредственно ядром, т.к. сервер это не пользовательский процесс. Рисунок 14 показывает ICMP запрос отклика.
Также как и на другие ICMP сообщения запроса сервер должен отправить отклик с полями идентификатора и порядковым номером. Кроме того, на опциональные данные, отправленные клиентом, должен поступить отклик. Порядковый номер начинается с 0 и инкрементируется всякий раз, когда отправляется запрос на новый отклик. Ping выводит на экран порядковый номер каждого возвращенного пакета, что позволяет заметить пропущенные, переупорядоченные и дублированные пакеты. IP - самая мощная служба по доставке дейтаграмм, т.к. любое из этих трех условий может возникнуть. После возврата ICMP отклика на экран выводится порядковый номер, затем TTL и общее время прохождения запроса и отклика на него. 10. Аппаратная часть Встраиваемый web-сервер на основе микроконтроллера AVR разработан с учетом возможности его доработки. Основной функцией web-сервера является организация связи через Ethernet-соединение. Однако он также может установить связь путем SLIP и модемного соединения с помощью встроенного УАПП. В опорную разработку входит программируемая логика CPLD, которая позволяет передать системе функцию распределения памяти внешних устройств. Как только статическое ОЗУ и контроллер Ethernet будут подключены к шине данных - CPLD может быть извлечена. Рисунок 15 показывает, как микроконтроллер связывается через Ethernet и последовательное соединение.
Гибкость аппаратного решения опорной разработки позволяет ее адаптировать под многие приложения. Она может быть доработана для организации Ethernet, SLIP или PPP соединений, для связи через локальные сети, любой компьютер или через коммутируемое (телефонное) соединение. Также имеется возможность подключить к системе другие внешние периферийные устройства. Внутриплатная флэш-память может быть расширена без каких-либо аппаратных изменений. 10.1. Память web-сервер содержит достаточный объем памяти для разработки большинства приложений. Внешнее статическое ОЗУ размером 32 кбайт используется для буферизации данных. Внешняя флэш-память DataFlash размером 2 Мбит используется для хранения web-страниц, тем самым, позволяя запомнить большое количество страниц. Статическое ОЗУ подключено к шине адреса и шине данных. Для обмена данными с DataFlash используется последовательный интерфейс SPI. 10.2. Контроллер Ethernet Контроллер Ethernet первоначально был 16-разрядным устройством с шиной ISA, но он может также управляться в 8-разрядном режиме. Контроллер Ethernet сконфигурирован как 8-разрядное устройство. Он содержит внутреннюю память размером 4 кбайт, которая доступна через регистры ввода-вывода или непосредственно, как часть всей памяти. По умолчанию контроллер Ethernet работает в режиме ввода-вывода и имеет адрес 0300h. Поскольку подключены только адресные линии A0 - A12 (необходимо только 4 кбайтное адресное пространство), то регистрам ввода-вывода назначены адреса 8300h - 830Fh (режим ввода-вывода, когда адресные линии в программируемом логическом устройстве имеют следующую конфигурацию: разряд 15 - старший, а разряд 14 - младший). Путем конфигурации контроллера Ethernet адреса можно изменить через регистры ввода-вывода, а также можно изменит режим памяти. Действия в режиме памяти могут быть отнесены к адресному пространству C000h - D000h. 10.3. Ограничения web-сервер не имеет очевидных ограничений. Статическое ОЗУ микроконтроллера ограничено размером 32 кбайт, но этого объема должно быть достаточно для связи разрабатываемого web-сервера с рядом приложений, использующих стек TCP/IP. Микроконтроллер ATmega103 содержит 128 кбайт внутренней программируемой флэш-памяти, которой достаточно для большинства приложений. web-сервер работает при тактовой частоте 4.608 МГц, при которой микроконтроллер способен обрабатывать входящие запросы и остается время на решение других прикладных задач. 10.3.1. Связь и платы расширения В дополнение к контроллеру Ethernet плата имеет один УАПП, что позволяет организовать SLIP/PPP-соединение или отправку отладочной информации компьютеру. Также предусмотрен 20-выводной разъем для дополнительной платы. Это может быть плата измерения температуры или плата с реле для решения специальных задач, например открытие и закрытие окна. В разъеме имеются выводы питания платы расширения, сигнал синхронизации частотой 20 МГц, а также 8 входов и 8 выходов. Входы подключены к аналогово-цифровому преобразователю микроконтроллера, поэтому, они могут использоваться или как цифровые линии ввода-вывода или как аналоговые входы 10-разрядного АЦП. 11. Программа для микроконтроллера AVR Программа, выполняемая во встраиваемом web-сервере на основе микроконтроллера AVR, следует той же структуре построения слоев, как и у набора протоколов TCP/IP. Каждый слой действует отдельно от другого. Драйвер контроллера Ethernet управляет интерфейсом Ethernet. Протокол разрешения адресов (ARP) преобразовывает IP-адреса в Ethernet MAC адреса (и наоборот). Интернет-протокол (IP) предоставляет пакеты для протокола управления передачей (TCP), UDP и протокола управляющих сообщений в сети Internet (ICMP), ICMP отвечает на запросы PING, а TCP/UDP предоставляет данные приложению. Приложения могут связываться с транспортным слоем через буферы с данными и переменными, в которых содержится управляющая информация. В данном разделе объясняется, как набор протоколов TCP/IP реализован в данном приложении.
11.1. Канальный слой Контроллер Ethernet настроен на генерацию прерывания при каждом поступлении пакета адресованного непосредственно по Ethernet-адресу или при поступлении широковещательного пакета. При возникновении прерывания микроконтроллер полностью считывает Ethernet-посылку в память. 11.1.1. Драйвер Ethernet Максимальная длина посылки в сети Ethernet составляет 1514 байт. С учетом этого предусмотрен буфер такого же размера. Сразу после передачи в микроконтроллер посылки проверяется заголовок Ethernet, чтобы гарантировать невозможность приема некорректной посылки. Если адрес Ethernet, обнаруженный получателем, является или широковещательным (все лог. 1) или специфическим адресом Ethernet-устройства, то посылка передается в следующий слой или протокол согласно полю, типу протокола в заголовке Ethernet. 11.2. Сетевой слой Сетевой слой управляет связью между хостами в сети Ethernet. При этом нет какой-либо формы управления передачей, которая бы гарантировала поступление IP-дейтаграмм хосту или прием всех IP-дейтаграмм от другого хоста. Это делает слой достаточно простым в использовании. ICMP отвечает за передачу сообщений между хостами и используется только для ответа на PING-запросы от хоста. IP управляет связью для перекрытия транспортного слоя. 11.2.1. ARP: протокол разрешения адреса Если в заголовке Ethernet указан тип 0x0806, то посылка отправлена для ARP, который вычисляет контрольную сумму. Вычисленная контрольная сумма должна быть всегда равна нулю. Если контрольная сумма корректная, то микроконтроллер проверяет, поступил ли запрос на IP-адрес или ответ на отправленный микроконтроллером запрос. Если имеется запрос, то возвращается ответ с адресом Ethernet, входящий в состав Ethernet-адреса отправителя. Запрос на Ethernet-адрес может быть также инициирован со стороны TCP или UDP. TCP или UDP проверяет доступность для пользователя Ethernet-адреса и, если нет, то отправляет запрос. После возращения ответа на запрос ARP вносит Ethernet-адрес в таблицу преобразования адресов Ethernet/IP. В этой таблице содержатся последние 10 Ethernet-адресов, которые связывались с web-сервером. 11.2.2. IP: Internet-протокол IP-дейтаграмма содержит TCP-сегмент, UDP-дейтаграмму и ICMP-сообщение или другой сегмент протокола управления транспортировкой. IP выполняет доставку без гарантирования надежности и без установления логического соединения. В данной реализации встраиваемого web-сервера IP используется только для проверки дейтаграмм на наличие ошибок и направления данных к корректному протоколу. После получения IP-дейтаграммы проверяется контрольная сумма и, если она корректная, то проверяется протокольное поле в заголовке. В таблице 7 показаны типы протоколов и соответствующие типы сообщений для IP-протоколов. Непоказанные на рисунке 7 протоколы исключены. Таблица 7. Типы IP-протоколов и сообщений
После получения IP сообщения или сегмента от ICMP, TCP или UDP создается новый заголовок для дейтаграммы и перед ее отправкой в канальный слой вычисляется контрольная сумма. 11.3. DHCP: протокол динамической конфигурации хоста Данный протокол реализован в соответствии с требованиями RFC2131. В текущей реализации DHCP используется только для получения IP-адреса. Дополнительные конфигурационные параметры от DHCP-сервера игнорируются. 11.3.1. Интерфейс Для запуска DHCP-клиента необходимо однократно вызвать процедуру dhcp(). Затем выполняется запрос на IP-адрес и в конечном счете web-сервер получит IP-адрес на определенный срок и вводит состояние BOUND. Для обновления времени предоставления адреса web-сервер должен регулярно вызывать функцию dhcp(). Истечение срока предоставления адреса контролируется. За накопление счетчика отвечает функция checkDHCP(). Данная функция должна вызываться в теле функции обработки прерывания таймера 0. 11.3.2. Инициализация DHCP используется для начальной конфигурации перед тем, как будет настроена программа TCP/IP. В процессе соединения с DHCP-сервером происходит отправка и получение UDP-пакетов. Таким образом, требуется, чтобы IP-слой был в состоянии передавать пакеты в UDP-слой, даже перед предоставлением ему IP-адреса. Для выполнения данного требования IP-слой проверяет состояние флага dhcpConf. Если флаг установлен, то IP передает любой пакет, независимо от адреса. Флаг сбрасывается, когда DHCP достигает состояния BOUND. 11.3.3. Срок предоставления адреса Срок предоставления адреса - квант времени, в течение которого DHCP-сервер может предоставить предложенный IP-адрес. Если срок предоставления принят из сервера, то он преобразовывается из секунд в минуты для снижения размера хранимых переменных. Счетчик, который контролирует срок предоставления адреса dhcpStatus.min, инкрементируется каждую минуту. Это выполняется в процедуре checkDHCP(), которая вызывается при каждом прерывании таймера 0. Константа DHCP_MINUTE предназначена для масштабирования и позволяет согласовать счет времени с используемой частотой синхронизации. При тактовой частоте 4,6МГц значение DhcpStatus.min ограничено 45 днями. Поскольку DhcpStatus. min должна быть способна считать до значения T1, которое равно половине срока предоставления адреса, то максимальный срок предоставления адреса может достигать 90 дней. Сроки предоставления адреса свыше 90 дней будут интерпретироваться как 90 дней. 11.3.4. Прочие модификации и ограничения DHCP-клиент запоминает предоставленный IP-адрес в ЭСППЗУ. После перезагрузки клиент считывает данный IP-адрес и отправляет запрос DHCP-серверу со старым IP-адресом в поле запрашиваемого IP-адреса. Если ответ об обнаружении и сообщение запроса не поступят, то по истечении короткого интервала времени сообщения будут повторно отправлены. Функция wait(unsigned char time) вызывается для опроса порта UDP на наличие входящих пакетов. Входное значение данной функции определяет время задержки кратно 3,64 секунды (зависит от тактовой частоты). Клиент просто принимает первое поступившее предложение в ответ на обнаруженное сообщение без попыток выбора среди серверов. Отклонение и высвобождение сообщений не реализовано. Это означает, клиент не имеет возможности освободить предоставленный IP-адрес. 11.3.5. ICMP: протокол управляющих сообщений в сети Internet ICMP используется только для ответа на PING-запросы клиента. Все другие сообщения игнорируются. После получения ICMP-сообщения проверяется контрольная сумма и, если сообщение является запросом отклика, то микроконтроллер изменяет запрос на ответ, вычисляет новую контрольную сумму и возвращает сообщение клиенту. 11.4. Транспортный слой В транспортном слое используются два основных протокола, которые предлагают два различных вида услуг: TCP, который отвечает за надежность доставки, и UDP, который выполняет функции без гарантии надежности. TCP также отвечает за управление потоком при повторной передаче сегментов и подтверждении принятых сегментов. 11.4.1. TCP - протокол управления передачей TCP - наиболее сложный протокол из протокольного стека TCP/IP. TCP выполняет связь с установлением логического соединения, отвечает за надежность доставки данных и управляет потоком между двумя хостами. Перед установкой соединения два хоста выполняют квитирование установления связи, чтобы быть уверенным в готовности установления связи. Перед отключением соединения оба хоста должны подтвердить прекращение связи. С помощью плавающего окна необходимо убедиться, что хосты не отправляют сегменты, который другой хост не способен принять. Обычно, размер плавающего окна находится в диапазоне 512 - 8192 байт. 11.4.2. Цифровой автомат TCP Цифровой автомат управляет соединением. На рисунке 17 показан цифровой автомат в соответствии со стандартом, описанном в RFC 793.
Реализация встраиваемого web-сервера на МК AVR выполнена в соответствии со стандартом, приведенного в RFC 793 (протокол управления передачей) и RFC 1122 (требования для Интернет-хостов), за исключением особых случаев:
11.4.3. LISTEN В состоянии LISTEN TCP ожидает либо инициации передачи приложением, либо запрос соединения другим хостом. Когда сегмент TCP находится в состоянии LISTEN, то TCP вначале проверяет, установлен ли флаг сброса RST. Если флаг установлен, то сегмент отвергается. Затем TCP смотрит на подтверждение, которого в данном случае не должно быть, и отправляет RST обратно пользователю, если ACK установлен. Далее оценивается состояние SYN. Если флаг SYN установлен и имеется место для другого сокета, то создаются блок управления передачей (TCB) и сокет, вводится следующее состояние SYN_RCVD и возвращается SYN/ACK. 11.4.4. SYN_SENT Цифровой автомат вводит данное состояние, когда сервер приложения инициирует передачу и отправлен SYN. Когда сегмент переходит в это состояние, TCP проверяет ACK. Если флаг ACK установлен и подтвержденный порядковый номер меньше или равен отправленному порядковому номеру, то отправляется RST (если флаг RST не установлен в сегменте). Затем сегменты опускаются и TCP-соединение удаляется. Если подтвержденный порядковый номер - корректный и SYN установлен, то возвращается ACK и вводится следующее состояние ESTABLISHED. Если флаг ACK не установлен, но установлен SYN, то хосту возвращается SYN/ACK и следующим состоянием будет SYN_RCVD. В других случаях сегмент опускается. 11.4.5. SYN_RCVD Данное состояние возникает, если принят SYN в состоянии LISTEN или SYN_SENT. Вначале проверяется, подходит ли порядковый номер (т.е. попадает ли он в определенные пределы). Если порядковый номер не подходит, то отправляется ответ с ACK и опускается сегмент. Если порядковый номер подходит, то проверяется RST. Если флаг RST был установлен, то удаляется TCB и опускается сегмент. Затем проверяется флаг SYN. Если флаг SYN был установлен, то отправляется ответ с RST, опускается сегмент и удаляется TCB. Если флаг ACK установлен, то следующим состоянием вводится ESTABLISHED. Если флаг ACK не был установлен, то посылка опускается. 11.4.6. Established Состояние Established - основное состояние цифрового автомата TCP. Из этого состояния возникает большинство передач данных. По аналогии с действиями в состоянии SYN_RCVD, сначала проверяется приемлемость порядкового номера и состояние флагов RST и SYN. Если один из этих флагов установлен, то формируется ответ RST и TCB удаляется. Далее проверяется ACK. Если флаг ACK установлен, то обновляется окно и удаляются элементы, подтвержденные из очереди повторной передачи. Далее выполняется обработка данных в сегменте. Это означает копирование содержимого в приемный буфер и обновление размера окна. Если флаг FIN установлен, то вводится состояние CLOSE_WAIT и подтверждается FIN. Если приложение желает прекратить соединение, то отправляется FIN и вводится состояние FIN_WAIT1. 11.4.7. FIN_WAIT1 В данном состоянии выполняется обработка по аналогии с состоянием ESTABLISHED. Единственное исключение, когда на все отправленные сегменты будет получено подтверждение, то следующим состоянием будет FIN_WAIT2. 11.4.8. FIN_WAIT2 Аналогично FIN_WAIT1 в данном состоянии сегменты обрабатываются так же, как в состоянии ESTABLISHED. Единственное исключение, когда принимается флаг FIN, то возвращается подтверждение и следующим состоянием будет TIME_WAIT. 11.4.9. CLOSE_WAIT В этом состоянии для отправки сообщений выполняется только подтверждение поступающих сообщений. Другой хост выполняет отправку данных до тех пор, пока для отправки из сервера не будет данных, после чего отправляется FIN и соединение закрывается. Вначале проверяется наличие приемлемого порядкового номера и состояние флагов RST и SYN. Если один из этих флагов установлен, то отправляется ответ RST и TCB удаляется. Далее проверяется ACK. Если флаг ACK установлен, то обновляется окно и удаляются элементы, подтвержденные из очереди повторной передачи. Когда приложение желает закрыть соединение, то отправляется FIN и следующим состоянием будет LAST_ACK. 11.4.10. LAST_ACK В этом состоянии подтверждаются только ожидаемые сегменты: предыдущие сегменты данных или FIN. Если FIN не имеет подтверждения, то снижается таблица. В противном случае удаляется TCB и следующим состоянием будет LISTEN. 11.4.11. TIME_WAIT После того, как сервер закрывает соединение, он должен продолжать следить, чтобы другой хост принял последние сегменты из буфера повторной передачи. В этом состоянии ничего не выполняется помимо нормальной обработки повторной передачи. Поистечении выдержки времени TCB удаляется. 11.4.12. Сокеты и окна После установки соединения создается блок управления передачей (TCB). Блок содержит информацию относительно соединения и указатель для ввода и вывода буферов. Размер буфера определен константой TCP_WIN_SIZE, а максимальное значение блоков TCB задано константой TCP_MAX_SOCKETS. Если соединение установлено и принято подтверждение, то размер окна обновляется. Это означает, что сегменты с порядковым номером выше подтвержденного порядкового номера плюс размер окна не должны ни отправляться, ни приниматься. Если сегмент поступает неупорядоченно, то он обрабатывается, а затем данные запоминаются в буфере по корректным адресам. 11.5. Приложения В составе встраиваемого web-сервера на основе МК AVR может выполняться несколько приложений. Основные ограничения - используемая память и быстродействие. Одновременное выполнение нескольких приложений означает снижение производительности. Для микроконтроллера AVR реализованы следующие приложения: HTTPD, FTPD и почтовый клиент. HTTPD - HTTP- сервер, который позволяет просматривать web-страницы через стандартный web-браузер. FTPD - FTP-сервер, который позволяет пользователю удаленно скачать содержимое сервера из любого места в сети. SMTP - почтовый клиент для отправки заданной пользователем почты с помощью специального почтового сервера. 11.5.1. Протокол передачи файлов (FTP) Daemon Протокол передачи файлов реализован в соответствии с RFC 959, но с некоторыми исключениями. В соответствии с RFC 959 в минимальном исполнении FTP-протокол должен поддерживать следующие команды: USER, QUIT, PORT, TYPE, MODE, STRU, RETR, STOR и NOOP. Команды MODE, STRU и TYPE должны быть реализованы для поддерживаемых значений. Поскольку MODE и STRU могут иметь только одно значение в рассматриваемой реализации, то данные команды не реализованы и возвращается "500 Command not understood." (500 команд не понимается). Команда TYPE поддерживает типы ASCII и BINARY, которых достаточно для передачи текстовых и двоичных файлов. Остальная часть команд в перечне реализована в дополнение к PASS для отправки пароля, LIST и NLST для получения информации о директориях. Другим ограничением FTP является то, что только один пользователь может организовать соединение единовременно. Если происходит попытка установить новое соединение, когда уже одно активно, то клиент получит сообщение, что превышено максимально допустимое количество соединений и соединение закроется. FTP использует хорошо известный порт 21 для управления соединениями. Когда клиент или пользователь желает передать данные, то должно быть открыто соединение. Данное соединение использует порт 21. Протокол FTP daemon реализован как цифровой автомат со следующими состояниями:
Таблица 8. FTP-команды
11.6. Файловая система флэш-памяти Файловая система для встраиваемого web-сервера на основе микроконтроллера AVR разработана для запоминания web-страниц и изображений вместе с конфигурационными файлами. Данные файлы обычно не требуют частых обновлений. Это означает, что эффективность чтения - наиболее важный показатель. Другой важной проблемой в файловой системе для флэш-памяти является поддержание равномерности распределения циклов записи, т.к. для каждой страницы памяти DataFlash гарантируется только 10 тысяч циклов перезаписи. Применение файловой системы с таблицей размещения файлов (FAT), которая является частью флэш-памяти, нежелательно, т.к. в этом случае будет иметь место неравномерность распределения циклов записи. Файловая система поддерживает традиционные имена файлов MS-DOS с 8 + 3 символами и является чувствительной к регистру. Максимальное число файлов ограничено только количеством страниц и доступным пространством. Количество текущих открытых файлов ограничено значением FILE_MAX_OPEN_FILES, которое определено в файле file.h. Для записи может быть открыт только один файл. 11.6.1. Линейная файловая система
На рисунке 18 показана организация блоков в памяти DataFlash. Размер блока равен размеру страницы. Информация о файловой системе записана в ЭСППЗУ в таблице статуса информации. Данная таблица изменяется при каждой записи или удалении файла. Если файл удален, то номер страницы записывается в таблицу к заголовку файла. Страницы, содержащие удаленный файл, сразу не освобождаются, а только открепляются. Когда число открепленных файлов превысит определенное значение или когда не осталось свободных страниц, то открепленные страницы восстанавливаются и в дальнейшем свободны для использования. Восстановление выполняется путем сортировки перечня удаленных файлов в порядке увеличения номеров страниц и вычисления смещения для каждого файла после удаленных файлов. Все страницы перемещаются в соответствии со смещением. В результате все свободные страницы окажутся за последним файлом и смогут использоваться снова.
На рисунках 19 и 20 показано, как отформатирована таблица информационного статуса и заголовок файла. В данном решении при записи файла или при перемещении исправленных страниц предусмотрена только страничная запись. Обычно исправление возникает, когда размер записанных файлов равен размеру памяти DataFlash. Это означает, что циклы записи практически равномерно распределены в пределах DataFlash. 11.6.2. Время доступа и производительность Поскольку данная файловая система в основном рассчитана на частое чтение и несистематическую запись, то скорость записи не имеет приоритета. Поэтому, здесь рассматривается только доступ для чтения. Для доступа к данному файлу файл-менеджер выполняет линейный поиск, начиная с первого файла. Для каждого файла необходим один доступ для чтения. Среднее число доступов, таким образом, равно: n = N/2, (1) где N -количество файлов. Количество страниц в одном файле равно: nс= 1 + (размер/размер_блока) = 1 + (размер/264) (2) т.е. необходимое количество блоков плюс заголовок файла. SPI использует четвертую часть частоты ядра микроконтроллера и при каждом периоде синхронизации SPI считывается один бит. Таким образом, приблизительное время доступа к одной странице составляет 1,86 мс. С учетом этого среднее время чтения одного файла равно: T = (n+nc)tc = [(N/2) + 1 + (размер/264)] * 186, мс (3) Средняя производительность чтения 30 файлов со средним размером 10 кбайт равна: T = [(30/2) + 1 + (10000/264)] * 1.86 мс = (15+1+38) * 1.86 мс = 100 мс (4) Производительность = 10 кбайт/100 мс " 0,1 Мбайт/сек. Таким образом, максимальная производительность при заполнении одним файлом всей DataFlash составляет 0,14 Мбайт/сек. Эффективность записи в файловую систему будет близка к эффективности чтения, но, если запись инициирует процесс исправления, то потребуется больше времени. 11.7. Приложения Ethernet/TCP/IP/ Каждое событие по приему инициируется запросом на прерывание от контроллера Ethernet. Данное прерывание имеет наивысший приоритет, т.к. все остальные действия мгновенно прекращаются. Реакция на принятый пакет отправляется при обработке данного прерывания. Данные, отправляемые из TCP-протокола, отправляются периодически с помощью прерывания по переполнению таймера. При каждом возникновении данного прерывания инкрементируется счетчик. Данный счетчик определяет момент повторной передачи пакета. Приложения выполняются в то время, когда не передаются пакеты. Это означает, что, при работе нескольких приложений, каждое приложение должно активизироваться циклическим способом. Распределение времени и памяти должен выполнить программист. 11.8. Ограничения Поскольку программа для данного web-сервера оптимизирована по размеру и быстродействию, то для web-сервера имеются некоторые ограничения. В протоколах нижних слоев (Ethernet - IP) необходимо реализовать только возможности для реагирования на нормальные заголовки. TCP упрощенно, но практически полностью реализован. 12. Защита При подключении к незащищенной сети необходимо предпринять некоторые меры предосторожности. Данное еще более важно, если оборудование выполняет критичные действия или содержит чувствительную информацию. Встраиваемый web-сервер на основе микроконтроллера AVR не решает данные проблемы, даже если сервер способен управлять критичными системами. Имеется несколько способов предотвращения несанкционированного доступа к web-серверу на микроконтроллере AVR. Некоторые из этих методов описаны ниже. 12.1. Ограничение доступа Самый простой доступ предотвращения доступа к приложениям, работающих на вершине TCP, со стороны посторонних пользователей - организация возможности слежения за соединением только с одного определенного клиента. Это достигается путем предоставления IP-адреса, когда сервер начинает следить за портом. TCPpopen (21, 0xc0a80102) Данный пример показывает, как разрешить слежение за соединением на порте 21 (FTP) с хостом, у которого IP-адрес 0xc0a80102 (192.168.1.2). Другие запросы через данный порт отклоняются. Также можно указать несколько IP-адресов, для которых разрешен доступ к серверу. Это выполняется путем вызова TCPpopen несколько раз. Несмотря на кажущуюся безопасность данного метода для обычных приложений необходимо учесть, что соединение не подвергается шифрованию, т.о. каждый может "следить" за данным соединением. Кроме того, IP-адрес может быть украден и регистрация может произойти из другого IP-положения. Если IP-адрес web-сервера сконфигурирован DHCP, то сервер изменит IP-адрес без уведомления пользователя. 12.2. Шифрование Более эффективным методом является шифрование соединения с сервером. Вместо непосредственной отправки данных приложению на вершине стека TCP/IP, данные пропускаются через алгоритм шифрации/дешифрации. Это означает, что другие пользователи не смогут "следить" за соединением и что они, не имея корректного ключа, не смогут связаться с сервером. Примером такой службы является SSL. Кроме этого, имеются ряд других подобных реализаций. 12.3. Отказ от обслуживания (DOS) Поскольку при реализации сервера не учитывалось обслуживание нескольких пользователей и не принято во внимание, что одновременно могут поступать 100 запросов на соединение, то враждебный пользователь может "подвесить" сервер путем превышения максимальной загрузки сервера. До тех пор, пока враждебные пользователи будут подключены к такому серверу, как встраиваемый web-сервер на МК AVR, нет возможности избежать данной проблемы. Лучший выход из этой ситуации - ограничение количества пользователей, подключаемых к серверу. Несмотря на то, что нет 100%-ой гарантии подавить активность враждебного пользователя, все-таки некоторые меры можно предпринять. Одна из них - использовать брандмауэр между встраиваемым web-сервером и внешними пользователями. Брандмауэр может остановить других пользователей для входа в сеть и поддерживает необходимые функции, доступные для правильных пользователей. В сочетании с применением шифрования сервер будет достаточно безопасным в обычных приложениях. 13. Конфигурация Файл server.ini, расположенный в DataFlash, конфигурирует web-сервер. Данный файл может быть записан с помощью Y-модема (протокол синхронной передачи файлов блоками по 1024 байта) или FTP. Поскольку FTP может использоваться только при доступности Web-сервера в сети Ethernet, то использование последовательной связи будет правильным выбором для начальной конфигурации или, если сервер функционирует некорректно ввиду нарушения конфигурации. Поскольку для последовательной связи используется модем, то можно использовать любую программу, поддерживающей y-модем. Для простоты конфигурации и загрузки файла server.ini может использоваться графический интерфейс "ATMEL AVR Embedded Web Server Terminal". 13.1. Запуск В процессе запуска вызывается процедура config(), которая открывает файл server.ini и считывает следующие опции:
Если config() не может считать все требуемые опции (например, если файл не существует), то возвращается 0. В этом случае вызывается DefaultConfig() и далее используются значения по умолчанию, заданные в config.h. 13.2. server.ini Конфигурационный файл необходимо отформатировать следующим образом:
При вызове config() из файла server.ini считываются поля, представленные в таблице 9. Таблица 9. Установки в файле server.ini
Поля должны быть размещены под заголовком [System]. Server.ini может также использоваться для конфигурации приложений; для каждого приложения должен быть создан заголовок. Доступ к значениям выполняется с помощью функции getOption() в файле config.c. В настоящее время только SMTP и FTP используют server.ini для конфигурации. Более подробная информация может быть найдена в документации на SMTP и FTP. 14. Взаимосвязь протоколов На рисунке 21 показана взаимосвязь протоколов, реализованных в виде модулей в рассматриваемой опорной разработке. Протоколы описаны ниже:
httpd.c (присоединенная процедура протокола передачи гипертекста) Для работы HTTPD необходимы TCP и файловая система для памяти DataFlash. ftpd.c (присоединенная процедура протокола передачи файлов) Для работы FTPD необходимы TCP и файловая система для памяти DataFlash. smtp.c (протокол простой отправки почты) Для работы SMTP необходима запущенная реализация TCP. dhcp.c (протокол динамической конфигурации хоста) Для работы DHCP необходимы IP и UDP. На фазе инициализации DHCP требует, чтобы протоколы IP и UDP передавали любые IP-пакеты до настройки IP-адреса. Флаг dhcpConf используется для сигнализации, что DHCP находится на фазе инициализации. tcp.c (протокол управления передачей) Для работы TCP необходим IP. udp.c (протокол дейтаграмм пользователя) Для работы UDP необходим IP. icmp.c (протокол управляющих сообщений в сети Internet) Для работы ICMP необходим IP. ip.c (протокол Internet) Для работы IP необходим ETHERNET. arp.c (протокол разрешения адреса) Для работы ARP необходим ETHERNET. ethernet.c (драйвер контроллера Ethernet) ETHERNET зависит только от аппаратного контроллера Ethernet. config.c (программа автоматической конфигурации) Для CONFIG необходима файловая система для DataFlash, чтобы считать конфигурационный файл. Если конфигурационный файл недоступен, то возможен возврат стандартных значений. file.c (файловая система) Для работы FILE необходима DATAFLASH. dataflash.c (интерфейс с DataFlash) DATAFLASH зависит только от микросхемы DataFlash. main.c (основной цикл) MAIN должна инициализировать Ethernet, DataFlash, файловую систему, TCP, DHCP и HTTPD, если данные протоколы используются. Для работы DHCP, FTPD и HTTPD их необходимо опрашивать раздельно.
15. Описание выводов Таблица 1. Описание выводов микроконтроллера Atmel ATmega103
Таблица 11. Кристалл CS8900
Таблица 12. Atmel ATF1502AS
16. Компоненты Таблица 13. Компоненты
Приложение 1: Справочная информация по Си-коду Ethernet
ARP
IP
ICMP
UDP
TCP
Присоединенная процедура FTP
DHCP
HTTP
SMTP
DataFlash
Файловая система
Библиография
Выполним срочную перевозку грузов по Европе от двери до двери.
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|