How rt1811/tiny-dns-resolver works
This is a small standalone iterative DNS resolver. The principal workflow starts in Main, resolves an A-record lookup through root and delegated nameservers, and prints the resulting IPv4 addresses. IterativeResolver owns delegation traversal, response validation, CNAME handling, missing-glue helper lookups, and alternate-server retries; DnsCodec handles wire-format encoding and parsing, while DnsClient performs UDP exchanges. The resolver source is partial, so internal call details beyond the documented responsibilities are not expanded.
Main entry points: IterativeResolver.java Iterative resolver · Main.java CLI entry · DnsClient.java UDP client · DnsCodec.java Packet codec
Components 10
Entry point
- CLI entry
src/Main.java
Resolution
- Iterative resolver
src/IterativeResolver.java - Referral traversal
src/IterativeResolver.java - Glue and CNAME
src/IterativeResolver.java - Response checks
src/IterativeResolver.java
DNS protocol
- Packet codec
src/DnsCodec.java - Parsed message
src/DnsMessage.java - UDP client
src/DnsClient.java
Other components
- Lookup user
- DNS nameservers
Connections 11
- Lookup user → CLI entry: requests lookup
- CLI entry → Iterative resolver: calls resolveA
- Iterative resolver → Referral traversal: follows referrals
- Iterative resolver → Glue and CNAME: handles aliases and glue
- Iterative resolver → Response checks: validates responses
- Iterative resolver → Packet codec: encodes and parses
- Packet codec → Parsed message: creates message
- Iterative resolver → UDP client: sends queries
- UDP client → DNS nameservers: UDP exchange
- DNS nameservers → UDP client: returns datagram
- Iterative resolver → CLI entry: returns addresses