Recursive vs Iterative

클라이언트의 한 번 질문을 리졸버가 여러 위임 추적으로 분해한다

www.example.com. 질의는 클라이언트에게는 "끝까지 찾아줘"라는 재귀 요청이다. 재귀 리졸버는 캐시가 없을 때 루트, TLD, 권한 서버를 반복 질의로 따라가 최종 답이나 부정 응답을 돌려준다.

Stub resolver 브라우저나 OS가 가까운 재귀 리졸버에 질문한다
Recursive resolver 캐시 확인 후 계층을 대신 순회한다
Root / TLD / Auth 위임 정보와 권한 있는 레코드를 제공한다
Cache TTL 동안 같은 질의를 루트까지 보내지 않는다
Stub 브라우저나 OS가 RD=1로 최종 답을 요청한다.
재귀 요청
Recursive resolver 캐시를 먼저 보고 없으면 계층을 대신 순회한다.
반복 질의
Root / TLD / Auth referral을 거쳐 권한 서버에서 최종 레코드를 받는다.
TTL 저장
Cache TTL 동안 같은 이름을 다시 루트까지 묻지 않는다.

응답 방향 권한 응답은 리졸버로 돌아오고, 리졸버가 클라이언트에 최종 답 또는 부정 응답을 돌려준다.

Client → Resolver
1
recursive query www.example.com A? RD=1, 최종 답을 기대
cache miss 없으면 계층 추적 시작
Resolver → Root
2
iterative query www.example.com A?에 대해 .com 위임 요청
.com referral TLD NS와 glue 주소
Resolver → .com
3
iterative query example.com zone을 담당하는 서버 확인
authoritative NS 권한 서버 위임
Resolver → Auth
4
authoritative answer A/AAAA, CNAME 체인, NXDOMAIN, NODATA 중 하나로 응답
TTL 포함 답을 캐시하고 클라이언트에 반환
recursive

클라이언트는 다음 서버를 직접 따라가지 않는다. 재귀 리졸버가 성공 답, 부정 응답, 오류 중 하나로 끝맺는다.

iterative

루트와 TLD는 보통 최종 IP를 알지 않는다. 대신 더 권한 있는 서버를 가리키는 referral을 준다.

glue

위임된 NS가 같은 하위 zone 이름이라면 그 NS 주소를 먼저 풀어야 하므로, 상위 zone이 additional section에 A/AAAA glue를 줄 수 있다.

Answer A/AAAA 레코드나 CNAME을 따라간 최종 주소
NXDOMAIN 그 이름 자체가 존재하지 않는다는 권한 있는 부정 응답
NODATA 이름은 있지만 요청한 레코드 타입은 없는 상태
Cache rule TTL이 남아 있으면 같은 이름과 타입은 재귀 리졸버 캐시에서 바로 답한다. DNSSEC 검증 실패나 SERVFAIL은 별도 오류로 다룬다.

읽는 법: 재귀는 "누가 끝까지 책임지는가", 반복은 "다음에 물어볼 권한 서버를 어떻게 찾아가는가"의 차이다. 클라이언트는 보통 재귀 리졸버까지만 보고, 리졸버가 DNS 계층 데이터베이스를 대신 순회한다.