[네트워크] DNS(Domain Name Server)의 원리..
http://www.kldp.org 등의 도메인을 주소창에 입력하게 되면
우선 도메임 네임서버에 가서 해당주소의 아이피를 받게 되고 그
아이피를 가지고 접속이 이뤄진다고 알고있습니다.
그런데 도메인 네임 서버를 운용하는곳이 많은데요..
그 안의 도메인 정보는 같아야만 하니까..
예를 들어 도메인 등록기관에서 도메인을 등록하면
도메인 네임서버를 운용하는곳에선 그 정보를 어떻게 알 수 있는지.
어떤식으로 공유가 이뤄지는지 궁금했습니다.
책에서는 루트네임서버와 로컬네임서버라고 나와있습니다.
예를들어 linuxga.joayo.net에 관한 정보가 로컬네임서버에 없으면
로컬네임서버는 루트네임서버에 질의하게 되고
루트네임서버는 net네임서버를 참고하라고 알려주고
net네임서버는 로컬네임서버에게 joayo.net의 네임서버를 알려주고
로컬네임서버는 ns.joayo.net네임서버에게서 해당도메인의 아이피 주소를
알게된다고 설명되어있습니다.
일반적으로
ISP업체의 DNS 주소인
리코넷 168.126.63.1
보라넷 164.124.101.2
두루넷 210.117.65.100
하나로 210.94.0.7
이런것이 다양한 로컬네임서버인거 같은데요..
위 내용들을 바탕으로 생각을 해보면
모든 컴퓨터의 도메인들은 도메인의 종류에따라서
해당 네임서버에 각각 소속되어있게 되는거 같은데요...
그렇다면 루트네임서버는 전체 네트워크(모든인터넷)에서 유일한건가요?
설명부탁드립니다.
http://doc.kldp.org/KoreanDoc/html/Power
http://doc.kldp.org/KoreanDoc/html/PoweredByDNS-KLDP/
위 문서가 그림으로 잘 설명되어 있네요.
공유의 개념보다는 관리의 개념이 더 적합할 것 같다는 생각이 듭니다.
즉, .com, .net, .org는 최 상위 관리서버가 있어서 이름을 얻거나 할때 그쪽 DNS로
찾아가게 될것이고 그 이후에 각 이름별 등록기관으로 찾아가고 최종적으로 로컬 IP가
주어지는것이겠죠.(무척헷갈리네요. :))
물론 내부적으로 DNS를 운영하게 되면 해당 이름관리서버에 그 DNS를 등록만 시켜주고
그다음에는 내부적인 DNS가 이름에 따라서 적절한 동작을 해주는것이기 때문에 자료가
중복되는 일은 없겠죠.
제가 설명한것이 복잡하니 위 문서에 있는 그림을 보시면 빠르게 이해할 수 있을겁니다.
------------------------------
좋은 하루 되세요.
Re: [네트워크] DNS(Domain Name Server)의 원리..
잠깐동안이지만 "리코넷이 어디지??" 하면서 여러생각을 했습니다... ㅡㅡ;;
굴지의 ISP업체들과 나란히 나열돼있어서 새로생긴 업체인가했습니다.
리코라 하여 CDRW만드는 그 리코와 관련있는가도 생각했고, 168.126.63.1 이 한국통신 DNS라 한국통신에 분란이 있었거나, 사내벤처같은게 생긴게 아닌가했었습니다.
^^;;
DNS 서버의 원리와 구현
그런것이 아니라 일단 물어보신 질문의 가장 본질적인 질문부터 대답하자면... 최상위에 어떤 서버가 모든것을 관리하는 것이 아니라 분산 데이터베이스 개념으로 운영되고 있다... 입니다.
알고 계시겠지만 DNS는 인간의 가독성을 높이기 위해 ip주소를 인간의 언어(보통 영어...)로 포워딩해주거나 그 반대의 일을 해주는 역학을 하는 서버입니다.
인터넷 초기 시절에는 ARPAnet에서는 host파일로서 현재의 DNS역할을 수행했죠. 그때 host파일을 관리하던 곳은 NIC(Network Information Center)입니다. 그러나 인터넷이 급속도로 팽창하면서 NIC 혼자서 모든 인터넷의 이름풀이를 담당하는 것이 어렵게되고 host파일을 유지, 관리하는 것도 문제가 되었습니다.
그래서 등장한 것이 도메인 네임을 계층형 구조에 맞추어 구성하고 각 계층별로 해당 도메인을 담당하는 시스템을 따로 두는, 분산 데이터베이스 구조 모델을 채택하게 되었습니다. 그래서 각 계층별로 해당 이름풀이 권한이 위임되어 있는 구조로 DNS를 구성하였습니다.
예를 들어 설명을 드리겠습니다. 만약 abcd.or.kr이라는 사이트가 있으면 이는 .라는 최상위 루트 도메인과 이의 서브 도메인 kr, or로 이루어져 있습니다. 그리고 호스트 이름은 abcd가 됩니다.
최초 .kr의 최상위 도메인 서버로 접속을 하여 .or.kr 이라는 도메인 서버의 주소를 읽어 옵니다. 그럼 그 서버로 접속하여 abcd라는 머신의 주소를 읽어오고 이 과정이 역순으로 진행하면서 abcd.or.kr의 주소를 넘겨줍니다. 그럼 최종적으로 도메인을 질의했던 머신(내 컴퓨터의 브라우저)에 도메인에 대한 머신 주소가 돌아옵니다.
이렇게 복잡한 과정을 줄이기 위해 요청받은 이름 풀이를 일정기간 별도로 저장해 두어 다음에 똑같은 질의에 빠른 응답을 할 수 있도록 하는데, 이러한 일을 처리하는 DNS서버를 캐싱서버라고 합니다.
이런 도메인은 전세계에서 유일해야 하기 때문에 특정 기관들이 담당하게 됩니다. 우리나라의 경우 http://www.nic.or.kr이 그것을 담당하죠. 만약 그렇지 않고 자신만의 DNS서버를 이용하여 DNS 클라이언트로 지정된 사람만이 해당 도메인을 사용하게 할 수 있습니다. 물론 외부에서 접속은 되지 않겠죠?
void main(void)
{
char *brain;
brain = malloc(sizeof(stress));
free(brain);
}
뭐든지 답은 간단한데서 시작한다.
답변감사합니다.
도메인에 관한 정보가 분산되어서 관리 되고 있다는것은 잘 알겠습니다.
그런데.. 궁금한것은..
http://doc.kldp.org/KoreanDoc/html/PoweredByDNS-KLDP/resolving.html
알려주신 문서의 내용에서도 나와있듯이..
어떠한 형태의 도메인을 가지고서 해당IP를 찾더라도..
로컬네임서버에서 처음에 방문하는곳은
root 네임서버입니다.
(root네임서버 자체에는 실제 아이피에 관한 데이터는없겠지요?)
바로! 이 root네임서버가 모든인터넷에서 유일한것이 아니란것인가요?
외국에서 접속했을경우에 들어가게되는 root 네임서버와
우리나라에서 접속했을 겨우에 들어가는 root네임서버가 다른가요?
우리나라에선 이것을 http://www.nic.or.kr가 담당하고 있다는것인가요?
나라마다 root 네임 서버가 한개씩 있다면 그 안에서의 정보는 어떻게 공유하는지 궁금합니다.
또 만약 유일하다면.. 서버는 어디서 운용을 하는것인지 궁금합니다.
설명부탁드립니다.
Re: 답변감사합니다.
보통 네임서버를 설정할 때, root 서버에 대한 정보들을 가지고 있게 됩니다.
bind 의 경우 named.conf 에 보시면
zone "." IN {
type hint;
file "global/named.root";
};
와 비슷하게, type 이 hint 인 설정이 있습니다. 이 파일 안에 root 서버들의 정보가 들어가게 됩니다. 이 파일의 경우 보통 배포본에서는 기본적으로 제공을 하고 있으니, 유저레벨에서는 특별히 따로 설정을 하지 않아서 모르시는 분들이 꽤 됩니다.
그리고, root 서버의 관리는 해당 최상위 도메인을 관리하는 회사에서 유지를 합니다. com/net 의 경우에는 verisign 이 관리를 하지요.
얼마전에 우리나라에서 유치했다는 root 서버 J.ROOT-SERVER.net. 는 정식 J 서버가 아니라 J 서버의 mirror 서버 입니다.
Re: 답변감사합니다.
아무래도 root 네임서버라는 용어자체 때문에 더욱 혼동을 하시는것 같습니다. 제가 처음에도 말씀 드렸듯이 인터넷 초기 단계에서는 하나의 DNS서버를 운영했습니다. 그러나 지금은 분산 데이터베이스 구조입니다.
구체적으로 설명을 드리자면... 쉽게말해...
일단 root네임서버가 존재하고 그 하위에 모든 서버들이 존재합니다. 그러니까 root네임서버는 모든 사이트의 주소에 관한 자료를 다 가지고 있을 필요가 없다는 말입니다. 단지 top level에 해당하는 주소만 가지고 있으면 됩니다.
만약 kr으로 끝나는 국내 도메인의 경우에는 제가 말씀드렸던 http://www.nic.or.kr 에서 관리를 하는데 이곳 서버가 바로 kr으로 끝나는 국내 도메인의 최상위 서버입니다. 만약 제가 abc.or.kr이라고 질의를 하면 최초 로컬 네임서버에 접속하여 물어봅니다. 만약 예전에 한번 캐싱된 정보라면 바로 아이피 포워딩이 될 것이고 아니면 위에 제가 설명드린 것처럼 루트서버에서 kr서버로, kr서버에서 or.kr서버로, or.kr에서 abc.or.kr서버로 질의해서 abc.or.kr서버는 아이피에 대한 정보를 돌려줍니다. 그럼 다시 역순으로 돌아오는 것이죠.
그렇다면 abc.com으로 끝나는 주소는 어떻게 될까요? 당연히 루트 서버에서 com서버로 질의합니다. 그럼 com으로 끝나는 모든 주소는 이쪽 사이트에서 관리하여 책임지고 질의에 대한 응답을 다시 되돌려 주는 것입니다. 즉 다시말해 각각 .로 구분하는 주소에 대한 서버가 분산환경으로 구축되어 있는 것이지요.
kr 밑에는 or, pe, co, go... 등등 서브서버들이 있을것이고 jp도 마찬가지 입니다. 그렇지만 kr 최상위 서버와 jp 최상위 서버가 서로 독립적으로 존재합니다. 분산 데이터베이스 구조이기 때문입니다.
보통은 나라별로 네임서버가 있을 것이고 그 서버 하위에 네임서버들이 구체적인 것을 또 담당하게 됩니다. 계층적 구조이기 때문에 최상위 네임서버들은 top level네임서버들 정보만 있으면 되고, kr같은 top level네임서버들은 구체적인 주소까지 알 필요가 없습니다. 단지 or, pe, co, go...와 같은 kr의 하위 네임서버의 주소만 알면 됩니다. 그럼 그곳에다 질의하면 그곳 서버들이 구체적인 사항을 대답해 주기 때문입니다.
예를들어 내가 네띠앙에서 fred.co.kr이라는 도메인을 신청하면 네띠앙 네임서버는 이 주소를 co네임서버에 등록합니다. 그러면 끝이죠... 나중에 루트네임서버에서부터 질의하면 kr이 co에게, co가 네띠앙 네임서버에 물어볼테구 그럼 네띠앙 네임서버에서 질의에대한 응답을 해 줄테니까요...
이제 어느정도 대답이 되셨는지... ^^;
아... 참고로... com, org, net와 같은 주소는 http://networksolution.com에서 관리하고 인터넷의 모든 도메인을 최상위에서 관리하는 곳은 인터닉 - interNIC(Internet Network Information Center)입니다.
http://www.terms.co.kr/InterNIC.htm을 참조해 보세요.
void main(void)
{
char *brain;
brain = malloc(sizeof(stress));
free(brain);
}
뭐든지 답은 간단한데서 시작한다.
Re: 답변감사합니다.
설치된 서버는 f root server 입니다. 독자적인 AS를 가지고 국내 ISP와
피어링을 맺고 있습니다.
[quote="gyxor"]어떠한 형태의 도메인을 가지고서 해당IP를
gyxor님이 궁금해 하시는게 "루트네임서버"(.) 인거 같은데..
제가 알기론 전세계의 도메인 네트웍을 하나의 리눅스 박스로 보시는게 이해가 편하다고 들었습니다.
예를들면, abcd.or.kr의 도메인네임은 abcd.or.kr. 에서 . 이 생략된 형태입니다.
. 은 전세계 도메인 네트웍의 루트이구요.
루트네임서버는 상징적인 의미이고 따로 관리하는 기관은 없습니다.
유닉스의 디렉토리구조와 비슷하게 생각하시면 될거 같습니다.
. => /
com => /bin
org => /home
mil => /var
kr => /usr
co => /usr/local
이런 식으로요..
Debian Spirit !!!
좋은 답변 고맙습니다.
http://networker.jinbo.net/columns/2k0515.html
내용중에서..
위 내용은 몇년전에 쓰여진거 같은데요..
http://networker.jinbo.net/nw-news/show.php?docnbr=37
내용중에서..
위 내용중에..루트네임서버가 나옵니다.
자료글에는 우리나라엔 없는것으로 나오는데..
아마 과거에 쓰여진 글이라서 그런가 봅니다.
그럼..
f.root-server가 바로 그 root name server인가요?
[f.root-server] 사이트를 살펴보니
Site Code Location
AKL1 Auckland, New Zealand
BNE1 Brisbane, Australia
CDG1 Paris, France
DXB1 Dubai, UAE
GRU1 São Paulo, Brazil
HKG1 Hong Kong, China
JNB1 Johannesburg, South Africa
LAX1 Los Angeles, CA, USA
LGA1 New York, NY, USA
MAD1 Madrid, Spain
PAO1 Palo Alto, CA, USA
PEK1 Beijing, China
ROM1 Rome, Italy
SEL1 Seoul, Korea
SFO2 San Francisco, CA, USA
SIN1 Singapore
SJC1 San Jose, CA, USA
SVO1 Moscow, Russia
TPE1 Taipei, Taiwan
YOW1 Ottawa, ON, Canada
총 20개이고 미국에는 5개 우리나라엔 1개네요..
우리나라에서도 얼마전에 유치했다는 루트네임서버가
알려주신 내용대로
SEL1 Seoul, Korea
맞네요..
---> http://www.isc.org/index.pl?/ops/f-root/
isc사이트 찾은 위치입니다.
For your travel planning purposes, San Francisco Airport (SFO) is approximately a 15 minute drive from our location.
Internet Systems Consortium, Inc.
950 Charter Street
Redwood City, CA 94063
USA
첫째,
그럼 위주소의 미국의ISC라는 업체(?)가 루트네임서버의 모든것을
담당하고 있는것인가요?
(주관하는곳이 한곳이라서..
20개의 루트네임서버의 데이타베이스를 동일하게
유지하는것은 어렵지 않을거 같은데요..)
위 내용에서 interNIC을 검색해본 결과
둘째, 인터닉(interNIC)은 루트네임서버와는 관계가 없는것이 아닌가요?
설명 부탁드립니다.
셋째, nullnull 님께서 답변해주신 내용은 좀 헷갈립니다.
설명부탁드립니다.
3가지 답변부탁드립니다.
Re: 좋은 답변 고맙습니다.
글쎄요... 제가 쓴 글을 정확하게 이해하지 못하신듯 합니다.
제가 링크시켜 놓은 그대로 interNIC은 최상위 도메인 등록기관이었고 지금은 ICANN으로 바뀌었습니다.
최상위 도메인을 특정 국가가 관리하지 않고 비영리 단체에게 하게 하기 위함입니다.
등록기관과 루트네임서버랑은 당연히 다르죠... 서버는 위에 여러글에도 있듯이 단지 서버일 뿐... ^^;
여담입니다만...
현 인터넷 도메인 체계의 문제는 루트 dns서버가 세계적으로 몇 되지 않는다는 사실입니다.
인터넷 자체는 서로다른 네트워크끼리 하나의 커다란 네트워크를 구성하는 것인데, 도메인 서버는 분산환경이긴 하지만 실제로 루트네임서버라는 중앙 집중의 수렴점이 존재합니다. 유닉스 파일 시스템으로 치면 루트(/)와 같죠. 루트 디렉토리를 삭제하면 끝장나듯이... ㅋ 인터넷 도메인도 마찬가지 입니다.
전 세계적으로 유명한 해커가 맘만 먹으면 전세계 인터넷을 30분 안에 다운시켜 버릴 수 있다고 했는데... 각자 흩어져있는 네트워크를 일일이 해킹하는것은 자살행위입니다.
하지만 인터넷에도 수렴점인... 도메인 루트 서버가 존재합니다. 바로 이것이 타겟이죠!!! 전세계 몇안되는 dns서버가 퍽나면 세계 인터넷이 마비되죠... ^^;
그만큼 dns서버는 체계적이고 깔끔한 구조를 취하고 있지만, 중앙집중식은 그에 따르는 크나큰 위험이 존재하는 것입니다.
void main(void)
{
char *brain;
brain = malloc(sizeof(stress));
free(brain);
}
뭐든지 답은 간단한데서 시작한다.
.
좋은 답변 감사합니다. ^^
댓글 달기