본문 바로가기
운영체제&네트워크/Network

DNS 쿼리 과정과 재귀적, 반복적 쿼리

by GangDev 2024. 4. 25.

 

웹 서버의 IP 주소를 DNS 서버에 조회하는 과정은 도메인명과 IP 주소를 구분하여 사용하는 이유를 이해하는 데 중요한다. 이 과정은 사용자가 웹 사이트에 접속할 때 도메인명을 입력하면, 해당 도메인명에 대응하는 IP 주소를 찾아 웹 서버에 접속하는 과정을 포함한다. 이러한 과정은 다음과 같은 이유로 필요하다:

1. **사용자 편의성**: 사용자가 웹 사이트에 접속할 때 숫자로 된 IP 주소를 입력하는 것보다 도메인명을 입력하는 것이 훨씬 편리하다. 도메인명은 사람이 쉽게 기억할 수 있는 형태로 구성되어 있어, 사용자가 웹 사이트를 찾고 접속하는 데 도움이 된다.

2. **IP 주소의 변경 용이성**: 웹 사이트의 서버가 이동하거나 변경될 때, 도메인명은 변경되지 않고 IP 주소만 변경된다. 이 경우, DNS 서버는 새로운 IP 주소를 제공하여 사용자가 여전히 동일한 도메인명으로 웹 사이트에 접속할 수 있게 한다. 이는 사용자에게 투명하게 작동하며, 사용자는 웹 사이트의 위치가 변경되었음을 알 필요가 없다.

3. **보안 강화**: DNS 서버를 통해 IP 주소를 조회하는 과정은 사용자와 웹 사이트 간의 통신을 보호하는 데 도움이 된다. DNS 서버는 사용자의 요청을 인증하고, 실제 웹 사이트의 IP 주소를 제공하기 전에 여러 가지 보안 검사를 수행할 수 있다. 이는 사용자가 실제로 접속하려는 웹 사이트의 IP 주소를 직접 입력하는 것보다 더 안전한 방법이다.

4. **부하 분산**: 대규모 웹 사이트의 경우, 여러 개의 서버를 사용하여 트래픽을 분산시킬 수 있다. DNS 서버는 사용자의 요청에 따라 여러 서버 중 하나의 IP 주소를 제공함으로써, 서버의 부하를 분산시키고 서비스의 안정성을 높일 수 있다.

이러한 이유로, 도메인명과 IP 주소를 구분하여 사용하는 것은 웹 서비스의 편의성, 안정성, 보안성을 향상시키는 데 중요하다.


DNS 서버는 도메인 이름을 IP 주소로 변환하여 인터넷에서 컴퓨터들이 서로를 찾고 통신할 수 있게 해준다. 이 과정은 다음과 같은 단계로 이루어진다:

1. **사용자 요청**: 사용자가 웹 브라우저에 도메인 이름(예: example.com)을 입력한다.

2. **DNS 쿼리 전송**: 브라우저는 이 도메인 이름에 대한 IP 주소를 찾기 위해 네트워크로 메시지를 전송한다. 이 메시지는 재귀적 DNS 쿼리라고 불린다.

3. **재귀적 DNS 서버 처리**: 이 쿼리는 인터넷 서비스 제공자(ISP)에 의해 관리되는 재귀적 DNS 서버로 전송된다. 재귀적 DNS 서버가 해당 도메인 이름에 대한 IP 주소를 알고 있다면, 사용자에게 직접 반환한다.

4. **다른 DNS 서버 쿼리**: 재귀적 DNS 서버가 IP 주소를 모르는 경우, DNS 루트 이름 서버, 최상위 도메인(TLD) 이름 서버, 그리고 권한 있는 이름 서버에 순차적으로 쿼리를 전송한다. 이 과정은 쿼리된 IP 주소를 포함하는 DNS 레코드를 찾을 때까지 계속된다.

5. **캐싱**: 재귀적 서버는 도메인 이름에 대한 A 레코드(IP 주소를 포함)를 캐시한다. 이후에 동일한 도메인 이름에 대한 요청이 들어오면, 다른 서버를 쿼리하지 않고 캐시된 정보를 사용하여 직접 사용자에게 반환한다.

