네이글 알고리즘이란?
네트워크 패킷을 줄이기 위해서 개발된 알고리즘
특정 조건까지 출력 버퍼에 데이터를 저장하였다가 한 번에 보내는 방식이다.
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 시켜야 한다.
참고 사이트
'프로그래밍 > Algorithm' 카테고리의 다른 글
C#으로 미로 만들기 (6) | 2023.08.24 |
---|---|
[프로그래머스 Programmers] 네트워크 (1) | 2023.08.24 |
그래프(Graph)와 트리(Tree) (2) | 2023.08.23 |
[프로그래머스 Programmers] 소수 만들기 (4) | 2023.08.21 |
순열(Permutation)과 조합(Combination) (4) | 2023.08.21 |
댓글