4. Формат NAPTR RR
4.1. Формат пакета
Формат пакетов NAPTR RR показан на рисунке. Код типа DNS для NAPTR имеет значение 35.
1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ORDER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | PREFERENCE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / FLAGS / +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / SERVICES / +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / REGEXP / +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / REPLACEMENT / / / +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Определения <character-string> (строка символов) и <domainname> (доменное имя) приведены в RFC 1035 [7].
- ORDER
- 16-битовое целое число без знака, задающее порядок, в котором должны обрабатываться записи NAPTR для точного представления упорядоченного списка Правил. Упорядочивание идет от меньших значений к большим. Если две записи имеют одинаковое значение порядка, считается, что они являются одним правилом и выбор следует делать на основе комбинации значений Preference и Services
- PREFERENCE
Хотя это поле и носит название «предпочтение» в соответствии с принятой в DNS терминологией, в Алгоритме DDDS оно является эквивалентом значения Priority. Это 16-битовое целое число без знака, которое задает порядок, в котором следует обрабатывать записи NAPTR с одинаковыми значениями поля Order (младшие номера обрабатываются раньше старших). Это похоже на поле Preference в записи MX и используется так, чтобы администратор домена мог направить клиентов на более подходящие хосты или менее отягощенные протоколы. Клиент может обращаться к записям с более высокими значениями поля Preference, если у клиента есть достаточные основания для этого (например, отсутствие поддержки некоторых протоколов или служб).
Важное различие между полями Order и Preference заключается в том, что после того, как найдено соответствие, для клиента недопустимо обращаться к записям с другими значениями поля Order, но можно обрабатывать записи с одинаковыми значениями Order и различными значениями Preferences. Единственное исключение из этого правила указано в Примечании к спецификации алгоритма DDDS по части разрешения клиенту использовать более сложное определение сервиса между п. 3 и п. 4 в алгоритме. Значение Preference используется для обозначения более высокого качества сервиса в правилах, которые рассматриваются как одинаковые с точки зрения передачи полномочий, но не с точки зрения распределения нагрузки.
Важно отметить, что DNS поддерживает несколько механизмов распределения нагрузки и если распределение нагрузки требуется как сервис, для распределения нагрузки следует использовать такие средства, как записи SRV или множественные записи типа A.
- FLAGS
Строка символов (<character-string>), содержащая флаги для контроля деталей перезаписи и интерпретации полей записи. Флаги представляют собой одиночные буквы от A до Z или цифры от 0 до 9. регистр букв во внимание не принимается. Поле флагов может быть пустым.
Приложение само задает, как оно использует эту Базу данных для определения флагов в этом поле. Приложение должно определить, какие из флагов трактуются как завершающие.
- SERVICES
- Строка символов (<character-string>), задающая Параметры сервиса (Service Parameters), применимые к данному пути передачи полномочий. Значения этого поля определяются спецификацией Приложения.
- REGEXP
Строка символов (<character-string>), содержащая выражение для замены, которое применяется к исходной строке, сохраняемой клиентом для конструирования следующего искомого доменного имени. Синтаксис этого поля описан в спецификации Алгоритма DDDS.
Как указано в алгоритме DDDS, регулярные выражения недопустимо использовать в кумулятивной манере — они должны применяться исключительно к исходной строке, сохраняемой клиентом, а не к доменным именам, созданным предыдущей перезаписью NAPTR. Второй вариант представляется заманчивым для некоторых приложений, но опыт показывает что такой вариант подвержен отказам, склонен к возникновению ошибок и очень сложен в отладке.
- REPLACEMENT
Строка <domain-name>, которая является следующим доменным именем для запроса в зависимости от возможных значений поля флагов. Это поле используется в тех случаях, когда регулярное выражение представляет собой простую операцию замены. Любое значение в этом поле должно быть полным доменным именем. Сокращение имен для этого поля не применяется.
Это поле вместе с полем REGEXP создают Выражение для замены в Алгоритме DDDS. Существование этого поля обусловлено историческими причинами, связанными с возможностью сокращения имен в DNS. Упомянутые поля являются взаимоисключающими. Если возвращена запись, имеющая значения для обоих полей, это рассматривается как ошибка и следует игнорировать результат или возвращать сообщение об ошибке.