DNS 캐싱 - 반복적 vs 재귀적

DNS 캐싱 - 반복적 vs 재귀적

반복적인 DNS 아키텍처에서 로컬 DNS 서버에는 캐시가 있으며 대부분 루트 및 TLD 서버 연결을 건너뛸 수 있습니다.

재귀 스키마에서 로컬 DNS 서버는 결과를 재귀적으로 가져오고 요청된 리소스로 응답하는 하나의 DNS 서버에 연결합니다.

캐싱 관점에서 반복 DNS와 재귀 DNS의 차이점은 무엇입니까?

로컬 DNS 서버가 여전히 재귀 아키텍처에서 지름길을 택할 수 있습니까?

답변1

캐싱 관점에서 반복 DNS와 재귀 DNS의 차이점은 무엇입니까?

다른 점이 없다. 권한 있는 서버의 TTL(Time-To-Live)은 로컬 정책과 함께 레코드가 캐시에 보관되고 캐시에서 제공되는 기간을 나타냅니다.

로컬 DNS 서버가 여전히 재귀 아키텍처에서 지름길을 택할 수 있습니까?

로컬 DNS가 전달 전용 DNS가 아닌 경우 그렇습니다. 항상 발생합니다. 특정 도메인에 대한 답변을 얻는 방법을 알고 나면 정보가 캐시에 있는 동안 루트까지 다시 이동하지 않습니다. 원래 TTL이 만료되었거나 로컬 구성이 캐시 크기 또는 TTL에 대한 제한을 설정했기 때문에 데이터가 캐시에서 제거될 수 있습니다. bind예를 들어 max-cache-ttl.

답변2

이제 DNS 용어에 대한 표준 문서가 있습니다.

RFC 8499, 일명 BCP 219

다음은 관련 정의를 약간 요약하고 재정렬한 것입니다.

  • "재귀 확인자: 재귀 모드에서 작동하는 확인자. [..] [RFC4697]는 재귀 확인자와 반복적 확인자를 구별하려고 시도했습니다."

  • "재귀 모드: DNS 쿼리를 수신하고 로컬 캐시에서 해당 쿼리에 응답하거나 원래 쿼리에 대한 최종 답변을 얻기 위해 다른 서버에 쿼리를 보내는 서버의 확인 모드입니다."

  • "반복적 해결: 이름 서버에는 다른 서버에서만 응답할 수 있는 쿼리가 제공될 수 있습니다. 이 문제를 처리하는 두 가지 일반적인 접근 방식은 첫 번째 서버가 클라이언트를 대신하여 쿼리를 추구하는 "재귀적"입니다. 다른 서버에서 서버가 클라이언트를 다른 서버로 참조하고 클라이언트가 그곳에서 쿼리를 수행할 수 있도록 하는 "반복"입니다([RFC1034]의 섹션 2.3 참조).

    In iterative resolution, the client repeatedly makes non-recursive
    queries and follows referrals and/or aliases.  The iterative
    resolution algorithm is described in Section 5.3.3 of [RFC1034]."
    

위에 인용된 RFC 4697에는 다음과 같이 나와 있습니다.


이 메모는 일반적으로 재귀 이름 서버의 일부로 발견되는 반복 확인자의 동작과 주로 관련됩니다
. 이 메모에서는
일반적으로 해당 구성 요소에 중점을 두기 때문에 "반복 해결 프로그램"이라는 보다 정확한 용어를 사용합니다 .
이 엔터티의 이름 서버 역할을 언급해야 하는 경우 이 메모에서는
"재귀적 이름 서버"라는 용어를 사용합니다. 차이점의 예로
재귀 이름 서버의 이름 서버 구성 요소는
DNS 쿼리를 수신하고 반복 확인 구성 요소는
쿼리를 보냅니다.

RFC 1034는 이에 대해 훨씬 더 불분명하거나 더 정확하게는 훨씬 더 오래된 것 같습니다.

  • 분산 데이터베이스가 있는 시스템에서는 특정 이름 서버에 다른 서버에서만 응답할 수 있는 쿼리가 제공될 수 있습니다. 이 문제를 처리하는 두 가지 일반적인 접근 방식은 첫 번째 서버가 다른 서버에서 클라이언트에 대한 쿼리를 추구하는 "재귀적"과 서버가 클라이언트를 다른 서버로 참조하고 클라이언트가 쿼리를 수행하도록 하는 "반복적"입니다. 질문. 두 접근 방식 모두 장점과 단점이 있지만 데이터그램 스타일의 액세스에는 반복 접근 방식이 선호됩니다. 도메인 시스템에서는 반복적 접근 방식의 구현이 필요하지만 옵션으로 재귀적 접근 방식을 허용합니다.

귀하의 질문으로 돌아가서:

캐싱 관점에서 반복 DNS와 재귀 DNS의 차이점은 무엇입니까?

위의 정의와 정확히 일치하지 않는 실제 작업 방식에 대한 내 이해에는 재귀 네임 서버가 클라이언트가 요청한 이름을 확인하기 위해 반복 쿼리를 수행하므로 차이가 없습니다.

그리고

로컬 DNS 서버가 여전히 재귀 아키텍처에서 지름길을 택할 수 있습니까?

기본적으로 신뢰할 수 없는 모든 항목은 캐시를 가질 수 있으며 이전에 수신한 응답에서 얻은 TTL을 준수하는 한 프로토콜 범위 내에서 작동합니다.

앞으로는 상황이 더욱 혼란스러워질 수 있습니다. ANAME특정 구현과 같은 일부 제안에서는 대상을 해결하기 위해 주어진 쿼리가 올 때 재귀적/반복적이 되도록 권한 있는 네임서버가 필요할 수도 있습니다.

관련 정보