Введение

Компьютерный сетевой протокол

Diameter — это протокол аутентификации, авторизации и учёта для компьютерных сетей. Он был разработан на основе более раннего протокола RADIUS и относится к протоколам прикладного уровня в семействе протоколов Интернет. Приложения Diameter расширяют базовый протокол, добавляя новые команды и/или атрибуты, например, для использования с протоколом расширенной аутентификации (EAP).

История

Протокол Diameter был первоначально разработан Пэтом Р. Калхоуном, Гленом Зорном и Пинг-Паном в 1998 году для обеспечения платформы аутентификации, авторизации и учёта (AAA), способной преодолеть ограничения протокола RADIUS. RADIUS имел проблемы с надёжностью, масштабируемостью, безопасностью и гибкостью. RADIUS неэффективно справляется с удалённым доступом, мобильностью IP и контролем политик. Протокол Diameter определяет протокол политик, используемый клиентами для реализации политик, функций AAA и контроля ресурсов. Это позволяет одному серверу управлять политиками для множества сервисов. Как и RADIUS, Diameter предоставляет функциональность AAA, но использует TCP и SCTP вместо UDP, делегируя обнаружение и обработку проблем со связью этим протоколам. Протокол Diameter получил дальнейшее развитие благодаря разработке подсистемы IP Multimedia Subsystem (IMS) проекта 3rd Generation Partnership Project (3GPP). Приложения Diameter поддерживают интерфейсы S6a, S6b, Gx, Gy, Sy, Rx, Cx, Dh, Dx, Rf, Ro, Sh и Zh. Благодаря использованию расширений, протокол был спроектирован как расширяемый для поддержки прокси-серверов, брокеров, усиленной безопасности, мобильного IP, серверов сетевого доступа (NASREQ), учёта и управления ресурсами.

Описание протокола

Основной протокол Diameter определяется в RFC 6733 (заменяет RFC 3588 и RFC 5719) и устанавливает минимальные требования к протоколу AAA. Приложения Diameter могут расширять базовый протокол, добавляя новые команды, атрибуты или и то, и другое. Безопасность Diameter обеспечивается с помощью IPsec или TLS. IANA назначила номер порта TCP и SCTP 3868 протоколу Diameter, как указано в разделе 11.4 RFC 6733.

Формат пакета

Пакет состоит из заголовка Diameter и переменного числа пар атрибутов-значений (AVP) для инкапсуляции информации, релевантной сообщению Diameter. +Заголовок Diameter. Смещение битов: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 версия длина сообщения 32 R P E T командный код 64 идентификатор приложения 96 идентификатор hop-by-hop 128 идентификатор end-to-end 160 AVP

Версия

Это поле указывает версию базового протокола Diameter. По состоянию на 2014 год поддерживается только значение 1.

Длина сообщения

Поле "Длина сообщения" указывает длину сообщения Diameter в байтах, включая поля заголовка и дополненные AVP.

Командные флаги

Бит "R" (Request) – Если установлен, сообщение является запросом. Если сброшен, сообщение является ответом. Бит "P" (Proxiable) – Если установлен, сообщение может быть проксировано, переслано или перенаправлено. Если сброшен, сообщение должно быть обработано локально. Бит "E" (Error) – Если установлен, сообщение содержит ошибку протокола и не соответствует CCF, описанному для данной команды. Сообщения с установленным битом "E" обычно называют сообщениями об ошибках. Этот бит не должен быть установлен в запросах. Бит "T" (Потенциально повторно переданное сообщение) – Этот флаг устанавливается после процедуры переключения на резервный канал связи для облегчения удаления дублирующих запросов. Он устанавливается при повторной отправке запросов, которые еще не были подтверждены, как индикатор возможного дубликата из-за сбоя канала связи.

Команды

