
Отhttps://www.cloudflare.com/en-au/learning/dns/dns-server-types/
13 корневых серверов имен DNS известны каждому рекурсивному резолверу, и они являются первой остановкой в поисках рекурсивным резолвером записей DNS. Корневой сервер принимает запрос рекурсивного резолвера, который включает доменное имя, и корневой сервер имен отвечает, направляя рекурсивный резолвер к серверу имен TLD, основанному на расширении этого домена (.com, .net, .org и т. д.).
Но почему рекурсивные резолверы не могут напрямую запрашивать TLD-серверы? Насколько я понимаю, существует всего около 1500 TLD-серверов, которые можно было бы легко распределить по всем серверам-резолверам.
Что-то вроде корневого сервера понадобится для распределения всех серверов TLD по резолверам. Но их следует опрашивать только один раз для инициализации списка TLD. Насколько я понимаю, каждый запрос DNS будет спрашивать корневой сервер, например, "где находится сервер TLD для .com?" Это кажется довольно неэффективным?
решение1
Но почему рекурсивные резолверы не могут напрямую запрашивать TLD-серверы? Насколько я понимаю, существует всего около 1500 TLD-серверов, которые можно было бы легко распределить по всем серверам-резолверам.
Потому что, когда у вас есть список из 1500 серверов, вам нужно распространять обновления значительно чаще, а избежание необходимости распространять такой список среди всех пользователей (даже если это только те, кто использует резолвер) и является причиной, по которой изначально была создана DNS.
Да, это возможно сделать (и в некоторых ситуациях это действительно делается), но вам все равно понадобятся эти корневые серверы X.за распространение спискав любом случае, так что проще просто использовать существующие механизмы – скорее всего, они естьболееэффективнее, чем извлечение всего списка при каждом запуске.
Что-то вроде корневого сервера понадобится для распределения всех серверов TLD по резолверам. Но их следует опрашивать только один раз для инициализации списка TLD. Насколько я понимаю, каждый запрос DNS будет спрашивать корневой сервер, например, "где находится сервер TLD для .com?" Это кажется довольно неэффективным?
Да, каждый DNS-запрос будет нуждаться в таком запросе, но большую часть времени он будет выполняться напрямую из кэша резолвера, пока позволяет его TTL. В этом отношении в корневых запросах нет ничего особенного — они кэшируются, как и все остальные запросы в цепочке (и, конечно, последний запрос).
Поскольку каждый TLD кэшируется индивидуально, это, вероятно, будет более эффективно, чем извлечение всего списка — для резолвера, пользователям которого в основном нужно 10 TLD, ему нужно сделать только 10 запросов к корневым серверам примерно раз в день. При большом списке из 1500 серверов обновление всего списка с той же частотой потребует много ресурсов на корневых серверах, и даже если вы используете инкрементную передачу, вы все равно будете получать много изменений, которые выне нужно.
решение2
Как отмечает @gantendo, кэширование существует.
Отhttps://en.m.wikipedia.org/wiki/Система_доменных_имен
Этот механизм возложил бы большую нагрузку на трафик на корневые серверы, если бы каждое разрешение в Интернете требовало начинать с корня. На практике кэширование используется в DNS-серверах для разгрузки корневых серверов, и в результате корневые серверы имен фактически участвуют только в относительно небольшой части всех запросов.
Другими словами, корневые серверы опрашиваются только время от времени для инициализации списка TLD.