DNS는 왜 그렇게 작동합니까?


40

이것은 DNS (Domain Name Service)에 대한 정식 질문 입니다.

DNS 시스템에 대한 이해가 정확하면 .com 레지스트리에 도메인 (www.example.com)을 DNS 서버에 매핑하는 테이블이 있습니다.

  1. 장점은 무엇입니까? 왜 IP 주소에 직접 매핑하지 않습니까?

  2. 다른 IP 주소를 가리 키도록 DNS 서버를 구성 할 때 변경해야하는 유일한 레코드가 DNS 서버에있는 경우 프로세스가 즉각적이지 않은 이유는 무엇입니까?

  3. 지연에 대한 유일한 이유가 DNS 캐시 인 경우이를 무시할 수 있습니까? 그래서 실시간으로 무슨 일이 일어나고 있는지 알 수 있습니까?


18
이 질문을 마이그레이션 / 닫으려는 모든 사람들에게 : 여기에 남겨주세요. 여기에는 사랑이 있고 부드럽게 돌볼 수있는 집이 있습니다. 그리고 여기서 "DNS는 어떻게 작동합니까?"라는 질문을 정식 답변으로 지정할 수 있습니다.
Mark Henderson

You can not able full understand DNS unless you are name Paul Mockapetris, Paul Vixie or Cricket Liu. twitter.com/DEVOPS_BORAT/status/249006925767909376
Anthony Hatzopoulos 2016 년

답변:


87

실제로, "도메인 (www.mysite.com)을 DNS 서버에 매핑하는 테이블을 보유하고있는 하나의 중앙 레지스트리"보다는 여러 계층의 계층이 있습니다.

- 모든 최상위 도메인에 대한 NS (이름 서버) 레코드 : 중앙 레지스트리 항목의 작은 집합을 포함 (루트 서버)있다 .com, .net, .org, .uk, .us, .au, 등이.

이러한 서버에는 다음 레벨 다운을위한 NS 레코드 만 포함됩니다. 하나의 예를 선택하려면에 대한 네임 서버 .uk도메인은 단지에 대한 항목이 .co.uk, .ac.uk그리고 영국에서 사용되는 다른 두 번째 수준의 영역을.

이러한 서버에는 다음 레벨 다운에 대한 NS 레코드 만 포함되어 있습니다. 예제를 계속하려면에서 NS 레코드를 찾을 수있는 위치를 알려줍니다 google.co.uk. 이러한 서버에서 호스트 이름과 www.google.co.ukIP 주소 사이의 매핑을 마침내 찾을 수 있습니다.

추가 주름으로 각 레이어는 '접착제'레코드를 제공합니다. 각 NS 레코드는 도메인을 호스트 이름 (예 : 서버 중 하나로 NS 레코드 .uk목록)에 매핑 nsa.nic.uk합니다. 다음 단계로 가려면 NS 레코드에 대한 NS 레코드를 찾아야하며, 그 레코드도 nic.uk포함 nsa.nic.uk됩니다. 이제 우리는의 IP를 알아야 nsa.nic.uk하지만, 우리는에 대한 쿼리를해야 nsa.nic.uk한다는 것을 알지만 IP를 알 때까지는 쿼리를 만들 수 없습니다 nsa.nic.uk...

이 당혹를 해결하려면 서버에 대한 .uk에 대한 A 레코드를 추가 nsa.nic.ukADDITIONAL SECTION응답 (짧음에 대한 손질 아래 응답)의 :

jamezpolley@li101-70:~$dig nic.uk ns

; <<>> DiG 9.7.0-P1 <<>> nic.uk ns
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21768
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 14

;; QUESTION SECTION:
;nic.uk.                IN  NS

;; ANSWER SECTION:
nic.uk.         172800  IN  NS  nsb.nic.uk.
nic.uk.         172800  IN  NS  nsa.nic.uk.

;; ADDITIONAL SECTION:
nsa.nic.uk.     172800  IN  A   156.154.100.3
nsb.nic.uk.     172800  IN  A   156.154.101.3

이러한 추가 글루 레코드가 없으면 네임 서버를 찾을 수 nic.uk.없으므로 호스트 된 도메인을 찾을 수 없습니다.

질문으로 돌아가려면 ...

a) 장점은 무엇입니까? 왜 IP 주소에 직접 매핑하지 않습니까?

