[컴퓨터 네트워크] 2. Application Layer(4)

김민석·2021년 4월 13일
0

컴퓨터 네트워크

목록 보기
7/12

2.4 DNS

DNS : domain name system

  • 어떤 서버 쪽으로 접속하기 위해서는 IP 주소와 포트 번호를 알아야 한다.
    -> IP 주소는 기억하기 어렵다 (ex : 223.130.195.95)
    -> 인터넷 호스트를 나타내기 위해 Domain name을 사용한다(ex : www.naver.com)
    -> 어떤 호스트의 ip 주소와 매핑되어 있는 도메인 네임이 존재한다.
  • 사람들은 domain name을 이용해서 웹 서버에 접속할 수 있다.
  • 패킷들을 서버로 보내기 위해서는 서버의 IP 주소가 필요하다
    -> domain name을 IP 주소로 변환시켜 줘야 하는데 이것을 해주는 것이 DNS 이다.
  • 처음에는 웹 브라우저는 입력한 domain name과 매핑된 IP 주소를 모른다.
    -> 웹 브라우저는 누군가에게 IP 주소를 물어봐야 한다.
    -> 이런 것을 위해 사용하는 것이 DNS 이다.
  • 일종의 distributed 한 데이터베이스 : 많은 이름 서버의 계층 구조로 구현되어 있다.(전 세계적으로 도메인 네임 서버가 많이 존재한다.)
  • applicatoin-layer protocol을 이용해 통신을 해서 도메인 네임에 대한 ip 주소를 가져오는 것이 목적
  • http, smtp(애플리케이션을 위한 프로토콜) 와 달리 core internet function(보조적 프로토콜)
  • 엣지에 구현한다.(코어의 라우터에 있지 않고 엣지의 호스트에 있음)

DNS : service and structure

DNS services - DNS에서 하는 일

  • 호스트 네임을 IP 주소로 변환한다.
  • host aliaing(도메인 이름 마저 복잡해서 별명이 존재할 수 있는데, 별명만 알아도 도메인 이름을 알게 해 준다.)
  • mail server aliasing(메일서버도 복잡해서 별명 있을 때 메일 서버를 정확히 알고 싶을 때 사용)
  • load distribution : 도메인 네임과 ip 주소가 1:1 매핑이 아닐 때(접속한 사람이 너무 많아서 서버가 여러개 존재 할 때 (한 도메인에 여러 ip 매핑, 예를 들어 www.naver.com 이 가지고 있는 서버가 여러개 일 때)) 클라이언트의 요청을 분산 시켜준다.

why not centralized DNS? - 왜 중앙화 되지 않은 여러개의 DNS를 사용하는가?

  • single point of failure : 하나가 동작하지 않을 경우 모든 서버가 동작하지 않을 수 있기 때문
  • traffic volume : 양이 많기 때문
  • distant centralized database : 하나의 데이터 베이스만 사용하면 멀리 떨어져 있는 경우 딜레이가 오래 걸리기 때문
  • maintenance : 유지보수가 어렵기 때문
    -> centralized DNS는 확장되지 않는다.

DNS 구조 - distributed, hierarchical database
분산되고 계층적 구조

-> 루트 서버가 있음(루트서버도 한개가 아니라 여러개 존재)
-> .com, .org, .edu 등 으로 구분한 여러 서버
-> naver.com 등의 서버
--> 루트에서 직접 ip 주소를 알려주는 것이 아니라 하위 계층의 서버를 알려주고, 그 서버 역시 하위 계층의 서버를 알려주는 형식(포워딩 방식 사용) -> 계층적 구조

DNS : root name servers

  • 가장 상위 name server
  • 처음에는 local name server에 물어보는데 만약 없다면 root name server로 연결해 준다.
  • 직접적인 ip 주소를 알려주는 것이 아니라 하위 서버의 주소를 알려준다.

TLD, authoritative servers

  • TLD servers(top-level domain server)
    -> .com .ord .net .edu 등 + 모든 top-lever country domain(kr, uk, fr 등)
  • authoritative DNS servers
    -> 야후, 네이버 등의 서버

루트서버 -> tld 서버 -> authoritative 서버 순으로 ip 주소를 알려준다.

Local DNS name server

  • 계층구조에 꼭 속해있거나 그런것은 아니다.
  • 기관마다 있을 수 있다.(회사, 대학, residention ISP 등) -> default name server 라고도 부른
    다.
  • 호스트가 DNS 쿼리를 보내면, 쿼리는 local DNS server로 전달된다.
    -> 만약 캐쉬 사용으로 ip 주소를 이미 알고 있으면 바로 반환한다.
    -> 프록시, 계층구조로의 포워딩 역할을 수행한다.

