블로그 이사했습니다.
아래에서 확인 가능합니다.
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/
네이글 알고리즘이란?
네이글 알고리즘은 네트워크를 통해 전송해야 하는 패킷 수를 줄임으로써 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개의 패킷을 모두 보낸 전송속도는 더 빠른 것을 확인 할 수 있다. 즉, 네이글 알고리즘의 경우 작은 패킷을 연속으로 보내는 비효율을 극복하였으나, 지연 방식을 사용해 데이터 전송속도가 더 느릴 수 있다는 것이다.
+참고로 본 게시글의 용어들이 이해가 안된다면 다음 내용들을 참고하자.
'Computer Science > [네트워크]' 카테고리의 다른 글
[네트워크] 도메인(Domain)과 DNS(Domain Name System)란? (0) | 2022.03.08 |
---|---|
[네트워크] DHCP(Dynamic Host Configuration Protocol)란? (0) | 2022.03.07 |
[네트워크] 라우팅 알고리즘 비교 | Link State 알고리즘, Distance Vector 알고리즘 (0) | 2021.09.14 |
[네트워크] poisoned reverse란? count to infinity 문제 해결법 | DV 알고리즘 (0) | 2021.09.06 |
[네트워크] 서브넷, 서브넷마스크, 서브넷팅이란? | 서브넷팅 예제 (29) | 2021.08.24 |