DNS는 Internet Directory service라고도 불린다.
만약 네이버의 IP를 kkk라고 지정을 해놓고 주소창에 kkk라 입력을하면 네이버로 들어갈 수 있다.
하지만 위 예시처럼 hostf file 을 사용하게 되면 ip address에 대해 할당된 이름을 자기 마음대로 설정하기 때문에 공통된 이름이라는 개념이 없다. 그래서 공식적인 이름을 가지게 하는것이 Domain name system이다.
이름을 등록하게 해서 각 시스템마다 등록 된 이름을 따로따로 중앙에서 관리하려고 하니 너무 어렵기 때문에, 실제로 Domain name을 기관의 이름만 등록을 한다.
예로) A회사의 IP에 Domain Name을 주면 A회사 사람뿐 아니라 다른 사람도 A회사의 server에 접속을 할 수 있다. 따라서, name server에 등록을 하지 않아야 한다.
Application Layer에서는 mmcn.ajou.ac.kr 이라는 name을 받아서
DNS에서 IP Address로 변환한다.(Network Layer)
IP주소는 MAC 주소로 다시 변환된다.(Data link Layer)
✍️여기서 MAC 주소란?
보통 우리가 멀리있는 서버와 통신할때 IP라는 것을 사용한다고 알고 있는데, 사실은 각 라우터 hop(출발지와 목적지 사이에 위치한 경로의 한부분)에서 일어나는 MAC주소와 MAC주소 통신의 연속적인 과정이다.
IP는 멀리 있는 컴퓨터와의 통신에서 시작주소와 끝 주소를 나타낸다면
MAC 주소는 그 사이에서 중간 중간 거점 역할을 한다.
결국 IP 통신이라는것은 MAC주소간의 통신이라고 말할 수 있다.
DNS(Domain name system)는 application layer protocol이다.
- 공개 시스템
- client-server model을 가지며
- host name을 IP주소로 확인하는데 사용한다.
host name -> IP address- port 53으로 UDP를 통해 실행한다.
- 분산된 계층적 데이터베이스이다.
1.Domain Name Space
2.name server = 권한있는 DNS 서버
3.resolver = 권한 없는 DNS 서버
Domain Name Space
도메인 이름을 ip주소로 변환하기 위해 이 text를 저장할 데이터베이스가 필요하다.
분산된 데이터가 어디 저장되어 있는지 찾을 프로그램이 필요
찾았을때 해당 IP 주소로 이동할 프로그램이 필요
Domain name space라는 규칙으로 도메인 이름 저장을 분산한다.
Name server
DNS server와 같은 말이긴 하지만 resolver등 서버시스템안에서 다른 역할을 하는 서버도 있기 때문에 name server라고 하는게 의미전달이 된다.
Name server가 해당 도메인 이름의 IP주소를 찾는다.
수많은 name server들이 계층형 구조로 구조화 되어 있다.
Resolver
DNS client request를 name server로 전달하고 찾은 정보를 client에게 제공한다.
어떤 name server에서 찾아야하는지, 이미 캐시되어 있는지 찾는다. 찾았으면 찾은 내용을 전달하고, 못찾으면 못찾았다고 전달한다.
resolver는 단말에 구현하는 것은 어렵고 보통은 resolver가 구현된 name server의 ip 주소만을 파악한다.
대표적으로 KT/LG/SK와 같은 ISP(통신사)DNS가 있고, 브라우저 우회용도로 쓰이는 구글DNS,클라우드플레어와 같은 public DNS 서버가 있다.
분산 계층형 Database
- 최상위에 Root DNS server가 있다.
- 전체 구조가 분산형 데이터 베이스 이지만 트리 구조로 되어있다.
- 데이터를 찾기 위해서 depth만큼 읽으면 데이터를 다 찾을 수 있다.
*depth: 트리구조에서 데이터를 찾을 때 항상 루트에서 부터 찾는데, 루트에서 leaf까지 데이터를 읽는 것을 의미한다.
일반적인 트리구조는 상향식 등록이다. 자기 정보를 parent에게 저장하면 된다. 따라서 위 그림의 TLD server의 정보를 알고 싶으면 root에게 물어보면된다.
- client가 www.naver.com의 IP를 요청했을때
- Root DNS 서버에 접속 com DNS server의 IP를 질의한다.
- 응답받은 com DNS서버의 IP로 naver.com을 관리하는 DNS server의 IP를 질의한다.
- 응답받은 naver.com 관리 DNS server에게 www.naver.com의 IP를 질의한다.
- client는 www.naver.com의 IP를 획득한다.
root name server가 Authoritative(책임)DNS server 찾기 위해 접근한다. mapping을 한후 local name server에 mapping을 return 한다.
✍️특징
- Authoritative(책임) server이다.
- Root name server는 traffic이 집중되는 곳이므로 Root name server가 많을수록 좋다.
- 서로 동기화를 한다.
Root name server는 반드시 서로 동기화 해야한다. root name server를 기반으로 모든 서버로 계층화 되어 있기 때문에, 계층화 되어 있는 root name server들끼리 빠르게 동기화가 되지 않는다면, 느려지고 심하면 인터넷이 죽어버릴 수 있다.
정상적으로 사용하기 위해서는 root name server가 전세계에 현존해 있어야 하는데 특정 지역에 몰려있어 문제이다.
com,org,net 등과 같은 상위 레벨 도메인과 모든 국가의 상위 레벨 도메인에 대한책임이 있다.
- net TLD : Network solution maintains servers
- edu TLD : 교육
- 한국 :kr
- 일본 :jp
- 중국 :cac
- 프랑스:fr
✍️ 특징
- Local name server 바로 밑에 있는 name server들이다
- Authoritative(책임) 도메인 서버이다.
✍️ Authoritative(책임)DNS server란?
- 관리하는 zone에서 DNS 요청에 응답을 하는 네임서버
- DNS:set of zone file
- zone file:set of records
- 관리자가 설정한 네임정보만 반환
- resolver가 관리하는 캐시의 도메인 데이터등을 사용하지 않는다.
- primary 서버와 secondary 서버로 구성
- primary 서버:존에서 관리하는 모든 레코드의 최종 버전정보를 저장
- secondary 서버: primary서버의 백업
✍️특징
- 엄격한 계층 구조에 포함되어 있지 않다.
- ISP(인터넷 서비스 제공자:SKT,LG,KT ,회사, 대학교)는 최소 하나의 local name server(cache)를 갖는다.
* default name server 라고 불린다.- 호스트가 DNS 요청을 보내면 Local name server에 전달된다.
* Local name server는 전송된 질의를 DNS서버 계층으로 전달하도록 proxy를 동작한다.- Name 서버는 제공하지만 zonefile이 없어서 오류를 일으킬만한 내용은 존재하지 않는다.
- 도메인이 없으므로 상위 네임서버를 등록할 필요가 없다.
- 보안상 굉장히 중요해서, 반드시 존재해야 한다.
DNS서버가 DNS 요청에 대한 응답을 받을 때 그 응답을 local memory에 저장한다.
- DNS 서버는 일정 기간이 지나면 저장된 정보를 삭제한다.
- Local name server는 TLD 서버의 IP 주소를 저장 할 수 있다.
- 이러한 Caching은 local DNS server가 root server를 우회 할 수 있도록 한다.
- performance delay 측면에서 향상시킬 수 있다.
- internet의 DNS message들을 줄일 수 있다.
- DNS server가 DNS의 응답을 받았다면, mapping(hostname<->IP address)을 붙잡아서 저장한다.
- 일반적으로, Local name server에 TLD server가 캐시된다.
그래서 root name server를 자주 방문하지 않는다.
✍️ 만약, www.amazon.com을 접속해서 IP를 알아낸후에, www.naver.com을 접속했다면
Local은 root에게 com IP를 물어보지 않고 바로 com에게 naver.com IP를 물어본다. 이미 앞 상황에서 com의 IP를 알아버렸기 때문이다. 이렇게 IP를 저장하고 있는 것을 caching이라고 한다.
✍️캐시된 entry에서 TTL(time to live)
- 캐시된 entry들은 주어진 TTL이 끝나면 버려진다.
- 문제:host가 IP address를 변경했다면??
TTL이 만료될 때 까지 알수가 없다.- 해결:update/notify 메커니즘이 있다.(RFC2136)
✍️DNS
resource records(RR)을 저장하는 분산된 DB
RR format:(name,value,type,ttl)
✍️type
type=A
- name -> hostname
- value -> IP address
type=CNAME
- name -> alias name (실제 이름을 별칭으로 정해놓음)
- www.ibm.com의 실제 이름은 servereaset.backup2.ibm.com이다
- value -> 실제 이름
type=NS
- name -> domain
- value -> 해당 domain의 authoritative server의 hostname
type=MX
- value -> name과 연관된 mail server 이름
중앙집중식으로 하지 않고 분산해서 처리 하는 이유
서버 장애(인터넷 다운)
네임서버가 딱 한대만 있는데 이게 죽으면 네트워크가 살아 있어도 아무도 인터넷을 하지못함
*single point of failure(단일 장애 지점)
한곳만 고장나면 전체 시스템이 동작하지 않는 부분을 일컫는 말이다.
traffic의 집중
중앙에 있는 네임서버에 트래픽이 집중적으로 모인다
*트래픽:통신의 흐름을 지칭하는 말
중앙 서버까지 거리가 멀다.
중앙서버까지 어떤 사용자는 가깝지만, 어떤 사용자는 멀고, 어떤 사용자는 한 네트워크에 존재 한다.
관리가 어려움
많은 도메인 등록 정보를 전부 관리해야 하고 인력 또한 중앙 집중적으로 만들어야 하는데 규모 보다는 관리 문제가 심각
✍️두 종류
- Recursive queries
- iterative(non recursive) queries
✍️query type은 DNS query안에 bit에서 결정된다.
✍️Iterative queries
1.Host가 naver.com에 대해 local server에 요청을 보내면 local server는 root server에게 com의 IP를 물어보고 com은 다시 local server에게 com IP주소를 준다.
2.local은 com 관리 DNS server로 가서 naver.com의 IP주소를 물어보고 com관리 DNS server는 naver.com의 IP 주소를 준다. 이렇게 최종 IP 주소를 받을때까지 용청&응답을 계속해서 local name server가 반복하는 방법이다.
✍️Recursive query(by default)
1.Local Host가 naver.com에 대해 query를 보내면 Local DNS server가 root name server에 query를 보낸다.
2.root server는 자신의 server에 등록되어 있는지 검사한 다음 있으면 com 담당 서버에 요청을 한다.
3.recursive하게 실제 domain name을 가지고 있는 server까지 query가 이동하여 IP 주소를 얻는 방법이다.
이러한 방법은 root server에 너무 큰 부담을 준다는 단점이 있다.
✍️실제 DNS server 동작방식
실제로는 recursive query와 iterative query를 함께 사용함으로써 효율성을 높인다. 또한, 변환기를 통해 local name server에 recursive하게 query함으로써 client host의 resource 소비를 줄일 수 있게 하였다.