6. **오류 반환**: 권한 있는 서버가 정보를 찾지 못하면, 오류 메시지를 반환한다.

이 과정은 사용자가 웹 사이트에 접속할 때 매우 빠르게 이루어지며, 일반적으로 사용자에게는 불투명하다. DNS 서버는 자체 도메인 내부와 외부에서 오는 질문에 대해 응답합니다. 도메인 내부에서 온 요청에 대해 정보를 제공하고, 도메인 외부에서 온 요청은 일반적으로 ISP에 의해 관리되는 다른 서버로 전달한다.


Recursive와 iterative DNS 쿼리는 DNS 서버가 도메인 이름에 대한 IP 주소를 찾는 방식에 차이가 있다. 이 두 가지 방식은 DNS 쿼리의 효율성과 캐싱 전략에 중요한 영향을 미친다.

- **Recursive DNS 쿼리**: 재귀적 DNS 쿼리에서, 사용자의 요청을 받은 로컬 DNS 서버는 해당 도메인 이름에 대한 IP 주소를 찾기 위해 다른 DNS 서버와 통신한다. 이 과정은 로컬 DNS 서버가 직접 권한 있는 DNS 서버에 도달하고, 권한 있는 서버로부터 IP 주소를 받아 사용자에게 전달하는 것을 포함한다. 이 방식은 사용자에게 불투명하게 작동하며, 로컬 DNS 서버는 결과를 캐시하여 동일한 도메인 이름에 대한 후속 요청에 빠르게 응답할 수 있다. 재귀적 쿼리는 사용자의 요청을 처리하는 데 필요한 모든 단계를 로컬 DNS 서버가 처리하기 때문에, 사용자는 직접 권한 있는 DNS 서버와 통신할 필요가 없다.

- **Iterative DNS 쿼리**: 반복적 DNS 쿼리에서, 로컬 DNS 서버는 초기 쿼리를 받은 후 다른 DNS 서버에 쿼리를 전달하고, 그 서버가 다음 단계를 처리하도록 한다. 이 과정은 로컬 DNS 서버가 직접 권한 있는 DNS 서버에 도달하지 않고, 중간 서버를 통해 쿼리를 전달하는 방식이다. 이 방식은 로컬 DNS 서버가 캐시를 활용하여 빠른 응답을 제공할 수 있도록 하며, 중간 서버가 쿼리를 계속 전달하는 과정에서 캐싱을 통해 효율성을 높일 수 있다. 반복적 쿼리는 로컬 DNS 서버가 직접 권한 있는 DNS 서버와의 통신을 최소화하고, 중간 서버가 쿼리를 처리하는 데 집중하는 방식이다.

두 가지 방식 모두 도메인 이름에 대한 IP 주소를 찾는 데 필요한 과정을 포함하지만, 재귀적 쿼리는 로컬 DNS 서버가 직접 모든 단계를 처리하고 결과를 사용자에게 전달하는 반면, 반복적 쿼리는 중간 서버가 쿼리를 처리하고 다음 단계를 처리하도록 하는 방식으로 작동한다. 이는 각 방식이 캐싱 전략과 효율성에 어떤 영향을 미치는지에 따라 선택된다.

 


재귀적(Recursive)과 반복적(Iterative) DNS 쿼리 사이에서 캐싱 전략은 두 가지 주요 차이점을 가지고 있다:

1. **재귀적 DNS 쿼리에서의 캐싱**:
   - 재귀적 DNS 쿼리에서, 로컬 DNS 서버는 클라이언트의 요청을 받아 해당 도메인 이름에 대한 IP 주소를 찾기 위해 다른 DNS 서버와 통신한다. 이 과정에서 로컬 DNS 서버는 권한 있는 DNS 서버로부터 받은 IP 주소를 캐시한다. 이후에 동일한 도메인 이름에 대한 요청이 들어오면, 로컬 DNS 서버는 다른 서버를 쿼리하지 않고 캐시된 정보를 사용하여 직접 사용자에게 반환한다. 이는 클라이언트와 로컬 DNS 서버 간의 쿼리에서 발생하며, 로컬 DNS 서버가 직접 권한 있는 DNS 서버와의 통신을 처리하고 결과를 캐시하여 효율성을 높인다.

2. **반복적 DNS 쿼리에서의 캐싱**:
   - 반복적 DNS 쿼리에서는 클라이언트가 여러 DNS 서버를 순차적으로 쿼리하며, 각 서버는 다음 단계를 처리하도록 한다. 이 과정에서 중간 서버는 쿼리를 계속 전달하고, 최종적으로 권한 있는 DNS 서버에서 얻은 정보를 캐시한다. 이는 로컬 DNS 서버가 아닌 중간 서버에서 발생하며, 중간 서버가 캐시를 활용하여 빠른 응답을 제공할 수 있도록 한다. 또한, 클라이언트 측에서도 일시적으로 캐시를 활용하여 효율성을 높일 수 있다.

두 가지 방식 모두 캐싱을 활용하여 성능을 향상시키고 권한 있는 서버의 부하를 줄이지만, 재귀적 쿼리는 로컬 DNS 서버가 직접 결과를 캐시하고 클라이언트에게 전달하는 반면, 반복적 쿼리는 중간 서버가 캐시를 활용하고 클라이언트는 일시적으로 캐시를 활용하는 방식으로 작동한다.

 


재귀적(Recursive) DNS 쿼리를 사용할 때의 장점과 단점은 다음과 같다:

### 장점:
- **사용자 편의성**: 사용자가 웹 브라우저에 도메인 이름을 입력하면, 재귀적 DNS 서버가 해당 도메인 이름에 대한 IP 주소를 찾아 사용자에게 전달한다. 이 과정은 사용자에게 불투명하게 작동하며, 사용자는 직접 권한 있는 DNS 서버와 통신할 필요가 없다.
- **캐싱 활용**: 재귀적 DNS 서버는 이전에 조회된 IP 주소 정보를 캐시에 저장한다. 이후에 동일한 도메인 이름에 대한 요청이 들어오면, 다른 서버를 쿼리하지 않고 캐시된 정보를 사용하여 직접 사용자에게 반환한다. 이는 빠른 응답 시간을 제공하고 네트워크 트래픽을 줄인다.

### 단점:
- **잘못된 정보 반환**: 캐시나 권한 있는 서버가 잘못된 결과를 반환하면, 이를 복구하는 데 시간이 걸린다. 이는 새로운 쿼리를 만들어야 하기 때문이다.
- **높은 쿼리 수**: 많은 사용자가 동시에 다른 사이트에 연결을 시도하고, 서버 수가 많을 경우, 쿼리 수가 높아질 수 있습니다. 이는 시스템의 성능에 부담을 줄 수 있다.
- **보안 위험**: 정보가 잘못되었거나, 공격자가 시스템에 악성 DNS 항목을 생성하려고 시도할 경우, 이는 사이트에 접속하는 데 문제를 일으킬 수 있다. 이는 많은 사용자에게 사이트 접속을 방해할 수 있다.
- **권한 있는 서버의 가용성**: 권한 있는 서버가 오프라인이거나 사용할 수 없는 경우, DNS 서버는 오류를 반환하게 된다. 이는 사이트에 대한 연결을 불가능하게 만들 수 있다.
- **많은 DNS 서버의 경우**: 많은 DNS 서버가 있을 때, 모든 서버가 짧은 시간 내에 요청을 완료하지 못할 수 있다. 이는 각 서버가 다른 결과를 가지고 있고, 과정이 크게 느려질 수 있다.
- **응답 시간 증가**: 많은 사용자가 동시에 연결을 시도할 때, 일부 파일의 완료 시간이 길어질 수 있다. 이는 해당 웹사이트의 응답 시간을 불필요하게 늘릴 수 있다.

재귀적 DNS 쿼리는 사용자 편의성과 캐싱 활용 측면에서 장점을 가지고 있지만, 잘못된 정보 반환, 높은 쿼리 수, 보안 위험, 권한 있는 서버의 가용성 문제, 그리고 많은 DNS 서버의 경우 등의 단점도 존재한.