10.5. Динамическое определение адреса домашнего агента
В данном разделе описано, как домашний агент может помочь мобильным узлам определить адреса домашних агентов. Домашний агент отслеживает наличие других домашних агентов на том же самом линке и отвечает на запросы, посылаемые мобильным узлом.
10.5.1. Прием сообщений Router Advertisement
Для каждого линка, на котором маршрутизатор оказывает услуги домашнего агента, этот маршрутизатор поддерживает список домашних агентов, хранящий информацию относительно всех других домашних агентов на этом линке. Этот список используется в механизме динамического определения адреса домашнего агента, описанном в разд. 10.5. Информация для этого списка узнается посредством приема периодических незапрошенных групповых сообщений Router Advertisement способом, подобным концептуальным структурам данных, поддерживаемым каждым хостом для протокола Neighbor Discovery [12]. В структуре списка домашних агентов имеются объявления маршрутизаторов (Router Advertisements) от каждого (другого) находящегося на линке домашнего агента, и в них установлен бит Home Agent (H).
При получении правомерного сообщения Router Advertisement, как определено в алгоритме обработки, специфицированного для протокола Neighbor Discovery [12], домашний агент выполняет следующие шаги дополнительно к любым шагам, которые требует от него протокол Neighbor Discovery:
- Если бит Home Agent (H) в сообщении Router Advertisement не установлен, то удалить элемент посылавшего узла в текущем списке домашних агентов (если он существует). Пропустить все следующие шаги.
- В противном случае, извлечь адрес источника из IP-заголовка сообщения Router Advertisement. Это «локальный для линка» IP-адрес на данном линке домашнего агента, посылающего это объявление [12].
- Определить приоритет этого домашнего агента. Если сообщение Router Advertisement содержит опцию Home Agent Information Option, то приоритет берется из поля Home Agent Preference этой опции; в противном случае должен (MUST) использоваться подразумеваемый приоритет (приоритет по умолчанию) равный 0.
- Определить время жизни для этого домашнего агента. Если сообщение Router Advertisement содержит опцию Home Agent Information Option, то время жизни берется из поля Home Agent Lifetime этой опции; в противном случае должно (SHOULD) использоваться время жизни, определенное полем Router Lifetime в сообщении Router Advertisement.
- Если «локальный для линка» адрес домашнего агента, посылающего это объявление, уже имеется в списке домашних агентов данного домашнего агента, и принятое значение времени жизни домашнего агента равно нулю, немедленно удалить этот элемент из списка домашних агентов.
- В противном случае, если «локальный для линка» адрес домашнего агента, посылающего это объявление, уже имеется в списке домашних агентов принимающего домашнего агента, переустановить его время жизни и приоритет определенными выше значениями.
- Если «локальный для линка» адрес домашнего агента, посылающего это объявление, еще не имеется в списке домашних агентов, поддерживаемом принимающим домашним агентом, и время жизни для посылающего домашнего агента не равно нулю, создать новый элемент списка и инициализировать его время жизни и приоритет определенными выше значениями.
- Если элемент списка домашних агентов для «локального для линка» адреса домашнего агента, посылающего это объявление, не был удален, как описано выше, определить каждый глобальный адрес (адреса) домашнего агента на основе каждой опции Prefix Information, полученной в этом объявлении, в которой бит Router Address (R) установлен (разд. 7.2). Добавить все такие глобальные адреса к списку глобальных адресов в данном элементе списка домашних агентов.
Домашний агент должен (SHOULD) поддерживать элемент в своем списке домашних агентов для каждого правомерного адреса домашнего агента до тех пор, пока не истечет время жизни этого элемента, спустя это время элемент должен быть удален.
Как описано в разд. 11.4.1, мобильный узел делает попытку динамического определения адреса домашнего агента путем посылки сообщения ICMP Home Agent Address Discovery Request на адрес «Mobile IPv6 Home-Agents anycast address» [16] для префикса своей домашней IP-подсети. Домашний агент, получающий сообщение Home Agent Address Discovery Request и обслуживающий эту подсеть, должен (SHOULD) вернуть мобильному узлу сообщение ICMP Home Agent Address Discovery Reply с полем адреса источника в пакете ответа, установленном в значение одного из глобальных уникальных адресов домашнего агента. Поле Home Agent Addresses в сообщении ответа конструируется следующим образом:
- Поле Home Agent Addresses должно (SHOULD) содержать все глобальные IP-адреса для каждого домашнего агента, перечисленного в собственном списке домашних агентов этого домашнего агента (разд. 10.1).
- IP-адреса в поле Home Agent Addresses должны (SHOULD) быть перечислены в порядке уменьшения значений приоритета, базируясь либо на соответствующем объявленном приоритете из опции Home Agent Information, либо на нулевом по умолчанию приоритете, если никакой приоритет не объявляется (либо на конфигурируемом приоритете домашнего агента для самого этого домашнего агента).
- Между домашними агентами с одинаковым приоритетом их IP-адреса в поле Home Agent Addresses должны (SHOULD) быть перечислены в порядке, который рандомизируется по отношению к другим домашним агентам с равными приоритетами каждый раз, когда сообщение Home Agent Address Discovery Reply возвращается этим домашним агентом.
- Если с домашним агентом связано более одного глобального IP-адреса, эти адреса должны (SHOULD) быть перечислены в случайном порядке.
- Домашний агент должен (SHOULD) сокращать количество IP-адресов домашних агентов так, чтобы пакет соответствовал минимальному значению IPv6 MTU [11]. Адреса домашних агентов, выбранные для включения в пакет, должны (SHOULD) быть адресами домашних агентов из полного списка, имеющими наивысший приоритет. Это ограничение ликвидирует опасность фрагментации пакета сообщения ответа (или его отвержения промежуточным маршрутизатором с сообщением ICMP Packet Too Big [14]).