본문 바로가기

Library/Computer Network

Network I/O Management

애플리케이션은 TCP를 통해 다른 애플리케이션으로 데이터를 전송할 때, TCP 소프트웨어에 데이터를 쓰고 TCP 소프트웨어는 그 데이터를 전송 버퍼에 저장한다. TCP는 데이터의 일부를 정기적으로 세그먼트에 담아 목적지 시스템으로 배달하려고 이를 IP에 전달한다.

이 절차는 간단해 보이지만 주로 TCP에서 처리하는 세그먼트의 크기를 결정하는 문제로 인해 많은 작업이 포함되어 있다. TCP는 생성되는 각 세그먼트에 대해 그 시점에서 사용할 가장 효율적인 세그먼트 크기를 결정해야 하는데, 이 결정에는 때마다 상이한 요소들이 포함될 수 있어 매우 복잡하다.

그러나 세그먼트의 크기를 정확히 결정하는 것이 가상 회선의 성능과 관련된 특성을 크게 좌우하므로 매우 중요한 서비스다.


가장 효율적인 세그먼트 크기를 결정하는데 고려해야 할 요소는 다음과 같다.

전송버퍼의 크기 : 여러 요소 가운데 로컬 시스템의 전송 버퍼의 크기는 효율적인 세그먼트 크기를 결정하는 데 가장 확실한 요소다. 전송 버퍼가 채워지면 다른 요소와 상관없이 더 많은 데이터를 저장하기 위한 공간을 확보하기 위해 세그먼트가 전송되어야 한다.

수신 버퍼의 크기 : 마찬가지로 목적지 시스템의 수신 버퍼의 크기도 고려해야 할 요소다. 수신 시스템에서 처리할 수 있는 것보다 더 많은 데이터를 전송하면 분실히 발생할 수 있으며, 분실된 세그먼트는 재전송되어야 한다.

MTU와 MRU 크기 : TCP는 로컬 네트워크의 최대 전송 단위(MTU)의 크기, 목적지 시스템 네트워크의 최대 수신 단위(MRU)의 크기, 그리고 두 시스템을 연결하는 중계 네트워크의 MTU / MRU 크기에 의해 좌우되는 IP 데이터그램의 최대 데이터 처리 용량도 고려해야 한다. 만약 데이터그램이 종단간(end-to-end) 네트워크가 처리하기에 너무 크게 생성되면 분열이 발생해 네트워크의 성능과 신뢰성이 저하된다.

헤더의 크기 : IP 데이터그램은 세그먼트에 20 ~ 60 바이트의 데이터를 소모하는 헤더를 갖는다. 이와 마찬가지로 TCP도 추가적으로 20 ~ 60 바이트 공간을 소모하는 가변 길이 헤더를 갖는다. TCP는 생성되는 세그먼트에 IP 헤더와 TCP 헤더가 저장될 수 있는 공간을 남겨 두어야 한다. 그렇지 않으면 데이터그램이 네트워크에서 처리하기에 너무 커져 분열이 발생한다.

데이터 크기와 적시성 : 저장된 데이터가 전송되는 주기는 데이터가 생성되는 속도에 의해 결정된다. 어떤 애플리케이션에서 데이터를 대량으로 생성한다면 당연히 많은 TCP 세그먼트가 신속하게 전송되어야 할 것이다. 이와 반대로 적은 양의 데이터도 적시에 전송되어야 하므로 크기가 매우 작은 세그먼트가 생성될 것이다. 또 때로는 애플리케이션에서 데이터를 큐에 저장하지 않고 즉시 전송하도록 요구할 수도 있다.


이 모든 변수를 고려하여 가장 효율적인 세그먼트 크기를 결정하는 수식을 다음과 같이 표현할 수 있다.

MESS = ((전송 버퍼, 수신 버퍼, MTU OR MRU)의 최소값 - 헤더) OR (데이터 + 헤더)

간단히 말하자면 가장 효율적인 세그먼트 크기는 전송할 데이터가 적은 경우를 제외하고는 (전송 버퍼, 수신 버퍼, 또는 MTU / MRU 값 가운데) 가장 작은 저장 단위를 찾아 IP와 TCP 헤더에서 필요로 하는 바이트 수를 뺸 값이다. 전송할 데이터가 적은 경우에는 (필요한 헤더를 포함한) 데이터의 크기가 전송되는 세그먼트의 크기를 결정한다.

세그먼트의 크기를 가장 작은 저장 단위로 제한하면 두 시스템 사이에서 분열될 염려없이 전송될 수 있다. 이러한 제한은TCP가 종단간에 전송 가능한 최대 크기의 세그먼트를 사용할 수 있도록 하여, 결과적으로 가장 짧은 시간 동안 데이터를 가장 많이 전송할 수 있게된다.


Quotes from Internet Core Protocols, Eric A. Hall, O'Reilly, 인터넷 핵심 프로토콜 가이드, 한빛미디어