Netmanias Blog 12월 13일자 "문제: Google DNS를 쓰면 왜 느릴까요???"에 대한 답을 드리도록 하겠습니다.
DNS 동작 원리
일단 DNS 동작에 대해서 살펴 보도록 하겠습니다.
일반적인 상황은 아래 그림의 위쪽과 같이 제 PC에서 ping www.netmanias.com 하면 제 PC는 www.netmanias.com이라는 hostname에 대한 IP 주소를 받아 오기 위해 DNS query를 합니다. 그리고 이를 통해 IP 주소 112.220.75.18을 받아, 그 IP 주소로 ping (ICMP Echo Request)을 보내게 됩니다.
그런데 아래 그림의 밑에 쪽을 보면 ping www.cisco.com을 하였는데 www.cisco.com에 대한 IP 주소가 아닌 e144.cd.akamaiedge.net이란 hostname에 대한 IP 주소 202.43.48.170을 받아와 그 곳으로 ping을 하게 됩니다.
왜 이 2가지 경우가 다르게 나오는 걸까요?
그건 바로 www.netmanias.com 서버는 CDN 서비스를 받고 있지 않는 반면, Cisco는 Akamai라는 미국 회사의 CDN 서비스를 받고 있기 때문입니다(ping www.samsung.com을 해도 akamaiedge라는 이름이 포함된 hostname이 보이실 것입니다. 삼성 역시 Akamai CDN 서비스를 받고 있습니다.)
Akamai CDN과 Google DNS와의 관계
그럼 Akamai라는 회사가 제공하는 CDN 서비스의 개념은 뭘까요?
Akamai는 전세계적으로 약 7만여대의 Cache 서버를 가지고 있습니다. 왠만한 국가의 통신 사업자 Data Center에 모두 Akamai Cache 서버가 있다고 보시면 됩니다. 그래서 비록 Cisco 웹서버(www.cisco.com)는 미국에 한대 밖에 존재하지 않지만 이 Cisco 홈페이지내의 contents(text, image, video 등등)가 이 7만여대의 Akamai Cache 서버에 caching이 되어 있는 것입니다.
그리고 Akamai는 사용자와 가장 가까운 곳에 위치한 자사의 Cache 서버를 골라, 그 서버에 있는 Cisco web contents를 사용자에게 전달해 주는 방식입니다. 그래서 매우 빠릅니다!
그렇다면 Akamai는 어떤 로직으로 사용자와 가장 가까운 Cache 서버를 선택할까요? 여기에 문제의 해답이 있습니다.
Akamai는 DNS 기반으로 가장 가까운 Cache 서버를 선택하는 방법을 사용하는데요. 이를 위해서 Akamai는 자체 CDN용 DNS 서버를 운영하고 있습니다.
사용자가 www.cisco.com에 접속하기 위해, 자신의 PC에 설정된 Local DNS로 DNS Query(www.cisco.com의 IP 주소가 뭐에요?)를 합니다. 그리고 그 DNS Query는 ".com DNS 서버"를 거쳐 "cisco.com DNS 서버"에 도달하는데요. 이 "cisco.com DNS 서버"는 DNS의 CNAME을 사용하여 Local DNS에게 "www.cisco.com이란 hostname의 CNAME은 e144.cd.akamaiedge.net으로 되어 있으니, e144.cd.akamaiedge.net이란 hostname에 대한 IP 주소를 물어 보도록 해라"라고 전달합니다. 이 응답(DNS Response)을 수신한 Local DNS 서버는 www.cisco.com의 IP 주소를 알아 내기 위해 DNS Query(e144.cd.akamaiedge.net의 IP 주소가 뭐에요?)를 ".net DNS 서버"을 거쳐 결국 Akama가 관리하는 DNS 서버인 'akamaiedge.net DNS 서버'로 보내게 됩니다.
이제 이 Akamai DNS 서버는 DNS Query를 보낸 Local DNS 서버의 IP 주소를 봅니다(이후 다시 말씀드리겠지만 사용자 단말의 IP 주소가 아닌 Local DNS 서버의 IP 주소를 봅니다. 왜? DNS 메시지 표준에는 단말의 IP 주소가 포함되지 않으니까요). 그리고 이 Local DNS 서버의 IP 주소를 통해, Local DNS 서버가 위치한 나라/통신 사업자를 파악하게 되구요(나라별/통신사업자별 IP 주소 대역을 table로 관리). 이 정보를 바탕으로 Akamai가 관리하는 7만여대의 Cache 서버 중에 Local DNS 서버와 같은 지역/같은 통신 사업자에 위치한 Cache 서버를 선택하여, 그 Cache 서버의 IP 주소를 Local DNS 서버에 알려 주게 됩니다. 이후 Local DNS 서버는 그 IP 주소를 단말에 전달하고, 이제 단말은 미국에 있는 Cisco 웹서버가 아닌 국내에 있는 Akamai Cache 서버를 통해 Cisco web contents륵 가져 오게 되는 것입니다.
이제 문제의 답을 말씀드리겠습니다.
바로 전에 말씀드린 바와 같이 DNS 표준(DNS 서버간에 DNS Query/Response)에는 DNS 메시지를 최초로 보낸 단말의 IP 주소가 포함되지 않습니다. 그래서 Akamai DNS 서버는 단말에 설정한 Local DNS 서버의 IP 주소만 알 수 있을 뿐, 단말의 IP 주소는 알 수 없습니다.
그래서 제가 Local DNS 서버의 IP 주소를 LG U+ DNS 서버로 설정하는 경우, Akamai DNS 서버는 LG U+ DNS 서버의 IP 주소를 보고, 한국에 있는 LG U+ 사용자의 요청인 것을 알 수 있어, 한국/LG U+ Data Center(논현동 KIDC)에 있는 Akamai Cache 서버를 선택해 주고, 결국 제가 보낸 ping www.cisco.com에 대해 응답을 해 주는 서버는 논현동 KIDC에 위치한 Akamai Cache 서버가 되는 것입니다.
그런데...
제가 Local DNS 서버를 Google DNS 서버인 8.8.8.8로 설정을 하면 어떤 일이 벌어질까요? 이 경우, Akamai DNS 서버는 8.8.8.8이란 Local DNS 서버의 주소를 보고 최적(가장 가까운)의 Akamai Cache 서버를 선택해 주어야 하는데, 전세계 어느 곳에서도 전부 8.8.8.8이란 하나의 DNS 서버 주소를 사용하게 되므로, Akamai DNS 서버는 8.8.8.8의 값을 보고 사용자 위치를 알 수 있는 방법이 없게 됩니다. 그래서 선택한 것이 결국 미국에 있는 Akamai Cache 서버인거죠.
그래서 이 경우, 제가 보낸 ping www.cisco.com에 대해 응답을 해 주는 서버는 미국에 위치한 Akamai Cache 서버가 되는 것이고, 그래서 태평양을 넘어 ping request/reply를 주고 받아야 하므로 그 응답이 느려지게 되는 것이랍니다.
위 설명을 그림 한장으로 표현하면 아래와 같습니다.
결언
자 이제 결언입니다.
앞서 설명드린 바와 같이 문제의 출발은 "Akamai의 DNS 방식이 사용자 IP 주소를 볼 수 없다" 입니다. 하지만 현 DNS 표준이 그러하니 Akamai에 뭐라 할 말은 없습니다. 그렇다고 Google DNS의 방식 역시 아무 문제가 없습니다.
하지만 우리가 알아야 하는 한가지 사실은.... 현재 대부분의 Global 벤더는 Akamai 또는 다른 CDN 벤더(Limelight, Level 3, CDNetworks 등)의 서비스를 이미 사용 중입니다. Apple, Cisco, Samsung, Juniper, Ericsson, Time 등등등 너무 많습니다.
따라서 빠른 웹/스트리밍 서비스를 위해서는 Google DNS 사용을 포기하는게 맞을 것이라는 생각입니다. 그리고 출장자 여러분들! 출장 가시면 그 나라의 Local DNS로 설정하세요. 우리나라 DNS로 설정해 놓으면 동일한 이유로 속도가 느릴 것입니다.
넷매니아즈에 손박사님이 ETRI에서 CDN 세미나(주제: Operator CDN 트랜드 및 기술 동향, 83 Page) 발표를 하셨고, 그 문서가 현재 넷매니아즈(아래 링크 클릭)에 올라와 있습니다. CDN에 대해 이해하시는데 큰 도움이 되실 것으로 생각이 되네요.
감사합니다.
좋은 자료 감사합니다!
따로 질문 게시판에 질문을 해야 할것 같지만, 해당 포스팅과 연관이 있어서 여기에 궁금한점 남기겠습니다.
제가 상해에서 유학을 2년간 하면서, 한국에서 사서 잘쓰던 노트북을 상해에서도 사용했습니다.
중국에서는 페이스북이나 유투브가 바로 되지 않아 사설 VPN을 사용해서 가끔했엇는데,
문제는. 한국에 완전히 귀국 하고나서도 해당 노트북으로 페이스북과 유투브가 차단된다는것입니다.
하드 전체 포맷도 해봤었구요, 지식인 같은곳에서도 열심히 뒤져봤지만 같은 증상을 겪으신분이 거의 없으셨던것 같습니다...
해당 포스팅을 보면서 떠오른건데, 중국에서의 DNS가 고정값처럼 어디에 박혀? 있어서 그런것이 아닐까 하는데,
한국 DNS? 를 다시 설정해 주려면 해결될 수 있는지,,,
(사실은 그냥 그 노트북으로는 페이스북이랑 유투브는 그냥 포기안했습니다... )
바이러스 때문은 아니라고 믿고 있는데, 넷매니아즈 선생님은 어떻게 생각하시는지 궁금합니다.
아주 예전글이라서 현재
google dns는 edns subnet 프로토콜은 지원 하므로 클라이언트의 서브넷 정보는 cdn player dns에 전달 해 줍니다.
그러므로 실 클라이언트의 ip 정보를 참조 하고 라우팅을 결정 합니다.
좋은 정보 감사합니다. 확인해 보니 정말 그렇네요!
[1] KT DNS 서버(168.126.63.1)로 설정 후 Ping 응답
C:\Users\cmyoo>ping www.cisco.com
Ping e2867.dsca.akamaiedge.net [184.25.20.48] 32바이트 데이터 사용:
184.25.20.48의 응답: 바이트=32 시간=4ms TTL=55
184.25.20.48의 응답: 바이트=32 시간=8ms TTL=55
184.25.20.48의 응답: 바이트=32 시간=14ms TTL=55
184.25.20.48의 응답: 바이트=32 시간=12ms TTL=55
[2] DNS 캐시 삭제
C:\Users\cmyoo>ipconfig /flushdns
Windows IP 구성
DNS 확인자 캐시를 플러시했습니다.
[3] Goolge DNS 서버(8.8.8.8)로 설정 변경 후 Ping 응답
C:\Users\cmyoo>ping www.cisco.com
Ping e2867.dsca.akamaiedge.net [184.25.20.48] 32바이트 데이터 사용:
184.25.20.48의 응답: 바이트=32 시간=10ms TTL=55
184.25.20.48의 응답: 바이트=32 시간=15ms TTL=55
184.25.20.48의 응답: 바이트=32 시간=2ms TTL=55
184.25.20.48의 응답: 바이트=32 시간=15ms TTL=55
지나가다가 봤습니다.
오래된 글이라서 현재와 다른 부분이 있네요.
작성하신 분이 최근 해당 내용을 알게되었다면 본문을 업데이트 해주시면 좋을듯 하네요.
내용이 다소 오래되었네요.
최근에 구글은 ISP 내부에 GGC 서버를 설치합니다. GGC가 처음에는 유튜브 동영상 캐시에만 국한되어 쓰였으나 최근에는 구글 플레이 스토어를 포함하여 구글 서비스 전체적으로 GGC가 쓰이고 있습니다. 그리고 Google DNS도 GGC를 씁니다. 심지어 KT회선에서 클리앙 (clien.net) 도메인 주소를 쿼리하는 경우에는 아예 구글 서버를 거치지 않고 KT의 IP대역만 거쳐서 쿼리가 이루어집니다. 이 과정에서 KT 회선 내부에서 GGC가 대신 쿼리해주는 것으로 추측할 수 있습니다.