상단영역

본문영역

넷텐션, 중국의 치명적 '서버 혼잡붕괴'를 밝혀내다

  • 채성욱 기자 luke@khplus.kr
  • 입력 2015.07.23 15:03
  • 수정 2015.07.23 15:17
  • 글씨크기
이 기사를 공유합니다

- 공유기 문제, UDP가 통신량 조절하는 TCP ‘잠식’
-‘혼잡붕괴’ 발생 PC, 연결된 다른 네트워크까지 ‘셧다운’
- 서버나 P2P 성능 아닌 현지 네트워크 자체가 원인
- UDP 사용 통신량 축소, TFRC 기술 적용이 ‘해결책’

중국 네트워크 오해와 진실

중국 등 개도국 네트워크에서 주로 발생하는 ‘혼잡붕괴’는 문제가 발생한 PC뿐 아니라 이와 연결된 PC까지 연쇄적으로 네트워크 문제를 야기시킨다. 특정 상황에선 개도국 뿐 아니라, 국내 등 그 어느 국가에서나 발생할 수 있는 문제다.

 
서버엔진 기업 넷텐션은 이 치명적인 네트워크 문제를 지난 2011년 중국 현지에서 모MMORPG 서비스를 통해 발견했다. 
넷텐션은 지난 21일 게임코디 게릴라 콘퍼런스(GCGC)를 통해 그들이 겪은 ‘혼잡붕괴’의 실체를 공개했다. 이와 함께 ‘혼잡붕괴’ 현상의 대안과 중국 현지에서 주의해야할 다양한 네트워크 이슈와 노하우도 공개했다.
넷텐션이 공개한 ‘혼잡붕괴’ 현상은 기본적으로 데이터를 전송하는 과정에서 공유기(라우터) 문제로 데이터 패킷이 유실될 때 발생한다. 이때 UDP(사용자 데이터그램 프로토콜: user datagram protocol)와 TCP(전송제어프로토콜: transmission control protocol)를 혼용할 경우 생기는 충돌 현상이다. 데이터 유실이 생겨도 빠르게 많이 보내는 것을 목적으로 하는 UDP가, 순서대로 데이터를 보내며 데이터 유실시 속도를 조절하는 TCP의 통신량을 완전히 잡아먹어 발생한다. 
이는 C/S나 P2P의 문제가 아닌 현지의 네트워크 망 자체의 특징으로 알려져 있다.

 
이날 콘퍼런스에 나선 넷텐션 배현직 대표는 “오늘 강연은 중국에서의 프라우넷이 상용화 되면서 생긴 몇가지 오해들과 사건들을 이야기할 것이다”라며, “프라우드넷과 관계없이 중국에서 게임서비스를 할 때 주의해야할 네트워크 문제들을 소개하고 해결책을 공개하는 자리로 마련됐다”고 전했다.

최초 이 현상을 겪었던 지난 2011년 당시, 넷텐션은 이 문제의 증상을 해결하고, 그 원인을 찾기 위해 다양한 실험을 했다. 그리고 이 현상의 근본원인인 두 프로토콜과 공유기의 연관관계를 밝혀냈다.
넷텐션 배현직 대표는 이 문제를 이해하는 데 가장 중요한 키워드가 바로 UDP와 TCP의 특징을 이해하는 것부터라고 전제했다.

中 네트워크의 ‘급소’를 찾다

넷텐션은 자사의 서버엔진 프라우드넷을 통해 지난 2011년 중국 현지에서 한 MMORPG 서비스를 진행했다. 해당 게임 내 각 지역은 여러 존으로 구별돼 있었다. 특정 존에는 유저 수십에서 수백명이 들어가 있는 방들의 집합이었다. 프라우드넷은 유저끼리 P2P네트워크를 이용해 엮어, 캐릭터 배치를 동기화하는 용도로 사용됐다.

 

 
초기, 뚜렷한 이유없이 P2P네트워크가 간헐적으로 끊어지는 현상이 발생하기 시작했다. 당시에는 특정 키를 누르는 것이 원인으로 지목돼 금세 해결했다. 그러나 유저 존 하나에 동시접속자가 100명 이상이 돼면 다시 P2P연결이 끊어지기 시작했다. 이때부터 진짜 문제가 시작됐다. 프라우드넷은 특히 오후 6시 이후 이런 현상이 반복되는 것을 알고 중국 네트워크 자체에 특징적인 문제를 감지하고 실험에 들어갔다.
더미 컴퓨터를 이용한 각 프로토콜 실험은 물론, 쓰촨성의 수백명의 실제 유저들이 여러 개의 PC방에서 대량으로 서버에 접속해 극단적인 네트워크 트래픽을 발생시키기도 했다.
실험을 통해 알게된 사실은 놀라웠다. 중국에서는 UDP 통신량이 많아지면, TCP연결이 끊어지는 확률이 증가했다. 단순히 TCP의 통신량이 많아지는 것은 문제가 되지 않았다. 이는 C/S건 P2P건 마찬가지였다. 결국 1차적으로 UDP가 해당 문제의 원인으로 지목됐다.

TCP와 UDP, 상호 보완의 관계

이 현상의 직접적 원인을 이해하기 위해선 먼저 TCP와 UDP, 이 두가지 프로토콜(컴퓨터와 컴퓨터 사이, 또는 한 장치와 다른 장치 사이에서 데이터를 원활히 주고받기 위하여 약속한 여러 가지 규약 등 일종의 메커니즘)의 특징을 이해해야 한다.

 
TCP의 경우, 서버나 P2P간에 데이터를 보내면, 받는 쪽에 보낸 데이터가 처음부터 끝까지 모두 순서대로 도착한다. TCP는 보낸 데이터가 상대방에 제대로 도착했는지를 확인하는 에크(ackowledge) 정보를 확인한다. 이때 보낸 정보가 잘못 됐을 경우 다시 보내게 된다. 이 과정을 ARQ라고 한다. TCP는 이를 통해 높은 정확성과 안정성을 지니고 있다.
물론 이런 안전성 만큼 그 단점도 존재한다. 이런 ARQ 과정에서 데이터의 유실이 반복될 경우 0.2~1초의 간헐적인 딜레이가 발생할 수 있다. 이는 안정적인 데이터 전송에서는 문제가 되지 않지만, 실제 라이브 게임에서는 유저에게 참기 힘든 스트레스가 된다.
반면, UDP의 경우 중간에 빠지거나 같은 파트가 두 번 도착하거나 거꾸로 가더라도 에크나 재전송 없이 다음 데이터를 지속해서 보낸다. 한마디로 보낸 데이터와 완벽히 똑같지 않아도 그냥 무시하고 데이터를 지속해서 보내는 프로토콜인 것.
UDP의 가장 큰 장점은 데이터 유실시에도 큰 ARQ 과정이 없으므로, 딜레이가 생기지 않는다. 이는 매우 자주 보내는 메시지들에 사용하기 적합한데. 특히 온라인게임의 캐릭터 이동과 동작, 기관총 난사같은 상황에 적합하다.
특히 게임의 경우 이렇듯 TCP와 UDP를 혼용해서 사용하게 된다. 프라우드넷 역시 P2P와 릴레이에 이 TCP와 reliable UDP를 같이 사용한다.

‘혼잡붕괴’의 탄생

‘혼잡붕괴’ 현상의 가장 큰 특징은 해당 현상이 발생한 PC만 문제가 생기는 것이 아니라는 점이었다. ‘혼잡붕괴’가 일어난 PC와 랜으로 연결된 다른 PC들 모두 게임이나 네트워크 자체가 마비되는 연쇄작용을 일으켰다.
문제를 일으킨 부분은 TCP를 사용하는 프로토콜이었다. TCP로 전송한 정보량이 줄어들다 못해 아예 끊어져 버렸던 것. 이 과정에서 또 하나의 핵심 요소중 하나가 바로 중국의 공유기(라우터) 환경이었다.

 
단말기의 송신 데이터는 스위치와 공유기를 거쳐 상대방 컴퓨터에 도달하게 된다. 이 과정에서 데이터 조각인, 패킷 유실이 발생한다.
‘혼잡붕괴’는 이런 공유기 문제와 UDP가 만들어낸 현상이었다. 공유기 문제로 패킷이 높은 확률로 유실되는 경우 TCP가 보내는 데이터나 혹은 그 대답인 에크가 도달하지 못하는 현상이 발생한다. 그러면 송신자는 패킷 재전송을 반복하게 된다. 이때 20초간 재전송을 실패하면 TCP는 연결을 포기해버린다. 이를 어보션(abortion)이라고 한다.

 
넷텐션은 해당 문제가 프라우드넷에서 비롯된 것이 아님을 증명하기 위해 iperf라는 일반적인 네트워크 툴을 사용해 색다른 실험을 진행했다. 중국의 단말기 C와 한국의 같은 랜으로 연결된 A, B 단말기를 이용 이를 직접 재현했다.
중국 단말기 C와 국내 단말기 A간 TCP연결을 해놓은 상황에서 약간의 데이터를 주고 받았다. 그리고 단말기 B로 C에 한계치를 돌파한 UDP 데이터를 보내 봤다.
실험 결과는 놀라웠다. A와 C간에 원격제어와 네트워크 연결 자체가 모두 끊어지고, A 단말기와 랜으로 연결된 PC 모두 먹통이 돼 버렸다. 
이 에러의 원인은 간단했다. TCP의 경우 패킷 드랍이 발생할 경우 보다 정확한 전달을 위해 스스로 통신량을 줄이는 기능을 가지고 있다. 그러나 UDP는 패킷 드랍을 무시하고 지속적으로 출력을 올린다.
라우터의 고질적인 패킷 드랍으로 TCP가 통신량을 점차 줄이는 과정에서, UDP는 되려 TCP가 줄인 통신량을 통해 더 많은 정보를 보내게 된다. 이 과정이 반복되면, TCP 정보량은 점점 줄어들고 이를 UDP가 잡아먹는 형상이 연출된다. 결국 TCP는 사망하게 되고, 이를‘혼잡붕괴’ 현상이라고 말한다. 

