Table of contents
네이글 알고리즘(Nagle's Algoritm)은 Ethernet을 이용하는 컴퓨터 네트워크에서 활용됩니다.
이 중에서도 TCP 프로토콜에서 많이 활용되고 있습니다.
(다른 프로토콜에서도 활용되는지는 시간이 되면 확인해 봐야겠네요.)
pseudocode 코드가 생각보다 간단하여 pseudocode 코드부터 알아보겠습니다.
pseudocode
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
※ 참조: https://en.wikipedia.org/wiki/Nagle%27s_algorithm
생각보다 줄 수가 적은데, 머리속에서 시뮬레이션을 해보면 성능이 좋아질 것이라는 것에 대해 수긍하게 됩니다.
조금 다른 얘기인데, 현업에서도 복잡하고 어려운 논문에서 제시된 알고리즘이나 값비싼 라이브러리 및 툴보다도 단순하게 개발한 것들이 더 효과적인 경우도 많습니다.
본론으로 돌아와서, pseudocode를 대략 한글로 정리하면 아래와 같은 순차가 될겁니다.
1. 새로 보낼 데이터가 있나?
1.1. 상대방의 윈도우 사이즈가 MSS보다 크고 데이터가 MSS보다 크다면
1.1.1. MSS 사이즈만큼의 데이터를 송신한다.
1.2. 상대방의 윈도우 사이즈가 MSS보다 작거나 데이터가 MSS보다 작다면
1.2.1. 송신 대기열에 확인되지 않은 데이터가 남아있나?
1.2.1.1. 송신 승인이 있을 때까지 버퍼에 저장하고 대기한다.
1.2.2. 송신 대기열에 확인되지 않은 데이터가 없나?
1.2.2.1. 바로 송신한다.
전체적인 매커니즘을 요약하자면 '가급적 데이터를 모아서 송신한다' 가 되겠습니다.
일상에서의 예시
네이글 알고리즘이 왜 성능이 좋아지는지 이해가 안될 수도 있습니다.
네트워크 관련 기술을 대해 이해할 떄는 도로교통, 택배 등과 연관지어 이해하면 편리합니다.
지금부터 일상과 연과지어 설명해보겠습니다.
이더넷은 데이터를 보낼 때, 헤더라고 하는 부분이 손실율을 상승하게 만듭니다.
실제, 의미있는 데이터가 헤더보다 작은 경우도 존재하기도 하죠.
이것을 오버헤드가 크다라고 표현합니다.
예로, 부산에서 서울까지 택배배송차량에 작은 박스 하나만 배송하는 것과 같은 이치입니다.
물론, 주문수량이 너무 없으면 어쩔 수 없이 손실을 봐야하지만, 가능하다면 모아서 보내겠다는 것이 네이글 알고리즘의 취지입니다.
'데이터통신/네트워크 > Ethernet' 카테고리의 다른 글
MTU(Maximum Transmission Unit)와 MSS(Maximum Segment Size) 이해 및 관계 (0) | 2021.12.30 |
---|---|
Ethernet 와이어링 참고 사이트 (0) | 2021.12.30 |
지연 ACK(Delayed ACK) (0) | 2021.12.30 |
TCP(Transmission Control Protocol) 연결 과정 요약 (0) | 2021.12.28 |
TCP/IP, UDP/IP 의미 정리 (0) | 2021.12.28 |