DNS, the Domain Name System for the Internet, is a pretty complex set of functions and services which can provide a reliable translation service from names (FQDNs) to addresses (IPv4 and IPv6) and from addresses to names, as well as for particular support functions for specific applications (like MX for routing of electronic mail, supporting ISATAP, NAT-PT).
Implementation of DNS services for a particular (set of) domain(s) requires the operation of Name Servers (master and slave servers: those machines which manage, maintain and hold the relevant parts of the distributed nameservice database) and a method for communicating with the clients. On the client side the functional entity is a resolver or a resolver library, which accepts the query requests from an application program and then talks to the name servers on behalf of the application. In general the query requests made by applications will be for either forward or reverse domain name lookups.
