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

블로그 이사했습니다.

아래에서 확인 가능합니다.

 

https://code-lab1.com/%EB%84%A4%EC%9D%B4%EA%B8%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/

 

[네트워크] 네이글 알고리즘(Nagle`s Algorithm)이란? - 코드 연구소

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

code-lab1.com

 

 

 

네이글 알고리즘이란?

네이글 알고리즘은 네트워크를 통해 전송해야 하는 패킷 수를 줄임으로써 TCP/IP 네트워크의 효율성을 향상하는 수단이다. John Nagle이라는 사람이 정의하여 Nagle 알고리즘이라고 불린다.  RFC896에 정확한 내용이 기술되어 있는데, 이를 정리 요약하면 다음과 같다. 

 

 

RFC에는 응용 프로그램이 종종 크기가 1바이트에 불과한 작은 덩어리로 반복적으로 데이터를 내보내는 이른바 '스몰 패킷 문제'가 기술되고 있다. TCP 패킷은 40바이트 헤더를 가지므로, 1바이트의 정보를 보내기 위해 41바이트 패킷을 보내야 하는, 매우 비효율적인 오버헤드를 초래하게 된다. 이러한 비효율성은 수많은 패킷들이 동시에 전송되어 잠재적으로 Congestion Collapse(정체 붕괴)로 이어질 수 있다. 

 

이러한 문제를 해결할 수 있는 알고리즘이 바로 네이글 알고리즘이다. 네이글 알고리즘의 수도코드는 다음과 같다.

if there is new data to send then
    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
            enqueue data in the buffer until an acknowledge is received
        else
            send data immediately
        end if
    end if
end if

 

이를 정리하자면 다음과 같다.

 

1. 상대방이 받을 수 있는 사이즈(window size)와 보낼 데이터가 MSS(최대 세그먼트 크기) 보다 크다면 바로 전송한다.

 

2. 위 조건에 해당하지 않는다면 전송한 모든 패킷이 승인 될때까지(ACK을 받을 때까지) 버퍼에 모은다(Nagle On)

 

3. 모든 패킷이 승인 되었다면 패킷을 전송한다.

 

네이글 알고리즘

예를 들어 위 그림을 살펴보자. Good이라는 내용을 전달할 때 네이글 알고리즘을 사용한다고 가정하자.

1. 먼저 G를 보내고 ACK을 기다린다.

2. ACK 패킷을 받을 때까지 o,o,d는 차곡차곡 버퍼에 넣어놓는다.

3. ACK을 수신하면 버퍼에 있는 ood를 전송한다.

 

이렇게 네이글 알고리즘을 사용하면 2개의 패킷으로 Good를 전송할 수 있다. 하지만 네이글 알고리즘을 사용하지 않는다면 G, o, o, d를 따로따로 보내 4개의 패킷을 보내야 한다. 

 

하지만 그림을 보다시피, Nagle On의 경우보다 Nagle Off의 경우가 4개의 패킷을 모두 보낸 전송속도는 더 빠른 것을 확인 할 수 있다. 즉, 네이글 알고리즘의 경우 작은 패킷을 연속으로 보내는 비효율을 극복하였으나, 지연 방식을 사용해 데이터 전송속도가 더 느릴 수 있다는 것이다. 

 

 

+참고로 본 게시글의 용어들이 이해가 안된다면 다음 내용들을 참고하자.

 

 

[네트워크] TCP 혼잡제어(congestion control)| AIMD, Slow Start | TCP Reno, Tahoe

TCP 혼잡 제어란? 혼잡(congetion)하다는 것은 너무 많은 source가 너무 많은 data를 너무 빨리 전송해 네트워크가 이를 처리하지 못하는 상태를 말한다. 조금 더 자세히 설명하자면 데이터의 양이 수신

code-lab1.tistory.com

 

 

 

 

[네트워크] TCP란? | TCP의 특징 | TCP RDT | tcp 3way handshake

TCP란? TCP(Transmission Control Protocol)는 애플리케이션에서 보낸 데이터를 신뢰성 있게 수신 측에 전송을 보장하는 프로토콜이다. 다음과 같은 특징들을 가진다. point-to-point : 하나의 송신 측과 하나의

code-lab1.tistory.com

 

 

반응형

댓글

Designed by JB FACTORY