카테고리:

1 분 소요

Nagle 알고리즘

Nagle 알고리즘은 1984년에 발표된 RFC 896 “Congestion Control in IP/TCP Internetworks” 문서에서 제안된 것으로, Van Jacobson에 의해 소개되었다. 이 알고리즘의 주요 목적은 TCP 네트워크에서 소형 데이터 패킷을 최소화하여 헤더가 붙음으로 인한 오버헤드를 줄여 대역폭을 효율적으로 사용하는 것을 목적으로 제시되었다.

Nagle 알고리즘의 동작 원리

1. 작은 패킷의 조합

작은 데이터 조각을 여러 개의 패킷으로 나누어 전송하는 것을 방지하기 위해 TCP 세그먼트에 작은 데이터를 모아서 조합한 후 한 번에 전송한다.

2. ACK 지연

ACK 패킷의 전송을 고의적으로 늦춰 전송함으로써, TCP 연결에서 발생하는 오버헤드를 감소시킨다.

Nagle 알고리즘 비활성화

1984년에 발표된 만큼 당시에는 적은 대역폭이 큰 문제가 되어 현대에 와서도 setsocketopt으로 TCP_NODELAY를 따로 설정하지 않으면 기본적으로 활성화 되어있다. Nagle 알고리즘을 사용하면 지연 시간이 발생하는 만큼 실시간 통신이나 대화형 응용 프로그램에서는 작은 데이터 패킷을 즉시 전송하여 지연 시간을 최소화할 수 있다.

참고

https://snowdeer.github.io/c++/2017/08/17/setsockopt/
https://www.ibm.com/docs/ko/aix/7.2?topic=tuning-tcp-nodelay-tcp-nagle-limit-options
https://datatracker.ietf.org/doc/html/rfc896
https://velog.io/@devdynam0507/TCP-네이글-알고리즘-TCPNODELAY

태그: ACK, ChannelOption.TCP_NODELAY, Nagle, NoDelay, RFC 896, setsocketopt, TCP/IP, TCP_NODELAY, 네이글, 세그먼트, 패킷

업데이트: