Авторизация


...

Кто на сайте?

Сейчас 47 гостей и ни одного зарегистрированного пользователя на сайте

Статистика

-Посетители : 23863
-Материалы : 209

Пользователь сайта продает...

  Стенд для освоения программирования МК AVR

Пользователь сайта покупает...

Подключение ENC28J60 + PIC к локальной сети Часть II.

Автор: Николай Викторов Просмотров: 10707

 

Вот мы и подошли к реализации на ассемблере протоколов. Начнем с протокола ARP. Для чего этот протокол  нужен ?   Он нужен для определения адреса канального уровня  по известному адресу сетевого уровня , так по крайней мере написано в "официальных документах". А по простому  каждое устройство в  интернет сетях имеет свой уникальный (физический) адрес , который покупается производителем оборудования и называется MAC адрес, его длина шесть байт . Для того что бы это устройство могло принимать IP пакеты необходимо "закрепить " за ним 4-х байтовый IP адрес , который  присваивает менеджер сети (админ). Для того что бы отправить по сети IP пакет на определенный IP адрес отправитель (ПК к примеру) просматривает у себя в кеше  так называемую ARP таблицу и если такого адреса нет отправляет широковещательный пакет (всем в сети). Устройство , с таким IP  адресом отвечает на прямую отправителю о нахождении в сети и сообщает свой MAC адрес. ПК записывает себе в ARP таблицу и периодически опрашивая о нахождение в сети. После этого отправляет IP пакет непосредственно получателю. Для просмотра ARP таблицы у себя на ПК  в командной строке напишите  ARP -a  (пуск -> выполнить -> ARP -a ) ( должно быть подключение по сети).  Вот  так к примеру эта таблица выглядит у меня на ПК.  Адрес устройства 192.168.1.61

 

 

 

В связи с тем , что инициатором обращение к нашей конструкции будет внешнее устройство  , мы реализуем только ARP сервер. Т.е. мы не будем создавать у себя таблицы, пусть тот кто обращается к нашему устройство тот и помнит.... Этим самым мы с экономим ресурсы под другие задачи. Но если будет необходимость самому проявлять инициативу (например передавать данные с определенным интервалом времени на какой то адрес ), то придется доработать протокол.

Вот так выглядит широковещательный ARP запрос.

 

 

А вот  ответ от нашего устройства. (присвоен IP адрес 192.168.1.61)

 

 

40 61 86 4e 33 09  - MAC адрес получателя .

00 d0 5c 09  6f 1f  - MAC адрес  отправителя (нашего оборудования ).

08 06 - протокол ARP.

00 01 - номер

08 00 - Код протокола. IPv4

06- длина физического адреса (MAC адрес )

04- длина логического адреса (IP адреса)

00 02 - ответ (запрос 00 01)

00 d0 5c 09  6f 1f  - MAC адрес  отправителя (нашего оборудования ).

c0 a8 01 3d - IP отправителя (наш 192.168.1.61).

40 61 86 4e 33 09  - MAC адрес получателя .

c0 a8 01 3d - IP получателя (наш 192.168.1.1).

00 .... 00 - добивка до 64 байт (настраивали при инициализации enc28j60)

Часть данных , как видно из рисунков, мы трогать не будем.  Записываем   MAC и IP адрес отправителя  в  регистры и собираем ответный ARP пакет, в котором сообщаем свои IP и MAC адреса, меняем на ответ (00 02) .Записываем в регистры Reg_1 и  Reg_2  длину пакета , (в ARP она постоянна) и передаем в буфер enc28j60. Добивку нулями делает сам контроллер enc28j60.

 

 

 

Передав пакет программа переходит к обработке нового, принятого пакета.

Переходим к IP протоколу.

Протокол IP :

 

Протокол IP является самым главным во всей иерархии протоколов семейства TCP/IP. Именно он используется для управления рассылкой TCP/IP пакетов по сети. Если опять перевести на простой язык, то IP  является транспортом для UDP,ICMP.., которые  будем рассматривать далее. Мы не будем много уделять внимания описанию IP протокола , т.к. в интернете очень много информации на данную тему, а остановимся только на том , что на понадобится в дальнейшем и рассмотрим IP совместно с другими протоколами.

Протокол ICMP.(Ping)

Ниже, на рисунке показаны запрос и ответ протокола ICMP.

 

 

Все то , что закрашено является IP заголовком. Мы не будем разбирать здесь весь пакет, он разобран к примеру здесь , можно  сравнить  пакеты (запрос, ответ)  и вы увидите отличие. Что не закрашено относится к протоколу ICMP , все вместе IP  пакетом.

