TCP Nagle's 알고리즘이 실시간 데이터 전송 성능에 미치는 영향 분석

주싱·2021년 5월 10일
0

Network Programming

목록 보기
1/21

2016년도 대한전자공학회 하계종합학술대회에 제출했던 학술대회 논문 내용을 정리했습니다.
DBpia


개요

TCP(Transmission Control Protocol)는 신뢰성있는 데이터 전송, 네트워크 혼잡 제어 등 다양한 기능을 제공하는 유용한 통신 프로토콜이다. 그러나 반대로 다양한 기능을 지원하기 위한 복잡한 메커니즘들은 데이터 전송 시 실시간성을 저하시키는 요소로 작용하기도 한다. Nagle’s 알고리즘은 TCP 프로토콜의 실시간성을 저하시키는 대표적인 요소이다. 본 논문에서는 Nagle’s 알고리즘의 실시간 성능 저하 원리를 이론적으로 분석하고 실험을 통해 Nagle’s 알고리즘을 활성화한 경우와 비활성화 한 경우의 성능 비교를 수행한다. 이를 통해 Nagle’s 알고리즘 비활성화를 통한 TCP 프로토콜 실시간 성능 향상 가능성을 확인한다.

Nagle 알고리즘 목적과 역기능

일반적으로 TCP로 1바이트 데이터 전송 요청이 발생하면 TCP/IP 헤더를 포함한 41바이트 패킷이 네트워크로 전송된다. 1바이트 사용자 데이터를 전송하기 위해 40바이트 프로토콜 오버헤드(Overhead)가 발생하는 것이다. 이는 네트워크 사용 관점에서 비효율적이다.

Nagle’s 알고리즘은 이러한 문제를 해결하기 위하여 전송 요청된 일련의 작은 데이터들을 하나의 패킷으로 결합하여 네트워크로 전송한다. 이를 통해 네트워크로 전송되는 패킷의 수를 줄여 프로토콜 오버헤드를 줄임으로 네트워크 사용의 효율성을 높인다. 그러나 네트워크 효율성 향상을 위한 일련의 데이터 결합 동작은 먼저 전송 요청된 데이터의 전송 지연을 유발하게 된다.

실시간 성능 저하 원리

TCP로 1바이트 데이터가 전송되고 TCP 응답이 수신되기 전 연이어 1바이트 데이터 전송 요청 3개가 발생하는 입력 시나리오를 Nagle’s 알고리즘에 적용하여 그 처리 과정 및 결과를 분석한다. 이를 통해 실시간 성능 저하 원리를 분석해 보자.

먼저 TCP로 1바이트 크기의 “Data A” 전송 요청이 발생 한다. “Data A” 크기가 MSS(Maximum Segment Size) 보다 작고 현재 응답 받지 못한 이전 패킷이 없음으로 첫 번째 “Data A”는 즉시 전송된다. 그리고 연이어 1바이트 크기의 “Data B”, “Data C”, “Data D” 전송 요청이 발생한다. “Data B”, “Data C”, “Data D” 는 MSS보다 크기가 작고 현재 “Data A”에 대한 응답이 수신되지 않았음으로 곧바로 전송되지 못하고 송신 대기 큐(Queue)에 추가 된다. “Data A”의 응답이 수신되는 시점에 “Data B”, “Data C”, “Data D”는 하나의 패킷으로 결합되어 지연 전송되게 된다.

위 과정 및 결과 분석을 통하여 전송하려는 데이터 크기가 MSS보다 작고 전송 요청 시점에 응답받지 못한 이전 패킷이 존재하는 경우 Nagle’s 알고리즘에 의해 데이터 전송 지연이 발생함을 확인할 수 있다. 이 전송 지연으로 인해 실시간 성능 저하 문제가 발생하게 된다.

성능 비교시험


