resolver revision dafcb997e390efa4423883dafd100c975c4095d6
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC")
8664a1bd40814ed0b42eacfc5eb354b598dfd6dfTinderbox UserCopyright (C) 1999-2001 Internet Software Consortium.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews$Id: resolver,v 1.6 2004/03/05 05:04:47 marka Exp $
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Multi-target Resolver
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉=====================
9eae5f2a7a189353bd4fcbb939c2b61094b3bfe9Tatuya JINMEI 神明達哉Due to IPv6 and other multiple-path resolving needs, the resolver in
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉BIND 9 needs to be able to handle more than one simulaneous resolving
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrewstask for any single request.
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉For instance, following an A6 chain could result in multiple "forks"
1d761cb453c76353deb8423c78e98d00c5f86ffaEvan Huntfor each network providor.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
420a43c8d8028992a4e9c170022f97bfac689025Evan HuntResolver Overview
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉=================
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉The resolver core is divided into several parts, each of which has a
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉fairly simple function (with some exceptions) to simplify the problem.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉The most complicated portion is the search algorithm "state machine."
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Flow of a Request
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉-----------------
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Query Management.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Each query is associated with a given view. The view-based management
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉allows different clients to be provided with different data based on
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉administrative requirements.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉This is also the layer where EDNS is handled first. EDNS knowledge is
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉handled in some ways throughout the resolver, but several constraints
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉need to be handled if the receiving client cannot handle the EDNS
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉format. (XXX need more)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉When a client (caller) issues a query, the first thing that happens is
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉the list of currently outstanding queries is checked. If another query
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉is already being processed for another client, the new request
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉attaches to the running query and shares the result when it
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉completes.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉If no outstanding requests for this query exist, a new query context
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉is created and an event is passed to an internal "resolver task" for
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉handling.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉In either case, when the internal resolver task completes the request
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉the waiting clients are sent an event. Note that the calling clients
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉can remove their request for various reasons, such as a timeout. The
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉internal task will continue to work on the request, however. This
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉will let other clients attach to a query that some work was done for,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉and it will help to populate the cache in hopes this query will be
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉repeated.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Calling into the resolver may cause the currently running task to do
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉some amount of work, rather than handing off to an internal task
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉immediately. This is more efficient (fewer context switches) but the
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉client's task will not be blocked for any long-term purposes.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
6a3fa181d1253db5191139e20231512eebaddeebEvan HuntThe query management layer is also used for internal queries, from the
6a3fa181d1253db5191139e20231512eebaddeebEvan Huntsearch algorithm state machine. In this case, the "client" is an
6a3fa181d1253db5191139e20231512eebaddeebEvan Huntinternal resolver task, and all callbacks are within the resolver
6a3fa181d1253db5191139e20231512eebaddeebEvan Huntitself.
6a3fa181d1253db5191139e20231512eebaddeebEvan Hunt
6a3fa181d1253db5191139e20231512eebaddeebEvan HuntThe next stage in the resolving process is the search algorithm state
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉machine.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Search Algorithm State Machine.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉This is where the guts of the resolving takes place. The cache is
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉consulted for an answer, and if deemed good, returned. The
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉authoritative data is also consulted here.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Many internal queries may be launched to perform recursive queries on
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉behalf of clients or the resolver itself. The algorithm is described
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉elsewhere.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉The output of this stage is either to return to query management with
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉an answer, or to move to the address selection phase.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Address Selection.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Given that the resolver may have a forwarder list, or may have a
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉number of possible IP addresses to consult for more information, some
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉selection of which is the best address to use needs to be performed.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉This layer does this.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉It will select from a possible set of IP addresses to send a query
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉to. They are ranked in various ways (round-trip time, reliability,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉and lameness for a given zone are a few) and the best is selected.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Some state is maintained to allow retransmission in the case of a
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉timeout.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉The output of this goes to message formatting.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Message Formatting.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉This section will construct a wire message to perform a query.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉The output of this section is what is transmitted to the wire in the
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉external DNS query section.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉External DNS Query.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉This is where a wire message is transmitted to the "best" socket
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉address. Timeouts are handled here, and timing information is
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉gathered when requests complete.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Received Message Handling.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉When a message arrives from an internal query, the result is evaluated
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉here. Things like message ID matching the query, query answers
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉question, TSIG, DNSSEC, etc are performed here.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉Caching and Evaluation of Result.
1d761cb453c76353deb8423c78e98d00c5f86ffaEvan Hunt
1d761cb453c76353deb8423c78e98d00c5f86ffaEvan HuntOnce the message format and envelope are examined, some bits are
92384667ff3bc059237849b3afd4c715c9164435Evan Huntcached (including hints that a given rrset has a zero TTL). Other
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉bits feed back into the search algorithm state machine to continue
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉processing.
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉[ XXX need examples? ]
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