cs

네이글 알고리즘

ssoonn 2024. 7. 21. 23:33

 

네트워크를 통해 전송해야 하는 패킷 수를 줄임으로써 TCP/IP 네트워크의 효율성을 향상하는 수단.

John Nagle이 정의해서 네이글 알고리즘이다.

ACK를 받을 때까지 출력 버퍼에 데이터를 저장했다가 한번에 보내는 방식이다.

 

 

RFC의 '스몰 패킷 문제'

응용프로그램이 종종 1바이트에 불과한 작은 덩어리로 반복적으로 데이터를 내보내는 것.

 

TCP 패킷은 40바이트의 헤더를 가지는데, 1바이트의 정보를 보내기 위해 41바이트의 패킷을 보내는 오버헤드를 초래하게 된다.

이러한 비효율성은 수많은 패킷들이 동시에 전송되어, 잠재적으로 Congestion Collapse(정체 붕괴)로 이어질 수 있다.

 

네이글 알고리즘의 수도 코드

if there is new data to send then
	// 상대방이 받을 수 있는 사이즈(window size)와 보낼 데이터가 MSS(최대 세그먼트 크기)보다 큰 경우
    if the window size ≥ MSS and available data is ≥ MSS then
    	// 바로 전송
        send complete MSS segment now
    // 그렇지 않다면
    else
        if there is unconfirmed data still in the pipe then
        	// 전송한 모든 패킷이 승인될 때까지(ACK 받을 때까지) 버퍼에 모은다 (Nagle on)
            enqueue data in the buffer until an acknowledge is received
        else
        	// 모든 패킷이 승인되었다면 패킷 전송
            send data immediately
        end if
    end if
end if

 

예시

Good이라는 내용을 전달할 때 네이글 알고리즘을 사용한다고 가정하자.

  1. 먼저 G를 보내고 ACK을 기다린다.
  2. ACK 패킷을 받을 때까지 o,o,d는 차곡차곡 버퍼에 넣어놓는다.
  3. ACK을 수신하면 버퍼에 있는 ood를 전송한다.

 

네이글 알고리즘을 사용하면 2개의 패킷으로 Good를 전송할 수 있다.

하지만 네이글 알고리즘을 사용하지 않는다면 G, o, o, d를 따로따로 보내 4개의 패킷을 보내야 한다. 

 

하지만, Nagle On의 경우보다 Nagle Off의 경우가 전송속도는 더 빠르다.

즉, 네이글 알고리즘의 경우 작은 패킷을 연속으로 보내는 비효율을 극복하였으나, 지연 방식을 사용해 데이터 전송속도가 더 느릴 수 있다.

 

ref.

https://code-lab1.tistory.com/144

 

[네트워크] 네이글 알고리즘(Nagle`s Algorithm)이란?

네이글 알고리즘이란? 네이글 알고리즘은 네트워크를 통해 전송해야 하는 패킷 수를 줄임으로써 TCP/IP 네트워크의 효율성을 향상하는 수단이다. John Nagle이라는 사람이 정의하여 Nagle 알고리즘이

code-lab1.tistory.com

https://velog.io/@nayoon-kim/Nagle-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

Nagle 알고리즘

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

velog.io