Каждой паре команд "Запрос/Ответ" присваивается командный код. Определение, является ли сообщение запросом или ответом, осуществляется по биту "R" в поле Command Flags заголовка. Значения 0–255 зарезервированы для обеспечения обратной совместимости с RADIUS. Значения 256–16777213 предназначены для постоянных стандартных команд, выделенных IANA. Значения 16777214 и 16777215 (в шестнадцатеричном формате 0xFFFFFE и 0xFFFFFF) зарезервированы для экспериментальных и тестовых целей. Код команды используется для определения действия, которое необходимо выполнить для конкретного сообщения. Некоторые распространенные команды Diameter, определенные в протоколе (базовой части и приложениях):

Command NameAbbr. CodeApplication AA RequestAAR265Diameter NAS Application RFC 7155 AA AnswerAAA265Diameter NAS Application RFC 7155 Diameter EAP RequestDER268Diameter EAP Application RFC 4072 Diameter EAP AnswerDEA268Diameter EAP Application RFC 4072 Abort Session RequestASR274Diameter base Abort Session AnswerASA274Diameter base Accounting RequestACR271Diameter base Accounting AnswerACA271Diameter base Credit Control RequestCCR272Diameter Credit Control Application RFC 8506 (Obsoletes RFC 4006) Credit Control AnswerCCA272Diameter Credit Control Application RFC 8506 (Obsoletes RFC 4006) Capabilities Exchange RequestCER257Diameter base Capabilities Exchange AnswerCEA257Diameter base Device Watchdog RequestDWR280Diameter base Device Watchdog AnswerDWA280Diameter base Disconnect Peer RequestDPR282Diameter base Disconnect Peer AnswerDPA282Diameter base Re Auth RequestRAR258Diameter base Re Auth AnswerRAA258Diameter base Session Termination RequestSTR275Diameter base Session Termination AnswerSTA275Diameter base User Authorization RequestUAR283Diameter SIP Application RFC 4740 User Authorization AnswerUAA283Diameter SIP Application RFC 4740 Server Assignment RequestSAR284Diameter SIP Application RFC 4740 Server Assignment AnswerSAA284Diameter SIP Application RFC 4740 Location Info RequestLIR285Diameter SIP Application RFC 4740 Location Info AnswerLIA285Diameter SIP Application RFC 4740 Multimedia Auth RequestMAR286Diameter SIP Application RFC 4740 Multimedia Auth AnswerMAA286Diameter SIP Application RFC 4740 Registration Termination RequestRTR287Diameter SIP Application RFC 4740 Registration Termination AnswerRTA287Diameter SIP Application RFC 4740 Push Profile RequestPPR288Diameter SIP Application RFC 4740 Push Profile AnswerPPA288Diameter SIP Application RFC 4740 User Authorization RequestUAR300Diameter base (3GPP) RFC 3589 User Authorization AnswerUAA300Diameter base (3GPP) RFC 3589 Server Assignment RequestSAR301Diameter base (3GPP) RFC 3589 Server Assignment AnswerSAA301Diameter base (3GPP) RFC 3589 Location Info RequestLIR302Diameter base (3GPP) RFC 3589 Location Info AnswerLIA302Diameter base (3GPP) RFC 3589 Multimedia Auth RequestMAR303Diameter base (3GPP) RFC 3589 Multimedia Auth AnswerMAA303Diameter base (3GPP) RFC 3589 Registration Termination RequestRTR304Diameter base (3GPP) RFC 3589 Registration Termination AnswerRTA304Diameter base (3GPP) RFC 3589 Push Profile RequestPPR305Diameter base (3GPP) RFC 3589 Push Profile AnswerPPA305Diameter base (3GPP) RFC 3589 User Data RequestUDR306Diameter base (3GPP) RFC 3589 User Data AnswerUDA306Diameter base (3GPP) RFC 3589 Profile Update RequestPUR307Diameter base (3GPP) RFC 3589 Profile Update AnswerPUA307Diameter base (3GPP) RFC 3589 Subscribe Notifications RequestSNR308Diameter base (3GPP) RFC 3589 Subscribe Notifications AnswerSNA308Diameter base (3GPP) RFC 3589 Push Notification RequestPNR309Diameter base (3GPP) RFC 3589 Push Notification AnswerPNA309Diameter base (3GPP) RFC 3589 Bootstrapping Info RequestBIR310Diameter base (3GPP) RFC 3589 Bootstrapping Info AnswerBIA310Diameter base (3GPP) RFC 3589 Message Process RequestMPR311Diameter base (3GPP) RFC 3589 Message Process AnswerMPA311Diameter base (3GPP) RFC 3589 Update Location RequestULR316 3GPP TS 29.272 [RFC 5516] Update Location AnswerULA316 3GPP TS 29.272 [RFC 5516] Cancel Location RequestCLR317 3GPP TS 29.272 [RFC 5516] Cancel Location AnswerCLA317 3GPP TS 29.272 [RFC 5516] Authentication Information RequestAIR318 3GPP TS 29.272 [RFC 5516] Authentication Information AnswerAIA318 3GPP TS 29.272 [RFC 5516] Insert Subscriber Data RequestIDR319 3GPP TS 29.272 [RFC 5516] Insert Subscriber Data AnswerIDA319 3GPP TS 29.272 [RFC 5516] Delete Subscriber Data RequestDSR320 3GPP TS 29.272 [RFC 5516] Delete Subscriber Data AnswerDSA320 3GPP TS 29.272 [RFC 5516] Purge UE RequestPER321 3GPP TS 29.272 [RFC 5516] Purge UE AnswerPEA321 3GPP TS 29.272 [RFC 5516] Notify RequestNR323 3GPP TS 29.272 [RFC 5516] Notify AnswerNA323 3GPP TS 29.272 [RFC 5516] Provide Location RequestPLR83886203GPP LCS SLg (Application ID 16777255) Provide Location AnswerPLA83886203GPP LCS SLg (Application ID 16777255) Routing Info RequestRIR83886223GPP LCS SLh (Application ID 16777291) Routing Info AnswerRIA83886223GPP LCS SLh (Application ID 16777291) AA Mobile Node RequestAMR260 Diameter Mobile IPv4 RFC 4004 AA Mobile Node AnswerAMA260 Diameter Mobile IPv4 RFC 4004 Home Agent MIP RequestHAR262 Diameter Mobile IPv4 RFC 4004 Home Agent MIP AnswerHAA262 Diameter Mobile IPv4 RFC 4004 Configuration Information RequestCIR8388718 S6t per 3GPP TS 29.336 Configuration Information AnswerCIA8388718 S6t per 3GPP TS 29.336 Reporting Information RequestRIR8388719 S6t per 3GPP TS 29.336 Reporting Information AnswerRIA8388719 S6t per 3GPP TS 29.336 NIDD Information RequestNIR8388726 S6t per 3GPP TS 29.336 NIDD Information AnswerNIA8388726 S6t per 3GPP TS 29.336

