Програмування на c і ​​з

Відповідно до правил Інтернет, кожній зоні відповідає один первинний (primary) і один або кілька вторинних (secondary) серверів. Вторинні сервери вступають в роботу, коли первинний виявляється перевантаженим або виходить з ладу.

Вихідна інформація для первинного сервера DNS зберігається на його дисках, тобто завантажується при запуску з файлів. Вторинні сервери отримують інформацію від первинного. Процес отримання інформації вторинним сервером від первинного називається передачею зони (zone transfer). Як правило, оновлення інформації вторинного сервера (передача зони) відбувається один раз за кілька годин.

Первинні і вторинні сервери DNS незалежні. Інформація, яку вони містять, як правило, надлишкова. Мета наявності декількох серверів DNS в одній і тій же зоні - забезпечити надійність функціонування. Збій в роботі одного з серверів DNS не спричинить за собою повної зупинки роботи цієї служби.

Якщо сервер не в змозі обслужити запит, тобто домен знаходиться поза його зони, подальша його поведінка залежить від типу запиту клієнта. Перетворювач встановлює один з двох типів запитів. Спершу він просить сервер провести повне перетворення. В офіційній термінології цей тип запиту називається «рекурсивне виконання * (recursive resolution). Якщо клієнт запитує рекурсивне виконання і сервер не в змозі виконати перетворення, він повинен звернутися до того сервера, який зможе виконати запит, а потім повертає відповідь клієнту.

Взаємодія між серверами DNS

Розглянемо наступну невелику програму, QLookup (Quick Lookup). Вона демонструє основні кроки, які потрібно зробити для звернення до сервера імен доменів. З програми викинуто все, що не стосується справи. Залишені тільки деталі, необхідні для роботи з функціями gethostbyaddr і gethostbyname. Жорстко задані значення змінних і панелі повідомлень звільняють нас від необхідності програмувати користувальницький інтерфейс Windows. Програма детально обговорюється в цьому розділі, і тут же наведено її вихідний текст:

Лістинг 1 (QLOOKUP.CPP)

Оператор в першому рядку лістингу включає файл заголовків функцій інтерфейсу Windows Sockets - WINSOCK.DLL.

#include ". Winsock.h"

Ви знаєте, що файл winsock.h необхідно включати в кожну програму, яка використовує інтерфейс програмування Windows Sockets. У ньому задані константи та визначено прототипи функцій для всього Winsock API.

Відразу після оператора, що включає winsock.h, слідують п'ять операторів, які задають значення необхідних для роботи констант:

Константа PROG_NAME визначає назву (короткий опис) програми, яке можна використовувати в подальшому. Якщо ви вирішите змінити ім'я програми, просто замініть значення цієї константи на інше.

Наступні кілька рядків лістингу QLookup починають визначення функції WinMain (вона потрібна для всіх програм під Windows) і визначають три локальні змінні: dwIPAddr, wsaData і IpHostEnt.

Схожі статті