@by_EL

Как получаются ответ на DNS-запрос записи SRV?

Если отправляется SRV запрос для домена и на этом домене есть несколько srv-записей с разными приоритетами и весами, то как dns-сервер будет отвечать этому запросу: будет отправлять все SRV-записи, не зависимо от приоритета и веса и dns-клиент сам будет выбирать разобрав по приоритету и весу или dns-сервер сам будет, разобрав по приоритету и весу, отправлять ответ по одному?
Ps: аналогичный вопрос касается и MX-записей.
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 2
suffix_ixbt
@suffix_ixbt
https://www.babai.ru/
host -t mx google.com
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.


или

dig google.com mx +short
20 alt1.aspmx.l.google.com.
30 alt2.aspmx.l.google.com.
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.
40 alt3.aspmx.l.google.com.


Если запрос от приложения то также отдаётся весь список а клиент сам выбирает по весу если умеет или берёт первый в списке.
Ответ написан
DNS сервер всегда отдает все записи запрошенного типа для данного имени, в тч все MX/SRV записи.

_Клиентом_ выбирается MX с минимальным весом, в случае его недоступности или нефатальной ошибке отправки - с более высоким весом и тд, если у нескольких mx одинаковый вес - порядок между ними выбирается случайно. Поэтому клиенту нужны все MX записи. Примерно так же и с SRV, но там приоритет обеспечивается порядком priority и в рамках одного приоритета выбор между хоставми производится случайно, распределение вероятности задается весом. Т.е. берутся все хосты с минимальным priority и среди них выбирается случайный, но не равновероятно а в соответствии с весом (например если у одного вес 100 а у другого 200 то вероятность выбора второго вдвое выше). Плюс клиент может еще и рассматривать альтернативы между разными сервисами (например между _smtp._tcp и _smtps._tcp) или отдавать предпочтение определенному порту или сети.

На стороне сервера может быть лишь реализован round robin - случайное перемешивание записей, при перемешивании веса и приоритеты не учитываются. round robin требуется стандартом но по факту делается не всеми, например гугловые резолверы (которые 8.8.8.8) его не делают.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы