혼공 학습단/혼자 공부하는 네트워크

[혼자 공부하는 네트워크] DNS와 우리가 사용하는 인터넷 주소

uomnf97 2024. 8. 9. 22:51
안녕하세요! 제이덥입니다. "혼자 공부하는 네트워크" 도서를 통해 네트워크에 대해 학습하고, 공부한 내용을 공유하는 5주차입니다. 이번 섹션에서는 DNS라는 계층적 인터넷 주소가 어떻게 관리되는지, 구조는 어떻게 되는지,어떻게 이를 통해 호스트를 특정하는지에 대해 배웠습니다. 특히, 이번 섹션에서 우리가 일반적으로 사용하는 www 또는 https로 시작하는 URL에 관련된 내용을 배울 수 있어서 내용이 잘 와닿았고, 실용적이라고 느꼈습니다. 우리가 사용하는 인터넷 주소의 비밀, 이번 포스팅에서 함께 확인해보시죠.
*이 도서는 제가 직접 구매하여 작성한 글이며, 혼공단 12기 활동의 일환으로 학습 내용을 공유하고자 합니다. 도서와 활동에 대한 자세한 내용은 아래 Reference에서 확인하실 수 있습니다.

1️⃣ 도메인 네임과 네임서버

  • IP 주소의 비실용성
    • 모든 IP주소를 기억하는 것은 현실적으로 어려움
    • 매번 IP의 주소는 동적으로 바뀔 수 있음 ➡️ 상대 호스트를 특정하기 위해 IP주소 보다 도메인 네임(Domain name)을 활용
  • DNS(Domain Name System)
    • 도메인 네임(Domain Name)이란? 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보. 우리가 자주 쓰는 URL도 이 범주에 속한다.
    • DNS(Domain Name System)
      • 정의 : 도메인을 점(.)을를 기준으로 여러개의 도메인으로 계층을 나눠 서버를 분산하여 관리하는 계층적인 관리체계이자 프로토콜을 말함
    • DNS 서버
      • 정의 : 도메인 네임과 IP주소는 네임서버(name server)에서 관리하는데, 도메인 네임을 관리하는 서버를 말함.
      • 역할 : 호스트가 도메인 네임을 네임 서버에 질의하면, 해당 도메인에 해당 하는 IP주소를 알려줌
      • 장점 : 숫자로 된 IP주소 보다 기억하기 쉬우며, IP주소가 변하더라도 대응되는 도메인 네임에 연결하면 됨으로 특정하고 관리하는 것이 훨씬더 용이
      • 전 세계의 여러군데 위치
    • DNS의 분산 계층 구조 살펴보기
      • DNS의 계층적 구조는 위의 그림에서 맨 뒤에어 앞의 순으로 해석하여 최종 도메인을 확정하며 일반적으로 점(.)을 통해 구분됨
      • 전체 주소 도메인 (FQDN: Fully-Qualified Domain Name)
        • 정의 : 보통 www.naver.com과 같은 모든 도메인을 포함하는 도메인 네임을 말하며, 일반적으로 3~5단계로 구성이 됨
      • 루트 도메인 :
        • 정의 : 점(.)으로 표현되며 최상위 네임 서버뒤에 .이 찍힌 형태로 표기됨. 다만, 일반적으로 생략해서 표기함.
        • 생략되서 표기되지만, www.naver.com.과 www.naver.com은 같은 결과 값을 반환하게 됨
      • 최상위 도메인(Top-level Domain: TLD) :
        • 정의 : 도메인 네임의 마지막 부분을 말하며, 일반적으로 루트 도메인은 생략되서 표기되기 때문에 도메인 네임의 마지막 부분으로 간주됨
        • 종류 : com, net, org, kr(대한민국), jp(일본), us(미국), company 등 다양한 도메인 존재
      • 2단계 도메인(Second-level Domain) :
        • 정의 : 최상위 도메인의 하부 도메인을 말함
        • 예 : www.naver.com의 naver를 의미
      • 호스트 네임(host name) :
        • 정의 : FQDN의 첫 번째 부분을 말함.
        • 주의 : 때로는 FQDN 자체를 가르키기도 하고, 네트워크 상의 장치의 이름을 가르키는데 사용이 됨으로 맥락을 잘 파악할 것
    • 💡 개인전화번호와 같은 hosts파일
      • 아래와 같이 mac에서는 cat /etc/hosts 를 terminal에 입력하면 ‘개인 전화번호부’ 파일을 살펴볼 수 있다. IP주소와 도메인 네임과의 관계를 담은 파일인데, 이러한 주소는 실제로 로컬 환경에서 jupyter notebook을 실행시키거나 로컬에 데모 웹서버를 실행할 때 해당 주소를 통해 접근할 수 있다.
      • 이러한 서버는 세상에 있는 호스트의 모든 도메인 네임과 IP주소를 관리할 수 없기에 DNS시스템을 이용
    • 💡 서브 도메인이란

 