В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга недоступна, или хост, или маршрутизатор не отвечают. В нашем случае мы будем использовать только "Ping" (проверки возможности доставки IP-пакетов). С помощью "Пинга" очень удобно поверить качество линии связи и работу самого устройства. По сравнению с тем же ARP протоколом для формирования ответа протокола ICMP все на много сложней. Сложней тем , что здесь в ответе (как и запросе) есть контрольная сумма как в IP заголовке , так и в самом протоколе. По этому нам необходимо после формирования произвести расчеты контрольных сумм. Рассчитывать мы будем только сумму IP заголовка, а сумму ICMP  пакета будем высчитывать исходя из изменений в байтах, т.е. сам ICMP ответ практически одинаков , нужно поменять запрос на ответ (8 на 0). Т.е. просто изменим принятую контрольную сумму с учетом сделанных изменений в ICMP пакете, тем самым упростим процесс обработки .

Расчет контрольной суммы IP Заголовка.

Здесь сумма рассчитывается начиная с байта версии и длины заголовка (45) , считается соответственно всего 20 байт. Контрольная сумма заголовка представляет собой 16-битовое поразрядное дополнение (one's complement) суммы поразрядных дополнений всех 16-битовых слов заголовка. При вычислении контрольной суммы значение самого поля принимается нулевым. Т.е. в программе для подсчета суммы, первоначально сбрасываем принятые значение контрольной суммы.

 

 

 

Обработка ICMP пакета.

После обработки IP заголовка и подсчета контрольной суммы копируем значения суммы в IP заголовок отправляемого пакета. К контрольной сумме ICMP пакета прибавляем 0х08 (меняем запрос на ответ). Здесь длина пакета для отправки высчитывается по данным, полученным в заголовке принятого пакета, (принятый заголовок с данными  о длине находится в ОЗУ по адресу 0х0103, 0х104) с вычитанием 4 байт контрольной суммы . которые добавляет к пакету отправитель. После этого передаем пакет в буфер передатчика enc28j60.

 

 

 

Здесь можно наглядно посмотреть работу нашего устройства. Послав 4 пакета с ПК , получили 4 ответа .(IP  устройства 192.168.1.61).

 

На данном этапе можно написать приложение  и собрать конструкцию "Сторож сети" . К примеру у Вас есть устройство , которое бывает зависает, а доступ к нему затруднен (что к удивлению бывает очень часто, особенно если это устройство находится далеко). Как можно перезагрузить его?  Его можно локально (там где оно находиться) с определенным интервалом времени "пинговать"  и в случае отсутствия ответа  перегружать устройство.

В следующей части разберем UDP протокол и напишем небольшое приложение.

 

Ссылки:

Все вопросы можно задать на форуме.

Проект  v1.3 можно  скачать по ссылке на форуме.

Случайные статьи....

Prev Next

Управление ИК 5 каналов.

03-01-2012 Tamerlan

Управление ИК 5 каналов.

PIC12F675 Передатчик и приёмник ИК канал код RC5. Одно нажатие кнопки включает выход, второе нажатие выключает. По деталям транзистор можно использовать кт3102 ( я нашёл смд неизвестного происхождения работает), фотоприёмник какой был в магазине, он идёт со встроенным усилителем.В прошивке...

Таймер задержки включения питания.

15-07-2012 Николай Викторов

Таймер задержки включения питания.

Возникла необходимость в задержке подачи питания  на один  из блоков при включении устройства. При множестве различных таймеров в интернете по различным причинам, подходящего варианта  для себя не нашел, что и подтолкнуло на создания программируемого таймера задержки включения питания на микроконтроллере ...

Преобразование однобайтного двоичного числа в трёхзначное десятичное ч…

23-07-2011 Николай Викторов

Преобразование однобайтного двоичного числа в трёхзначное десятичное число в «пиках» 18 серии

  Была необходимость применить подпрограмму «Преобразование однобайтного двоичного числа в трёхзначное десятичное число» в «пиках» 18 серии. Для этого пришлось подправить код. Дело в том , что команда «incf» в пиках 16 серии увеличивает значение регистра f на 1 и...

Таймер - термометр вытяжного вентилятора.

01-04-2014 Александр Милевский

Таймер - термометр вытяжного вентилятора.

Делал капитальный ремонт ванной комнаты. Возник вопрос, как управлять вентилятором вытяжки? Просто поставить выключатель, как-то слишком просто и неудобно. Конструкции в интернете или готовые решения от производителей подобных устройств не понравились. Особенно возмутил вариант работы вентилятора от выключателя света. Моя ванна...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru