DNS запити
Зміст
Формат повідомлень DNS
Для DNS запиту і для DNS відгуку використовується однаковий формат. На малюнку показаний загальний формат DNS повідомлення.
Загальний формат DNS запиту і відповіді.
Повідомлення містить фіксований 12-байтний заголовок, за яким слідують чотири поля змінної довжини.
Значення в полі ідентифікації (identification) встановлюється клієнтом і повертається сервером. Це поле дозволяє клієнту визначити, на який запит прийшов відгук.
16-бітове поле прапорів (flags) поділено на кілька частин, як показано на малюнку
Поле прапорів (flags) в заголовку DNS.
Опис кожного поля ми почнемо з украй лівих бітів. QR (типу повідомлень), 1-бітове поле: 0 означає - запит, 1 позначає - відгук. opcode (код операції), 4-бітове поле. Звичайне значення 0 (стандартний запит). Інші значення - це 1 (інверсний запит) і 2 (запит статусу сервера). AA - 1-бітовий прапор, який означає "авторитетний відповідь" (authoritative answer). Сервер DNS має повноваження для цього домену в розділі питань. TC - 1-бітове поле, яке означає "обрізано" (truncated). У разі UDP це означає, що повний розмір відгуку перевищив 512 байт, проте були повернуті тільки перші 512 байт відгуку. RD - 1-бітове поле, яке означає "потрібно рекурсія" (recursion desired). Біт може бути встановлений в запиті і потім повернутий у відгуку. Цей прапор вимагає від DNS сервера обробити цей запит самому (тобто сервер повинен сам визначити необхідний IP адреса, а не повертати адресу іншого DNS сервера), що називається рекурсивним запитом (recursive query). Якщо цей біт не встановлений і запитуваний сервер DNS не має авторитетного відповіді, запитуваний сервер поверне список інших серверів DNS, до яких необхідно звернутися, щоб отримати відповідь. Це називається повторюваним запитом (iterative query). Ми розглянемо приклади обох типів запитів у наступних прикладах. RA - 1-бітове поле, яке означає "рекурсія можлива" (recursion available). Цей біт встановлюється в 1 у відгуку, якщо сервер підтримує рекурсію. Ми побачимо в наших прикладах, що більшість серверів DNS підтримують рекурсію, за винятком декількох кореневих серверів (Конєв сервера не в змозі обробляти рекурсивні запити з-за своєї завантаженості). Це 3-бітове поле повинно бути дорівнює 0. rcode це 4-бітове поле коду повернення. Звичайні значення: 0 (немає помилок) та 3 (помилка імені). Помилка імені повертається тільки від повноважного сервера DNS і означає, що ім'я домену, зазначеного в запиті, не існує.
Наступні чотири 16-бітних поля вказують на кількість пунктів у чотирьох полях змінної довжини, які завершують запис. У запиті кількість питань (number of questions) звичайно дорівнює 1, а інші три лічильники рівні 0. У відгуку кількість відповідей (number of answers) щонайменше дорівнює 1, а інші два лічильника можуть бути як нульовими, так і ненульовими.
Розділ питань в DNS запиті
Формат кожного питання в розділі питань (question) показаний на малюнку 4. Зазвичай присутній тільки одне питання.
Ім'я запиту (query name) це шукане ім'я. Воно виглядає як послідовність з однієї або кількох міток. Кожна мітка починається з 1-байтового лічильника, який містить кількість наступних за ним байт. Назва закінчується байтом рівним 0, який є міткою з нульовою довжиною. І є, у свою чергу, міткою кореня. Кожен лічильник байтів повинен бути в діапазоні від 0 до 63, так як довжина мітки обмежена 63 байтами.
Формат розділу питання (question) в запиті DNS.
(Далі в цьому розділі ми побачимо, що байт лічильник з двома старшими бітами, встановленими в 1, значення від 192 до 255, використовується в схемі із стискуванням.) На відміну від багатьох інших форматів повідомлень, які ми розглянули, цьому полю дозволено закінчуватися на обмежувачі не рівному 32 бітам. Заповнення не використовується.
На малюнку 5 показано, як зберігається ім'я домену gemini.tuc.noao.edu.
Рис.5. Подання імені домену gemini.tuc.noao.edu.
У кожного питання є тип запиту (query type), а кожен відгук (званий записом ресурсу, про що ми поговоримо нижче) має тип (type). Існує близько 20 різних значень, деякі з яких в даний час вже застаріли. У таблиці 2 показані деякі з цих значень. Тип запиту це надмножество (безліч, підмножиною якого є дане безліч) типів: два з показаних значень, можуть бути використані тільки в питаннях.
Таблиця 2. Значення type і query type для DNS питань і відповідей. Ім'я Цифрове значення Опис тип (type)? тип запиту (query type)? A 1 IP адреса · · NS 2 DNS-сервер · · CNAME 5 канонічне ім'я · · PTR 12 запис покажчика · · HINFO 13 інформація про хості · · MX 15 запис про обмін поштою · · AXFR 252 запит на передачу зони ·
- Або ANY
255 запит всіх записів ·
Найбільш поширений тип запиту - тип A, який означає, що необхідний IP адреса для запитуваної імені (query name). PTR запит вимагає імена, відповідні IP адресою. Це запит покажчика, який ми опишемо в розділі "Запити покажчика" цієї глави. Інші типи запитів ми опишемо в розділі "Записи ресурсів"
Клас запиту (query class) зазвичай дорівнює 1, що вказує на адреси Internet. (У деяких випадках підтримуються не-IP значення.)
Частина запису ресурсу у відгуку DNS
Останні три поля в DNS повідомленні це відповіді (answers), повноваження (authority) та додаткова інформація (additional information), загальний формат називається записом ресурсу (RR - resource record). На малюнку 6 показаний формат запису ресурсу.
Рис.6. Формат запису ресурсу DNS.
Ім'я домену (domain name) це ім'я, яким відповідають такі дані ресурсу. Формат імені домену той же, що ми описали раніше для поля імені запиту (query name) (малюнок 5).
Тип (type) вказує на один з типів кодів RR. Це те ж саме, що і значення типу запиту (query type), які ми описали раніше. Для даних Internet клас (class) зазвичай встановлений в 1.
Поле час життя (time-to-live) це кількість секунд, протягом яких RR може бути кешовані клієнтом. Зазвичай TTL RR дорівнює 2 днях.
Довжина запису ресурсу (resource data length) вказує на кількість даних ресурсу (resource data). Формат цих даних залежить від типу (type). Для типу рівного 1 (запис A) дані ресурсу - це 4-байтний IP адреса. Зараз ми описали основний формат DNS запитів і відгуків. Запити покажчика
Для розуміння роботи DNS важливо знати, як обробляються запити покажчика - заданий IP адреса, повертається ім'я (або імена), відповідне цією адресою.
По-перше, повернемося до малюнка 1 і розглянемо домен верхнього рівня arpa, а також домен in-addr, що знаходиться нижче. Коли організація вступає в Internet і отримує частину прострастве імен DNS, як, наприклад, noao.edu, вона також отримує право на частину простору імен in-addr.arpa, відповідне її IP адресами в Internet. У даному випадку noao.edu - це мережа класу B з ідентифікатором 140.252. Рівень дерева DNS нижче in-addr.arpa повинен бути першим байтом IP адреси (140 в даному прикладі), наступний рівень це наступний байт IP адреси (252), і так далі. Однак пам'ятайте, що імена пишуться, знизу-вверх по дереву DNS. Це означає, що DNS ім'я хоста sun з IP адресою 140.252.13.33 буде 33.13.252.140.in-addr.arpa.
Ми повинні написати 4 байти IP адреси задом наперед, тому що повноваження делегуються на основі ідентифікаторів мереж: перший байт адреса класу A, перший і другий байти адреси класу B, а перший, другий і третій байти це адреси класу C. Перший байт IP адреси повинен бути безпосередньо під міткою in-addr, проте повні імена доменів (FQDN) пишуться знизу вгору по дереву. Якби FQDN писалися згори донизу, DNS ім'я для IP адреси було б arpa.in-addr.140.252.13.33, однак у цьому випадку FQDN для хоста повинно бути edu.noao.tuc.sun.
Без окремих гілок дерева DNS здійснити перетворення адресу - ім'я, (зворотне перетворення) можна було б тільки починаючи від кореня дерева і переглядаючи кожен домен верхнього рівня. При сьогоднішньому розмірі Internet це могло б зайняти дні або навіть тижні. Використання ж in-addr.arpa прийнятний варіант, незважаючи на переставлені місцями байти в IP адресу та спеціальні домени, іноді вносять певну плутанину.
Проте зустрітися з доменом in-addr.arpa і переставленими байтами в IP адресі можна тільки тоді, коли ми спілкуємося з DNS безпосередньо, використовуючи, такі програми як host або переглядаючи пакети з використанням tcpdump. При роботі програми, Розбирач (gethostbyaddr) зазвичай сприймає IP адреса і повертає інформацію про хості. Перестановка байтів і додавання домену in-addr.arpa здійснюється розбирачем автоматично. На латинице
Записи ресурсів
Записи DNS
Записи DNS, або Ресурсні записи (англ. Resource Records, RR) - одиниці зберігання і передачі інформації в DNS. Кожна ресурсна запис складається з наступних полів:
- Ім'я (NAME) - доменне ім'я, до якого прив'язана або якому «належить» дана ресурсна запис;
- TTL (Time To Live) - допустимий час зберігання даної ресурсної записи в кеші не відповідального DNS-сервера;
- Тип (TYPE) ресурсного запису - визначає формат і призначення даного ресурсного запису;
- Клас (CLASS) ресурсного запису; теоретично вважається, що DNS може використовуватися не тільки з TCP / IP, але і з іншими типами мереж, код у полі клас визначає тип мережі;
- Довжина поля даних (RDLEN);
- Поле даних (RDATA), формат і зміст якого залежить від типу запису.
Найбільш важливі типи DNS-записів:
- Запис A (address record) або запис адреси, що зв'язує ім'я хоста з IP адресою. Наприклад, запит A-запису на ім'я referrals.icann.org поверне його IP адресу - 192.0.34.164
- Запис AAAA (IPv6 address record) зв'язує ім'я хоста з адресою протоколу IPv6. Наприклад, запит AAAA-запису на ім'я K.ROOT-SERVERS.NET поверне його IPv6 адресу - 2001:7 fd:: 1
- Запис CNAME (canonical name record) або канонічний запис імені (псевдонім) використовується для перенаправлення на інше ім'я
- Запис MX (mail exchange) або поштовий обмінник вказує сервер обміну поштою для даного домену.
- Запис NS (name server) вказує на DNS-сервер для даного домену.
- Запис PTR (pointer) або запис покажчика, що зв'язує IP адресу хоста з його канонічним ім'ям. Запит у домені in-addr.arpa на IP хоста в reverse формі поверне ім'я (FQDN) даного хоста.
- Запис SOA (Start of Authority) або початковий запис зони вказує, на якому сервері зберігається еталонна інформація про даний домен, містить контактну інформацію особи, відповідального за дану зону, таймінги (параметри часу) кешування зонної інформації та взаємодії DNS-серверів.
- Запис SRV (server selection) вказує на сервери для сервісів, використовується, зокрема, для Jabber і Active Directory.
Протокол DNS для роботи використовує 53-й TCP-або UDP-порт для відповідей на запити. Традиційно запити і відповіді відправляються у вигляді однієї UDP датаграми. TCP використовується для AXFR-запитів.
Прямий запит
Прямий запит (forward) — запит на перетворення доменне ім'я (символьної адреси) хоста в числову IP-адресу.
Зворотний запит
Зворотний запит (reverse) — запит на перетворення IP-адреси в ім'я хоста.
DNS використовується в першу чергу для перетворення символьних імен в IP-адреси, але він також може виконувати зворотний процес. Для цього використовуються вже наявні кошти DNS. Справа в тому, що із записом DNS можуть бути зіставлені різні дані, в тому числі і будь-яке символьне ім'я. Існує спеціальний домен in-addr.arpa, записи в якому використовуються для перетворення IP-адрес в символьні імена.
Наприклад, для отримання DNS-імені для адреси 11.22.33.44 потрібно запросити у DNS-сервера запис 44.33.22.11.in-addr.arpa, і той поверне відповідне символьне ім'я. Зворотний порядок запису частин IP-адреси пояснюється тим, що в IP-адресах старші біти розташовані на початку, а в символьних DNS-іменах старші (що знаходяться ближче до кореня) частини розташовані в кінці.
Рекурсивний запит
Рекурсивний запит передбачає отримання остаточної відповіді від сервера, до якого він спрямований. Рекурсію виконує сервер.
Ітеративний запит
Ітеративний запит - припускає (допускає) виконання рекурсії клієнтом.