우선 각 개별 영역에 대한 편집 내용을 배포 할 수 있습니다. 의 항목을 업데이트하려면 의 네임 서버 www.mydomain.co.uk에서 정보를 편집하면 mydomain.co.uk됩니다. 중앙 .co.uk서버, .uk서버 또는 루트 이름 서버 에 알릴 필요가 없습니다 . 체인에 이르기까지 DNS 항목의 모든 단일 변경에 대해 통지해야하는 계층 구조까지 모든 레벨을 맵핑하는 단일 중앙 레지스트리 만있는 경우에는 트래픽이 절대적으로 발생합니다.

1982 년 이전에는 실제로 이름 확인이 이루어졌습니다. 하나의 중앙 레지스트리에 모든 업데이트에 대한 알림이 전송되었으며 hosts.txt인터넷에있는 모든 컴퓨터의 호스트 이름과 IP 주소가 포함 된 파일을 배포했습니다 . 이 파일의 새 버전은 몇 주마다 게시되었으며 인터넷상의 모든 컴퓨터는 새 복사본을 다운로드해야합니다. 1982 년 이전에는 이것이 문제가 되었기 때문에 DNS는보다 분산 된 시스템을 제공하기 위해 발명되었습니다.

다른 하나의 경우, 이는 단일 실패 지점입니다. 단일 중앙 레지스트리가 다운되면 전체 인터넷이 오프라인 상태가됩니다. 분산 시스템이 있다는 것은 장애가 전체가 아니라 인터넷의 작은 부분에만 영향을 미친다는 것을 의미합니다.

여분의 중복성을 제공하기 위해 실제로 루트 영역에 서비스를 제공하는 별도의 서버 클러스터가 13 개 있습니다. 최상위 도메인 레코드에 대한 변경 사항은 모두 13 개로 푸시해야합니다. 전 세계 어디에서나 모든 호스트 이름으로 ...)

b) 다른 IP 주소를 가리 키도록 DNS 서버를 구성 할 때 변경해야하는 유일한 레코드가 DNS 서버에있는 경우 프로세스가 즉각적이지 않은 이유는 무엇입니까?

DNS는 많은 캐싱을 사용하여 작업 속도를 높이고 NS의 부하를 줄입니다. 캐싱하지 않고, 매번 당신은 방문 google.co.uk컴퓨터가 서버를 조회하기 위해 네트워크에 나가서해야 .uk다음, .co.uk다음 .google.co.uk, 다음 www.google.co.uk. 이러한 답변은 실제로 크게 변경되지 않으므로 매번 조회하면 시간과 네트워크 트래픽이 낭비됩니다. 대신 NS가 레코드를 컴퓨터에 반환 할 때 컴퓨터에 결과를 몇 초 동안 캐시하도록 지시하는 TTL 값이 포함됩니다.

예를 들어 NS 레코드 .uk의 TTL은 172800 초-2 일입니다. Google은 훨씬 보수적입니다. NS 레코드 google.co.uk의 TTL은 4 일입니다. 신속하게 업데이트 할 수있는 서비스는 훨씬 낮은 TTL을 선택할 수 있습니다. 예를 들어 telegraph.co.ukNS 레코드에서 TTL이 600 초에 불과합니다.

영역에 대한 업데이트가 거의 즉각적으로 이루어 지도록하려면 원하는만큼 TTL을 낮추도록 선택할 수 있습니다. 클라이언트가 레코드를 더 자주 새로 고치면 설정이 낮을수록 서버에서 더 많은 트래픽을 볼 수 있습니다. 클라이언트가 서버에 접속하여 쿼리를 수행해야 할 때마다 로컬 캐시에서 응답을 찾는 것보다 속도가 느려지므로 빠른 업데이트와 빠른 서비스 간의 균형을 고려해야합니다.

c) 지연에 대한 유일한 이유가 DNS 캐시 인 경우이를 우회 할 수 있습니까? 실시간으로 어떤 일이 일어나고 있는지 알 수 있습니까?

예. 수동으로 dig또는 유사한 도구를 사용 하여 수동으로 테스트하는 경우 간단합니다 . 어떤 서버에 접속해야하는지 알려주십시오.

캐시 된 응답의 예는 다음과 같습니다.

jamezpolley@host:~$dig telegraph.co.uk NS

; <<>> DiG 9.7.0-P1 <<>> telegraph.co.uk NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36675
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;telegraph.co.uk.       IN  NS