Идентификатор приложения

Идентификатор приложения используется для определения, к какому приложению Diameter относится сообщение. Приложение может быть приложением аутентификации, приложением учета или приложением, специфичным для поставщика. Diameter-агенты, соответствующие определенному расширению Diameter, сообщают о своей поддержке, включая конкретное значение в атрибут Auth Application Id в командах Capabilities Exchange Request (CER) и Capabilities Exchange Answer (CEA). Значение поля "ID приложения" в заголовке совпадает с любыми соответствующими AVP "ID приложения", содержащимися в сообщении. Например, значение ID приложения и атрибута Auth Application Id в командах запроса контроля кредитов (CCR) и ответа контроля кредитов (CCA) для приложения Diameter Credit Control равно 4. ID приложенияАббр. Полное наименованиеИспользование 0BaseОбщие сообщения Diameter протокола Diameter установление/разрыв/поддержание ассоциации 16777216Cx/Dx3GPP Cx/DxIMS I/S CSCF – интерфейс HSS 16777217Sh3GPP ShVoIP/IMS SIP Application Server – интерфейс HSS 16777236Rx3GPP RxПолитика и управление тарификацией 16777238Gx3GPP GxПолитика и управление тарификацией 16777251S6a/S6d3GPP S6a/S6dLTE Сигнализация роуминга 16777252S133GPP 13Интерфейс между EIR и MME 16777255SLg3GPP LCS SLgСервисы определения местоположения 16777345S6t3GPP S6tИнтерфейс между SCEF и HSS