Nagle’s 알고리즘이 실제 실시간 데이터 전송 성능에 어떠한 영향을 미치는지 확인해 보기위하여 알고리즘을 활성화한 상태와 비활성화 한 상태에서 비교 실험을 진행하였다. 실험 환경은 아래와 같이 Ethernet Switch를 이용하여 TCP Server와 Client를 1:1로 연결하고 네트워크상의 패킷 캡처를 목적으로 패킷 캡처용 컴퓨터를 Switch에 추가로 연결한다. 패킷 캡처 컴퓨터는 Switch의 Mirroring Port(스위치를 통과하는 모든 패킷을 포워딩 해주는 포트)에 연결된다. 시험은 Server에서 Client로 10 msec 주기로 128바이트 데이터를 주기적으로 전송 요청하도록 하고 이때 실제 네트워크상에서 데이터가 어떻게 나타나는지 WireShark (패킷 캡처 도구) 툴을 이용하여 캡처 컴퓨터에서 캡처하여 그 결과를 분석한다. 알고리즘을 활성화한 상태, 비활성화 한 상태 각각에서 1분간 패킷 캡처를 수행한다.

Nagle's 알고리즘 활성화

아래는 Nagle’s 알고리즘 활성 상태에서 패킷 캡처한 결과이다. Time 행은 이전 패킷과의 시간차를 초 단위로 표시하고 Length 행은 전송되는 데이터의 길이(TCP/IP 헤더 길이 제외)를 표시 한다. (A) 패킷이 최초 전송된 패킷으로 최초에는 응답 대기중인 패킷이 없음으로 실시간으로 전송됨을 확인할 수 있다. 그리고 응답 패킷 (B)가 수신되면 약 60msec 지연되는 동안 송신 큐에 쌓인 128바이트 데이터 5개가 (C) 패킷 하나로 결합되어 전송됨을 확인할 수 있다. 1분 동안 전송된 패킷(Server to Client) 간 간격의 평균값을 계산해 보면 약 56.073 msec로 실제 전송 주기인 10msec와 40msec 이상 차이가 나는 것으로 확인하였다.

Nagle's 알고리즘 비활성화

아래는 Nagle’s 알고리즘 비활성 상태에서 패킷 캡처한 결과이다. Time 행은 이전 패킷과의 시간차를 초 단위로 표시하고 Length 행은 전송되는 데이터의 길이(TCP/IP 헤더 길이 제외)를 표시 한다. (A) 패킷 전송 후, (A) 패킷에 대한 응답 패킷인 (C) 패킷이 수신되지 않았음에도 거의 10msec 주기에 맞추어 (B) 패킷이 전송되는 것을 확인할 수 있다. 패킷이 실시간으로 전송됨으로 하나의 데이터가 하나의 패킷으로 버퍼링 없이 보내지고 있다. 1분 동안 전송된 패킷(Server to Client) 간 간격의 평균값을 계산해 보면 약 10.024 msec로 실제 전송 주기인 10msec와 거의 일치함을 확인하였다.

결론

Nagle’s 알고리즘 분석을 통해 전송 데이터 크기가 MSS 보다 작고 전송 요청 시점에 응답 받지 못한 이전 패킷이 있는 경우 데이터 전송 지연이 발생함을 확인하였다. 또한 실험을 통해 Nagle’s 알고리즘을 활성화 한 경우와 비활성화 한 경우의 실시간 성능 차이를 확인하였다. 위 연구를 통해 Nagle’s 알고리즘 비활성화를 통해 TCP 프로토콜의 데이터 전송 실시간 성능을 향상 시킬 수 있음을 확인하였다.

추후 Nagle’s 알고리즘의 전송 지연에 영향을 미치는 TCP 수신부의 비결정적인 응답 시간 원인에 대해 분석해 볼 것이다.

참고문헌

[1] Jon C. Snader, Effective TCP/IP Programming, ADDISON-WESLEY, 2005.

[2] Laura Chappell, 와이어샤크 개론, 에이콘, 2013.

[3] https://tools.ietf.org/html/rfc896

[4] https://en.wikipedia.org/wiki/Nagle%27s_algorithm

profile
소프트웨어 엔지니어, 일상

0개의 댓글