network

[network] 혼자 공부하는 네트워크 05-1 DNS와 자원

hail2y 2025. 1. 8. 18:45
  • 네트워크 상에서 호스트를 식별할 수 있는 방법 중 하나인 호스트 네임
  • 호스트 네임을 관리할 수 있는 체계: DNS
  • 자원이란 무엇인지, 네트워크 상에서 자원을 어떻게 식별할 수 있는지

메시지를 주고 받기 위해서는 두 가지가 필요하다.

  • 메시지를 주고받는 송수신지 파악 - IP 주소, 도메인 네임
  • 송수신하고자 하는 정보 파악 - 자원

자원을 식별할 수 있는 방법은 여러 가지가 있는데, 그 중 대표적으로 활용되는 자원 식별 방법에는 URL이 있다.

 

① 송수신지 파악

  • 통신하고자 하는 모든 호스트의 IP 주소를 기억하기 어렵다. (ex. 전화번호부)
  • IP 주소도 언제든지 바뀔 수도 있다. (동적 IP)
  • 그래서 상대 호스트를 특정할 때 도메인 네임을 사용할 수 있다. (ex. 전화번호에 대응되는 사용자 이름)
  • 도메인 네임은 네임 서버(DNS 서버)에서 관리하여 관리하기 편하다. (ex. 공용 전화번호부) 
  • 개인 전화번호부와 같이 hosts 파일에서 도메인 네임과 IP 주소의 대응 관계를 직접 가지고 있을 수 있다. 

https://www.seobility.net/en/wiki/DNS_Server

 

네임서버가 도메인 네임을 어떻게 관리하는지는 도메인 네임의 구조를 파악하며 확인할 수 있다. 도메인 네임은 점을 기준으로 계층적으로 분류되며, 하나의 도메인 네임 마지막에는 항상 점이 있다.

    • 루트 도메인(root domain)
    • 최상위 도메인 (TLD; Top-Level Domain)
    • 2단계 도메인, 3단계 도메인, 4단계 도메인 ...

https://www.youtube.com/watch?v=35zFusjd5ns&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=37
http://www.tcpipguide.com/free/t_DNSStructuralElementsandTerminologyDomainsSubdomai-2.htm

 

전체 주소 도메인 네임(FQDN; Fully-Qualified Domain Name)

  • 전체 도메인 계층을 모두 포함하는 도메인 네임
  • FQDN까지 알면 비로소 하나의 호스트를 식별할 수 있게 된다

'www.example.com.' 의 전체 주소가 FQDN이 된다.

 

계층적 도메인 네임

  • 네임서버 또한 계층적으로 관리된다
  • 네임 서버는 전 세계 여러 군데 분산되어 위치한다 (부하 분산, 가용성 높이기 위해)
  • 이렇게 계층적이고 분산된 도메인 네임에 대한 관리 체계가 DNS
  • 주요 네임 서버의 유형: 로컬 네임 서버, 루트 네임 서버, TLD(최상위 도메인) 네임 서버, 책인 네임 서버

 

DNS (Domain Name System)

  • 계층적이고 분산된 도메인 네임에 대한 관리 체계
  • 응용 계층의 프로토콜을 지칭

그리고 도메인 네임을 풀이(resolve)한다고 하는 것은 도메인 네임에 대응하는 IP 주소를 알아내는 과정과 같다. 즉 도메인 네임의 계층적 구조를 파악하여 계층에 해당하는 네임 서버에 IP 주소를 요청하는 것이다. 

https://www.youtube.com/watch?v=35zFusjd5ns&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=37

 

도메인 리졸빙을 하는 방법에는 두 가지가 있다.

  • 재귀적 질의(recursive query)
    • 클라이언트 → 로컬 네임 서버 → 루트 네임 서버 → TLD 네임 서버 → 책임 네임 서버에게 질의
    • 최종 응답 결과를 역순으로 전달
    • 반복적 질의(iterative query)
      • 네임 서버에 일일이 질의-응답 반복
      • 최종 응답 결과를 클라이언트에게 전달

최종적으로 IP 주소를 반환해 줄 수 있는 네임 서버는 책임 네임 서버이다. (authoritative name server)

https://gaia.cs.umass.edu/kurose_ross/interactive/dns_query.php

 

하나의 도메인 네임에 대해서 리졸빙해야 하는 단계는 위와 같이 너무 많다. 이렇게 되면 루트 네임 서버의 부하가 많게 되는데 DNS 캐시를 적극 활용하면 이를 보완할 수 있다. 

DNS 캐시 (DNS cache)

  • 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 이를 활용
  • DNS 캐시를 저장하는 용도로만 사용되는 서버도 있음
  • DNS 캐시를 활용하면 더 짧은 시간 안에 원하는 IP 주소를 얻어낼 수 있음
  • DNS 캐시는 영원히 남아있는 것은 아님
    • 임시 저장된 값은 TTL 값과 함께 저장

대부분의 경우에는 로컬 네임 서버 선에서 캐시된다고 한다.

 

② 자원 식별

 

자원: 네트워크 상의 메시지를 통해 주고받는 대상, HTTP가 요청하는 대상

 

자원을 식별할 수 있는 정보: URI (Uniform Resource Identifier)

  • URL (Uniform Resource Locator): 위치 기반 자원 식별
  • URN (Uniform Resource Name): 이름 기반 자원 식별

오늘날 인터넷 환경에서 자원 식별에 URL을 더 많이 사용한다. 

 

URL

  • 위치를 기반으로 자원을 식별하는데 자원의 위치는 언제든 변할 수 있음
  • 즉, 자원의 위치가 변경되면 기존 URL로는 자원을 식별할 수 없음
  • URL의 구조
    • scheme
    • authority
    • path
    • query
    • fragment

https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.1

URN

  • 자원에 고유한 이름을 붙이는 이름 기반 식별자이기에 자원의 위치와 무관하게 자원을 식별
  • URL만큼 널리 채택된 방식은 아님

 

URL 구조

ⓛ scheme

  • URL의 첫 부분으로 자원에 접근하는 방법을 의미
  • 일반적으로 사용할 프로토콜이 명시 ex. http://, https://

② authority

  • 호스트를 특정할 수 있는 정보, 이를테면 IP 주소 혹은 도메인 네임이 명시
  • 콜론 뒤에 포트 번호를 덧붙일 수도 있음

③ path

  • 자원이 위치한 경로가 명시
  • 자원의 위치는 슬래시를 기준으로 계층적으로 표현되고, 최상위 경로 또한 슬래시로 표현
  • ex. https://datatracker.ietf.org/doc/html/rfc3986#section-3

④ query

  • 쿼리 문자열(query string), 쿼리 파라미터(query parameter)
  • 물음표로 시작되는 <키, 값> 형태의 데이터
  • 앰퍼샌드(&)로 여러 쿼리 문자열을 덧붙일 수 있음

https://www.youtube.com/watch?v=35zFusjd5ns&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=37

 

⑤ fragment

  • 자원의 한 조각을 가리키기 위한 정보
  • HTML 파일과 같은 자원에서 특정 부분을 가리키기 위해 사용