어지간한 MMORPG유저라면 아시고 있고 쓰시고 있는 방법이니 패스해주셔도 됩니다.


언터넷에서는 데이타를 전송할때 크게 UDP라는 방식과 TCP라는 방식을 씁니다.

UDP는 상대가 받는지 말았는지 완전히 무시하고 데이타를 무조건 뿌려댄다고 보시면 됩니다.

일반적으로 빠른 반응을 요구하는 FPS게임이나 로컬네트워크로 돌아가는 게임(같은PC방 안에서 스타크래프트를 돌린다든지)

하는 경우에 사용됩니다.

TCP는 일단 클라이언트와 서버사이에 데이타 전송을 위한 쌍방 합의를 본후 데이타를 보내는 형태입니다.

확실한 데이타 전송을 위한 방법으로 MMORPG에서 많이 씁니다.

여기서 패스티핑이니 게임부스트니 하는 유틸들을 기억하실겁니다.

그런 유틸의 기작은 다음 2가지가 사실상 95%이상을 차지합니다.

1. 네이글 알고리즘 비활성화

네이글 알고리즘이란 인터넷전체에서 너무 작은 패킷이 사용되는것을 막기 위한 방법입니다.
  
   패킷이란 인터넷 데이타 전송의 단위입니다..크게 [헤드+데이타] 로 구성된다고 보시면 됩니다.

이때 헤드에는 보내는쪽의 주소 받는쪽의 주소를 포함하여 시스템적으로 필요한 정보가 포함됩니다.

데이타의 크기가 어느정도 이상이면 헤드의 크기가 별로 문제가 안되는데

너무 작아버리면 같은 양의 정보를 전송하는데 헤드가 엄청나게 차지하게 됩니다.

이로 인해 전체 인터넷망의 사용률이 하락합니다.

또 같은 양의 정보를 보내는데 페킷의 총숫자가 늘어남으로서 그것을 처리하는 서버쪽에 과부하를 걸게됩니다.

이걸 방지하기 위해 패킷의 전체크기가 일정량에 찰때까지 데이타를 모았다가 한번에 보내는것이 

네이글 알고리즘입니다...현재 거의 모든 OS의 TCP전송에 기본으로 사용됩니다.

(너무 오래 모으는것도 문제라고 봐서 최대 0.2초까지 기다립니다.)

하지만 온라인게임에서 유저가 입력한 명령이 모아져서 서버에 전송되는데 0.2초단위로 보내진다는 얘기가 
됩니다. 즉 엄청난 반응속도 하락을 가져오게 되고 또한 클라이언트 입력-서버 반응-클라이언트 반응

으로 이어지는 MMORPG의 프로그래밍상 클라이언트가 전반적으로 놀게되는 시간이 생깁니다.

유저는 끊임없이 입력하고 있는데도요

이걸 해결하는것이 네이글 알고리즘 비활성화 입니다.

효과는 반응시간이 향상되고(와우의 경우 절반으로 준다는군요) 쉬지않고 입력시 전체 시간당 사용하는

스킬의 갯수가 증가합니다.

다만 위에 썻듯 전체인터넷의 사용효율이 떨어지고 서버에 과부하가 걸리므로 서비스하는쪽에서

별로 좋아하지 않습니다.

그리고 대용량 정보를 보낼때(파일 업로드가 대표적이죠) 전송속도가 하락하기 쉽습니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\

TCPNoDelay : 1 (DWORD)

2. ACK에 일일이 반응하기

TCP는 쌍방에 합의 후에 전송을 시작한다고 썻는데요

이때 확인되었다 고 서버->클라이언트로 보내는것이 ACK입니다.

그런데 윈도우는 0.2초내에 여러개의 ACK가 들어올경우 2개마다 반응 합니다.

이로 인해 빠른 속도로 패킷이 들어올경우 패킷전송 하나마다 ACK가 하나씩 들어오므로

2개마다 한번씩 또는 0.2초마다 서버로 반응 한다고 보시면 됩니다.

이걸 매번 반응하게 바꾸는것으로서 이로인해 약간의 반응속도 향상을 볼수 있습니다.

다만 대용량 정보의 전송에는 거의 영향이 없으며

전체 인터넷망으로 봐서는 약간의 효율하락을 가져옵니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
\{NIC넘버}

TcpAckFrequency : 1 (DWORD)