Neighbor Discovery Protocol (NDP)

by Mar 8, 2018Знание0 comments

To read the article in English, click here.

Интернет протоколът е незаменима част от интернет и локалните мрежи. За да се осигури преносът на цифрова информация и правилните пакети данни да бъдат изпратени до правилния хост, са необходими допълнителни помощни и рутиращи протоколи. Затова е необходимо семейството интернет протоколи. Dynamic Host Configuration Protocol (DHCP), например, помага да се присъединим към правилния интернет адрес по време на връзката между IP адреса и сървъра. Neighbor Discovery Protocol (NDP) пък помага при комуникацията между съседните хостове в локалните мрежи и определя входящия рутер.

Определение

NDP се използва като свързващо звено с по-новата версия на интернет протокола (IPv6). Основната му функция е преобразуването на IPv6 адреси във валидни MAC адреси – адресите, които устройства като рутерите използват. При IPv4 тази роля поема Address Resolution Protocol (ARP). Всички адреси се съхраняват като информация в така наречения neighbor cache. Този буфер не само информира потребителите за локалните адреси на съседните клиенти, но и им осигурява с допълнителна информация, нужна за проверката за наличие.

Както вече споменахме NDP е замесен и в разпределянето на стандартния вход на информацията. С добавянето на Router Advertisement Protocol (RA) могат да бъдат определени стандартният рутер и валидните мрежови префикси (два основни параметъра на мрежовата конфигурация). Накрая мрежовият протокол, който обменя данни само вътре в мрежата, служи и за поддържащ протокол за цонфигурацията на динамичния адрес. Този процес е известен като Stateless Automatic Address Configuration (SLAAC).

Как работи NDP?

Всяко устройство, което използва NDP за мрежови комуникации, управлява свой собствен neighbor cache. В него всички устройства от мрежата са записани и могат да се различат по своя уникален MAC адрес. Може да се установи и дали адреса принадлежи на обикновен клиент или на рутер, например. Neighbor cache не е единствен, а един от четирите буфера, които функционират като NDP протокол. Другите 3 компонента са:  

  • Destination cache: „Целевият“ кеш включва информация за всички хостове в мрежата, на които вече са изпратени пакети данни. За всеки хост има адресен линк в neighbor cache, който трябва да бъде използван като следващия „хоп“ (междинна станция), когато пращаме пакети данни до желания хост.
  • Prefix cache: Префиксът се използва да управлява всички останали префикси в мрежата, където се помещава клиентът. Създадените записи са необходими, защото IPv6 поддържа „multi homing” – достъпа до мрежата от различни провайдери, но и защото позволява адреса да бъде разделен на различни префикси.
  • Default Router List: Този списък включва всички рутери, които редовно контактуват с устройството. Само активните рутери се пазят, защото всеки линк си има срок на годност.

За да се създадат различни кешове за NDP се използва друг интернет протокол, известен като ICPMv6(Internet Control Message Protocol for the Internet Protocol Version 6).

Типове ICPMv6, върху които NDP може да бъде построен

ICMPv6 се използва в тази версия на семейството интернет протоколи като предавател на грешки и информационни съобщения и се използва от NDP под формата на 5 различни типа ICMPv6. В зависимост от типа, някои известия се използват, за да се създаде временно хранилище за списъците.

Тип 134: Рутерни съобщения

Рутерите периодично изпращат рутерни съобщения – ICMPv6 съобщения от тип 134, за да информира присъстващите в мрежата за присъствието си. След това те разпределят сред останалите тяхната информация и неободимите параметри за IP настройки. Целта на съобщението обикновено е диапазонът по подразбиране за множествено предаване “ff02 :: 01”, чрез който се адресират всички хостове, считани за валидни. Те също така получават адреса на рутера (порталът по подразбиране) и глобалния префикс. Схемата за съобщение на рутера изглежда така:

