9.5. Обработка привязок
В данном разделе объясняется, как узел-корреспондент обрабатывает сообщения, связанные с привязками. Этими сообщениями являются сообщения:
- Binding Update
- Binding Refresh Request
- Binding Acknowledgement
- Binding Error
9.5.1. Прием сообщений Binding Update
Перед тем как признать годным сообщение Binding Update принимающий узел должен (MUST) его утвердить в соответствии со следующими проверками:
- Пакет должен (MUST) содержать индивидуальный маршрутизируемый домашний адрес либо в опции Home Address, либо в поле Source Address, если опция Home Address отсутствует.
- Значение поля Sequence Number в сообщении Binding Update больше, чем порядковый номер, полученный в предыдущем имевшем силу обновлении привязки для этого домашнего адреса, если таковое было.
Если принимающий узел не имеет элемента кэша привязок для указанного домашнего адреса, то он должен (MUST) признать годным любое значение порядкового номера в полученном сообщении Binding Update от этого мобильного узла.
Такое сравнение порядковых номеров должно выполняться по модулю 2**16, то есть, этот номер является свободно работающим счетчиком, представляющим модуль 65536. Порядковый номер в полученном обновлении привязки считается меньшим или равным последнему принятому номеру, если его значение лежит в диапазоне последнего полученного номера и предшествует 32768 значениям включительно. Например, если последний полученный номер был равен 15, то сообщения с порядковыми номерами от 0 до 15, а также от 32783 до 65535, будут считаться меньшими или равными.
Если бит Home Registration (H) не установлен, то требуется также следующее:
- Должна (MUST) присутствовать опция мобильности Nonce Indices, и значения Home Nonce Index и Care-of Nonce Index в этой опции должны (MUST) оцениваться узлом-корреспондентом как достаточно свежие. (Для запросов уничтожения привязки значения Care-of Nonce Index проверке не подвергаются).
- Узел-корреспондент должен (MUST) повторно сгенерировать маркер home keygen token и маркер care-of keygen token из информации, содержащейся в пакете. Затем он генерирует ключ управления привязкой Kbm и использует его для проверки поля Authenticator в сообщении Binding Update, как специфицировано в разд. 6.1.7.
- Опция мобильности Binding Authorization Data должна (MUST) присутствовать, а ее содержимое должно (MUST) удовлетворять правилам, представленным в разд. 5.2.6. Заметим, что временный адрес, отличный от адреса источника может быть (MAY) определен путем включения в сообщение Binding Update опции мобильности Alternate Care-of Address. Когда принимается такое сообщение, и в качестве метода авторизации используется процедура обратной маршрутизируемости, узел-корреспондент должен (MUST) проверить Authenticator, используя в вычислениях адрес из опции Alternate Care-of Address.
- Опция мобильности Binding Authorization Data должна (MUST) быть последней опцией и не должна (MUST NOT) иметь замыкающего заполнения.
Если бит Home Registration (H) установлен, то опция Nonce Indices не должна (MUST NOT) присутствовать.
Если мобильный узел посылает порядковый номер, который не больше порядкового номера из последнего годного сообщения Binding Update для данного домашнего адреса, то принимающий узел должен (MUST) послать назад сообщение Binding Acknowledgement с кодом состояния 135, и в поле Sequence Number сообщения Binding Acknowledgement последний принятый (считавшийся приемлемым) порядковый номер.
Если для данного домашнего адреса привязка уже существует и флаг регистрации в домашнем агенте имеет значение, отличное от значения бита Home Registration (H) в сообщении Binding Update, то принимающий узел должен (MUST) послать назад сообщение Binding Acknowledgement с кодом состояния 139 (registration type change disallowed). Флаг регистрации в домашнем агенте, хранящийся в элементе кэша привязок не должен (MUST NOT) меняться.
Если принимающий узел больше не признает годными значение Home Nonce Index, значение Care-of Nonce Index, или оба эти значения из сообщения Binding Update, то он должен (MUST) послать назад сообщение Binding Acknowledgement с кодом состояния 136, 137, или 138, соответственно.
Пакеты, переносящие сообщения Binding Update, которые не удовлетворяют всем этим проверкам по любой причине, отличной от недостаточности порядкового номера, изменения типа регистрации или устаревших значений индексов одноразовых номеров, должны (MUST) молча отбрасываться.
Если сообщение Binding Update с точки зрения указанных выше проверок обосновано, то оно обрабатывается далее следующим образом:
- Значение Sequence Number, полученное от мобильного узла в сообщении Binding Update, сохраняется принимающим узлом в элементе его кэша привязок для данного домашнего адреса.
- Если время жизни, указанное в сообщении Binding Update, не равно нулю и указанный временный адрес не равен домашнему адресу для этой привязки, то это запрос на кэширование привязки для данного домашнего адреса. Если бит Home Registration (H) в сообщении Binding Update установлен, то это сообщение обрабатывается в соответствии с процедурой, специфицированной в разд. 10.3.1; в противном случае, оно обрабатывается в соответствии с процедурой, специфицированной в разд. 9.5.2.
- Если время жизни, указанное в сообщении Binding Update, равно нулю или указанный временный адрес равен домашнему адресу для этой привязки, то это запрос на удаление кэшированной привязки для данного домашнего адреса. В этом случае сообщение Binding Update должно (MUST) включать достоверный индекс home nonce index, а индекс care-of nonce index должен (MUST) узлом-корреспондентом игнорироваться. Тогда генерация ключа управления привязкой зависит только от маркера home keygen token (разд. 5.2.5). Если в сообщении Binding Update бит Home Registration (H) установлен, то оно обрабатывается в соответствии с процедурой, специфицированной в разд. 10.3.2; в противном случае, оно обрабатывается в соответствии с процедурой, специфицированной в разд. 9.5.3.
Заданный временный адрес должен (MUST) определяться следующим образом:
- Если присутствует опция Alternate Care-of Address, то временным адресом является адрес из этой опции.
- В противном случае, временным адресом является поле Source Address в IPv6-заголовке пакета.
Домашний адрес для привязки должен (MUST) определяться следующим образом:
- Если присутствует опция места назначения Home Address, то домашним адресом является адрес из этой опции.
- В противном случае, домашним адресом является поле Source Address в IPv6-заголовке пакета.