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

 

Nagle's algorithm - Wikipedia

Nagle's algorithm is a means of improving the efficiency of TCP/IP networks by reducing the number of packets that need to be sent over the network. It was defined by John Nagle while working for Ford Aerospace. It was published in 1984 as a Request for Co

en.wikipedia.org

 

네이글 알고리즘 위키디피아 번역

 "개인적으로 번역한 내용이라 불충분한 점이 있으므로 발견 시 댓글로 요청 주시면 수정하겠습니다. "

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

 방법입니다. 이 알고리즘은 Ford Aerospace에서 일하는 동안 John Nagle이 정의했습니다.

 이것은 1984년에 TCP/IP 네트워크안의 혼잡제어라는 제목으로 RFC에 발표되었습니다. (RFC 896)

 RFC는 애플리케이션이 종종 1바이트 크기의 작은 세그먼트를 반복적으로 발생시키는 것을 그는 "작은 패킷 문제"라고

 부르며 설명합니다.  TCP 패킷은 40바이트의 헤더(20바이트는 TCP, 20바이트는 IP)를 가지므로 1바이트의 데이터를 

 전송하기 위해서 41바이트 패킷이라는 엄청난 오버헤드(헤더/데이터, 4000% 비율)가 발생합니다. 

 이러한 상황은 종종 대부분의 키누름이 즉시 전송되는 단일 바이트가 생성되는 Telnet 세션에서 발생하는데

 더 나쁜점은  느린 링크를 통해서 이와같은 많은 패킷이 동시에 전송되어서 congestion collapse가 발생될 수

 있습니다. 

 Nagle 알고리즘은 다수의 작은 발신 메시지를 결합해서 한번에 전송하도록 동작합니다. 승인 받지 못한 송신 패킷이

 있는 한 송신자는 packet버퍼가 가득 찰 때까지(MSS사이즈) 버퍼링을 유지 해야 하며 따라서 결과를 한번에 모두

 보낼 수 있습니다. 

알고리즘

 RFC는 알고리즘을 다음과 같이 정의합니다. 

 만약에 연결에서 이전에 전송된 데이터가 승인되지 않고 남아있는 경우에는 유저로부터 발신데이터가 도착해도 

 새로운 TCP 세그먼트의 전송을 금지합니다.

 MSS(링크글 하단에 설명)는 최대 세그먼트 크기이며 연결에서 전송할 수 있는 가장 큰 세그먼트이며 Window size

 현재 승인되지 않고 허용되는 윈도우(TCP가 승인없이 전달할 수 있는 사이즈)입니다. 

  • 첫번째 체크
    • 여유 윈도우 사이즈가 MSS보다 크고 전송 해야할 데이터가 MSS보다 크다면 기다리지 않고 전송합니다. 
  • 두번째 체크
    • 위에 조건에 해당하지 않는다면 전송한 모든 패킷이 승인 될 때까지 버퍼에 모읍니다.
    • 모든 패킷이 승인되었다면 패킷을 전송합니다.  
if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if
if 새로운 데이터 전송 확인
  if 윈도우 사이즈 >= MSS and 전송가능한 데이터 사이즈 >= MSS
    바로 MSS사이즈의 세그먼트 전송
  else
    if 여전히 승인되지 않은 전송데이터 있다면
      승인이 수신될 때까지 데이터를 버퍼에 넣는다.
    else
      즉시 데이터 전송
    end if
  end if
end if

 

Congestive collapse(네트워크 혼잡으로 붕괴 상황)

 Congestive collapse는 혼잡이 통신을 방해하거나 제한하는 상태입니다. 혼잡 붕괴는 일반적으로 들어오는 트래픽이

 대역폭을 초과하는 네트워크 choke points에서 발생합니다. 근거리 통신망과 광역 통신망 간의 연결 지점은 일반적인

 choke points입니다. 네트워크가 이 상태에 있을 때, 처리 요구량은 높지만 유용한 처리는 거의 없고, 패킷 지연 및

 손실이 발생하고 네트워크 서비스의 품질은 매우 열악한 상태로 유지 됩니다. 

RFC 896문서 링크

https://tools.ietf.org/html/rfc896.html

+ Recent posts