본문 바로가기
츄Log/네트워크 프로그래밍 끄적

Nagle's Alghorithm (네이글 알고리즘)

by 츄츄🦭 2023. 11. 27.
728x90

 

Nagle의 알고리즘은 TCP/IP 데이터 전송에 사용하는 알고리즘입니다.

 

Nagle의 알고리즘은 네트워크를 통해 전송해야 하는 패킷 수를 줄여 TCP/IP 네트워크의 효율성을 향상시키는 수단입니다.

이 알고리즘의 핵심은 '가능하면 데이터를 나누어 보내지 말고 한꺼번에 보내라'는 원칙을 기반으로 합니다.

 

 

small-packet problem (소형 패킷 문제)이 있습니다.

키 누른 것이 바로 전송되는(Telnet세션 같은) 애플리케이션은 크기가 1바이트에 불과한 작은 청크를 반복적으로 내보내는데요,

이 때 TCP 패킷에는 40바이트의 헤더가 있으므로, 1바이트의 청크에는 41바이트의 패킷이 생성됩니다.

그러므로 이런 반복적인 소형 패킷의 전송에 엄청난 오버헤드를 발생시키게 됩니다. 

 

이런 문제를 방지하기 위해 Nagle의 알고리즘은 여러 개의 작은 송신 데이터를 결합하여 한 번에 보내는 방식으로 작동합니다. 

또한 송신한 패킷에 대해 ACK를 받아야 다음 패킷을 전송하며 ACK를 받기 전까지 송신 버퍼에 버퍼링을 합니다.

Nagle's algorithm off/on

 

Nagle의 알고리즘 덕분에 네트워크 상태가 좋지 않고 대역폭이 좁을 때 네트워크를 효율적으로 사용할 수 있지만,

게임과 같은 실시간의 빠른 응답이 필요한 애플리케이션에는 적절하지 않습니다.

물론 Nagle의 알고리즘을 사용할지 말지는 옵션으로 선택할 수 있습니다.

 

 

참고 : https://en.wikipedia.org/wiki/Nagle%27s_algorithm

 


 

궁금한 점이나 오류가 있다면 댓글 부탁드립니다 :)

함께 성장합시다!

728x90