본문 바로가기
프로그래밍/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

댓글