中, 네트워크 생태계 바로 인식해야

‘혼잡붕괴’ 현상은 단순히 서버나 P2P의 문제로 생기는 것이 아니다. 근본적인 중국 네트워크 생태계의 문제로 바로 인식해야한다. 넷텐션은 자사의 경험을 토대로 패킷 드랍을 감지해 알아서 통신량을 줄이는 시스템(TFRC)을 구축하라고 조언한다.

 
이 현상은 특히 중국, 남미 등 개도국에서 빈번히 일어나는 현상으로 가능한 통신량을 잠식하는 단 한 개 프로그램이라도 있으면 언제든 발생할 수 있다.
특히, UDP를 사용하는 경우 이에 걸맞는 TFRC기능을 엔진레벨에서 구현하는 것이 좋다. 물론 가장 근본적인 대책은 이런 국가에 게임을 서비스하는 경우 가급적 통신량을 최대한 줄이는 것이 바람직하다. 패킷 헤더를 압축하거나, 데이터 뭉치기 등 다양한 수단을 총동원해야한다.
넷텐션은 이런 ‘혼잡붕괴’ 현상의 원인과 대안을 모색하는 한편, 중국 현지의 네트워크 구성시 주의할 점들도 함께 소개했다.
중국은 먼저 이런 ‘혼잡붕괴’ 현상 뿐아니라 극심한 해킹에 시달린다. 스피드핵은 기본으로, 패킷 복제, 변조 공격이 빈번하다. 물론 클라이언트 프로세스 해킹도 비일비재 하다.
넷텐션은 이를 대비하기 위해선 무어보다 패킷 구조를 복잡하게 꼬거나 암호화 해야한다고 조언한다. 그리고 클라이언트 해킹에 항시 대비해 기술을 적용해야한다.
또한 UDP의 오작동에 대한 다른 안도 제시했다. 중국은 DDOS에 쉽게 악용되는 ICMP(Internet Control Message Protocol)가 대량으로 쏱아지면 차단하는 장치가 흔하다. 만약 UDP 소켓을 너무 일찍 닫거나, 1300바이트 이상의 UDP 패킷을 지속에서 보내다 보면, 이를 DDOS로 인식해 아예 통신 자체를 두절시키도 한다. 이를 해결하기 위해선 1300바이트 이상의 정보를 UDP로 보낼 경우 패킷을 보다 작게 쪼게서 보내도록 해야한다. 물론 너무 잘게 쪼겔 경우 IP header 낭비가 심해지므로 적절히 뭉쳐서 보내야한다.
UDP가 오작동하는 또다른 경우도 있다. 한국과 중국 사이에 존재하는 인터넷 필터링 기능인 금순공정(金盾工程)이다. 특히 중국 내 정보나 데이터가 해외로 송출될 경우 특정 메커니즘에 의해 정치 등 다소 민감할 수 있는 내용의 패킷이 변조되거나 의도적으로 누락되는 시스템이다. 이 경우에 히 UDP 패킷 변조가 발생할 수 있다. 이를 위해선 변조되지 않는 패킷 구조를 만들어야 한다.
 

저작권자 © 경향게임스 무단전재 및 재배포 금지

개의 댓글

0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400

내 댓글 모음