Авторизация


...

Кто на сайте?

Сейчас 99 гостей и 2 зарегистрированных пользователей на сайте

  • elwhidbynath
  • magierskadal

Статистика

-Посетители : 28029
-Материалы : 210

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

   AV-S2G4B

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

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

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

 

Вот мы и подошли к реализации на ассемблере протоколов. Начнем с протокола 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

Программирование c нуля в AVRStudio 5 (ч.3)

07-02-2012 Радик

Программирование c нуля в AVRStudio 5 (ч.3)

    Пишем первую программу! Большинство начинают с мигания светодиодов, и мы не исключение. Если микроконтроллер, даже самый быстрый, не “общается” с внешним миром, ценность его сводится к нулю. Нам нужно чтобы микроконтроллер принял информацию, обработал по заданному алгоритму и выдал...

Каталог сайтов.

04-10-2014 Super User

Каталог сайтов.

RadioMaster - Сайт для начинающих радиолюбителей. Большой каталог схем, программы для моделирования схем. Проектирование роботов, и многое другое!       РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум.       Сайт радиолюбителей radiofanatic.ru. Схемы различных радиоустройств,...

Доработка строительного фена

19-08-2012 Super User

Доработка строительного фена

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

ПП деления двухбайтного числа на 2.

27-05-2012 Super User

После выполнения ПП байты BaitH, BaitL разделятся на 2.  Результат будет сохранен  в них же. Необходимо "прописать"  регистры BaitH, BaitL.  


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

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