;; ANSWER SECTION:
telegraph.co.uk.    319 IN  NS  ns1-63.akam.net.
telegraph.co.uk.    319 IN  NS  eur3.akam.net.
telegraph.co.uk.    319 IN  NS  use2.akam.net.
telegraph.co.uk.    319 IN  NS  usw2.akam.net.
telegraph.co.uk.    319 IN  NS  use4.akam.net.
telegraph.co.uk.    319 IN  NS  use1.akam.net.
telegraph.co.uk.    319 IN  NS  usc4.akam.net.
telegraph.co.uk.    319 IN  NS  ns1-224.akam.net.

;; Query time: 0 msec
;; SERVER: 97.107.133.4#53(97.107.133.4)
;; WHEN: Thu Feb  2 05:46:02 2012
;; MSG SIZE  rcvd: 198

여기에있는 flags 섹션에는 aa플래그 가 포함되어 있지 않으므로이 결과는 신뢰할 수있는 소스가 아닌 캐시에서 나온 것입니다. 실제로 우리는 97.107.133.4Linode의 로컬 DNS 확인자 중 하나 인 에서 온 것을 알 수 있습니다 . 대답이 나와 매우 가까운 캐시에서 제공되었다는 사실은 대답을 얻는 데 0msec가 걸린다는 것을 의미합니다. 그러나 우리가 잠시 후에 볼 수 있듯이, 그 속도에 대해 지불하는 가격은 대답이 거의 5 분이 지났다는 것입니다.

Linode의 리졸버를 우회하고 소스로 바로 이동하려면 해당 NS 중 하나를 선택하고 직접 연락하도록 발굴하십시오.

jamezpolley@li101-70:~$dig @ns1-224.akam.net telegraph.co.uk NS

; <<>> DiG 9.7.0-P1 <<>> @ns1-224.akam.net telegraph.co.uk NS
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23013
;; flags: qr aa rd; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;telegraph.co.uk.       IN  NS

;; ANSWER SECTION:
telegraph.co.uk.    600 IN  NS  use2.akam.net.
telegraph.co.uk.    600 IN  NS  eur3.akam.net.
telegraph.co.uk.    600 IN  NS  use1.akam.net.
telegraph.co.uk.    600 IN  NS  ns1-63.akam.net.
telegraph.co.uk.    600 IN  NS  usc4.akam.net.
telegraph.co.uk.    600 IN  NS  ns1-224.akam.net.
telegraph.co.uk.    600 IN  NS  usw2.akam.net.
telegraph.co.uk.    600 IN  NS  use4.akam.net.

;; Query time: 9 msec
;; SERVER: 193.108.91.224#53(193.108.91.224)
;; WHEN: Thu Feb  2 05:48:47 2012
;; MSG SIZE  rcvd: 198

이번에는 소스에서 직접 결과가 제공 aa되었음을 알 수 있습니다. 결과는 신뢰할 수있는 소스에서 온 것임을 나타내는 플래그에 유의하십시오 . 이전 예제에서 결과는 로컬 캐시에서 왔으므로 aa플래그가 없습니다. 이 도메인의 신뢰할 수있는 소스가 TTL을 600 초로 설정 한 것을 알 수 있습니다. 로컬 캐시에서 이전에 얻은 결과는 TTL이 319 초에 불과했습니다.이를 확인하기 전에 거의 5 분 동안 (600-319) 초 동안 캐시에 앉아 있었음을 나타냅니다.

여기에서 TTL은 600 초에 불과하지만 일부 ISP는 DNS 확인자가 결과를 더 길게 (경우에 따라 24 시간 이상) 캐시하도록함으로써 트래픽을 더욱 줄이려고 시도합니다. DNS 변경 사항이 모든 곳에서 보이지 않을 것이라고 가정하는 것은 전통적입니다 (우리는 알지 못한다면 이것이 실제로 필요하지만 안전 할 것입니다). 24-48 시간 동안 인터넷.


3
+1 멋진 설명입니다. 확실히 이것을 북마크 할 것입니다!
트롤 혼

3
DNS 응답이 캐시에서 온 것인지 아닌지에 대한 실제 답변은 답변의 "플래그"섹션에 있습니다. TTL을 319 초로 설정할 수없는 기술적 이유는 없습니다. 대신 aa응답 에서 (정식 답변) flag을 찾으십시오 . 있는 경우 aa정식 이름 서버에서 직접 답변을 얻었습니다. 누락 된 경우에도 답 최신 정보 일 수 있습니다. 일부 재귀 이름 서버 aa는 클라이언트 확인자에게 응답을 전달하기 전에 플래그를 지 웁니다 .
CVn

3
일부 ISP는 TTL이 말한 것보다 훨씬 긴 시간 동안 DNS 레코드를 캐시하므로 매우 짧은 TTL을 사용하더라도 사이트를 방문한 후 모든 방문자가 하루나 이틀 동안 올바른 IP를 얻을 수 있다고 보장 할 수는 없습니다. 장소.
Dan Neely

2
@JamesPolley .uk서버 사용에 대한 설명에 (사소한) 오류가 있습니다. 현재 Nominet 관리 형 2 단계 도메인은와 동일한 서버 uk.에 있으므로 서버에 대한 쿼리는 example.co.uk먼저 uk서버에 대한 위임을 거치지 않고도 즉시 위임을받습니다 co.uk.
Alnitak

1
dig의 +trace옵션은 루트 네임 서버에 대해 구성된 네임 서버를 쿼리하여 검색을 시작할 수 있습니다. 로컬 네임 서버가 dnsmasq(우분투에서와 같이) 지원하지 않으면 오류가 발생합니다. 사용하십시오 dig +trace @8.8.8.8 www.example.com. 8.8.8.8은 Google의 공개 DNS 서비스입니다. Cloudflare에 해당하는 경우 1.1.1.1을 사용하십시오.
Roger Lipscombe

9

a) 세계에서 IP-> 호스트 이름 매핑의 수는 매우 큽니다. 이 시스템은 모든 하위 도메인 및 MX 레코드와 다른 모든 DNS 레코드를 호스트하는 책임을 도메인 이름의 소유자에게 분배합니다. 이것은 도메인 이름의 요점이었습니다. .com다른 레지스트리가 보유 .uk할 수있는 한 레지스트리에 의해 보유됩니다. 마찬가지로 example.comotherexample.com자원이 분산 될 수 있도록 별도로 호스팅 할 수 있습니다.

b) 캐시되어 DNS 호스트의 적중 횟수를 그렇지 않은 경우의 일부로 줄입니다. 기본적으로 레코드는 삭제되기 전에 2 일 동안 캐시에 존재합니다. 이것은 레코드의 TTL (Time To Live)을 변경하여 변경할 수 있습니다.

c) 매우 짧은 TTL을 설정하여 레코드가 캐시되는 것을 효과적으로 중지 할 수 있습니다. 이다 NOT 동적 DNS를 위해 그것을 사용하지 않는 것이 좋습니다. 캐싱은 DNS 서버에서 적중을 크게 떨어 뜨립니다. 공중에서 추측 된 숫자를 선택하기 위해 우리는 요청의 95 %를 시작하는 것에 대해 이야기하고 있습니다.


'C'와 관련하여주의하십시오. TTL을 충분히 낮게 설정하면 DNS 서버가 손상 될 수 있습니다. 다른 사람이 DNS를 처리하는 경우 큰 문제는 아닙니다.
Publiccert

따라서 하위 도메인이 아니라면 큰 이점은 없습니다
sabof

4
아마도 remeber yourdomain.com는의 하위 도메인 일 수도 .com있습니다. DNS와 엘프가 여전히 중간에 걸었을 때와 같이 하나의 큰 "호스트 파일"인 경우에는 그렇습니다. 하나의 큰 파일 만 있으면 누구나 캐시 할 수 있습니다.
Philip Couling

3
DNS 네임 스페이스 오랫동안 위임없이 평평했습니다. 그것은 한 장소에서 개최 하나의리스트로 구현. 그것은 불가능 해졌고 1982 년에 DNS로 대체되었습니다 ...
James Polley

1
@mfinni, "분산 이름 시스템"이 아닌 "도메인 이름 시스템"입니다. 물론 배포 할 수 있도록 설계,하지만 아무것도 당신이 절대적으로 말하는 없다있어 가지고 그런 식으로 실행합니다. 글로벌 연결이없는 일부 소규모 사무실 네트워크의 경우 루트 영역 (또는와 같은 단일 TLD local) 에있는 모든 것을 갖는 것이 다소 의미가 있습니다.
CVn

3

* nix 시스템을 사용하는 경우 http://cr.yp.to/djbdns.html 에서 Dan Bernstein의 djbdns 사본을 다운로드하고 dnstrace 프로그램을 실행하여 재귀 쿼리 시스템의 작동 방식을 확인하십시오. 매우 유익합니다.


구성 변경의 영향을 즉시 확인할 수 있습니까?
sabof

dnstrace (일반적으로 dnstracesort를 통해)는 모든 도메인 및 쿼리의 DNS 구성에 대한 자세한 정보를 제공합니다. 서버가 변경 한 경우 변경 사항과 전파 방법을 표시합니다. 전파 오류 추적에도 탁월합니다.
mikebabcock

3