2️⃣ 계층적 네임 서버

  • 리졸빙(resolving)
    • 정의 : IP주소를 모르는 상태에서 도메인 네임에 대응되는 IP주소를 알아내는 과정
    • 도메인 네임을 풀이(resolving)한다는데서 유래
  • 계층적 네임 서버
    • IP주소를 알아내기 위해 리졸빙 과정에서 거쳐야하는 서버
    • 서로에게 계층적으로 질의를 하여 IP주소를 알아냄
    • 총 4가지 존재 : 로컬 네임 서버, 루트 네임 서버, TLD(최상위 도메인) 네임 버서, 책임 네입 서버
      출처: 혼자공부하는 네트워크 (펌 금지)
    • 로컬 네임 서버(local name server)
      • 정의 : 클라이언트와 맞닿아 있는 네임 서버, 클라이언트가 도멩인 네임을 통해 IP주소를 알아내고자 할 때 찾아가는 첫 번째 서버
      • ISP를 통해 할당되어 클라이언트가 로컬 네임 서버의 주소를 알도록 설계 또는 공개 DNS이용
      • 공개 DNS 서버(public DNS Server)
        8.8.8.8을 인터넷 URL참에 입력했을 때 나오는 결과 화면
        • ex) 구글 : 8.8.8.8, 8.8.4.4 / 클라우드 플레어 1.1.1.1
        • 정적 IP주소를 설정할 때 DNS 주소를 설정할 때 활용
      • 요청된 도메인 네임에 대응되는 IP주소를 알다면 반환, 모른다면 루트 네임 서버에 질의
    • 루트 네임 버서(root name server)
      • 정의 : 루트 도메인을 관장하는 네임 서버로, 질의에 대한 TLD 네임 서버의 IP주소를 반환
    • TLD 네임 버서(TLD name server)
      • 정의 : TLD를 관리하는 네임 서버로, 질의에 대한 TLD의 하위 도메인 네임을 관리하는 네임 서버 주소를 반환
      • 이후 하위 도메인은 그보다 하위 도에민을 관장하는 서버를 호출시키는 방식으로 하나씩 내려감
    • 책임 네임 서버(authoritative namer server)
      • 정의 : 특정 도메인 영역(zone)을 관리하는 네임 서버로 자신의 관리하는 메인 영역의 질의는 다른 서버에 떠넘기지 않고 바로 답할 수 있는 네임 서버. 로컬 네임서버가 마지막으로 질의하여 IP주소를 받아내는 서버
  • IP주소를 서버에 질의 하는 방법
    • 재귀적 질의(recursive query) :
      • 클라이언트가 로컬 네임 서버에 도메인 서버의 이름을 질의 하면, 로컬 네임 서버 → 루트 네임 버서 → TLD 네임 서버 →하위 도메인 네임 서버→ 책임 네임 서버 순으로 순차적으로 질의하고 호스트의 IP주소를 역순으로 제공 받는 방식. 요청하는 주체와 받는 주체가 계속 바뀜
        출처: 혼자공부하는 네트워크 (펌 금지)
    • 반복적 질의(iterative qurey) :
      • 클라이언트가 로컬 네임 서버에 질문하면 로컬 네임 서버가 모든 서버에 질문하여 최종 IP주소를 확정함. 요청하는 주체가 바뀌지 않고 로컬 네임 서버로 고정되며 해당 서버가 루트 네임 버서, TLD 네임 서버, 하위 도메인 네임 서버, 책임 네임 서버 순으로 반복적으로 질의하여 알아냄
        출처: 혼자공부하는 네트워크 (펌 금지)
    • DNS 캐시
      • 이전 질의의 문제점 : 질의 과정에서 많은 서버를 방문해야하므로 오버헤드가 많고, 오래걸림. 또한 리졸빙을 위해 특정 서버에 자주 방문하게 될 경우 서버에 과부하가 걸릴 가능성이 있음
      • 정의 : 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 활용하는 경우로 짧은 시간안에 원하는 IP주소를 얻어낼 수 있음
      • DNS 캐시는 TTL(Time To Live)와 같은 Aging 변수와 함께 활용되어 임시 저장 된 값이 특정 시간이 지나면 삭제됨
      • 패킷의 TTL과 다른 개념

