본문 바로가기
프로그래밍/Algorithm

네이글 알고리즘(Nagle Algorithm)에 대해서

by bantomak 2023. 8. 17.

네이글 알고리즘이란?

네트워크 패킷을 줄이기 위해서 개발된 알고리즘

특정 조건까지 출력 버퍼에 데이터를 저장하였다가 한 번에 보내는 방식이다.

TCP 소켓은 Nagle 알고리즘을 기본으로 사용하고 있다.

네이글 알고리즘을 실행하면 모아서 보내기 때문에 패킷 전송 횟수가 감소한다.

작동 방식

nagling이라는 방법으로 TCP 애플리케이션의 송신 측에서 데이터를 처리한다.

 

작은 크기의 메세지를 탐지해서 데이터를 보내기 전에 큰 TCP 패킷에 데이터를 누적해서 불필요하게 많은 수의 작은 패킷이 생성되는 것을 방지한다.

Nagle 알고리즘은 지연 시간이 추가된 대신 네트워크 연결의 대역폭을 보다 효율적으로 활용할 수 있다. 응용 프로그램은 TCP_NODELAY 소켓 프로그래밍 옵션을 사용해서 Nagle 알고리즘 사용을 제어한다.

Window, Linux, Java 시스템은 일반적으로 Nagle을 활성화하기 때문에 해당 환경에서 사용되는 응용 프로그램에서 Naggle 알고리즘을 OFF 하기 위해서는 TCP_NODELAY를 지정해야 한다.

 

예제 코드

static void ConfigureTcpSocket(Socket tcpSocket)
{
    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket.NoDelay = true;

    Console.WriteLine("Tcp Socket configured:");
    
    Console.WriteLine($"  NoDelay {tcpSocket.NoDelay}");

    Console.WriteLine("");
}

 

Nagle 알고리즘의 장점

장점

  • 패킷량이 줄어 네트워크 사용 효율이 높아진다.
  • 특히 대역폭이 낮은 WAN에서 빈번한 전송을 줄이게 됨으로 효과적인 대역폭 활용이 가능해진다.

단점

  • ACK를 기다리지 때문에 전송이 지연되어(딜레이 발생) 속도가 저하된다.
  • TCP에서만 사용할 수 있고 UDP를 포함한 다른 프로토콜은 Nagle 알고리즘을 지원하지 않는다.
  • 인터넷 전화나 1인칭 슈팅 게임과 같이 빠른 응답속도가 필요한 TCP 응용 프로그램에 Nagle 알고리즘이 적용되면 제대로 작동하지 않을 수 있다.
  • 네트워크가 느린 환경에서 Nagle 알고리즘을 적용할 경우 단순한 타이핑마저 느려질 수 있다.

 

서버를 개발할 때에는 이러한 장단점에 맞춰 Nagle 알고리즘을 On/Off 시켜야 한다.

 

참고 사이트

 

Nagle 알고리즘

최근에 이 알고리즘을 시험에서 만난 적이 있어서 호다닥 정리해보려고 한당.네트워크 패킷을 줄이기 위해 개발된 알고리즘ACK를 받을 때까지 출력 버퍼에 데이터를 저장하였다가 한번에 보내

velog.io

댓글