Този тип съобщения има стандартна дължина от 128 бита с възможност за разширяване. Валидните възможности включват MAC адреса на устройството, ‘Maximum Transmission Unit’ и цялата останала префикс информация.

Полето „type” е настроено на 134, а полето „code” винаги е 0. Следват 16-битов ICMP сбор и 8-битова спецификация за „хоп“ лимита, които може да включат препоръчани от рутера.

След това следват няколко единични бита, които дават информация за:

  • Дали IP адресите могат да бъдат получени чрез динамичен DHCPv6 (M);
  • Дали друга адресна информация може да бъде получена чрез динамичния DHCPv6 (O).

Полето ‘reserved’ остава неизползвано и бива игнорирано от получателя. Освен това рутерното съобщение съдържа числа за:

  • Времето в секунди, за което даден рутер може да остане в списъка router lifespan, 16-bit, maximum 65535);
  • Времето в милисекунди, в което адрес в neighbor cache все още е достъпен (availability timeout, 32-bit, максимална продължителност 50 дни).
  • Времето в милисекунди, след което „съседското съобщение“ трябва да бъде препратено (resolution timeout, 32-bit).

Тип 133: Рутерни съобщения

Рутерните съобщения се изпращат от хоста, за да поиска всички рутери в мрежата да изпратят съобщения до даден рутер. Отговорът е съобщение тип 134, което се изпраща или до хоста, дал командата (уникаст) или до всички рутери в мрежата (мултикаст). С този тип съобщения, както и с мрежова връзка, хостът не трябва да чака мрежовия рутер да се самоизвести. Този тип ICMPv6 съобщение е структурирано по следния начин:

Конфигурацията по подразбиране на съобщение NDP-ICMPv6 тип 133 е с минимална дължина от 64 бита. “Type е нагласен на стойността на съобщението на рутера – 133, а Code отново е 0. Другите 2 задължителни полета са ICMP сбора (16 бита) и 32-битово поле със заглавие Reserved”, което остава неизползвано.

Единствената възможност, която може да бъде прикрепена към съобщението е MAC адреса на изпращача.

Тип 135: Съседско съобщение

Мрежовите клиенти изпращат съседски съобщения, за да открият MAC адресите на целевия хост, а в замяна оставят своя адрес. Съобщенията ICMPv6 от този тип или предават сигнал на устройства чрез мултикаст, ако искат да определят адрес, или чрез уникаст, ако просто искатда проверят дали някой „съсед“ е на линия.

Като всички ICMPv6 типове съобщения, съседските започват с 8-битова типова идентификация. В този случай, „type” има стойност 135. Следва 8-битов код със стойност 0 и 16-битов сбор. Полето „Reserved” остава неизползвано, както и при предишните съобщения.

При 128 бита целевият IP адрес, който не може да бъде мултикаст адрес, раздува съобщението до поне 192 бита. Този тип съобщение, което е от решаващо значение за протокола Neighbor Discovery Protocol, позволява MAC адреса на подателя като допълнителна спецификация.

Тип 136: Съседско обявление

От една страна мрежовите устройства изпращат съседски обявления в отговор на съседските съобщения, но също така пращат и непоискани съобщения, за да информират другите участници относно промени в адресната конфигурация. Структурата на този тип съобщения е следната:

Първите 32 бита от стандартното 192-битово съседско обявление са базирани на типичната схема за съобщения ICMPv6: „Type” (136) и „Code” (0) са запазени за 8 бита, последвани от 16-битов сбор. Три отделни бита продължават кода за съобщение, за който се прилагат следните условия:

  • R: Този бит се изпраща, когато съобщението е изпратено от рутер.
  • S: Този бит се изпраща в отговор на уникаст съседско съобщение, което потвърждава, че мрежовият потребител е достъпен. „S” битът не може да бъде изпратен като отговор на мултикаст рикуести, както и на специално създадени съседски обявления.
  • O: Този бит инструктира получателя на съобщението да замени съществуващия кеш вход.

Следващите 29 бита са запазени по известния вече модел, така че остават неизползвани и означени с 0, като по този начин биват игнорирани от получателя. 128-битовият адрес сега бива последван от основната част на съобщението: или от IP адреса, от който съседското обявление е било поискано, или адресът, за който ще бъде поставен новия MAC адрес.Рутерът също така има възможността да „измисли“ свой адрес – това е задължително, когато изпълнява мултикаст рикуест.

Тип 137: Пренасочване

Рутерите имат способността да информират мрежовите хостове за по-добър първи „хоп“ по пътя им към специфичен адрес. За да стане това възможно, те изпращат NDP-ICMPv6 пренасочвания, които се характеризират със следната схема:

С минимална дължина от 340 бита, „пренасочванията“ са най-големия тип ICMPv6 съобщения, от които зависи работата на NDP. Типичната структура с битови връзки за типова идентификация (137), кодът (0), сборът и неизполлзваното поле „reserved” (32 бита) са последвани от адреса на препоръчаните „хопове“, следва адреса, за които и двете пренасочвания са препоръчани (и двете – по 128 бита). Опционално пакетът съобщение може да включва MAC адреса на дестинацията, както и хедъра на пренасочения пакет данни.

Задачи и възможности на NDP

Има много какво да се каже (и напише) за механизмите на комуникация на NDP и ICMP (Internet Control Message Protocol). Следващите NDP сценарии илюстрират част от възможностите на двата протокола.

  • Намиране на рутера и префикса на мрежата: Всички рутери в мрежата рутинно предават рутерни съобщения до всички оператори, чрез мултикаст. Тези съобщения съдържат в себе си информация като адрес, мрежов префикс и рутиране и създават рутер и префикс списъците. Този тип клиенти се използват и за да се определи портала и събнет маската.  
  • Определяне на важни параметри за пакетно предаване: Рутерните съобщения могат да съдържат информация относно кой параметър трябва да бъде приложен от участващите в мрежата клиенти, при доставянето на данни. Това може да бъде специфична информация, като например максималният размер на пакета данни, но и широки интернет параметри.
  • Определяне на следващия „хоп“: Ако пакет данни бива изпратен, протоколът NDP осигурява наличието на кореспондиращ вход към дестинационния кеш за хоста. Ако ситуацията не е такава, протоколът определя следващата междинна станция, използвайки информацията от префикс и рутер списъците. Новото знание бива съхранено в дестинационния кеш, като информацията е достъпна веднага, при поискване.
  • Определяне на IP адреса и MAC адреса: За да определи MAC адреса на специфичен хост в мрежата, протоколът получава съседско обявление чрез IPv6 мултикаст на неговия си мултикаст адрес. Само хостът може да отговори на тази специфична адресна комбинация.
  • Засичне на дублиращи се адреси: Ако дадено устройство само е настроило адрес, NDP го определя като „временен“. Новосвързаният мрежов клиент изпраща съобщение на временния адрес, който иска да ползва с временно неопределен адрес на получателя. Ако друг хост вече използва този адрес, той отговаря със съседско съобщение на общия мултикаст адрес.

Как да инспектираме съседския кеш в системата си

Независимо дали става въпрос за Windows, MacOS, Linux или Android, съвременните операционни системи поддържат IPv6 и могат да достигат до NDP дори и в мрежи базирани на Ethernet. Използвайки подходящата инструкция, можем да използваме командата по всяко време, за да извикаме съседския кеш, създаден на устройството ни.

В Windows например, можем да направим списък на съседите в мрежата, използвайки програмата netsh (network shell) и следната команда:

netsh interface ipv6 show neighbors

При повечето Linux версии, можете да достигнете до съседския кеш, използвайки инструмента iproute2 и следната команда:

ip -6 neigh

При MacOS и други BSD базирани системи, се използва тази команда:

ndp -a

Share This

Share This

Share this post with your friends!