[Network] Extra. DNS

KYJ의 Tech Velog·2023년 4월 27일
0

Network

목록 보기
17/21
post-thumbnail

DNS

DNS(Domain Name System)는 흔히 우리가 알고 있는 URL을 IP 주소로 변환하는 시스템입니다. 우리가 알고 있는 URL들을 도메인 네임이라고 합니다. (www.naver.com 등...)

DNS는 TCP와 UDP를 사용하는 응용 계층의 프로토콜입니다. 일반적인 DNS 질의에는 UDP를 사용합니다. DNS는 빠르게 호스트에게 IP 주소를 알려주어야 하기 때문에 속도가 빨라야 합니다. 하지만 다음과 같은 경우에는 TCP를 사용해야 합니다. (포트는 TCP/53, UDP/53)

  • Zone Transfer
    보통 1차 네임 서버에서 2차 네임서버로 Zone 데이터베이스를 가져오는 작업입니다(Master - Slave). 안정성을 위한 것입니다.
  • 메시지 사이즈가 512 바이트 이상
    네이버나 구글처럼 www로 매핑된 서버가 많이 있는 경우 메시지 사이즈가 512 바이트를 넘을 수가 있는데 TCP로 재질의하여 응답을 받습니다.

구성 요소

DNS는 Domain Name Space, Name Server, Resolver로 구성되어 있습니다.

Domain Name Space

"이 도메인 네임은 이 IP 주소다"라는 텍스트를 저장할 데이터베이스가 필요합니다. 그리고 분산된 데이터가 어디 저장되어 있는지 찾을 프로그램이 필요합니다. 만약 찾았다면 해당 IP 주소로 이동할 프로그램(브라우저 등)이 필요합니다. 따라서, 도메인 네임 스페이스라는 방법으로 도메인 이름을 관리합니다.

Name Server

도메인 주소를 관리하기 위해 사용되는 DNS 전용 서버입니다. 네임 서버가 해당 도메인 이름의 IP 주소를 찾습니다.

Resolver

DNS 클라이언트 요청을 네임 서버로 전달하고 찾은 정보를 클라이언트에게 제공하는 기능을 수행합니다. 어떤 네임 서버에서 찾아야하는지, 캐시에 있는지 등 어떻게든 찾아서 클라이언트에게 찾았는지 여부를 전달합니다.

DNS Query

DNS 서버(Name Server)와 DNS 클라이언트는 DNS 쿼리를 교환합니다. DNS 쿼리는 Recursive Query와 Iterative Query로 구분됩니다.

Recursive Query

질의된 도메인에 대해 즉각 응답하거나, 다른 서버에게 질의한 결과로 응답하거나, 찾고 있는 정보가 없다는 에러 메시지를 보내줍니다.

Iterative Query

질의된 도메인에 대해 대해 응답하거나, 이 작업을 할 수 있는 다른 DNS 서버에 클라이언트를 연결시켜 줍니다. 자신이 관리하지 않는 알 수 없는 질의에 대해 응답 가능한 네임 서버 목록을 전달합니다.


DNS Record

DNS 상에서 도메인에 관한 설정을 하기 위해 사용되는 일련의 문자들을 DNS 레코드라고 합니다. DNS 레코드에는 여러 종류가 있습니다.

  • A (Host) : 주소/호스트 레코드
    정규화된 도메인 이름/호스트명(FQDN)을 IPv4에 연결합니다.
  • AAAA : 주소 레코드
    호스트를 IPv6에 연결합니다.
  • CNAME (Canonical NAME) : 별칭 레코드
    실제 호스트명(A 레코드)과 연결되는 별칭, 별명을 정의합니다.
  • MX (Mail Exchange) : 메일 교환 레코드
    메일 서버(사서함)에 도달할 수 있는 라우팅 정보(메일 서버)를 제공합니다.
  • SRV(SeRVice) : 서비스 위치 레코드
    비슷한 TCP/IP 서비스를 제공하는 다수의 서버 위치 정보를 제공합니다.
  • PTR(PoinTeR) : 포인터 리소스 레코드
    다른 DNS 레코드를 가리킵니다. 역방향 조회에서 A 레코드를 가리킬 때 사용합니다.
  • SOA(Start Of Authority) : 권한시작 레코드
    DNS 영역의 주 DNS 서버를 정의하며 일련번호를 통해 영역의 변경사항을 기록합니다. 또한 보조영역의 새로고침 및 다시 시도 간격 등을 정의하고 영역의 가본 TTL 값을 정의합니다.
  • NS(Name Server) : 네임 서버 레코드
    영역을 풀이할 수 있는 DNS 서버의 목록을 가지고 있습니다.

