UDP パッケージは、一度なくなると、受信されたかどうかを知ることはできません。そのため、天候のパッケージが確実に届くわけではありません。私は、ほとんどの DNS が UDP パッケージを使用してリクエストを送信することを知りました。UDP を使用して要求された DNS の損失はどのように処理されますか?
2 に答える
一定時間内に応答パケットが受信されない場合、要求は再送信されます。Dan Bernstein は、ほとんどのクライアントが 4 回まで再試行することを示唆しています。
UDP データグラムが失われたことを判断するには、2 つの方法があります。どちらも完全に信頼できるわけではありません。
最も一般的なのはタイムアウトです。メッセージを送信し、応答を待ちます。しばらくしても応答がない場合は、メッセージまたは応答が失われたと見なされます。その時点で、もう一度やり直すか、あきらめるかのどちらかです。メッセージまたは応答がネットワークを通過するのに非常に長い時間がかかっている可能性もあるため、重複を考慮する必要があります。TCP を含むすべてのパケット交換通信は、この方法で機能することに注意してください。TCP は詳細を隠すだけです。
もう 1 つの方法は、パケットがドロップされたことを知らせる ICMP メッセージを探すことです。たとえば
ICMP_UNREACH_PORT
、、、ICMP_UNREACH_HOST
またはICMP_UNREACH_HOST_PROHIB
。ただし、これらのメッセージはめったに送信されず、それ自体が失われる可能性があるだけでなく、メッセージが正常に通過した場合でも受信できる場合があります. せいぜい、ICMP メッセージを受け取った場合、何が起こったのかを示唆していると考えることができます。
重複は大した問題ではないため、ほとんどの DNS 実装では短いタイムアウトが使用されます。1 つの DNS サーバーに対して数回繰り返した後、別の DNS サーバーを試行します (複数のサーバーが利用可能であると仮定します)。ほとんどの実装では、応答しているサーバーと応答していないサーバーに関する情報もキャッシュされます。