5.2.5. Процедура обратной маршрутизируемости
Процедура обратной маршрутизируемости позволяет узлу-корреспонденту получить некоторую разумную гарантию того, что мобильный узел в действительности адресуем по его заявленному временному адресу, а также по его домашнему адресу. Только при такой гарантии узел-корреспондент может считать приемлемыми сообщения Binding Update от мобильного узла, которые затем будут информировать узел-корреспондент о необходимости направлять трафик для данного мобильного узла на заявленный им временный адрес.
Это выполняется путем проверки того, что пакеты, адресованные на эти два объявленных адреса, маршрутизируются на мобильный узел. Мобильный узел может пройти эту проверку, только если он может представить доказательство того, что он получает определенные данные (маркеры keygen token), которые узел-корреспондент посылает по этим адресам. Эти данные объединяются мобильным узлом в ключ управления привязкой, обозначенный как Kbm.
На нижеприведенном рисунке показан поток сообщений для процедуры обратной маршрутизируемости.
Mobile node Home agent Correspondent node | | | Home Test Init (HoTI) | | |------------------------->|------------------------->| | | | | Care-of Test Init (CoTI) | |---------------------------------------------------->| | | | | Home Test (HoT) | |<-------------------------|<-------------------------| | | | | Care-of Test (CoT) | |<----------------------------------------------------| | |
Сообщения Home Test Init и Care-of Test Init посылаются одновременно. Процедура требует очень малой обработки в узле-корреспонденте, и сообщения Home Test и Care-of Test могут вернуться очень быстро, возможно почти одновременно. Эти четыре сообщения составляют процедуру обратной маршрутизируемости.
- Сообщение Home Test Init
Мобильный узел посылает сообщения Home Test Init узлу-корреспонденту (через домашнего агента), чтобы получить маркер home keygen token. Содержимое сообщения можно обобщить следующим образом:
- Source Address = home address
- Destination Address = correspondent
- Parameters:
- + home init cookie
Сообщение Home Test Init передает узлу-корреспонденту домашний адрес мобильного узла. Мобильный узел посылает также вместе с ним идентифицирующую цепочку home init cookie, которую узел-корреспондент должен вернуть позже. Сообщение Home Test Init передается через домашнего агента посредством обратного туннелирования. (Заголовки и адреса, связанные с обратным туннелированием, в представленном выше обсуждении содержимого сообщения опущены). Мобильный узел запоминает эти значения идентифицирующей цепочки, чтобы получить некоторую гарантию того, что его протокольные сообщения обрабатывались требуемым узлом-корреспондентом.
- Сообщение Care-of Test Init
Мобильный узел посылает сообщение Care-of Test Init узлу корреспонденту (прямо, а не через домашнего агента), чтобы получить маркер care-of keygen token. Содержимое этого сообщения можно обобщить следующим образом:
- Source Address = care-of address
- Destination Address = correspondent
- Parameters:
- + care-of init cookie
Сообщение Care-of Test Init передает узлу-корреспонденту временный адрес мобильного узла. Мобильный узел посылает также вместе с ним идентифицирующую цепочку care-of init cookie, которую узел-корреспондент должен позже вернуть. Сообщение Care-of Test Init посылается прямо узлу-корреспонденту.
- Сообщение Home Test
Сообщение Home Test посылается в ответ на сообщение Home Test Init. Оно посылается через домашнего агента. Содержимое сообщения следующее:
- Source Address = correspondent
- Destination Address = home address
- Parameters:
- + home init cookie
- + home keygen token
- + home nonce index
Когда узел-корреспондент получает сообщение Home Test Init, он генерирует маркер home keygen token следующим образом:
home keygen token := First (64, HMAC_SHA1 (Kcn, (home address | nonce | 0)))
где символ | обозначает конкатенацию. Последний "0" в функции HMAC_SHA1 представляет собой один нулевое октет, который используется для различения друг от друга идентифицирующих цепочек home cookie и care-of cookie.
Маркер home keygen token формируется из первых 64 бит кода MAC. Маркер home keygen token проверяет, что мобильный узел может получать сообщения, посылаемые по его домашнему адресу. При выработке маркера home keygen token используется ключ Kcn, чтобы позволить узлу-корреспонденту проверить, что он породил одноразовые номера home nonce и care-of nonce, не заставляя узел-корреспондент запоминать список всех маркеров, которые он выдал.
Сообщение Home Test посылается мобильному узлу через домашнюю сеть, из которой, как предполагается, домашний агент протуннелирует его мобильному узлу. Это означает, что мобильный узел должен был уже послать сообщение Binding Update домашнему агенту, так чтобы домашний агент мог получить и авторизовать новый временный адрес для мобильного узла до выполнения процедуры обратной маршрутизируемости. Для увеличения степени безопасности данные, передаваемые между домашним агентом и мобильным узлом, защищаются от просмотра и пассивных атак. Такая защита получается благодаря шифрованию маркера home keygen token, поскольку он туннелируется от домашнего агента к мобильному узлу как описано в разд. 10.4.6. Особенности системы безопасности с этой дополнительной защитой обсуждаются в разд. 15.4.1.
Идентифицирующая цепочка home init cookie от мобильного узла возвращается в сообщении Home Test, чтобы гарантировать, что сообщение пришло от узла, находящегося на пути между домашним агентом и узлом-корреспондентом.
Индекс одноразового номера home nonce index доставляется мобильному узлу, чтобы позже позволить узлу-корреспонденту эффективно найти значение одноразового номера, который использовался для создания маркера home keygen token.
- Сообщение Care-of Test
Это сообщение посылается в ответ на сообщение Care-of Test Init. Данное сообщение не посылается через домашнего агента, оно посылается прямо мобильному узлу. Содержимое сообщения следующее:
- Source Address = correspondent
- Destination Address = care-of address
- Parameters:
- care-of init cookie
- + care-of keygen token
- + care-of nonce index
Когда узел-корреспондент получает сообщение Care-of Test Init, он генерирует маркер care-of keygen token следующим образом:
care-of keygen token := First (64, HMAC_SHA1 (Kcn, (care-of address | nonce | 1)))
Здесь последняя "1" в функции HMAC_SHA1 представляет собой один октет, содержащий шестнадцатеричное значение 0x01, и используется для различения друг от друга идентифицирующих цепочек home cookie и care-of cookie. Маркер keygen token формируется из первых 64 бит кода MAC и посылается прямо мобильному узлу по его временному адресу. Идентифицирующая цепочка care-of init cookie из сообщения Care-of Test Init возвращается, чтобы гарантировать, что сообщение приходит от узла, находящегося на пути к узлу-корреспонденту.
Индекс одноразового номера care-of nonce index служит для указания одноразового номера, использовавшегося для формирования маркера care-of keygen token. Индексы одноразовых номеров home nonce index и care-of nonce index в сообщениях Home Test и Care-of Test могут (MAY) быть одними и теми же, или различными.
Процедура обратной маршрутизируемости заканчивается, когда мобильный узел получит оба сообщения Home Test и Care-of Test. В результате процедуры мобильный узел имеет данные, которые ему необходимы для посылки обновления привязки узлу-корреспонденту. Мобильный узел хэширует маркеры вместе для формирования 20-октетного ключа привязки Kbm:
Kbm = SHA1 (home keygen token | care-of keygen token)
Сообщение Binding Update может также использоваться для удаления ранее установленной привязки (разд. 6.1.7). В этом случае маркер care-of keygen token не используется. Вместо этого, ключ управления привязкой генерируется следующим образом:
Kbm = SHA1(home keygen token)
Заметим, что узел-корреспондент не создает для мобильного узла никакого конкретного состояния до тех пор, пока он не получит от этого мобильного узла сообщение Binding Update. Узел-корреспондент не сохраняет значение ключа управления привязкой Kbm; он порождает Kbm когда поступают индексы одноразовых номеров и адреса мобильного узла.