Немного о внутренностях DNS (Domain Name Service)

 

Проводя небольшой рефакторинг кода, свазаного с работой DNS, решил больше узнать о нем и поделиться со всеми полезной (или не очень) информацией.

DNS (Domain Name Service) - служба доменных имен. С ним (DNS) все сталкивались, но далеко не все знают как он работает и что может. В простейшем случае - это сервис, который переводит доменное имя в IP адрес, а вот что у него внутри - читайте ниже.

Как и большинство протоколов, DNS имеет свою спецификацию, описанную в RFC 1035 и RFC 1706.

DNS имеет иерархическую структуру:

 

 

Корневые DNS серверы (“.”, root name servers, http://en.wikipedia.org/wiki/Root_name_server) отвечают за информазию о доменах верхнего (1-го) уровня, таких как .com, .net, .info и так далее. За ними идут DNS серверы второго уровня, которые содержат информацию о доменах 2-го уровня (поддомены). И так далее по иерархии

 

 

Записи в DNS имеют разны значения и время жизни (TTL, time to live). TTL означает то, сколько времени будет храниться кеш об DNS записи, что-бы DNS-сервере не нужно было лишний раз образаться с запросом к вышестоящему DNS.

Поля DNS записей:

 

  • NAME - собственно само доменное имя;
  • TYPE - тип домена;
  • CLASS - класс записи; в стандате RFC прописано, что DNS может работать не только в сетях по TCP/IP, класс записи определяет тип сети;
  • RDLEN, RDATA - длина и формат с данными о домене.

 

Типы записей DNS (с чем чаще всего приходится работать):

 

  • A record - определяет соответствие домена IP-адресу;
  • AAAA - тоже самое, что и  A, но для IPv6;
  • CNAME - каноническое имя, alias домена, используется для редиректов на другое (под)домен;
  • MX - mail exchage, указывает адреса серверов, которые отвечают за работу с email’ами для данного домена;
  • PTR - pointer, нужен для обратных (reverse) DNS-запросов, которые по IP адресу возвращают FQDN.

 

 

Отдельно стоит сказать про FQDN  - fullly qualified domain name, полное уникальное имя домена, включаещее также корневой домен и завершается точкой (“.”): blog.e0ne.info.

Если спуститься на уровень протокола, то формат сообщения между DNS сервером и клиентом выглядит так:

 

 

Идентификатор:

Запрос:

A:

T:

R:

V:

B:

RCode:

Счетчик вопросов:

Счетчик ответов:

Счетчик Authority:

Счетчик дополнений:

Tags

.net .net-framework .net-framework-3.5 agile ajax ajax-control-toolkit ampq ansible apache asp.net asp.net-mvc automation axum babel bash benchmark blog blog-engine bootstrap buildout c# cache centos chrome ci cinder ckan cli cloud code-review codeplex community config debugger deface dependencies development-environment devices devstack devtime disks django dlr dns docker dockerimage dos easy_install elmah encoding environment-variables error event events everything-as-a-code exception exceptions fabrik firefox flask foreach forms fstab gae gcc gerrit git github go google google-app-engine grep hack hacked hardware headless horizon hound html hugo iaas ienumerable iis internet iptables iron-python ironic iscsi java-script javascript jenkins jquery js jsx k8s kharkivpy kiss kombu kubernetes kvm kyiv lettuce libvirt linux lio loci logging loopback losetup lvm mac-os macos mercurial microsoft microsoft-sync-framework mobile mono ms-office msbuild networking news nginx npm npx offtopic oop open-source open-xml opensource openstack openvswitch os packages paraller-development patterns-practices performance php pika pip plugins pnp podcast popup postgresql profiler project protocols proxy pycamp pycharm pycon pykyiv pylint pypi python python-3 qcow quantum qumy rabbitmq rar react reactjs refactoring rfc rhel search-engine security selenium server shell silverlight socket software-engineering source-control sourcegear-vault sources sql sql-server sql-server-express sqlalchemy ssh static-site sublimetext svg tests tgt tipfy todo tornado typescript uapycon ui uneta unit-tests upgrades usability vim virtualenv visual-studio vitrage vm vue.js vuejs web-development web-server web-service web_root webpack webroot windows windows-live word-press x32 x64 xcode xml xss xvfb интернет-магазин книги

Recent posts

Go 1.18: new features

Всё будет Kubernetes

2022 Relaunch

Everyday Blogging

I don't want this CI


Archives

2022 (3)
2019 (73)
2018 (2)
2017 (3)
2016 (2)
2015 (3)
2014 (5)
2013 (17)
2012 (22)
2011 (36)
2010 (25)
2009 (35)
2008 (32)
2007 (2)