Corgi 혼자 공부하는 네트워크 5-1 DNS와 자원 공부기록
본문 바로가기
개발자 일상/혼자 공부하는 네트워크

혼자 공부하는 네트워크 5-1 DNS와 자원 공부기록

by 짱아아빠 2024. 10. 1.
반응형

1. URI (Uniform Resource Identifier) 및 구성 요소

URI (Uniform Resource Identifier)

  • 정의: 자원을 식별하는 통일된 방식으로, URL과 URN을 포함합니다.
  • 구성 요소:
    • URL
    • URN

URL (Uniform Resource Locator)

  • 정의: 위치 기반의 식별자로, 자원의 접근 방법과 위치 정보를 포함합니다.
  • 구성 요소:
    • Scheme: 자원에 접근하는 방법 (예: https)
    • Authority: 호스트를 특정할 수 있는 정보 (예: www.example.com)
    • Path: 자원이 위치한 경로 (/path/to/resource)
    • Query: 키=값 형태의 데이터, 여러 개는 &로 연결 (?key1=value1&key2=value2)
    • Fragment: 자원의 특정 부분을 가리키는 정보 (#section1)
  • 예시: https://www.example.com/path/to/resource?key1=value1&key2=value2#section1

URN (Uniform Resource Name)

  • 정의: 이름 기반의 식별자로, 자원에 고유한 이름을 부여하여 위치와 무관하게 식별할 수 있습니다.
  • 장점: 자원의 위치에 의존하지 않아 자원 이동 시에도 동일한 식별자를 유지할 수 있습니다.
  • 형식 예시: urn:isbn:0451450523
  • 추가 설명: URN은 특정 네임스페이스 내에서 고유한 식별자를 제공하며, 자원의 영구적인 식별을 목적으로 합니다.

URI 구성 요소 상세 설명

Scheme

  • 정의: 자원에 접근하는 방법을 나타냅니다.
  • 예시: https, ftp, mailto
  • 역할: 클라이언트가 자원에 어떻게 접근할지를 결정합니다.

Authority

  • 정의: 호스트를 특정할 수 있는 정보입니다.
  • 구성 요소:
    • 사용자 정보 (User Information): user:password@
    • 호스트 (Host): www.example.com
    • 포트 (Port): :8080
  • 예시: user:password@www.example.com:8080

Path

  • 정의: 자원이 위치한 경로로, /를 기준으로 계층적으로 표현됩니다.
  • 예시: /path/to/resource
  • 역할: 서버 내에서 자원의 위치를 지정합니다.

Query

  • 정의: 쿼리 문자열 또는 쿼리 파라미터로, 키=값 형태의 데이터를 &로 연결할 수 있습니다.
  • 예시: ?key1=value1&key2=value2
  • 역할: 서버에 추가적인 정보를 전달하여 자원의 동작을 제어합니다.

Fragment

  • 정의: 자원의 특정 부분을 가리키기 위한 정보입니다.
  • 예시: #section1
  • 역할: 클라이언트 측에서 자원의 특정 부분으로 이동하거나 표시할 때 사용됩니다.

2. 도메인 네임 시스템 (DNS)

도메인 네임 (Domain Name)

  • 정의: 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보입니다.
  • 예시: www.example.com

도메인 네임 시스템 (DNS)

  • 정의: 계층적이고 분산된 도메인 네임에 대한 관리 체계입니다.
  • 역할: 도메인 이름을 IP 주소로 변환하여 네트워크 상의 자원에 접근할 수 있도록 합니다.

도메인 계층 구조

  • 루트 도메인 (Root Domain)
    • 정의: 도메인 네임의 마지막 부분을 나타내며, 보통 마침표 (.)로 표시됩니다.
    • 예시: com., org.
    • 특징: 최상위 도메인(TLD)까지만 생략하기도 합니다.
  • 최상위 도메인 (Top-Level Domain, TLD)
    • 정의: 루트 도메인 바로 아래에 위치하는 도메인으로, 대표적으로 com, org, net 등이 있습니다.
    • 분류:
      • gTLD (Generic TLD): 일반적인 용도의 도메인 (.com, .org)
      • ccTLD (Country Code TLD): 국가 코드 도메인 (.kr, .jp)
      • sTLD (Sponsored TLD): 특정 커뮤니티를 위한 도메인 (.edu, .gov)
    • 예시: .com, .edu, .kr
  • 2단계 도메인 (Second-Level Domain)
    • 정의: 최상위 도메인의 하부 도메인입니다.
    • 예시: example.com
  • 3단계 도메인 (Third-Level Domain)
    • 정의: 보통 www과 같이 2단계 도메인 하부에 위치합니다.
    • 예시: www.example.com
  • 서브도메인 (Subdomain)
    • 정의: 도메인 계층 구조에서 2단계 도메인 아래에 추가로 생성된 도메인입니다.
    • 예시: blog.example.com
    • 사용 목적: 다양한 서비스를 구분하거나 조직 구조를 반영하기 위해 사용됩니다.

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

  • 정의: 모든 도메인을 포함한 전체 주소입니다.
  • 예시: www.blog.example.com.

호스트 네임 (Host Name)

  • 정의: FQDN의 첫 부분을 가리킵니다.
  • 예시: www

네임 서버 (Name Server)

  • 정의: 도메인 네임과 IP 주소를 관리합니다.
  • 유형:
    • 로컬 네임 서버 (Local Name Server)
      • 정의: 클라이언트와 가장 가까운 위치에 있는 네임 서버로, 일반적으로 ISP에서 할당됩니다.
      • 특징: 공개 DNS 서버를 사용할 수도 있습니다.
    • 루트 네임 서버 (Root Name Server)
      • 정의: 루트 도메인을 관리하며, TLD 네임 서버의 IP 주소를 반환합니다.
    • TLD (최상위 도메인) 서버
      • 정의: 특정 TLD를 관리하는 네임 서버입니다.
    • 책임 네임 서버 (Authoritative Name Server)
      • 정의: 특정 도메인 영역을 관리하며, 해당 도메인에 대한 최종적인 응답을 제공합니다.
      • 특징: 도메인에 대한 공식적인 DNS 정보를 제공합니다. 캐시된 정보를 제공하지 않고, 항상 최신 정보를 제공합니다.

DNS 서버

  • 정의: 도메인 네임을 관리하는 네임 서버입니다.
  • 역할: 도메인 이름을 IP 주소로 변환하거나 그 반대로 변환하는 작업을 수행합니다.

DNS 자원 레코드 (DNS Resource Records)

  • 정의: DNS에서 도메인 이름과 관련된 다양한 정보를 저장하는 데이터 구조입니다.
  • 주요 레코드 종류:
    • A 레코드 (Address Record)
      • 정의: 도메인 이름을 IPv4 주소로 매핑합니다.
      • 예시: example.com. IN A 93.184.216.34
    • AAAA 레코드 (IPv6 Address Record)
      • 정의: 도메인 이름을 IPv6 주소로 매핑합니다.
      • 예시: example.com. IN AAAA 2606:2800:220:1:248:1893:25c8:1946
    • CNAME 레코드 (Canonical Name Record)
      • 정의: 도메인 이름의 별칭을 설정합니다.
      • 예시: www.example.com. IN CNAME example.com.
    • MX 레코드 (Mail Exchange Record)
      • 정의: 이메일 서버를 지정합니다.
      • 예시: example.com. IN MX 10 mail.example.com.
    • TXT 레코드 (Text Record)
      • 정의: 도메인에 대한 텍스트 정보를 제공합니다.
      • 예시: example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
    • NS 레코드 (Name Server Record)
      • 정의: 도메인을 관리하는 네임 서버를 지정합니다.
      • 예시: example.com. IN NS ns1.example.com.
    • PTR 레코드 (Pointer Record)
      • 정의: 역방향 DNS 조회를 위해 사용됩니다.
      • 예시: 1.2.0.192.in-addr.arpa. IN PTR example.com.
    • SRV 레코드 (Service Locator)
      • 정의: 특정 서비스를 제공하는 서버의 위치를 지정합니다.
      • 예시: _sip._tcp.example.com. IN SRV 10 60 5060 sipserver.example.com.
    • CAA 레코드 (Certification Authority Authorization)
      • 정의: 도메인 소유자가 인증서 발급을 허용하는 CA를 지정합니다.
      • 예시: example.com. IN CAA 0 issue "letsencrypt.org"

반응형

3. DNS 질의 과정

리졸빙 (Resolving)

  • 정의: 도메인 이름을 통해 IP 주소를 알아내는 과정입니다.
  • 과정:
    1. 클라이언트가 도메인 이름을 요청합니다.
    2. 로컬 네임 서버에 질의가 전달됩니다.
    3. 필요한 경우 루트, TLD, 책임 네임 서버를 거쳐 최종 IP 주소를 획득합니다.
    4. 클라이언트에게 최종 응답이 반환됩니다.

질의 방식

  • 재귀적 질의 (Recursive Query)
    • 정의: 클라이언트가 로컬 네임 서버에 도메인 이름을 질의하면, 로컬 네임 서버가 필요한 모든 단계를 거쳐 최종 응답을 클라이언트에게 반환하는 방식입니다.
    • 과정: 로컬 → 루트 → TLD → 책임 네임 서버 → 클라이언트
    • 특징: 클라이언트는 단일 질의로 최종 응답을 받게 됩니다.
  • 반복적 질의 (Iterative Query)
    • 정의: 로컬 네임 서버가 각 서버에 질의를 보내고, 응답을 받아 클라이언트에게 전달하는 방식입니다.
    • 과정:
      1. 클라이언트가 로컬 네임 서버에 질의
      2. 로컬 네임 서버가 루트 서버에 질의
      3. 루트 서버가 TLD 서버에 질의
      4. TLD 서버가 책임 네임 서버에 질의
      5. 책임 네임 서버가 최종 IP 주소를 반환
      6. 로컬 네임 서버가 클라이언트에게 응답 전달
    • 특징: 클라이언트는 여러 단계의 질의를 거치게 됩니다.

DNS 캐시 (DNS Cache)

  • 정의: 이전에 응답받은 결과를 임시로 저장하여 재사용하는 메커니즘입니다.
  • 장점: 응답 시간을 단축하고 네트워크 트래픽을 줄입니다.
  • TTL (Time To Live): 캐시된 정보의 유효 기간을 지정합니다.
  • 위치:
    • 클라이언트 측 캐시: 운영체제나 브라우저에서 관리됩니다.
    • 네임 서버 측 캐시: 로컬 네임 서버에서 관리됩니다.
  • 캐시 갱신: TTL이 만료되면 캐시된 정보가 제거되거나 갱신됩니다.

4. 추가 용어 및 개념

IP 주소 (Internet Protocol Address)

  • 정의: 네트워크 상에서 장치를 식별하는 고유한 주소입니다.
  • 유형:
    • IPv4: 192.168.0.1
    • IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 역할: 네트워크 상에서 장치를 식별하고 통신을 가능하게 합니다.

DNSSEC (Domain Name System Security Extensions)

  • 정의: DNS 응답의 무결성과 진위를 검증하기 위한 보안 확장입니다.
  • 기능: DNS 데이터에 디지털 서명을 추가하여 변조를 방지합니다.
  • 장점: DNS 스푸핑과 같은 공격을 방어할 수 있습니다.
  • 구성 요소:
    • DNSKEY 레코드: 공개 키를 저장합니다.
    • RRSIG 레코드: 자원 레코드 세트에 대한 서명을 저장합니다.
    • DS 레코드 (Delegation Signer): 하위 도메인의 키를 상위 도메인에 전달합니다.

역방향 DNS (Reverse DNS)

  • 정의: IP 주소를 도메인 이름으로 변환하는 과정입니다.
  • 용도: 이메일 서버의 스팸 방지, 네트워크 문제 진단 등
  • 구성 요소: PTR 레코드를 사용하여 매핑합니다.
  • 예시: IP 192.0.2.1의 역방향 DNS는 1.2.0.192.in-addr.arpa.와 같이 표현됩니다.

TTL (Time To Live)

  • 정의: DNS 캐시에 저장된 정보의 유효 기간을 지정하는 값입니다.
  • 단위: 초 단위로 설정됩니다.
  • 역할: 정보가 업데이트되었을 때 빠르게 반영될 수 있도록 관리합니다.
  • 설정 예시: TTL=3600 (1시간)

DNS 프로토콜

  • 정의: DNS 질의와 응답을 주고받는 통신 규약입니다.
  • 포트: 주로 UDP 포트 53을 사용하며, 필요 시 TCP 포트 53도 사용됩니다.
  • 특징:
    • 비연결형 프로토콜: UDP를 사용하여 빠른 응답을 제공합니다.
    • 연결형 프로토콜: 대용량 데이터 전송 시 TCP를 사용합니다.
    • 메시지 포맷: 질의와 응답을 위한 특정 형식을 따릅니다.

DNS 캐싱 계층 (Caching Hierarchy)

  • 정의: DNS 질의 과정에서 각 네임 서버가 캐시된 정보를 활용하여 응답 속도를 높이고 트래픽을 줄이는 구조입니다.
  • 구성 요소:
    • 클라이언트 캐시: 운영체제나 브라우저에서 관리됩니다.
    • 로컬 네임 서버 캐시: ISP나 조직 내에서 관리됩니다.
    • 상위 네임 서버 캐시: 루트, TLD 네임 서버에서 관리됩니다.
  • 장점: 전체 DNS 시스템의 효율성을 높이고, 응답 시간을 단축시킵니다.

자원 (Resource)

  • 정의: 네트워크상의 메시지를 통해 주고받는 대상 (예: 이미지, HTML 파일 등)
  • 관련 개념:
    • 자원 식별자: URI를 통해 자원을 식별
    • 자원 관리: HTTP와 같은 프로토콜을 통해 자원에 접근하고 관리

서브도메인 (Subdomain)

  • 정의: 도메인 계층 구조에서 상위 도메인의 하위에 위치하는 도메인입니다.
  • 예시: blog.example.com, shop.example.com
  • 사용 목적: 다양한 서비스를 구분하거나 조직 구조를 반영하기 위해 사용됩니다.

책임 네임 서버 (Authoritative Name Server)

  • 정의: 특정 도메인 영역을 관리하며, 해당 도메인에 대한 최종적인 응답을 제공합니다.
  • 역할: 도메인에 대한 공식적인 DNS 정보를 제공합니다.
  • 특징: 캐시된 정보를 제공하지 않고, 항상 최신 정보를 제공합니다.

5. 용어 요약

용어정의

URL 위치 기반의 식별자로, 자원의 접근 방법과 위치 정보를 포함.
URN 이름 기반의 식별자로, 자원에 고유한 이름을 부여하여 위치와 무관하게 식별.
도메인 네임 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보.
네임 서버 도메인 네임과 IP 주소를 관리.
DNS 서버 도메인 네임을 관리하는 네임 서버.
루트 도메인 도메인 네임의 마지막 부분을 나타내며, 마침표 (.)로 표시됨.
최상위 도메인 (TLD) 루트 도메인 바로 아래에 위치하는 도메인으로, 대표적으로 com, org 등이 있음.
2단계 도메인 최상위 도메인의 하부 도메인.
3단계 도메인 보통 www과 같이 2단계 도메인 하부에 위치.
전체 주소 도메인 네임 (FQDN) 모든 도메인을 포함한 전체 주소.
호스트 네임 FQDN의 첫 부분을 가리킴.
도메인 네임 시스템 (DNS) 계층적이고 분산된 도메인 네임에 대한 관리 체계.
서브도메인 도메인 계층 구조에서 상위 도메인의 하위에 위치하는 도메인.
리졸빙 도메인 이름을 통해 IP 주소를 알아내는 과정.
로컬 네임 서버 클라이언트와 가장 가까운 위치에 있는 네임 서버로, 일반적으로 ISP에서 할당. 공개 DNS 서버도 가능.
루트 네임 서버 루트 도메인을 관리하며, TLD 네임 서버의 IP 주소를 반환.
TLD 서버 특정 TLD를 관리하는 네임 서버.
책임 네임 서버 특정 도메인 영역을 관리하며, 해당 도메인에 대한 최종적인 응답을 제공.
재귀적 질의 클라이언트가 로컬 네임 서버에게 도메인 네임을 질의하면, 모든 단계를 거쳐 최종 응답을 클라이언트에게 반환.
반복적 질의 로컬 네임 서버가 각 서버에게 응답을 받아 클라이언트에게 전달하는 방식.
DNS 캐시 이전에 응답받은 결과를 임시로 저장하여 재사용하는 메커니즘.
자원 네트워크상의 메시지를 통해 주고받는 대상 (예: 이미지, HTML 파일 등).
Scheme URI의 구성 요소로, 자원에 접근하는 방법을 나타냄 (예: https).
Authority URI의 구성 요소로, 호스트를 특정할 수 있는 정보 (예: www.example.com).
Path URI의 구성 요소로, 자원이 위치한 경로를 나타냄 (/path/to/resource).
Query URI의 구성 요소로, 쿼리 문자열 또는 쿼리 파라미터를 포함 (?key1=value1&key2=value2).
Fragment URI의 구성 요소로, 자원의 특정 부분을 가리키는 정보 (#section1).

6. 추가 설명 및 심화 내용

DNS의 중요성

DNS는 인터넷의 전화번호부와 같은 역할을 합니다. 사람이 이해하기 쉬운 도메인 네임을 사용하여, 실제 통신이 이루어지는 IP 주소로 변환함으로써 사용자가 웹사이트에 접근할 수 있도록 합니다. DNS가 없었다면 사용자는 복잡한 IP 주소를 일일이 입력해야 했을 것입니다.

DNS의 보안 이슈

DNS는 인터넷의 핵심 인프라 중 하나로, 보안이 매우 중요합니다. DNS 스푸핑, 캐시 포이즈닝과 같은 공격이 발생할 수 있으며, 이를 방지하기 위해 DNSSEC와 같은 보안 확장이 도입되었습니다. DNSSEC는 DNS 응답에 디지털 서명을 추가하여 응답의 무결성과 진위를 검증할 수 있게 합니다.

DNS의 확장성과 분산 구조

DNS는 계층적이고 분산된 구조로 설계되어 있어 확장성과 안정성이 뛰어납니다. 전 세계에 분산된 네임 서버들이 협력하여 도메인 네임을 관리하고, 이를 통해 대규모의 인터넷 트래픽을 효율적으로 처리할 수 있습니다.

DNS 캐싱의 역할

DNS 캐싱은 DNS 질의 속도를 높이고 네트워크 트래픽을 줄이는 데 중요한 역할을 합니다. 클라이언트나 네임 서버는 이전에 조회한 도메인 네임과 IP 주소를 캐시에 저장하여, 동일한 질의에 대해 빠르게 응답할 수 있습니다. 그러나 캐시된 정보가 오래되면 최신 정보를 반영하지 못할 수 있으므로 TTL 설정이 중요합니다.

서브도메인의 활용

서브도메인은 대규모 웹사이트나 조직에서 다양한 서비스를 구분하거나, 지리적 위치에 따른 서버를 분리하는 데 사용됩니다. 예를 들어, us.example.com과 eu.example.com은 각각 미국과 유럽 지역을 담당하는 서버를 가리킬 수 있습니다.

DNS와 CDN (Content Delivery Network)

DNS는 CDN과 밀접한 관련이 있습니다. CDN은 지리적으로 분산된 서버 네트워크를 통해 사용자에게 빠르게 콘텐츠를 전달하는 역할을 합니다. DNS는 사용자의 위치에 따라 가장 가까운 CDN 서버의 IP 주소를 반환함으로써, 콘텐츠 전송의 효율성을 높입니다.

동적 DNS (Dynamic DNS)

동적 DNS는 IP 주소가 자주 변경되는 환경에서 도메인 네임을 지속적으로 업데이트하여 항상 최신의 IP 주소를 가리키도록 하는 서비스입니다. 이는 가정용 인터넷이나 모바일 네트워크 환경에서 유용하게 사용됩니다.

반응형

댓글