Почему мы используем UDP для DNS? [Дубликат]

Вам придется переопределить функцию equals (вместе с другими), чтобы использовать ее с пользовательскими классами.

Метод equals сравнивает объекты.

Двоичный оператор == сравнивает адреса памяти.

0
задан user1406895 21 May 2012 в 02:17
поделиться

2 ответа

Если пакет ответа не получен в течение определенного промежутка времени, запрос повторно отправляется. Дэн Бернстайн предполагает, что большинство клиентов будут повторять до четырех раз.

1
ответ дан sarnold 19 August 2018 в 10:07
поделиться

Существует два способа решить, что датаграмма UDP была потеряна. Не является полностью надежным.

  • Наиболее распространенным является тайм-аут. Вы отправляете сообщение и ждете ответа. Если вы не получили ответа через некоторое время, вы предположите , что либо сообщение, либо ответ были утеряны. В этот момент вы можете либо попробовать еще раз, либо сдаться. Также возможно, что сообщение или ответ просто занимают очень много времени, чтобы пройти через сеть, поэтому вы должны учитывать дубликаты. Обратите внимание, что все коммуникации с коммутацией пакетов, включая TCP, работают таким образом. TCP просто скрывает детали для вас.
  • Другой метод - искать сообщения ICMP, сообщающие вам, что пакет был удален. Например, ICMP_UNREACH_PORT, ICMP_UNREACH_HOST или ICMP_UNREACH_HOST_PROHIB. Но не только эти сообщения редко отправляются и подвергаются самой потере, но иногда их можно получить, даже когда сообщение прошло успешно. В лучшем случае, если вы получите сообщение ICMP, вы можете подумать об этом как о том, что могло бы произойти.

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

1
ответ дан Seth Noble 19 August 2018 в 10:07
поделиться