URL을 검색창에 입력하면?

  1. 브라우저 주소창에 maps.google.com을 입력
  2. 브라우저가 maps.google.com의 IP 주소를 찾기 위해 캐시에서 DNS 기록을 확인
  3. 만약 요청한 URL(maps.google.com)이 캐시에 없다면, ISP의 DNS 서버가 DNS 쿼리로 4. 4. maps.google.com을 호스팅하는 웹서버의 IP 주소 탐색
  4. 브라우저가 해당 서버와 TCP 연결을 시작
  5. 브라우저가 웹서버에 HTTP 요청 전송
  6. 서버가 요청을 처리하고 응답을 전송
  7. 서버가 HTTP 응답을 전송
  8. 브라우저가 HTML 컨텐츠를 보여줌

2~3번의 과정에서 캐시를 확인할 때 4개의 캐시를 확인합니다.

  • 브라우저 캐시
    사용자가 이전에 방문한 웹 사이트 DNS 기록 확인(일정 기간 동안 저장)
  • OS 캐시
    브라우저 캐시에 없다면 브라우저가 OS에 시스템 콜을 통해 DNS 기록 확인
  • 라우터 캐시
    OS 캐시에도 없다면 브라우저는 라우터에 저장된 DNS 기록 확인
  • ISP 캐시
    위의 세 캐시에 없다면 브라우저는 ISP에서 DNS 기록 확인.
    ISP는 DNS 서버를 가지고 있기 때문에 이 서버에서 DNS 기록 확인 가능

2~3번의 과정을 통해 얻어낸 IP 주소는 인터넷 상에서 웹서버의 위치를 나타냅니다.

WAS

브라우저가 HTML 컨텐츠를 보여줄 때 브라우저는 정적 컨텐츠와 동적 컨텐츠를 함께 보여줍니다. 정적 컨텐츠는 웹서버가 처리하고 동적 컨텐츠는 WAS(Web Application Server)가 처리합니다.

WAS는 DB와 연결되어 필요한 데이터를 받아서 동적 컨텐츠를 처리합니다. 또한 WAS는 정적 컨텐츠도 처리가 가능하기 때문에 웹서버의 역할도 수행할 수 있습니다. 다만, 정적 컨텐츠도 처리하게 되면 동적 컨텐츠의 처리가 지연되기 때문에 따로 처리하는 것입니다.


URL, URI, URN

URI

서버의 리소스 이름은 통합 자원 식별자(Uniform Resource Identifier, URI)라고 부릅니다. URI는 인터넷의 우편물 주소라고 생각하면 됩니다. 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있습니다. 그리고 이 URI에는 URL, URN 두 가지 형태가 있습니다.

URL

URL(Uniform Resource Locator)은 URI의 가장 흔한 형태입니다. URL은 특정 서버의 한 리소스에 대한 구체적인 위치를 서술합니다. 리소스가 정확히 어디에 있고 어떻게 접근할 수 있는지 분명히 알려줍니다. 우리가 흔히 알고 있는 사이트 주소입니다.

URN

URN(Uniform Resource Name)은 콘텐츠를 이루는 한 리소스에 대해 리소스의 위치에 영향 받지 않는 유일무이한 이름입니다. URN은 리소스를 여기저기로 옮기더라도 문제없이 동작합니다. 리소스가 그 이름을 유지한다면 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제 없습니다. URN이 있다면 사용자의 의해 URL이 바뀌더라도 리소스의 위치를 찾을 수 있습니다.


Hosts

브라우저는 특정 사이트에 접속할 때 DNS를 통해 접속해야할 IP 주소를 얻는다고 설명드렸습니다. hosts 파일은 DNS를 통해 IP를 구하기 전에 먼저 검색되는 개인 주소록입니다. 매번 DNS를 통해 IP 주소를 가져오는 것이 아니라 로컬에 hosts 파일에 저장된 IP 주소를 가져올 수 있다면 브라우저의 속도 향상을 기대할 수 있습니다.

0개의 댓글