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(반복적 질의) -> 이리저리 물어보는거(책임회피)
- 호스트가 local DNS 서버에 요청을 함
- local DNS 서버에 없으면 root DNS 서버에 알고 있냐고 물어봄
- root DNS 서버가 나는 모르지만 TLD DNS 서버는 알거라고 해서 TLD DNS 서버를 local DNS 서버에 알려줌
- TLD DNS 서버에 물어봄
- TLD DNS 서버가 나는 모르지만 authoritative DNS 서버는 알거라고 해당 주소 알려줌
- authoritative DNS 서버에 물어봄
- 원하는 ip 주소 알려줌
- local DNS 서버에 캐쉬로 저장하고 호스트에게 반환해줌
- recursive query(재귀적 질의) -> 본인이 직접 물어보는거(책임짐)
- 호스트가 local DNS 서버에 요청을 함
- local DNS 서버에 없으면 root DNS 서버에 알고 있냐고 물어봄
- root DNS 서버가 TLD DNS 서버에 물어봄
- TLD DNS 서버가 authoritative DNS 서버에 물어봄
- authoritative DNS 서버는 알고 있기 때문에 주소 알려줌
- TLD DNS 서버가 받아서 root DNS 서버에 알려줌
- root DNS 서버가 받아서 local DNS 서버에 알려줌
- 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
서강대학교 기초컴퓨터네트워크 강의자료