해당 포스팅은 공부 목적으로 작성된 포스팅입니다. 왜곡된 내용이 포함되어 있을 수 있습니다.
인간이 이름으로 구분하듯이, Internet host도 hostname 을 가지고 있다. www.facebook.com, www.google.com, 이 그런 예시이다. hostname은 host 정보를 거이 제공하지 않는다. hostname은 router에 의해 구별되기 위해 IP address 라는 일련의 문자열 가지고 있다. IP address는 계층적인 구조를 가지고 있는데, 예를들어 121,7,106,83에서 각각의 구간은 $0~255$ 값을 가지고 Internet 주소에 대한 의미를 가지고 있다.
2.4.1 Services Provided by DNS
host를 식별하기 위해 hostname또는 IP address를 사용하는데, 사람들은 hostname을 좋아하는데 반에 router는 IP address를 더 선호한다. 따라서 hostname을 IP address로 변경해주는 directory service가 필요한데 DNS(domain name system)이 바로 그것이다.DNS는 DNS server에 의해 구축된 분산 데이터베이스이자 host가 분산 데이터 베이스에 쿼리를 날릴수있는 application-layer protocol이다. DNS server는 UNIX machine으로 Berkeley Internet Name Domain software(BIND)에서 실행되고 있다. DNS protocol는 UDP위에 실행되고 53 포트를 사용한다.
DNS는 다른 application-layer protocol에 의해 사용되기도 한다.(HTTP, SMTP) 예를 들어 www.someschool.edu 로 request를 보낼때 HTTP request를 보내기 이전에 host는 IP adress를 획득한다.
- 동일한 user machine이 DNS application을 실행한다.
- browser는 ww.someschool.edu 로부터 DNS application에게 hostname을 보낸다.
- DNS client는 hostname을 포한한 query를 DNS server에게 보낸다.
- DNS client는 응답을 받아 IP address를 반환한다.
- browser가 IP address는 받으면 TCP connection을 80번 포트에 열어 HTTP 통신을 시작한다.
이렇게 통신전에 DNS 통신으로 인해 통신 지연이 발생한다. 따라서 가까운 DNS server에 IP address를 cashing하여 사용한다면 더좋은 성능을 보일 것이다.(분산 환경을 지원하는 이유이다.) DNS는 몇가지 기술을 지원한다.
- Host aliasing: host는 한개이상의 hostname을 가질 수 있다. hostname들 중에 표준 hostname이 존재한다. 일반적으로 다른 별칭들이 더 기억하기 쉬운 구조이다.
- Mail server aliasing: e-mail server address를 더 쉬운 형태로 제공한다, user@yahoo.com 에서 yahoo.com은 hostname 인데 표준 hostname은 relay1.west-coast.yahoo.com 이다. 실제로는 회사 서버와 메일 서버를 동일한 alias를 제공한다(naver.com에 접속할 수 있고, naver.com으로 메일을 보낼 수 있다)
- Load distribution: DNS는 분산 환경을 제공한다 .cnn , com와 같이 트레픽이 큰 server는 복제하여 각각의 server는 다른 IP address를 가지게 된다. 각 응답에 대해 address의 순서를 변경하면서 트레픽을 분산 시킨다(잘 이해되지 않는다)
2.4.2 Overview of How DNS Works
이제 hostname이 어떻게 IP address로 바뀌는지 살펴보자 client에서 hostname을 IP address로 변환하길 요청하면 network에 query message가 보내진다. 모든 DNS quert는 UDP datagram내에서 53 포트에 보내진다. DNS는 단순한 변환을 제공하는 service이다. 그러나 내부에는 수많은 DNS server와 application-layer protocol이 존재한다.
DNS의 단순한 구조는 DNS server가 오직 한개로 내부에 모든 정보가 mapping되어 있는 상태이다. 그러나 해당 구조에서는 다음과 같은 문제가 있다.
- A single point of failure: 만약 DNS server가 망가지면 모든 Internet에 영향을 미친다.
- Traffic volume: 하나의 DNS server가 모든 DNS query들을 담당해야한다.
- Distant centralized database: DNS server는 모든 client와 가까운 것이 아니므로 delay로 이어질 수 있다.
- Maintenance: DNS server는 모든 Internet host 정보를 가지고 있어야하기 때문에 변경이 빈번하게 일어난다.
이러한 학장 이슈 때문에 DNS는 세계에 퍼져있는 분산된 수많은 server를 사용한다. mapping 정보는 DNS server에 분산되어 있다. 어림잡아서 DNS server에는 3가지 클래스가 존재한다.
- root DNS server : 전세계 1000 정도 존재, 13개의 다른 root server의 복사본으로 12개의 조직에 의해 관리된다. TLD server의 IP address를 제공한다.
- TLD (top-level domain) : com, org, net, edu, kr 이 이에 해당하고 network 사회 단체가 TLD를 지원하고 있다.
- authoritative DNS servers : 인터넷에 공개되어 있는 엑세스 가능한 host에 대해서 hostname을 IP address로 mapping되어 있는 record를 제공한다. 조직에서 자체적인 DNS server를 두기도 한다.
DNS client는 먼저 root DNS에 교신하여 IP address에 알맞는 TLD server를 받는다. 이후 TLD server에서 authoritative server의 IP address를 획득하게 된다. 이러한 DNS server 이외에도 local DNS server가 존재한다. local DNS server는 계층구조에 포함되어 있지 않고, ISP에 존재하는 local DNS server에 존재하게 된다. 이러한 DNS는 host에 근접하게 되어 host가 DNS query를 생성하면 local DNS server에 query가 전송되게 되고 proxy의 형태로 DNS 계층 서버에 전달하게 된다.
예를 들어 host가 cse.nyu.edu가 gaia.cs.umass.edu 의 IP address를 얻고자 할때, NYU.s 의 local DNS server는 cse.nyu.edu(dns.nyu.edu)이고, authoritative DNS server는 gaia.cs.umass.edu(dns.umass.edu)이라고 하자.
- cse.nyu.edu가 local DNS server에게 DNS query를 보낸다.
- quert에는 gaia.cs.umass.edu(hostname)이 포함되어 있다.
- local DNS server는 query message를 root DNS server에게 보낸다.
- root DNS server는 local DNS server에게 edu를 담당하고 있는 TLD server를 응답한다.
- local DNS server는 TLD server에게 umass.edu 에 해당하는 authoritative DNS server를 요청한다
- local DNS server는 dns.umass.edu에게 gaia.cs.umass.edu IP address 주소를 요청한다.
이렇게하면 8번의 DNS message가 보내지고, 요청과 응답이 각각 4번씩 일어난다. 나중에 DNS caching을 통해 traffic을 줄여보자. 만약에 중간에 DNS server가 하나더 있을경우(조직에서 자체적으로 DNS server를 소유하고 있는 경우 )Authoritative DNS server의 반환값이 조직의 DNS server이기 때문에 쿼리가 2번 더 발생하여 총 10번의 쿼리 발생한다.
이때까지는 DNS caching을 배제하고 생각하였다. 실제로 DNS caching을 통해 delay을 줄이고, DNS message수를 줄일 수 있는데, 방법은 간단하다 DNS server에서 다른 DNS server로의 요청에 대한 응답값을 저장하는 것이다. hostname 과 IP address를 pair로 하여 cashing하고, DNS 서버의 권한이 없더라도 IP Address를 제공할 수 있게된다.(변경되지 않기 때문에 주기적으로 폐기해야한다)
예를들어 host apricot.nyu.edu에서 dns.nyu.edu의 IP address를 얻었다면, 이후에 host kiwi.nyu.edu가 dns.nyu.edu 동일한 host에 대한 IP address를 요청하였다면 local DNS server에서는 다른 query를 요청할 필요없이 IP Address를 반환한다. local DNS server는 TLD server의 IP address를 caching 하므로 위 그림 처럼 local DNS 서버가 root DNS server로 우회할 수 있다(실제로 가능한건가 아니면 그렇게 보이는 건다) 실제로 caching의 작은 부분을 제외하고 모두 DNS query가 root DNS server로 우회된다.
2.4.3 DNS Record and Messages
DNS server는 분산 DNS database를 hostname와 IP address가 mapping 되어 있는 resource records(RRs)에 저장한다. resource records는 4개의 tuple로 구성된다.
TTL는 resource record를 생명주기으로 해당 기간에 resource에 cache에서 제거되야함을 의미한다.
TYPE
- Type=A : Name은 hostname이고, Value는 IP address이다.
- Type=NS : Name은 domin이고 Value는 authoritative DNS server의 host name이다.
- Type=CNAME : Name은 hostname이고, Value는 해당 hostname의 표준 hostname이다.
- Type=MX : mail server의 simple aliase를 제공한다. 사용자는 mail server와 다른 server를 동일 alias를 사용할 수 있다. MX는 mail server, CNAME은 server라고 생각하면 된다.
DNS server가 authoritative하다면 Type A record를 가지고 있고, 그렇지 않다면 Type NS record를 가지고 있다(authroitative server name을 받아서 다시 Type A 를 통해 IP Address를 획득해야한다.)
DNS message는 오직 2가지의 형태만 가지고 있다.
첫번째 12 byte는 header 부분으로 첫번째 field는 16 bit number로 query 식별자이다. 식별자는 응답 message에 복사되어 응담과 quert를 일치시킨다. Flags field에는 여러가지 flag가 있는데, 1 bit는 query/reply flag(query는 0, reply는 1) 1 bit는 authoritative flag로서 응답 message에 설정된다. 1 bit는 재귀가능한 flag로 요청에 DBS server에 해당 record가 없을때 재귀 요청을 위해 설정된다. header에는 4개의 부븐이 있는데 header에 이어하는 4가지 data 유형으로 발생 수를 표시한다.
question section은 query에 대한 정보가 들어가고 내부에 name field, type field가 들어간다.
answer section에는 resource record가 들어 있고, 각각의 record는 type을 가진다. 응답은 다양한 RRs로 반환된다.
authority section는 authoritative server의 record를 담고 있다,
additional section은 도움을 줄 수 있는 record들이 포함되어 있는데...
nslookup program을 통해 DNS server에 query를 보낼 수 있다. 반환 값으로 record를 확인할 수 있다.
record를 DNS server에 등록시키기 위해서는 다양한 등록 기관으로 통해 등록한다.