-
DNS - Domain Name SystemCS/컴퓨터네트워크 2023. 10. 3. 21:07
DNS란?
컴퓨터들은 지들끼리 IP 주소를 이용해 서로를 구별하고 정보를 주고받지만, 사람은 이진수로 표시되는 IP주소를 기억하기 쉽지 않다. 그래서 식별할 수 있는 문자로 주소를 만들어 사용하는데, 이를 도메인(Domain)이라고 한다.
도메인은 '루트'라는 역트리 구조로 구성되어있는데, 루트 도메인 바로 아래 단계를 1단계 도메인, 그 아래를 2단계 도메인 이런식으로 부른다.
이렇게 도메인 이름이 계층적으로 이루어져 있는 체계를 DNS라고 하는 것이다!
위 그림을 보면 이해가 쉬울 것이다.
루트 도메인 아래에 com, edu, org 등 우리가 익히 들어본 도메인들이 있다. 이들이 바로 1단계 도메인, 혹은 최상위 도메인이 되는 것이다.
그 아래를 보면 fhda라는 이름의 도메인이 위치하고, 그 아래 atc, 또 그 아래에 chal 도메인이 있다.
dig + trace
<dig 조회하고싶은 도메인 + trace> 명령어로 Dns의 조회 과정을 파악해볼 수 있다.
리눅스나 Mac OS에서 사용할 수 있다.
명령어가 없을 시 아래 링크를 참고하면 되겠다.
명령어를 사용해보기 이전에 우리는 기본적으로 DNS 조회 프로세스의 동작 방식을 알고있어야 한다.
사용자가 특정 도메인을 조회했을 때, (여기서는 cnu.ac.kr을 검색했다 가정하자.)
어떤 과정을 거치는지 알아보자.
Step 1. 사용자는 자신의 통신사 DNS서버에게 cnu.ac.kr을 아냐고 물어본다.
자신의 통신사에 대한 DNS서버는 다음과 같은 방법으로 검색해볼 수 있다.
(통신사 DNS서버, 기지국 DNS서버, Local DNS Server, Resolver - 모두 비슷한 의미를 갖는다.)
기본적으로 컴퓨터가 인터넷에 연결이 되면, 인터넷을 사용할 수 있게 IP를 할댕해주는 통신사에 해당하는 DNS서버가 등록된다.
나의 경우, KT를 사용하기 때문에 KT 기지국의 기본 DNS인 168.126.63.1이 세팅되어있다.
각 통신사에 대한 DNS서버 - 통신사 DNS서버가 cnu.ac.kr의 주소를 갖고있다면 (Authoritative DNS server라면)
해당 ip주소를 알려주고 끝난다. 하지만, 통신사 DNS서버가 이 주소를 갖고있을 리가 없다..
-통신사 DNS서버가 해당 주소를 모른다면,
--> step 2
Step 2. 통신사 DNS는 Root DNS서버에게 cnu.ac.kr의 ip주소를 물어본다.
모든 DNS 서버들은 Root DNS Server의 주소를 기본적으로 갖고있고, 모르는 도메인이 오면 Root DNS에게 물어본다.
당연하게도 Root DNS도 해당 도메인의 IP를 모를 수 있지만, Root DNS는 cnu.ac.kr 중 kr의 주소는 알고 있다.
-> step 3 기지국 DNS에게 kr DNS주소를 주며, "kr DNS 주소에 가서 물어봐라!" 라고 한다.
Step 3. 통신사 DNS는 Root DNS에게서 받은 kr DNS의 주소를 갖고 kr에게 cnu.ac.kr을 물어본다.
kr DNS가 해당 도메인의 IP를 알면 알려주겠지만,(아마 모를 것이고) 대신 ac.kr의 주소를 알려준다.
이런 식으로 재귀적으로, 찾을 때 까지 반복하는 것이다.
root@DESKTOP-OC9I3P0:/mnt/c/WINDOWS/system32# dig cnu.ac.kr +trace
; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> cnu.ac.kr +trace
;; global options: +cmd
. 0 IN NS j.root-servers.net.
. 0 IN NS a.root-servers.net.
. 0 IN NS l.root-servers.net.
. 0 IN NS b.root-servers.net.
. 0 IN NS m.root-servers.net.
. 0 IN NS f.root-servers.net.
. 0 IN NS g.root-servers.net.
. 0 IN NS d.root-servers.net.
. 0 IN NS h.root-servers.net.
. 0 IN NS i.root-servers.net.
. 0 IN NS e.root-servers.net.
. 0 IN NS c.root-servers.net.
. 0 IN NS k.root-servers.net.
a.root-servers.net. 0 IN A 198.41.0.4
b.root-servers.net. 0 IN A 199.9.14.201
c.root-servers.net. 0 IN A 192.33.4.12
d.root-servers.net. 0 IN A 199.7.91.13
e.root-servers.net. 0 IN A 192.203.230.10
f.root-servers.net. 0 IN A 192.5.5.241
g.root-servers.net. 0 IN A 192.112.36.4
h.root-servers.net. 0 IN A 198.97.190.53
i.root-servers.net. 0 IN A 192.36.148.17
j.root-servers.net. 0 IN A 192.58.128.30
k.root-servers.net. 0 IN A 193.0.14.129
l.root-servers.net. 0 IN A 199.7.83.42
m.root-servers.net. 0 IN A 202.12.27.33
a.root-servers.net. 0 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 0 IN AAAA 2001:500:200::b
;; Received 966 bytes from 172.25.64.1#53(172.25.64.1) in 1 ms
kr. 172800 IN NS b.dns.kr.
kr. 172800 IN NS c.dns.kr.
kr. 172800 IN NS d.dns.kr.
kr. 172800 IN NS e.dns.kr.
kr. 172800 IN NS f.dns.kr.
kr. 172800 IN NS g.dns.kr.
kr. 86400 IN DS 61615 8 2 ED570AADC88713CE2775FB8AFFB2AD782D056EA21D0677E147F2FB7B F54404DA
kr. 86400 IN RRSIG DS 8 1 86400 20231016050000 20231003040000 46780 . rM7iPq3TiJ5M9oru2Y89qerxP9xCt8SfvavB+vMH8EzJCZLGvdTxoNfK dXo81KC26p9S7sYX7wyxF8el7u/rlWNoEqp/ZgjXfVc6XjBtWlu1W0tj OBUbTlKlpnSEhxJAZJ7ITOxjh/JruZT4t1HZNioVMSXlmIOXUtzDD9ST x2U8Dt9haN39DMgOBGdHGMv084kbtJCxOJLjB9+xBNX7TtijjOgMqYSx h2JJ8zHUc6+hxfo3fb9sMfrM3QoXNtAFDecmvSxKECoeG50uI4Vof3xz n7F2I34pjrJDrn9sCav6N/ZIXjJZPiFm+araIhMS51g57fP4XMNfqY91 X2iOPg==
;; Received 681 bytes from 193.0.14.129#53(k.root-servers.net) in 46 ms
cnu.ac.kr. 86400 IN NS baekma.cnu.ac.kr.
HODIKUBDH5IJLGEM475K0JOEFK8II4V4.ac.kr. 900 IN NSEC3 1 1 10 96E920 MGQ1UKCVI25AAT5I82F58LGOGV103R7Q NS SOA RRSIG DNSKEY NSEC3PARAM
HODIKUBDH5IJLGEM475K0JOEFK8II4V4.ac.kr. 900 IN RRSIG NSEC3 8 3 900 20231101192028 20231002192028 53658 ac.kr. K5jIjkIqiwq/xLBGyS/FgOkzGzeTWAFAT0iH2lZmNbncqYDCNb6/Ok6Q dEC2285ShorYd4i4FFvLdtdQ8lm1n4vhfItjRbMq9d8O6tEb31Z0gPtv pd1OiUef8iNCQQcoC3skrnquXzkbrOhEV2AnokS2ZAZcaUeOVvgiqpM/ 8qk=
;; Received 323 bytes from 202.31.190.1#53(g.dns.kr) in 11 ms
cnu.ac.kr. 28800 IN A 168.188.253.130
cnu.ac.kr. 28800 IN NS baekma.cnu.ac.kr.
cnu.ac.kr. 28800 IN NS baekma2.chungnam.ac.kr.
cnu.ac.kr. 28800 IN NS baekma3.cnu.ac.kr.
cnu.ac.kr. 28800 IN NS baekma2.cnu.ac.kr.
;; Received 214 bytes from 168.188.1.1#53(baekma.cnu.ac.kr) in 2 ms
root@DESKTOP-OC9I3P0:/mnt/c/WINDOWS/system32# ^C
root@DESKTOP-OC9I3P0:/mnt/c/WINDOWS/system32# /etc/resolv.conf
-bash: /etc/resolv.conf: Permission denied
root@DESKTOP-OC9I3P0:/mnt/c/WINDOWS/system32#위와 같이 dig + trace 명령어를 사용하여, DNS 프로세스 과정을 살펴볼 수 있다.
'CS > 컴퓨터네트워크' 카테고리의 다른 글
Http 서버 부하 테스트 (0) 2023.10.05 소켓을 사용한 HTTP 서버 만들기 - 파이썬 (0) 2023.09.26