Windows Server 2008이 나오면... (21) - Network Auto-Tuning (1)

오늘은 Windows Server 2008과 Windows Vista의 TCP 네트워크에 대해서 논해볼까 합니다.

다소 어려운 주제일 수 있으나, 꼭 아셔야할 필요성이 있다고 생각합니다.

네트워크를 사용하는 응용 프로그램 성능의 주요 팩터는 바로 네트워크 처리량입니다. 응용 프로그램에 대한 네트워크 처리량에 따라 응용 프로그램의 응답성 및 사용자가 느끼는 성능에 차이가 발생할 수 있습니다.

이러한 네트워크 처리량에 영향을 줄수 있는 팩터는 여러가지가 있습니다. 그중 첫번째는 바로 네트워크의 물리적인 특징입니다. 네트워크 자체를 파이프라고 생각하시면, 대역폭(Bandwidth)는 바로 파이프의 지름이라고 볼 수 있습니다. 지연(Latency), RTT(Rount Trip Time)은 파이프의 길이라고 해야할까요? 만약 여러분께서 1GB의 데이터를 전송하고자 한다면, 더 굵고, 짧은 파이프가 길고 얇은 파이프보다 빠르게 데이터를 전송할 수 있습니다. 높은 대역폭과 낮은 지연은 높은 처리량에 대한 필수 팩터라고 볼 수 있습니다.

네트워크의 사용량은 두번째 팩터가 되게 됩니다. 사용자/응용 프로그램이 주어진 네트워크 링크를 공유해서 사용하기 때문에, 응용 프로그램의 처리량 증가는 자연스럽게 링크의 감소로 이어지게 됩니다. 링크 대역폭은 TCP 프로토콜을 사용하는 응용 프로그램간에 공평하게 나누어서 사용하기 때문에, TCP 연결의 대역폭에 대해 응용 프로그램 연결을 제한하지 않는다면, 해당 링크는 혼잡(Congestion)이 발생하게 됩니다. 당연한 이야기죠? 혼잡이 발생하면 패킷의 누락과 전체적인 처리량의 감소가 생기는 것도 너무 당연하죠. 이러한 것을 막기 위해, TCP 프로토콜은 혼잡을 방지하고, 감지할수 있는 메커니즘을 가지고 있고 이를 통해 대역폭을 공평히 나누어 쓰게 됩니다.

세번째 팩터는 네트워크 프로토콜로부터 발생하게 됩니다. TCP는 두가지 메커니즘을 통해 연결에 대한 처리량을 제한합니다. 한가지가 혼잡 제어(Congestion Control), 또하나가 흐름 제어, 흔히 이야기하는 Receiving Windows입니다. 혼잡 제어는 TCP 프로토콜에 네트워크내 혼잡을 발생시키지 않고, 공평하게 네트워크를 나눠 사용할 수 있도록 하며, Receiving Windows는 수신자가 처리할 수 있는 데이터량보다 많이 송신자가 전송하는 것을 막아줍니다. 이러한 제어는 TCP 프로토콜에 대한 이야기이며, UDP는 이러한 처리를 하지 않습니다.

조금 난해한 이야기인가요? Windows Vista, Windows Server 2008의 Network Auto Tuning을 아시려면 배경지식으로 꼭 필요한 이야기입니다. 자 다음 편에 이제 실제 이야기를 쓰도록 하겠습니다. :)