해당 글은 VSFe 깃허브 레포를 참고하여 작성한 글입니다. (아래 출처에 표기)
✅ DNS에 대해 설명해 주세요.
DNS(Domain Name System): 도메인 이름을 IP 주소로 변환하는 시스템이다. IP 주소는 네트워크에서 장비를 식별하기 위해 사용되는 고유한 주소로, 복잡한 숫자와 점으로 구성되어 있다. DNS는 사용자들이 기억하기 쉬운 도메인 이름을 사용하여 복잡한 IP 주소를 쉽게 찾을 수 있도록 해준다.
IP 주소와 관련된 자세한 설명은 여기를 참고하면 좋을 것 같다.
▶ DNS 구성 요소
- 도메인 네임 스페이스(Domain Name Space)
- 정의: 도메인 네임 스페이스는 인터넷 상의 모든 도메인 이름을 체계적으로 구조화한 계층적 이름 공간이다.
- 설명: 도메인 이름은 계층적으로 구성되며, 각 레벨은 점으로 구분된다. 이 구조는 최상위 도메인부터 시작하여 하위 도메인으로 내려가는 트리 구조로 이루어져 있다.
- 예: www.example.com에서 com은 최상위 도메인, example은 2차 도메인, www는 하위 도메인이다.
- 네임 서버(Name Server)
- 정의: 네임 서버는 도메인 이름을 IP 주소로 변환하는 역할을 하는 서버이다.
- 설명: 특정 도메인 이름과 그에 대응하는 IP 주소를 저장하고 관리한다.
- 분류:
- Root DNS Server: DNS 계층 구조의 최상위에 위치한 서버로, 최상위 도메인(TLD) 서버들의 위치를 관리한다.
- Top-Level Domain(TLD) DNS Server: 특정 최상위 도메인(TLD) 하위에 있는 모든 도메인에 대한 정보를 관리한다.
- Second-Level Domain(SLD) DNS Server (Authoritative DNS Server): 특정 도메인의 최종 IP 주소 정보를 관리한다.
1. 클라이언트가 example.com을 요청한다.
2. Root DNS 서버는 .com에 대한 정보를 관리하는 TLD DNS 서버의 주소를 반환한다.
3. TLD DNS 서버는 example.com 도메인의 정보를 관리하는 SLD DNS 서버의 주소를 반환한다.
4. SLD DNS 서버(Authoritative DNS Server)는 example.com의 정확한 IP 주소를 반환한다.
- 리졸버(Resolver)
- 정의: DNS 쿼리 생성하고, 네임 서버로부터 응답을 받아 사용하는 클라이언트 측의 소프트웨어이다.
- 설명: 사용자가 입력한 도메인 이름을 IP 주소로 변환하기 위해 첫 번째 DNS 쿼리를 생성하는 역할이다.
✅ DNS는 몇 계층 프로토콜인가요?
DNS는 OSI 7 모델의 애플리케이션 계층의 플로토콜이다.
OSI 7계층과 관련된 자세한 설명은 여기를 참고하면 좋을 것 같다.
✅ UDP와 TCP 중 어떤 것을 사용하나요?
DNS는 주로 UDP를 사용한다.
- DNS 요청은 일반적으로 작은 크기의 쿼리로 구성되며, 빠른 응답 속도가 중요하다.
- UDP는 연결 설정 없이 데이터를 전송하므로 오버헤드가 적고, 응답 시간이 짧아 DNS에서 적합하게 사용된다.
UDP와 관련된 자세한 설명은 여기를 참고하면 좋을 것 같다.
✅ DNS Recursive Query, Iterative Query가 무엇인가요?
Recursive Query(재귀적 질의)와 Iterative Query(반복적 질의)는 DNS 서버가 도메인 이름을 IP 주소로 변환할 때 사용하는 두 가지 쿼리 방식이다.
DNS Query: 사용자가 도메인 이름을 입력하고 IP 주소를 얻기 위해 DNS 서버에 보내는 요청을 말한다.
▶ Recursive Query (재귀적 질의)
클라이언트가 DNS 서버에 쿼리를 보낼 때, DNS 서버가 최종 결과를 반환하기 위해 다른 DNS 서버들과의 통신을 스스로 처리한다. 클라이언트는 중간 과정에 관여하지 않고, 최종 IP 주소만 받는다.
🔽 과정 예시
- Client가 kr.yahoo.com에 대한 IP 주소를 Local DNS 서버에 요청한다.
- Local DNS 서버는 Root 네임 서버에 kr.yahoo.com에 대한 변환 요청을 보낸다.
- Root 네임 서버는 com 네임 서버에 kr.yahoo.com에 대한 변환 요청을 보낸다.
- com 네임 서버는 yahoo.com 네임 서버에 kr.yahoo.com에 대한 변환 요청을 보낸다.
- kr.yahoo.com 네임 서버에서 최종 IP 주소를 얻는다.
- 최종 IP 주소는 재귀적으로 yahoo.com 네임 서버에서 com 네임 서버, Root 네임 서버, 그리고 Local DNS 서버로 반환된다.
- Local DNS 서버는 최종 IP 주소를 Client에게 전달한다.
▶ Iterative Query (반복적 질의)
클라이언트가 DNS 서버에 쿼리를 보낼 때, DNS 서버는 최종 응답을 제공하지 않고, 관련된 다른 DNS 서버의 주소를 클라이언트에게 반환한다. 클라이언트는 이 과정을 반복하며 각 서버와 직접 상호작용하여 최종 결과를 찾는다.
🔽 과정 예시
- Client가 kr.yahoo.com에 대한 IP 주소를 Local DNS 서버에 요청한다.
- Local DNS 서버는 Root 네임 서버에 kr.yahoo.com에 대한 변환 요청을 보내고, com 도메인을 담당하는 com 네임 서버의 주소를 반환한다.
- Local DNS 서버는 com 네임 서버에 kr.yahoo.com에 대한 변환 요청을 보내고, yahoo.com 도메인을 담당하는 yahoo.com 네임 서버의 주소를 반환한다.
- Local DNS 서버는 yahoo.com 네임 서버에 kr.yahoo.com에 대한 변환 요청을 보내고, yahoo.com 네임 서버는 kr.yahoo.com 도메인을 담당하는 kr.yahoo.com 네임 서버의 주소를 반환한다.
- Local DNS 서버는 kr.yahoo.com 네임 서버에 최종적으로 쿼리를 보내고, kr.yahoo.com의 IP 주소를 얻습니다.
그림에서 생략되어 있지만, Recursive 방식과 Iterative 방식 모두에서 Client는 직접 DNS 서버들과 소통하지 않고, Local DNS 서버와만 소통한다. 이후 모든 과정은 Local DNS 서버에서 처리된다. 두 방식의 주요 차이점은 DNS 서버들끼리 직접 소통하는지 여부에 있다.
✅ DNS 쿼리 과정에서 손실이 발생한다면, 어떻게 처리하나요?
DNS 쿼리에서 손실이 발생할 경우, 재전송을 시도한다.
- DNS 클라이언트는 요청에 대해 응답을 받지 못하면, 일정 시간 간격을 두고 재전송을 시도한다.
- DNS 서버도 일정 시간 동안 응답을 기다리고, 응답이 없는 경우에는 재전송을 시도한다.
UDP는 전송의 신뢰성을 보장하지 않기 때문에, 손실에 대한 처리를 애플리케이션 계층에서 구현해야 한다.
✅ 캐싱된 DNS 쿼리가 잘못될 수도 있습니다. 이 경우, 어떻게 에러를 보정할 수 있나요?
캐싱된 DNS 쿼리가 잘못되거나, 오래된 정보일 수 있다.
🔽 해결 방법
- 캐시된 정보의 TTL(Time-To-Live)이 만료되면 자동으로 삭제되고, 새로운 요청 시 최신 정보를 다시 조회하여 캐시를 갱신한다.
- 관리자는 서버의 캐시를 수동으로 클리어할 수 있다.
- 클라이언트 측에서도 수동으로 캐시를 지울 수 있다.
여기서 TTL은 DNS 레코드가 캐시에 저장될 수 있는 최대 시간을 의미한다.
✅ DNS 레코드 타입 중 A, CNAME, AAAA의 차이에 대해서 설명해 주세요.
DNS 레코드: DNS 서버가 해당 패킷을 받았을 때 어떻게 처리할지를 지시하는 정보이다.
▶ A 레코드
A 레코드: 도메인 이름을 IPv4 주소로 매핑한다.
도메인 이름 | 매핑된 주소 |
example.com | 192.0.2.1 |
🔽 특징
- A 레코드는 도메인과 IP 주소 간의 일대일 매핑뿐만 아니라, 일대다 또는 다대일 매핑도 가능하다.
도메인 이름 | 매핑된 주소 |
example.com |
192.0.2.1 |
192.0.2.2 | |
192.0.2.3 |
▶ CNAME(Canonical Name) 레코드
CNAME 레코드: 도메인 이름을 또 다른 도메인 이름으로 매핑한다. 주로 별칭을 설정할 때 사용된다.
🔽 특징
- CNAME 레코드는 반드시 다른 도메인 주소를 가리켜야 하며, A 레코드처럼 직접 IP 주소를 등록해서는 안 된다.
- 예: daum2.net이라는 도메인의 CNAME을 daum.net으로 설정하면, 브라우저에 daum2.net을 입력해도 daum.net으로 연결된다.
서비스 | 도메인 주소 | 등록 주소 | Type(형식) |
다음(Daum) | daum.net | 203.133.167.81 | A |
다음2(Daum2) | daum2.net | daum.net | CNAME |
▶ AAAA 레코드
AAAA 레코드: 도메인 이름을 IPv6 주소로 매핑한다.
도메인 이름 | 매핑된 주소 |
example.com | 2001:db8::1 |
🔽 특징
- A 레코드의 IPv6 버전으로 이해할 수 있다.
✅ hosts 파일은 어떤 역할을 하나요? DNS와 비교하였을 때 어떤 것이 우선순위가 더 높나요?
▶ hosts 파일
hosts 파일: 로컬 컴퓨터에서 도메인 이름을 IP 주소로 변환할 때 참조하는 로컬 파일이다.
DNS: 전 세계적으로 분산된 전화번호부
hosts 파일: 내 컴퓨터에 저장된 개인 전화번호부
▶ 우선순위
- hosts 파일의 매핑 > DNS의 매핑
- 같은 도메인 이름에 대한 쿼리가 있을 때, 먼저 로컬 hosts 파일을 확인한다. 해당 도메인 이름이 hosts 파일에 존재하면, DNS 쿼리를 보내지 않고 hosts 파일의 정보를 사용한다.
📍 문제 출처
Tech-Interview / 03-NETWORK.md
📍 참고 자료
'Programming > Network' 카테고리의 다른 글
[Network] Stateless, Connectionless (0) | 2024.08.18 |
---|---|
[Network] SOP, CORS (0) | 2024.08.18 |
[Network] www.github.com을 브라우저에 입력하면? (0) | 2024.08.18 |
[Network] 4-Way Handshake (0) | 2024.08.14 |
[Network] 3-way Handshake (0) | 2024.08.14 |