Идентификатор по хопу

Идентификатор Hop by Hop — это 32-битное беззнаковое целое число (в сетевом порядке байтов), которое используется для сопоставления запросов и ответов, так как одно и то же значение используется в запросе и в ответе. Протокол Diameter требует, чтобы агенты ретрансляции и прокси поддерживали состояние транзакции, которое используется для обеспечения отказоустойчивости. Поддержание состояния транзакции означает, что при пересылке запроса его идентификатор Hop by Hop сохраняется; поле заменяется локально уникальным идентификатором, который восстанавливается до исходного значения при получении соответствующего ответа. Состояние запроса освобождается после получения ответа. Агент Diameter игнорирует полученные ответы, которые не соответствуют известному идентификатору Hop by Hop. В случае агентов перенаправления идентификатор Hop by Hop сохраняется в заголовке, когда агент Diameter отправляет сообщение-ответ.

Идентификатор от конца до конца

Идентификатор End-to-End – это 32-битное беззнаковое целое число (в сетевом порядке байтов), используемое для обнаружения дубликатов сообщений в сочетании с AVP Origin Host. При создании запроса идентификатор End-to-End устанавливается в локально уникальное значение. Идентификатор End-to-End не изменяется агентами Diameter какого-либо типа, и то же значение, использованное в соответствующем запросе, применяется в ответе.

Государственные машины

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

Потоки сообщений

Связь между двумя диаметральными узлами начинается с установления транспортного соединения (TCP или SCTP). Инициатор затем отправляет запрос на обмен возможностями (CER) другому узлу, который отвечает ответом на запрос об обмене возможностями (CEA). Для узлов, соответствующих RFC3588, TLS (Transport Layer Security) может быть опционально согласован. Для узлов, соответствующих RFC6733, согласование TLS может опционально происходить до обмена CER/CEA. После этого соединение готово к обмену прикладными сообщениями. Если в течение некоторого времени обмен сообщениями не осуществлялся, любая из сторон может отправить запрос "сторожевого таймера" устройства (DWR), на который другая сторона должна ответить ответом "сторожевого таймера" устройства. Любая из сторон может завершить связь, отправив запрос на разъединение (DPR), на который другая сторона должна ответить ответом на разъединение. После этого транспортное соединение может быть разорвано.

RFC

Протокол Diameter в настоящее время определен в следующих RFC IETF: устаревшие RFC обозначены зачеркнутым текстом. # Название Дата публикации Связанная статья Устарела по примечаниям RFC 3588 Diameter Base Protocol. Сентябрь 2003 RFC 6733 RFC 3589 Коды команд Diameter для проекта партнерства третьего поколения (3GPP) Release 5. Сентябрь 2003 RFC 4004 Diameter Mobile IPv4 Application. Август 2005 RFC 4005 Diameter Network Access Server Application. Август 2005 RFC 7155RFC 4006 Diameter Credit Control Application. Август 2005 RFC 8506 RFC 4072 Diameter Extensible Authentication Protocol (EAP) Application. Август 2005 RFC 4740 Diameter Session Initiation Protocol (SIP) Application. Ноябрь 2006 RFC 5224 Diameter Policy Processing Application. Март 2008 RFC 5431 Diameter ITU T Rw Policy Enforcement Interface Application. Март 2009 RFC 5447 Diameter Mobile IPv6: Поддержка взаимодействия Network Access Server и Diameter Server. Февраль 2009 RFC 5516 Регистрация кодов команд Diameter для системы Evolved Packet System (EPS) проекта партнерства третьего поколения (3GPP). Апрель 2009 RFC 5624 Параметры качества обслуживания для использования с Diameter. Август 2009 RFC 5719 Обновленные рекомендации IANA по распределению кодов команд Diameter. Январь 2010 RFC 6733 Diameter Base Protocol. Октябрь 2012 RFC 6737 The Diameter Capabilities Update Application. Октябрь 2012 RFC 7155 Diameter Network Access Server Application. Апрель 2014 RFC 8506 Diameter Credit Control Application. Март 2019