유튜브(YouTube) 동영상 버퍼링과 DNS 설정은 무슨 관련이 있는가?

Posted at 2010. 5. 20. 21:42 // in 네트워크 // by Manner of Traveling

트위터에서 유튜브 동영상 버퍼링 해결 방법이라고 소개된 것이 DNS 서버 주소를 구글 Public DNS(8.8.8.8, 4.4.4.4) 로 변경하는 것이었습니다.

저는 기술적으로 봤을 때, 저 이야기는 전혀 근거가 없다고 생각합니다. 다만, 실제로 사용자들이 그렇게 체감을 하기 때문에 사실 자체를 부인할 수는 없습니다. 그래서 몇 가지 확인한 결과와 제 의견을 말씀드리겠습니다.

먼저 유튜브(YouTube) 사이트에서 동영상을 플레이를 하면 다음과 같은 절차를 따르게 됩니다.

1. 실제로 동영상 콘텐츠를 가진 캐쉬(Cache) 서버의 도메인 이름(Domain Name)을 알려줍니다. 동영상 콘텐츠마다 캐쉬 서버가 서로 다릅니다. 따라서, 유튜브 동영상이라도 콘텐츠에 따라서 버퍼링에 차이가 날 수 있습니다. 제가 특정 콘텐츠를 보면서 Wireshark로 패킷을 확인한 결과 다음과 같은 도메인 이름을 넘겨줍니다.
v21.lscache3.c.youtube.com

2. 그러면, 사용자 단말(PC, 노트북, 아이폰, 안드로이드폰)은 해당 도메인에 대한 IP 주소를 DNS 서버에 질의합니다.
v21.lscache3.c.youtube.com: type A, class IN

3. DNS 서버는 사용자 단말이 질의한 도메인에 대한 IP 주소를 사용자 단말에게 알려줍니다.
v21.lscache3.c.youtube.com: type CNAME, class IN, cname v21.lscache3.l.google.com
v21.lscache3.l.google.com: type A, class IN, addr 74.125.107.30

위의 내용을 잘 보시면, 실제로 유튜브 캐쉬 서버는 구글의 캐쉬 서버로 연결된다는 것을 알 수 있습니다. 그리고 실제 IP 주소는 74.125.107.30 입니다.

4. 이제 사용자 단말은 DNS 서버로부터 받은 74.125.107.30 캐쉬 서버로부터 동영상을 다운로드 받아서 플레이하게 됩니다.
 
위의 내용을 기반으로 과연 DNS 서버에 따라서 어떤 차이가 있는지 확인해 봤습니다.

먼저, PC에서 DNS 서버를 바꿔가면서 유튜브 캐쉬 도메인에 대해서 어떤 IP를 알려주는지를 확인했습니다.

파란색 부분이 KT의 DNS 서버인 168.126.63.1을 사용한 경우입니다.
KT DNS가 알려준 주소 : 74.125.107.30

빨란색 부분이 구글의 첫번째 Public DNS 서버인 8.8.8.8을 사용한 경우입니다.
구글의 첫번째 Public DNS가 알려준 주소 : 74.125.15.158


녹색 부분이 구글의 두번째 Public DNS 서버인 4.4.4.4를 사용한 경우입니다.
구글의 두번째 Public DNS는 응답을 하지 않았습니다. 장애가 발생했거나 서비스를 하지 않는 것 같습니다.



두번째, PC에서 두개의 IP에 대해서 경로를 추적해봤습니다. tracert를 사용해서 몇 홉(hop)이나 걸리는지를 확인해봤습니다.

tracert 74.125.107.30

tracert 74.125.15.158

결과에서 보시는 바와 같이 KT DNS가 알려준 IP 주소보다 구글 Public DNS가 알려준 IP 주소가 4개 정도의 라우터를 더 경유합니다. 쉽게 말해서, 네트워크 상에서 좀 더 멀리 있다 생각하시면 됩니다. 여기서 한가지 집고 넘어가겠습니다. 네트워크를 아시는 분들에게는 당연한 이야기이지만, 4개 정도 라우터를 더 경유한다는 것은 사실상 인터넷 속도나 품질에는 큰 차이가 없습니다.

혹시나 RTT(Round Trip Time)를 보시고 "구글의 Public DNS가 알려준 IP 주소가 더 나쁘지 않냐?"라고 생각하실 수도 있지만, 여기서의 RTT는 서버가 응답하는 것이 아니라 서버로 가는 경로에 있는 라우터가 응답을 하는 것이기 때문에 실제 서버와의 RTT와는 차이가 발생할 수 있습니다.

실제로 두개의 IP에 대한 Ping 결과를 보면 구글의 Public DNS가 알려준 캐쉬 서버가 RTT가 2배이상 빠릅니다. 사실 이것도 정확한 것은 아닙니다. L4 스위치의 VIP(Virtual IP)를 사용해서 로드밸런싱을 한다면, 이 응답도 사실 L4스위치가 응답하는 것입니다.


세번째, 아이폰에서 Nice Trace 앱을 사용해서 두개의 IP에 대해서 경로 추적을 해봤습니다. 3G와 WiFi에서 각각 테스트를 했는데 WiFi는 당연히 PC에서 확인한 것과 동일합니다.

다음은 3G를 통해서 확인한 내용입니다.

74.125.107.30


74.125.15.158


3G에서 확인한 결과, PC에서 확인한 것보다 2 홉이 줄었습니다. 그러나, 앞서 말씀드렸듯이 이것은 별로 중요하지 않습니다.

제가 여기까지 확인하고 내린 결론은 이렇습니다.

1. KT DNS와 구글 Public DNS는 동일한 캐쉬 도메인에 대해서 서로 다른 IP 주소를 알려준다.

2. KT DNS를 사용할 경우에 네트워크상에서 보다 가까운 캐쉬 서버의 IP 주소를 알려준다.

3. 그러나, 구글 Public DNS를 설정하는 경우에 유튜브 동영상 버퍼링 문제가 해결된다. (그동안에 블로그에서 많이들 이야기하는 내용입니다.)

4. DNS가 제공하는 IP 주소는 임의로 변경할 수 없습니다. 즉, KT DNS는 유튜브 DNS와 구글 DNS에서 제공하는 IP 주소를 받아서 사용자에게 제공할 뿐이지 이를 변경하거나 수정할 수 없습니다. 자칫 유튜브 동영상 버퍼링 해결하려고 DNS 잘못 손대면 큰일납니다.


여기서부터는 제 의견입니다. 제가 더이상 분석할 시간과 능력이 안되서 제 생각을 적어보겠습니다.

1. 유튜브 사이트는 각 나라에서 접속하는 사용자들을 위해서 가장 가까운 캐쉬 서버에서 동영상을 받아보도록 운영한다. 따라서, 각 나라별 DNS에서 제공하는 IP 주소가 모두 다들 것이라고 추측합니다. 결론적으로 어떤 DNS를 설정하더라도 현재 국내 DNS에서 제공하는 것보다 가까운 캐쉬 서버를 찾을 수는 없을 것입니다.

2. 그 동안 국내에서는 유튜브 동영상 업로드가 제한되었습니다. 사실상 국내 사용자들은 유튜브에 별로 볼게 없었습니다. 유튜브 입장에서도 사용자도 많지 않은데 캐쉬 서버를 빵빵하게 만들어 놓을 필요는 없었겠죠.
아이폰이 들어오고 유튜브 동영상 업로드가 가능해졌습니다. 점점 트래픽을 늘어가는데 신속하게 대처하지 못한 것 같습니다.

3. 다 좋은데, 왜 DNS 주소를 8.8.8.8로 설정하면 잘 나오는가? 대부분 인기있는 동영상으로 사용자들이 몰려들게 마련입니다. 즉, 국내에서 어떤 동영상이 인기가 있다면 다들 그 동영상을 보려고 할테니 국내용 캐쉬 서버는 바쁩니다. 사용자가 많아 지니까요.
반면에, 구글 Public DNS를 사용하는 사용자는 별로 없습니다. 즉, 구글 Public DNS에서 알려주는 캐쉬 서버에서 해당 동영상을 보는 사람도 얼마 없다는 이야기죠.
상대적으로 사용자가 적은 캐쉬 서버에서 동영상을 다운로드하기 때문에 버퍼링 문제가 많이 좋아지는 것으로 생각됩니다.

너무 소설을 적어놔서 지울까하다가 제 상상이라고 다시 한번 말씀드리고 그냥 두겠습니다.

누군가가 "국내 서비스용 서버가 성능이 떨어지기 때문이다"라고 이야기 하셨는데요. 사실 그럴수도 있지만, 아닐 가능성이 더 크다고 생각합니다.