Систе́ма доме́нних іме́н (, DNS) — ієрархічна розподілена система перетворення імені хоста (комп'ютера або іншого мережевого пристрою) в IP-адресу.
Кожен комп'ютер в Інтернеті має свою власну унікальну адресу — число, яке складається з чотирьох (у протоколі IPv4) або шістнадцяти (у протоколі IPv6) байтів. Оскільки запам'ятати десятки чи навіть сотні номерів — важка процедура, то всі (чи майже всі) машини мають імена, запам'ятати які (особливо якщо знати правила утворення імен) значно легше.
Уся система імен в Інтернеті — ієрархічна. Це зроблено для того, щоб не підтримувати одне централізоване джерело, а роздати владу на місця.
Правила формування імен
Повноцінне доменне ім'я () машини можна розбити на дві частини — ім'я області-домену та власне ім'я машини. Наприклад, m30.example.org — повне доменне ім'я машини m30, яка перебуває у домені example.org.
За порядок у доменах, як правило, відповідає певний комп'ютер, користувачі-адміністратори якого слідкують за тим, щоб не було, наприклад, різних машин з однаковими ІР-адресами. Наприклад, відповідальність за область-домен example.org покладається на машину alpha.example.org Ця влада делегується зверху вниз від машини ns.example.net, яка, наприклад, відповідає за домен example.org. В свою чергу, відповідальність за область ua делегована машині зверху від так званих кореневих серверів (root server).
Всю цю систему можна уявити у вигляді перевернутого дерева. Список імен доменів верхнього рівня на сайті IANA. Повний список географічних областей, в основному, відповідає двобуквеним ISO-кодам країн і його можна знайти, наприклад, на WWW-сервері ISOC (http://www.isoc.org).
Необхідно розрізняти доменне ім'я, та поштову адресу. В поштовій адресі повинен бути знак «@», який в економіці має назву «комерційне at», а в електронній пошті — «равлик». Цей знак у поштовій адресі відокремлює ім'я поштової скриньки від доменного імені. Знак «@» вперше у 1971 році використав Рей Томлінсон, щоб відокремити імена користувача і комп'ютера, коли він відправив повідомлення з одного ДЕК-10 (Digital Equipment Corporation) комп'ютера на інший ДЕК-10. Обидва комп'ютери були розміщені поруч один з одним.
Коли мережа Інтернет була молода та невелика, таблиці відповідності імен та адрес зберігалися у звичайному текстовому файлі, який періодично просто розсилався всім учасникам електронною поштою. Після того, які кількість машин значно збільшилася, така схема перестала ефективно працювати і програмісти університету штату Каліфорнія в Берклі спроектували і написали програму BIND (Berkeley Internet Name Domain), яка відповідає на запити машин користувачів, які стосувалися імен та ІР-адресу.
Служба імен DNS (Domain Name System) — це розподілена база даних доволі простої структури. Для початкового знайомства можна вважати, що це кілька таблиць, у яких записано: яку ІР-адресу має машина з певним іменем; яке ім'я має машина з визначеною адресою; що це за комп'ютер і яка операційна система встановлена на ньому; куди потрібно направляти електронну пошту для користувачів цієї машини; які псевдоніми є у даної машини.
Для прикладу розглянемо випадок, коли користувач посилає пошту з машини example.com користувачу за адресою [email protected]. При встановленні на машину протоколів TCP/IP системний адміністратор вказує ІР-адресу комп'ютера — найближчого серверу імен. Поштова програма подає цьому найближчому серверу запит: «Куди посилати пошту для example.org» Якщо найближчий сервер не може відповісти, то він, в свою чергу, посилає запит до більш «старшого» серверу. Нарешті, стає зрозумілим, що всю пошту для області example.org необхідно відправляти на машину alpha.example.org або relay2.example.net. Разом з цим відповіді містять ще адресу цієї машини. Поштова програма зв'язується з цим комп'ютером (використовуючи не ім'я, а адресу) та передає йому пошту. Всі ці переговори та відправка пошти, як правило, відбувається протягом кількох секунд і користувач не помічає цього. Якщо машина example.org недоступна то тоді пошта на час, в якій неможливо зв'язатися з машиною example.org (наприклад під час профілактики каналу зв'язку) чекає своєї черги на пересилку на машині relay2.example.net.
Це характерна для Internet-програм поведінка. Як правило, поштові програми подають доволі багато запитів службі DNS, і ці питання доволі складні. У більшості випадків у програмах користувачів намагаються дізнатися лише одне — яка ІР-адреса у машини з відповідним іменем. Зрозуміло, що всередині цієї системи імен існує маса нюансів, правил та хитрощів. Докладніше з ними можна ознайомитися в описах стандартів Internet або в спеціальних книгах.
Компанія «Хостмайстер» спільно з ICANN в Україні ввела у дію локальний кореневий сервер DNS, що містить інформацію про домени верхнього рівня. Сервер є «дзеркалом» одного з 13-кореневих серверів ICANN, відомого під назвою «L-root».
Ієрархічна структура системи DNS Як вже було відмічено, існує домен кореневого рівня, який позначається крапкою .. Наступний рівень ієрархії — це домени верхнього рівня. Вся структура служби DNS є ієрархічною. Існують домени першого, другого, третього, n-го рівнів.
Розглянемо доменне ім'я комп'ютера department.firma.isp.ua. Тут доменом першого рівня є ua, другого — isp, третього — firma, і четвертого — department.
Типи серверів DNS
Існує три основні типи серверів DNS, які відрізняються покладеними на них завданнями: основний сервер DNS; резервний (вторинний) сервер DNS; кешуючий сервер DNS.
Основний сервер DNS керує зоною повноважень. Якщо потрібно додати/видалити домен або вузол або якось інакше модифікувати зону, зміни потрібно проводити на основному сервері DNS. Через певний час, який залежить від налаштувань сервера, основний сервер передасть зону резервному серверу DNS. Дане явище називається трансфером зони.
Що ж до резервних серверів, то повинен бути хоч би один резервний сервер DNS. Тому є декілька причин: якщо клієнтів багато, то наявність резервного сервера DNS дозволить знизити навантаження на основний сервер DNS і прискорити доступ фізично віддалених від основного сервера клієнтів до бази даних доменних імен.
Характеристики DNS DNS володіє такими характеристиками: Розподільність адміністрування. Відповідальність за різні частини ієрархічної структури несуть різні люди або організації. Розподільність зберігання інформації. Кожен вузол мережі в обов'язковому порядку повинен зберігати тільки ті дані, які входять в його зону відповідальності та (можливо) адреси кореневих DNS-серверів. Кешування інформації. Вузол може зберігати деяку кількість даних не зі своєї зони відповідальності, для зменшення навантаження на мережу. Ієрархічна структура, в якій всі вузли об'єднані в дерево, і кожен вузол може або самостійно визначає роботу нижчестоящих вузлів, або делегувати (передавати) їх іншим вузлам. Резервування. За зберігання та обслуговування своїх вузлів (зон) відповідають (зазвичай) кілька серверів, розділені як фізично, так і логічно, що забезпечує збереження даних і продовження роботи навіть у разі збою одного з вузлів.
DNS важлива для роботи Інтернету, так як для з'єднання з вузлом необхідна інформація про його IP-адресу, а для людей простіше запам'ятовувати буквені (зазвичай осмислені) адреси, ніж послідовність цифр IP-адреси. У деяких випадках це дозволяє використовувати віртуальні сервери, наприклад, HTTP-сервери, розрізняючи їх по імені запиту. Спочатку перетворення між доменними та IP-адресами вироблялося з використанням спеціального текстового файлу hosts, який складався централізовано й автоматично розсилався на кожну з машин у своїй локальній мережі. З ростом Мережі виникла необхідність в ефективному, автоматизованому механізмі, яким і стала DNS.
DNS була розроблена Полом Мокапетрісом в 1983 році; оригінальний опис механізмів роботи містяться в RFC 882 і RFC 883. У 1987 публікація RFC 1034 і RFC 1035 змінила специфікацію DNS і скасувала RFC 882, RFC 883 і RFC 973 як застарілі.
Термінологія і принципи роботи
Ключовими поняттями DNS є:
Домен (англ. domain — область) — частина простору ієрархічних імен мережі Інтернет, що обслуговується групою серверів доменних імен (DNS-серверів) та централізовано адмініструється. DNS-сервери зберігають інформацію про вузли, імена яких належать домену і виконують трансляцію їхніх імен в адреси. Кожний домен має унікальне ім'я, а кожен комп'ютер, підключений до Інтернету, має, як правило, доменне ім'я. Домени мають між собою ієрархічні стосунки. Два домени, що розташовані на сусідніх рівнях ієрархії, називаються відповідно доменом вищого та нижчого рівнів. Домени найвищого (верхнього) рівня можуть бути сформовані за організаційним або географічним ознаками. Домени, сформовані за географічним ознаками, об'єднують вузли, що належать конкретній державі. За географічними ознаками об'єднуються в основному комп'ютери, що містяться на території США. Піддомен () — підлеглий домен (наприклад, wikipedia.org — піддомен домену org, а uk.wikipedia.org — домену wikipedia.org). Теоретично такий розподіл може досягати глибини в 127 рівнів, а кожна мітка може містити до 63 символів, поки загальна довжина разом з крапками не досягне 254 символів. Але на практиці реєстратори доменних імен використовують більш суворі обмеження. Наприклад, якщо у вас є домен виду mydomain.ua, ви можете створити для нього різні піддомени виду mysite1.mydomain.ua, mysite2.mydomain.ua і т. д. Ресурсний запис — одиниця зберігання і передачі інформації в DNS. Кожний ресурсний запис має ім'я (тобто прив'язаний до певного доменного імені, вузлу в дереві імен), тип і поле даних, формат і зміст якого залежить від типу. Зона — частина дерева доменних імен (включаючи ресурсні записи), що розміщується як єдине ціле на деякому сервері доменних імен (DNS-сервері, див. нижче), а частіше — одночасно на декількох серверах (див. нижче). Метою виділення частини дерева в окрему зону є передача відповідальності (див. нижче) за відповідний домен іншій особі або організації. Це називається делегуванням (див. нижче). Як зв'язкова частина дерева, зона всередині теж являє собою дерево. Якщо розглядати простір імен DNS як структуру із зон, а не окремих вузлів/імен, теж виходить дерево; виправдано говорити про батьківських і дочірніх зонах, про старших і підлеглих. На практиці, більшість зон 0-го і 1-го рівня ('.', ua, com, …) складаються з єдиного вузла, якому безпосередньо підпорядковуються дочірні зони. У великих корпоративних доменах (2-го і більше рівнів) іноді зустрічається утворення додаткових підпорядкованих рівнів без виділення їх у дочірні зони. Делегування — операція передачі відповідальності за частину дерева доменних імен іншій особі або організації. За рахунок делегування в DNS забезпечується розподільність, адміністрування та зберігання. Технічно делегування виражається у виділенні цієї частини дерева в окрему зону, і розміщенні цієї зони на DNS-сервері (див. нижче), керованому цією особою чи організацією. При цьому в батьківську зону включаються «склеюючі» ресурсні записи (NS і А), що містять покажчики на DNS-сервери дочірньої зони, а вся інша інформація, що належить до дочірньої зони, зберігається вже на DNS-серверах дочірньої зони. DNS-сервер — програма, призначена для відповідей на DNS-запити за відповідним протоколом. Також DNS-сервером можуть називати хост, на якому запущено відповідну програму. DNS-клієнт (від англ. Domain Name System-client — доменних імен система — клієнт) — програма або модуль в програмі, що забезпечує з'єднання із DNS-сервером для визначення IP-адреси по його доменному імені. Авторитетність () — ознака розміщення зони на DNS-сервері. Відповіді DNS-сервера можуть бути двох типів: авторитетні (коли сервер заявляє, що сам відповідає за зону) і неавторитетні (англ. Non-authoritative), коли сервер обробляє запит, і повертає відповідь інших серверів. У деяких випадках замість передачі запиту далі DNS-сервер може повернути вже відоме йому (за запитами раніше) значення (режим кешування).