Тема 21.

DNS система за именоване. Процес на резолвинг на имената.


Страницата е писана от някой, който дори не е ходил на тези лекции, така че е само за обща информация - не знам какви са били лекциите по тази тема и колко от това той иска да знаем. А, да - и е недописана и непълна :)
Докато тази тема стане напълно готова, можете да четете от файла на Иван Иванов.


Както учихме до сега, в мрежата постоянно щъкат всякакви пакети, които благодарение на протоколите за рутиране могат бързо да стигнат до другият край на земното кълбо. За хората обаче не е така лесно да помнят IP адресите, с които работят компютрите/рутерите и прочее. За човек е много по-лесно да запомни някакво име (примерно fmi.wikidot.com вместо 67.228.37.26). Затова се появява естествената нужда да може да се преминава от едното към другото, защото компютрите работят с числа, а не с адреси и така се появява DNS протокола. DNS (Domain Name Service) служи за да може на съответния адрес в интернет да се присвои IP адреса, на който той отговаря, за да могат рутерите да извършват заявките към него.

Процес на резолвинг на имената

Когато напишете в браузъра си www.google.bg, първото нещо, което прави компютърът, е да си провери кеш таблицата за информация за подадения адрес. Ако там има такава (от предишно отваряне на сайта), той директно използва записания в нея IP адрес, за да изпраща заявки към www.google.bg. Когато обаче сайтът се отваря за пръв път, или срокът на кеша е изтекъл, системата няма такива записи. Тогава се преглежда hosts файлът. Той съдържа изрични записи, свързващи домейн имена с IP адреси.

Ако в hosts няма подходящ запис, се прави DNS запитване към DNS сървъра, зададен като Primary DNS Server в настройките на мрежата. Когато получи заявката, DNS сървърът от своя страна проверява собствения си кеш за вече съществуващи записи за този адрес и ако намери в DNS Reply връща към клиента. В общия случай, DNS сървъра, който отговаря на тези запитвания не е свързан директно и не отговаря за съответния сайт (тоест, ние питаме сървъа на доставчика си, а не сървъра на www.google.bg) и затова връща неоторизиран отговор (не питайте - после ще видите). В случая, когато няма такива записи в кеш таблицата му, той трябва да разбере адреса на подадения му сайт.

За целта DNS сървърът може от своя страна да препрати запитването към друг сървър рекурсивно, като го пита за конкретен отговор и да остави другия сървър да направи проучването (или да върне директно от кеш таблицата си). Този начин се нарича Forwarding - сървърът само препраща запитването към друг сървър, който може да знае повече, и изисква от него да му върне конкретен отговор. Така сървърите могат да си препращат запитването няколкократно, но в крайна сметка, ако никъде по пътя в кеш таблицата на някой сървър не се намери запис за търсения сайт, то един от сървърите по пътеката ще трябва да е настроен да направи проучването от свое име (вместо само да пита комшиите). Когато такъв сървър получи запитване и установи, че кеш таблицата му не съдържа отговора той започва да разпитва глобалните сървъри, които са йерархични. В случая със запитването за www.google.bg (трябва да се отбележи, че всъщност всеки адрес завършва с "." накрая, символизираща DNS root сървъра, която ние обикновено можем да не пишем - така че адресът е всъщност www.google.bg. ) сървърът първо праща запитване към DNS сървърите на "." домейна (те са предварително въведени и той знае адресите им). Запитването е за www.google.bg. . Тези сървъри, обаче, не могат да му дадат конкретен отговор, а само казват "не знам адреса, но мога да ти кажа някой, който може да знае", и връщат адресите на DNS сървърите на по-ниското ниво (.bg в този случай). Сървърите на "." знаят за всички Top Level Domains (.com , .bg , .org и т. н.) . Като разбере адреса на домейна .bg , сървърът пита и него за www.google.bg.. Сървърът на домейна, знаейки всички DNS server-и и директно свързани сайтове, завършващи на .bg. препраща нашия сървър да пита DNS сървъра на .google.bg. . Този сървър, вече е локално свързан към сайта, който търсим, и може да прати оторизиран отговор за адреса на сайта, който търсим. Така нашият сървър (или последният във веригата, дето писах по-нагоре) връща информацията надолу по веригата, докато стигне до нашия компютър и той разбере кой е адресът на www.google.bg и вече може да комуникира с него директно. Междувременно, докато тази информация се препраща по DNS сървърите, всеки от тях я записва в кеша си, за да може, когато някой друг попита за същия сайт, те да не правят проучването наново. Същото прави и нашият компютър. Информацията в кеша след известно време (изтичане на таймер) става невалидна и се изтрива и трябва да се проучи отново (все пак не може да е вечна, защото google, като си смени хоста, и никой, дето го е отварял, няма да може да го намери).

Накратко: за www.google.bg се проверява DNS кешът на локалния компютър. След това се гледа hosts файлът. След това се прави запитване - директно (итеративно) или косвено (рекурсивно) - към DNS сървърите на . за www.google.bg.. Оттам се научава адресът на DNS сървъра на .bg. и се прави запитване към него. От него се научава DNS сървърът на google.bg. и се прави запитване към него. Оттам вече се научава IP адресът на www.google.bg.. Ако на някое място във веригата някой сървър има кеширан отговор на това запитване, той се връща и веригата не продължава нататък.

Пак напомням - горното сигурно не е от курса по КМрежи, ама все пак става за обща информация :)

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License