Как имена разрешаются в современных локальных сетях?

529
Cameron Tacklind

В современных локальных сетях устройства используют несколько разных методов для разрешения имен. В частности, просто чтобы назвать несколько вещей, таких как DNS, Avahi, zeroconf, mDNS, Bonjour, NetBIOS, WINS или даже ручные файлы хостов. Я полагаю, что некоторые из них - это разные термины, обозначающие одно и то же. Некоторые используют децентрализованные технологии, другие полагаются на DHCP для распределения центральных адресов.

Как современные распространенные операционные системы проходят через эти различные, возможно, противоречивые, методы разрешения имен? Какой порядок они используют? У разных ОС разное поведение?

Когда кто-то запрашивает IP-адрес foobar, когда к имени добавляется локальный поисковый домен - после сбоя при первоначальном разрешении имени, до того, как он запрашивает что-то в сети, или в другое время? Могут ли (и / или могут ли) преобразователи DNS добавлять поисковые домены при попытке найти запись в своих таблицах?

Почему изменилось поведение моих клиентов, когда я указал локальный поисковый домен (в отличие от пустого) в моем маршрутизаторе?

Некоторые из этих методов поддерживают и / или используют .localдомен tld / search. Это только авахи?

Как добавление .в конец домена меняет дело? Это просто мешает искать "локальный домен"? Когда я ищу google.com, почему мне не нужен трейлинг .?

Почему мой DNS-распознаватель не выполняет поиск google.com.localили google.com.MyLocalSearchDomain?

У вас могут быть вложенные поисковые домены?

NetBIOS и WINS - это одно и то же? А как насчет авахи, бонжур и других?

Следующий вопрос: как работает каждая из этих служб? Я понимаю, что DNS использует более традиционный стиль (по существу) одного центрального сервера, который настроен для использования каждым клиентом. Однако децентрализованные методы должны использовать некоторые другие методы для автоматического обнаружения имен. Как это работает?

2
Это хорошие вопросы, которые нужно задать, но, к сожалению, слишком много вопросов для одного поста с вопросами, поэтому он не очень подходит для модели этого сайта. Если бы В. Ричард Стивенс все еще был рядом, он мог бы написать целую книгу под названием «Иллюстрированное современное разрешение имен». Попробуйте задать один основной вопрос за раз. Spiff 5 лет назад 2

2 ответа на вопрос

3
Spiff

Короче говоря, это очень запутанная смесь различных наборов протоколов разрешения имен, используемых различными ОС, продуктами, приложениями, сервисами и API.

IETF ZeroConf определяет протокол mDNS (многоадресная DNS), а также протокол DNS-SD (обнаружение службы DNS). Bonjour (урожденная встреча, он же mDNSResponder) и Avahi - две реализации ZeroConf. Я слышал, что есть также реализация сообщества OpenWrt, которая просто называет себя "mDNS". С тех пор, как Apple создала это, продукты Apple фокусируются на этом, хотя Mac могут также использовать NetBIOS Name Service и WINS для разрешения имен, особенно при использовании SMB-клиента macOS для подключения к файловым серверам SMB (Windows Server, Linux SaMBa-сервера).

Собственные протоколы службы имен Microsoft начинаются с NetBIOS Name Service, основанной на локальных (не маршрутизируемых) широковещательных рассылках. Я говорю «проприетарный Microsoft», но технически он возник с IBM как часть протоколов Server Message Block (SMB). Поскольку файловая служба SMB стала фактическим отраслевым стандартом, многим операционным системам пришлось по меньшей мере использовать службу имен NetBIOS в своих клиентах и ​​серверах SMB. Позже Microsoft создала WINS для предоставления одноадресного решения на основе сервера для такого же разрешения имен, принадлежащих Microsoft. Когда Apple создала mDNS под названием «Rendezvous» (позже переименованная в Bonjour) и взяла его в IETF, чтобы в итоге стать IETF ZeroConf, Microsoft с недоумением решила сделать свое собственное немного другое, несовместимое mDNS-подобное мышление, которое они называли «

Linux, в том числе Google Android, похоже, в настоящее время тяготеет к ZeroConf для безлимитного разрешения имен на основе локальной сети. Google перенес Apple-совместимый POSIX-совместимый демон mDNSResponder с открытым исходным кодом на Linux для использования в Android; это то, что реализует API Android «Network Service Discovery» (NSD).

Как и macOS, Linux использует NetBIOS Name Service и WINS для подключения к SMB-серверам.

Это большой беспорядок, и какой протокол (-ы) используется для конкретной вещи, зависит от того, на какой ОС вы работаете, какие API-интерфейсы вызывает ваше программное обеспечение и многое другое.

У меня есть слабое подозрение, что Win10 в конечном итоге добавит разрешение имен mDNS, так как они уже поддерживают обнаружение сервисов через него. В то же время в Linux, разрешенном systemd, реализованы как mDNS, так и LLMNR (хотя до сих пор он далеко не так хорош, как Avahi). grawity 5 лет назад 0
Что ж, это странно - пытаюсь ли я связаться с `foo` или` foo.local`, мой Windows 10.1803.17134 фактически выполняет ** и LLMNR, и mDNS ** запросы одновременно (и NBNS, но давайте проигнорируем это). Это должно быть встроено, потому что у меня нет и никогда не был установлен Bonjour / mDNSResponder в этой системе ... grawity 5 лет назад 0
1
G-Man

Еще один кусочек головоломки - /etc/nsswitch.confфайл. Это «переключатель службы имен», который присутствует во многих системах на основе Unix; он говорит системе, как переводить имена в числовые значения и обратно. Он содержит около десятка строк, которые выглядят как

(база данных) : (источник)
Подробно описано здесь .

Пример строки будет

хосты: файлы днс
Это означает, что всякий раз, когда любая программа * хочет преобразовать имя хоста / домена в IP-адрес (или наоборот), она должна

  1. Посмотрите /etc/hosts, и, если он не найдет результат там,
  2. проконсультируйтесь с DNS.

Таким образом, системы могут быть индивидуально настроены для разрешения имен хостов (включая порядок поиска).
________
* Это верно для большинства прикладных программ, как ping, ssh, ftpи т.д. утилиты, как digи nslookupжестко закодировано использовать DNS и ничего другого.