Infra/CS

[Network] DNS

14ben 2024. 1. 8. 11:25
728x90

DNS (Domain Name System)

인터넷을 통해 웹 사이트를 접속할 때 유저는 일반적으로 DNS를 사용한다

 

google.com이라는 문자열의 도메인을 x.x.x.x 와 같은 IPv4 주소로 변환해주는 네트워크 서비스

 

 

DNS Record

DNS는 '도메인-IP' 매핑 정보를 Record라는 이름으로 관리한다.

google.com 172.0.17.1 A Record Type
Mytest.com test.com CNAME Type

 

A Record (A 레코드)

  • 도메인과 IP 주소를 직접 매핑하는 방법
  • 하나의 도메인에 여러 IP를 매핑도 가능
  • 한번의 요청으로 접속할 서버의 IP를 바로 알 수 있음
  • IP가 자주 바뀌는 환경에서는 안좋다

CNAME (Canonical Name)

  • 도메인에 다른 도메인을 매핑하는 방법
  • 실제 IP주소를 얻기 위해 여러 번 DNS정보를 요청
  • IP가 자주 바뀌는 환경에서 장점

 

 

TTL (Time to Live)

  • 도메인 정보를 캐시 메모리에 유지시키는 시간 (초 단위)
    DNS 레코드의 변경 사항이 적용될 때까지 걸리는 시간
  • 예로, TTL이 3600초로 설정 된 도메인 정보를 DNS에서 최초 조회하여 한번 가져온다
    가져온 DNS나 PC에서 3600초 뒤에는 이 정보가 캐시 메모리에서 사라져 다시 조회를 한다
  • TTL을 너무 짧게 유지하면 Clinet가 서버 접속하는 시간 성능이 안좋다
  • IP변경 작업이 있을 경우 빠른 변경 사항 적용을 위해 TTL을 짧게 주고,
    변경 작업 후에는 다시 원래 TTL 시간으로 변경

 


DNS Flow

구글의 도메인

 

사용자가 Google의 IP주소나 MAC주소를 매번 기억하여 검색 할 수 없기 때문에 편의를 위해 사용된다.

(별칭이라 생각하면 편할 듯)

 

 

주소 변환

 

DNS를 사용하려면 Clinet에 DNS Server의 IP Address가 등록되어 있어야 한다.

Client는 도메인 네임을 포함하는 DNS Query 메시지를 등록 된 DNS 서버로 보낸다.

 

 

DNS 서버는 도메인 네임과 대응하는 IP Address가 매핑된 테이블을 가지고 있다.

 

이 테이블을 보고 DNS Query 메시지로 받은 도메인 네임에 대응하는 IP Address를
DNS Response 메시지에 포함해 클라이언트로 보낸다.

 

 

DNS 서버가 도메인 네임에 대응하는 IP Address를 가지고 있지 않다면

DNS 서버는 DNS Query 메시지를 루트 도메인의 DNS 서버에 보내 DNS Response 메시지를 받는다.

 

만약 root 도메인의 DNS 서버에도 정보가 존재하지 않는다면 하위 도메인으로 내려가면서

DNS Query 메시지를 보내 DNS Response 메시지를 받는다.

이를 통해 Client는 DNS를 통해 도메인 네임에 대응하는 IP Address를 알 수 있게 된다.

 


 

Network Layer의 패킷에는 수신지의 IP Address는 포함되어 있지만 MAC Address는 포함되어 있지 않다.

그래서 패킷의 Physical Layer를 통과해 수신지로 데이터가 전송되기 위해 수신지의 MAC Address를 알아야 한다.

 

이를 위해 Network Layer에는 IP Address를 MAC Address로 변환해 주는 ARP (Address Resolution Protocol)가 존재

 

DNS --> ARP 까지 어떻게 동작하는지 과정을 알아보자

 

 

클라이언트 A가 클라이언트 D의 도메인 네임을 사용해 데이터를 보낸다.

예시

 

클라이언트 A는 DNS 서버의 IP Address는 가지고 있지만 MAC Address는 모른다.

 

따라서 ARP 프로토콜을 사용한다.

 

클라이언트 A는 같은 네트워크 상의 모든 장치들에게 DNS 서버의 IP Address가 포함 된 ARP Request 패킷을 보낸다.

 

 

DNS 서버는 ARP Request 패킷을 확인하여

클라이언트 A에게 자신 (DNS 서버)의 MAC Address가 포함 된 ARP 리플라이 패킷을 보낸다.

 

그리고 자신의 ARP 캐시에 클라이언트 A의 MAC Address를 등록한다.

클라이언트 A 또한 ARP 리플라이를 확인해 DNS 서버의 MAC Address를 ARP 캐시에 등록한다.

 

 

이제 클라이언트 A는 DNS 서버에 DNS Query 메시지를 보낼 수 있고 DNS 서버로부터

DNS Response 메시지를 받아 클라이언트 D의 IP Address를 알게 되었다.

 

 

클라이언트 A는 클라이언트 D의 IP Address에 서브넷 마스크를 AND 연산한 결과를 통해

클라이언트 D가 다른 네트워크에 존재한다는 것을 알게 되었다.

 

그러므로 클라이언트 A는 데이터를 라우터 R로 보내야 한다.

 

클라이언트 A에는 라우터 R의 IP Address(11.1.1.5)만 등록되어 있기 때문에

라우터 R의 MAC Address를 알기 위해 다시 ARP를 사용한다

 

ARP로 라우터 R의 MAC Address를 얻어 데이터를 전송한다.

 

데이터를 받은 라우터 R의 ARP캐시를 살펴보면 클라이언트 D의 정보가 이미 등록되어 있다.

 

 

따라서, 라우터 R은 클라이언트 D에게 바로 데이터를 전송한다.

 


Linux에서 DNS Flow

https://velog.io/@markyang92/systemd-managing-network

 

Linux systemd가 Network DNS를 관리 할 때 이런 Flow로 흘러간다

1. /etc/hosts 에서 Nameserver가 있는지 찾는다

2. 없다면 /etc/reslov.conf를 조회한다 (Default로 구글DNS인 8.8.8.8 설정)


출처 : https://happy-jjang-a.tistory.com/45

https://kyc1010.tistory.com/6

728x90

'Infra > CS' 카테고리의 다른 글

[Network] NAT/PAT  (1) 2024.01.05
[Network] 방화벽  (4) 2024.01.04
[Network] Load Balancer  (1) 2024.01.04
OSI 7 Layer  (0) 2023.05.05