Самый быстрый способ разрешить некэшированное доменное имя? - PullRequest
1 голос
/ 14 января 2012

В настоящее время я реализую крошечный и быстрый dns-resolver на C. Обычно dns-resolver запрашивает локальный кеш, а затем кэш своего маршрутизатора и т. Д., Прежде чем отправить запрос корневому серверу имен., но в моем случае я просто хочу разрешить имена, которые, вероятно, не сохраняются локально.Так какой же самый быстрый способ разрешить имя хоста?

Запустить пакеты на мой локальный сервер имен (в моем случае мой маршрутизатор) или отправить напрямую на корневой сервер имен?Имеет ли значение, какой сервер корневых имен я выберу?Должен ли я выбрать их случайным образом (из списка 13 root-dns-серверов)?

1 Ответ

1 голос
/ 14 января 2012

Разрешить имена - дело непростое.Это выглядит легко с самого начала, но на самом деле оно изобилует некоторыми вещами, которые делают его «не таким простым».Таким образом, лучшее, что можно сделать на самом деле, - это использовать существующую реализацию, а не накатывать собственную, потому что есть из чего выбирать, и большинство из них довольно хороши.Если у вашего локального сервера имен (маршрутизатора) есть определитель, просто используйте его, потому что он позаботится о сложности (но у него будет сам кэш).

Если вы намереваетесь разрешить себя самостоятельно,вам нужно будет сделать намного больше, чем запустить запрос на корневом сервере имен.Вам нужно будет отправить запрос одному случайному лицу, разобраться с тем, что произойдет, если вы не получите ответ (попробуйте другой), а затем, когда вы получите ответ обратно, это не будет ответ, который вы ищете,Если вы отправите запрос на «www.example.com», он просто перечислит все серверы имен для «com» ​​(в записях NS) и скажет, что вы должны спросить их дальше.Затем вам нужно пойти спросить ком, который скажет вам спросить серверы имен для example.com и попросить вас спросить их.Между тем записи NS для example.com могут фактически указывать вам на серверы имен где-то еще, например, на «dns1.example.net», что означает, что вам нужно будет снова начать с корня, чтобы увидеть, как добраться до примера.Серверы имен net.

В любом случае, вышесказанное является упрощением, хотите верьте, хотите нет.Итак, да: вам следует спросить локальный маршрутизатор или распознаватели вашего интернет-провайдера, а не делать это самостоятельно.Если вы хотите сделать это локально для своего приложения, выберите одну из основных реализаций C, чтобы сделать это для вас, а не переписывать.Если вы не хотите многому научиться (что всегда хорошо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...