3. Формат пакетов
В поле данных пакетов UDP [4] инкапсулируется по одному пакету RADIUS Accounting и поле UDP Destination Port для протокола RADIUS должно содержать десятичное значение 1813.
При генерации откликов номера портов отправителя и получателя меняются местами.
В этом документе содержится спецификация протокола RADIUS. Ранние версии RADIUS Accounting использовали порт UDP 1646, что приводило к конфликтам со службами sa-msg-port. Официально выделенный для протокола RADIUS Accounting порт имеет номер 1813.
Ниже показан формат типового пакета RADIUS. Поля передаются слева направо и сверху вниз.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Code | Identifier | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Authenticator | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Attributes ... +-+-+-+-+-+-+-+-+-+-+-+-+-
- Code
Поле Code имеет размер 1 октет и содержит идентификатор типа пакета RADIUS. При получении пакета с некорректным значением поля Code такой пакет отбрасывается без уведомления.
Десятичные значения кодов для пакетов RADIUS Accounting показаны ниже.
- 4 Accounting-Request
- 5 Accounting-Response
- Identifier
- Поле Identifier размером 1 октет используется для сопоставления запросов с откликами. Сервер RADIUS может детектировать дубликаты запросов по совпадению IP-адреса отправителя, номеру порта отправителя и значению поля Identifier, если такие пакеты получены в течение короткого промежутка времени.
- Length
- Поле Length имеет размер 2 октета и показывает размер пакета с учетом полей Code, Identifier, Length, Authenticator и Attribute. Октеты за пределами указанного в поле размера значения должны трактоваться как заполнение и оставляться без внимания. Если размер пакета меньше значения поля Length, пакет должен отбрасываться без уведомления. Минимальный размер пакета составляет 20, а максимальный — 4095.
- Authenticator
- Поле Authenticator имеет размер 16 октетов. Старший октет поля передается первым. Значение поля применяется для аутентификации при обмене сообщениями между клиентом и сервером RADIUS accounting.
- Request Authenticator
В пакетах Accounting-Request значение атрибута Authenticator, называемое Request Authenticator, представляет собой 16-октетное хэш-значение MD5 [5].
NAS и сервер RADIUS используют разделяемый ключ. Поле Request Authenticator в пакетах Accounting-Request содержит необратимое хэш-значение MD5, рассчитанное для потока октетов Code + Identifier + Length + 16 нулевых октетов + атрибуты запроса + разделяемый ключ (+ означает конкатенацию значений). 16-октетное хэш-значение MD5 помещается в поле Authenticator пакета Accounting-Request.
Отметим, что атрибут Request Authenticator в пакетах Accounting-Request вычисляется несколько иначе, нежели для атрибут Request Authenticator в пакетах RADIUS Access-Request, поскольку пакеты Accounting-Request не содержат атрибута User-Password.
- Response Authenticator
- Поле Authenticator в пакетах Accounting-Response называется Response Authenticator и содержит необратимое хэш-значение MD5, рассчитанное для потока октетов полей Code, Identifier, Length, значения Request Authenticator из пакета Accounting-Request, на который передается отклик, атрибутов отклика и разделяемого ключа. Полученное в результате 16-октетное хэш-значение MD5 помещается в поле Authenticator пакета Accounting-Response.
- Attributes
- Пакет может включать более одного экземпляра атрибутов некоторых типов. В таких случаях порядок атрибутов следует сохранять. Порядок разнотипных атрибутов значения не имеет.