3️⃣ 자원을 식별하는 URI

  • 자원(resource)
    • 정의 : 네트워크 상에 메시지를 주고 받는 대상(HTML 파일, 이미지, 동영상, 텍스트 등)
      • HTML이란 : 웹페이지의 구성 요소(제목, 하이퍼링크, 이밎) 등을 표현할 수 있는 HTML로 이루어진 파일
    • 호스트가 송수신하는 정보를 말함
    • 대부분 HTTP 통신을 통해 이루어지므로 “HTTP 요청 메시지의 대상”이라기도 말하기도 함
  • URI(Uniform Resource Identifier)
    • 자원을 식별할 수 있는 정보를 말하며, 식별할 수 있는 통일된 방식을 의미
    • URL(Uniform Resource Locator): 자원을 위치를 통해 식별할 수 있는 방식
    • URL(Uniform Resource Name): 자원을 이름를 통해 식별할 수 있는 방식
  • URL(Uniform Resource Locator)
    • 오늘날 위치 식별에 더 많이 활용되는 방법
    • RFC3986 인터넷 표준 문서를 따르며 구조를 살피면 아래와 같음
      URL 구조(직접 작성 : 펌 가능)
    1. scheme
      • 정의 : 주소의 첫 부분으로 자원에 접근하는 방식을 의미하며 사용될 프로토콜을 정의
      • 주로 통신 프로토콜(http, https)가 이 곳에 속하
    2. authority
      • 정의 : 호스트를 특정할 수 있는 정보로 IP주소 혹은 도에민 네임이 명시됨
    3. path
      • 정의 : 자원이 위치한 경로가 명시됨.
      • 표기 : 슬래시를 기준으로 디렉토리 처럼 계층적으로 표기
    4. query
      • 정의 : 내림차순으로 정보를 정리한다든지, 웹과 상호작용 한 결과를 scheme, authority, path등 만으로 표기하기 어려울 때, 쿼리 문자열(query string), 쿼리 파라미터(query parameter)를 이용하여 위치를 식별함
      • HTTP의 요청 - 응답 프로토콜을 표현하기에 적합한 표현 방식
      • 표기 방법 : 물음표(?)로 시작하여 <키 = 값>형태의 데이터로, 앰퍼샌드(&)를 사용하여 여러 쿼리 문자열을 연결함.
      • 다양한 검색 웹사이트를 표기하는데 용이
    5. fragment
      • 정의 : 자원의 한 조각을 가리키기 위한 정보
      • 용도 : HTML 파일과 같은 자원에서 특정 부분을 가르키기 위해 사용
      • 제목, 소제목 등으로 위치를 이동시킬 수 있음
  • URL(Uniform Resource Name)
    • URL은 위치를 기반으로 작업하기 때문에, 위치가 변경될 경우 유효하지 않을 수 있음. 이러한 URL의 단점을 상쇄
    • 자원에 고유한 이름을 붙이는 방식으로 사용.
    • 국제 인터넷 표준화 기구 IETF(Internet Engineering Task Force)의 RFC 2648을 따름
      • urn:isbn:0123457
    • 다만, URL처럼 널리 채택되지 않아 사용성이 낮음
  • 💡 DNS 레코드 타입
    • DNS 자원 레코드 : DNS 자원 레코드란 네임 서버가 저장하고 관리하는 정보를 말하며, 새로운 도메인이 등록 되었을 때 IP와 매핑되는 정보를 가지고 있음
    • 도메인을 구입하고, 해당 도메인에 물리적은 IP주소를 적용할 때 많이 사용
    • 별칭, IP주소 - 도메인 네임 변환 내용, 호스트 이름, 값, TTL 등 다양한 값 할당되어 있음
      출처 : https://majjangjjang.tistory.com/159

Reference :