a) 하나의 서버가 처리하기에 가능한 도메인 이름의 수가 너무 많습니다. 그리고 .com만이 아닙니다. .net, .org, .se, .info 및 기타 여러 가지가 있습니다. 또한 하위 도메인에 대한 책임을 위임 할 수 있습니다 (이는 실제로 com수행하는 작업 임). 덜 중앙 집중화 된 DNS는 모든 것을보다 쉽게 ​​관리 할 수있게합니다.

b) 필요한 요청 수를 최소화하기 위해 사용자에서 사용자에게 전달되는 시스템에 DNS 캐시가 있습니다. 예를 들어 SF에서 페이지를 가져올 때마다 "serverfault.com"주소 요청으로 네트워크를 스팸으로 보내는 것을 방지합니다. 이러한 서버는 "도메인이 존재하지 않습니다"결과를 캐시 할 수 있기 때문에 새로운 도메인도 표시되기까지 시간이 걸릴 수 있습니다.

c) 캐시를 비활성화 할 수 있지만 컴퓨터와 yourdomain.com의 DNS 서버 사이에 다른 DNS 서버가있는 경우가 종종 있습니다. 예를 들어, ISP의 DNS 서버는 가능한 한 캐시를 시도합니다. 인터넷에서 비교적 빠르게 업데이트되는 유일한 레코드는 짧은 TTL이있는 레코드입니다 (기본적으로 "몇 초 동안 만 유효합니다. 그런 다음 현재 정보를 다시 요청하십시오"). 그러나 TTL이 너무 높은 이유는 도메인을 담당하는 서버가 일부 작업을 다른 서버로 오프로드 할 수 있기 때문입니다. 웹 사이트에 접속할 때마다 하나 또는 두 개의 rinky-dink DNS 서버에 모든 네트워크가 연결되어 있다면 누군가가 귀하의 사이트를 /., digg 등에서 본 다음에는 거의 사용할 수 없을 것입니다.


귀하의 (c)가 잘못되었습니다. DNS에 대한 광범위한 오해입니다. 로컬 머신 대 라우터에서 ISP 로의 서버 체인은 없습니다. 각 서버는 다음 라인에 연결됩니다. 요청은 단일 해결 프록시 DNS 서버를 통해 DNS 클라이언트 (라이브러리)에서 0 개 이상의 콘텐츠 DNS 서버로 전달됩니다. 전달 프록시 DNS 서버의 존재를 막 으면 됩니다.
JdeBP

2
@JdeBP : 실제 세계에서 볼 수있는 한, 그것은 사실 이기 때문에 "광범위한 오해" 입니다 . 모든 사람과 마찬가지로 DHCP를 통해 주소를 얻는다면 거의 확실하게 사용할 DNS 서버의 주소가 제공됩니다. 홈 네트워크에서 라우터는 거의 항상 라우터이며 기본적으로 ISP의 DNS로 전달됩니다. 그리고 소규모 비즈니스 네트워크에는 일반적으로 도메인 컨트롤러가 있으며 이는 다시 ISP의 DNS로 전달됩니다. 일반적으로 반복적 인 작업이 수행됩니다.
cHao

"거의 사실"이 전혀 맞지 않다면 더 많은 현실 세계를 볼 필요가 있습니다. 실제로 전달 프록시를 하나의 추가 항목으로 언급했습니다. 그러나 비즈니스 네트워크에서의 사용을 과대 평가하고 있습니다. 실제로 루트 컨트롤러를 사용하여 도메인 컨트롤러를 변경하는 횟수 (과트 영역을 제거한 후)는 루트 힌트를 사용하여 DNS 서버를 확인하는 것 입니다. (c)의 기본 오류는 수정되지 않은 상태로 유지됩니다. 캐시를 비활성화하면 캐시 뒤에 "캐시"가 표시되지 않습니다. DNS는 단순히 그렇게 작동하지 않습니다. 당신이 그것을 오해하지 않으면, 당신은 그것을 잘못 표현하고 있습니다.
JdeBP

로컬 컴퓨터에서 캐시를 비활성화하면 로컬 네트워크의 DNS 서버에 의해 캐시 된 결과가 계속 표시됩니다. 이를 비활성화하면 여전히 ISP의 캐시가 걱정 될 수 있습니다. 당신이 그것을 일반적인 경우로 받아들이 든 아니든간에, 그것은 거의 매번 본 적이있는 사례입니다.
cHao

@cHao 대부분의 CPE DNS 서버는 "앞으로"만 캐시하지 않습니다.
Alnitak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.