DNS name resolution example - 동작 예시

  • iterated query(반복적 질의) -> 이리저리 물어보는거(책임회피)
  1. 호스트가 local DNS 서버에 요청을 함
  2. local DNS 서버에 없으면 root DNS 서버에 알고 있냐고 물어봄
  3. root DNS 서버가 나는 모르지만 TLD DNS 서버는 알거라고 해서 TLD DNS 서버를 local DNS 서버에 알려줌
  4. TLD DNS 서버에 물어봄
  5. TLD DNS 서버가 나는 모르지만 authoritative DNS 서버는 알거라고 해당 주소 알려줌
  6. authoritative DNS 서버에 물어봄
  7. 원하는 ip 주소 알려줌
  8. local DNS 서버에 캐쉬로 저장하고 호스트에게 반환해줌
  • recursive query(재귀적 질의) -> 본인이 직접 물어보는거(책임짐)
  1. 호스트가 local DNS 서버에 요청을 함
  2. local DNS 서버에 없으면 root DNS 서버에 알고 있냐고 물어봄
  3. root DNS 서버가 TLD DNS 서버에 물어봄
  4. TLD DNS 서버가 authoritative DNS 서버에 물어봄
  5. authoritative DNS 서버는 알고 있기 때문에 주소 알려줌
  6. TLD DNS 서버가 받아서 root DNS 서버에 알려줌
  7. root DNS 서버가 받아서 local DNS 서버에 알려줌
  8. local DNS 서버에 캐쉬로 저장하고 호스트에게 반환해줌

-> 보통 iterative 한 것 사용한다.(많은 데이터 저장 되어 있을 때)

DNS : caching, updating records

  • 어떤 네임 서버든지 새로운 매핑을 알게 되면 캐싱한다.
    -> 어느정도 시간(TTL)이 지나면 지워버린다.(바뀔수 있기 때문)
    -> TLD 서버는 보통 local name server에 캐싱해 놓는다.(루트 네임에 대한 트래픽을 감소시킨다.)
  • 문제점 : 잘못된 기간이 있을 수 있다.
    -> 만약 TTL이 일주일인데, 일주일 사이에 정보가 바뀌었으면 잘못된 정보를 TTL의 남은 기간동안 가지고 있게 된다.
  • 새로운 서버와 변경점에 대한 업데이트와 알려주는 메커니즘을 IETF 표준으로 정의해 두었다.
    -> RFC 2136으로 문서화 되어 있다.

DNS records
DNS : resource records(RR)을 분산 데이터베이스에 저장해 놓는다.

  • ttl : 유효기간
  • 네 가지 타입 존재 : A, NS, CNAME, MX -> 타입에 따라 name, value의 의미가 달라진다.
    -> type = A : name:hostname / value:IP address
    -> type = NS : name:domain / value : hostname of authoritative name server for this domain
    -> type = CNAME : name:alias name(별명) / vlue:canonical name(정식 이름)
    => "www.ibm.com" is really "servereast.backup2.ibm.com"
    -> type = MX : value:메일서버의 이름

DNS protocol, messages

  • Identification : 쿼리 번호
  • Flag : 어떤 것인지 플래그 달아줌
  • '#' xxx -> xxx가 몇개 있는지

Inserting records into DNS
업데이트를 어떻게 하는가? -> 새로운 도메인 생겼을 때 DNS에 어떻게 추가하는지
예) Network Utopia 라는 회사가 생겼다

  • networkutopia.com을 DNS에 등록해야 한다.
    -> Authoritative name server의 ip주소와 호스트 네임을 tld 서버에 등록한다.
    -> NS 타입(도메인 이름과 authoritative name server의 hostname, A 타입(hostname과 실제 ip 주소)의 레코드가 들어간다.
  • 메일서버도 있으면 MX 타입 레코드도 같이 등록한다.

이렇게 등록을 하면 local DNS 서버에 도메인을 입력했을 때 루트로 가서 tld로 가서 authoritative로 가서 정보를 얻어올 수 있다.

출처 및 참고
Computer Networking A Top-Down Approach 7-th Edition / Kurose, Ross / Pearson
서강대학교 기초컴퓨터네트워크 강의자료

profile
김민석의 학습 정리 블로그

0개의 댓글