네트워크 최적화란?
유선망은 고속 데이터 전송과 안정성을 제공하지만, 네트워크 최적화가 이루어지지 않으면 병목현상, 지연, 패킷 손실 등의 문제가 발생하여 성능이 저하될 수 있습니다.
특히, 송신 측 전송 계층에서 데이터를 무작정 목적지로 보내버린다면 경로 상의 라우터가 혼잡해지며, 이는 병목 현상, 지연, 패킷 손실로 이어질 것입니다.
이 문제를 해결하기 위한 방법에 대해 알아보도록 하겠습니다.
TCP 흐름제어
수신 측이 송신 측보다 데이터 처리 속도가 빠르면 문제 없지만, 송신 측의 속도가 빠를 경우 문제가 발생하게 됩니다. 수신 측에서 제한된 저장 용량을 초과한 이후에 도착하는 패킷은 손실될 수 있으며, 만약 손실된다면 불필요한 추가 패킷 전송이 발생하게 됩니다.
흐름 제어는 위와 같이 송신 측과 수신 측의 TCP 버퍼 크기 차이로 인해 생기는 데이터 처리 속도 차이를 해결하기 위한 기법입니다.(TCP 버퍼: 송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을 때까지 버퍼에 보관한다)
슬라이딩 윈도우
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 패킷을 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법입니다.
윈도우 크기 결정
최초의 윈도우 크기는 호스트들의 ‘3-way handshaking'을 통해 수신 측 윈도우 크기로 설정되며, 이후 수신 측의 버퍼에 남아있는 공간에 따라 변한다. 윈도우 크기는 수신 측에서 송신 측으로 확인 응답(ACK)을 보낼 때 TCP 헤더(window size)에 담아서 보냅니다.
TCP 혼합 제어
한 라우터에 데이터가 몰려서 모든 데이터를 처리할 수 없는 상황이 발생하면, 클라이언트 측 TCP는 보낸 데이터에 대한 응답이 오지 않습니다.
이에 따라 클라이언트 측 TCP는 동일 데이터를 재전송할 것이고, 이러한 재전송은 경로 상의 라우터 내부 혼잡을 더욱 가중시킵니다.
혼잡제어는 이러한 네트워크 상의 혼잡을 회피하기 위해 송신 측에서 보내는 데이터의 전송 속도를 제어하는 기법입니다.
TCP 흐름 제어 VS 혼합 제어
흐름 제어는 종단 호스트 간의 패킷 수를 제어하는 기능이라면, 혼잡 제어는 네트워크 내에 흐르는 패킷 수를 조절하여 네트워크의 오버플로우를 방지하는 기능입니다.
흐름제어 혼합제어 모두 송신 측의 윈도우 크기는 수신 측이 보내준 윈도우 크기와 네트워크 상황을 함께 고려해서 정해지게 됩니다. 송신 측은 자신의 최종 윈도우 크기를 정할 때, 수신 측이 보내준 윈도우 크기인 수신자 윈도우(RWND)와 자신이 네트워크 상황을 고려해 정한 혼잡 윈도우(CWND) 중에서 더 작은 값을 택 합니다.
TCP 혼합 제어 기법
AIMD (Additive Increase, Multiplicative Decrease)
전통적인 TCP 혼잡 제어는 네트워크의 혼잡을 피하기 위해 패킷 손실을 혼잡의 신호로 사용한다. 기본적으로 AIMD 메커니즘을 사용합니다.
- 선형적 증가 (Additive Increase)
- 혼잡이 감지되지 않으면 혼잡 윈도우(CWND)를 1씩 증가시킵니다.
- 네트워크의 여유 자원을 천천히 탐색하며, 안정적으로 대역폭을 확보합니다.
- 감소 (Multiplicative Decrease)
- 패킷 손실이 감지되면 CWND를 절반으로 감소시킵니다.
- 네트워크 혼잡 상태를 빠르게 해소하여 안정성을 유지합니다.
- 안정성 중시
- 급격한 윈도우 증가를 방지해 네트워크의 혼잡을 최소화합니다.
- 패킷 손실 발생 가능성을 줄여 안정적인 데이터 전송을 보장합니다.
- 느린 대역폭 활용
- CWND가 선형적으로 증가하기 때문에 네트워크 여유가 많아도 대역폭을 완전히 활용하는 속도가 느립니다.
Slow Start
AIMD 방식은 윈도우 크기를 선형적으로 증가시키므로 제대로 된 속도가 나오기까지 오랜 시간이 필요합니다.
반면, Slow Start는 윈도우의 크기를 1, 2, 4, 8, …과 같이 지수적으로 증가시키다가 혼잡이 감지되면(전송이 실패하면) 윈도우 크기를 1로 줄이는 방식 입니다.
Slow Start의 동작 원리
- 지수적 증가
- 처음에는 혼잡 윈도우(CWND)가 작기 때문에 데이터를 조금씩 보내다가, 패킷이 잘 전달되면 윈도우를 두 배씩 증가시킵니다.
- 예: 1 → 2 → 4 → 8 → 16 ...
- 이렇게 빠르게 증가하기 때문에 네트워크의 여유 대역폭을 빠르게 탐색하고 활용할 수 있습니다.
- 한계점
- CWND가 너무 빠르게 증가하면 네트워크가 감당할 수 있는 한계를 초과할 수 있습니다.
- 이로 인해 패킷 손실이 발생할 가능성이 커집니다.
- 손실이 발생하면 혼잡 제어 알고리즘에 따라 CWND가 감소되며, 성능 저하가 일어납니다.
Slow Start의 장단점
- 장점:
- 초기 네트워크 성능을 빠르게 활용할 수 있습니다.
- 작은 윈도우에서 시작하므로 네트워크를 과도하게 부담시키지 않습니다.
- 단점:
- 지수적 증가 때문에 네트워크의 한계를 빠르게 넘어서게 되어 패킷 손실이 발생할 확률이 높아집니다.
- 네트워크 상태를 과도하게 탐색하다가 혼잡이 발생하면 오히려 성능 저하를 초래할 수 있습니다.
Slow Start + AIMD
TCP 혼잡 제어의 핵심적인 방식으로, 초기에는 Slow Start를 통해 빠르게 성능을 높이고, 네트워크 혼잡이 예상되는 특정 시점(임계점) 이후에는 AIMD를 통해 안정적으로 전송 속도를 조절하는 메커니즘입니다.
동작 방식
- Slow Start 단계
- 초기에는 혼잡 윈도우(CWND)가 작기 때문에 데이터를 조금씩 보내면서 패킷이 정상적으로 수신되면 CWND를 지수적으로 증가시킵니다.
- 예: CWND = 1 → 2 → 4 → 8 → 16 ...
- Slow Start Threshold (ssthresh)
- 송신자는 네트워크 혼잡을 방지하기 위해 임계점(ssthresh)를 설정합니다.
- CWND가 ssthresh에 도달하면 더 이상 지수적으로 증가하지 않고, AIMD로 전환됩니다.
- AIMD 단계
- 선형적 증가: CWND를 한 번에 1씩 증가시킵니다.
- 감소: 혼잡이 감지되면 CWND를 절반으로 감소시킵니다.
- 이렇게 천천히 전송 속도를 조절하며 네트워크 혼잡을 예방합니다.
장단점
장점
- 빠른 전송 속도 도달
- Slow Start를 통해 초기 네트워크 상태에서 빠르게 대역폭을 확보할 수 있습니다.
- 특히 네트워크 상태가 좋을 때 높은 성능을 발휘합니다.
- 네트워크 혼잡 최소화
- AIMD로 전환하면 네트워크 상태를 보수적으로 관리하면서 안정적으로 대역폭을 탐색합니다.
- 혼잡이 예상되는 상황에서도 급격한 윈도우 증가를 방지합니다.
- 효율적인 혼잡 제어
- ssthresh 임계점을 기준으로 지수적 증가에서 선형적 증가로 전환하기 때문에 네트워크 혼잡을 효과적으로 방지합니다.
단점
- 혼잡 발생 가능성
- Slow Start는 지수적으로 CWND를 증가시키기 때문에 네트워크 용량을 빠르게 초과할 수 있습니다.
- 이로 인해 혼잡이 발생하면 패킷 손실과 성능 저하가 나타납니다.
- 느린 성능 회복
- 혼잡이 감지되면 AIMD 단계에서 CWND를 절반으로 줄이기 때문에 전송 속도가 급격히 감소합니다.
- 이후 선형적으로 증가하므로 대역폭 회복 속도가 느립니다.
- 임계점 설정의 어려움
- ssthresh 값을 최적으로 설정하지 못하면 네트워크 성능이 제대로 발휘되지 않을 수 있습니다.
- 예를 들어 너무 낮게 설정하면 성능을 충분히 활용하지 못하고, 너무 높게 설정하면 혼잡이 발생할 수 있습니다.
결론
Slow Start + AIMD는 초기에는 빠르게 전송 속도를 높이고, 이후에는 네트워크 혼잡을 최소화하면서 안정적으로 성능을 조절하는 혼합된 메커니즘입니다.
- 장점: 빠른 전송 속도 확보와 안정적인 혼잡 제어.
- 단점: 혼잡 발생 가능성, 느린 성능 회복, ssthresh 설정의 어려움.
이 두 메커니즘이 결합됨으로써 TCP는 네트워크 성능과 안정성을 모두 고려하는 균형 잡힌 혼잡 제어를 구현할 수 있습니다.
QUBIC
손실을 기반으로 혼잡을 감지하며, 혼잡 윈도우 크기(cwnd)를 시간 함수로 계산하여 효율적으로 대역폭을 활용할 수 있도록 설계 합니다.
리눅스 시스템에서 QUBIC을 혼잡 제어 알고리즘으로 채택!
특징
혼잡 윈도우 크기를 선형이 아닌 Cubic 함수를 기반으로 폭발적으로 증가시킨다.
손실이 발생하면 Multiplicative Decrease를 사용하여 특정 비율만큼 윈도우 크기를 감소시킨다.
CUBIC의 핵심 개념
- 혼잡 예측 기반
- 기존 TCP 혼잡 제어(AIMD, Slow Start)는 패킷 손실을 혼잡의 신호로 사용하고 나서 대응하지만,
CUBIC은 네트워크 혼잡을 미리 예측해 전송 속도를 조절하려고 시도합니다.
- 기존 TCP 혼잡 제어(AIMD, Slow Start)는 패킷 손실을 혼잡의 신호로 사용하고 나서 대응하지만,
- Cubic 함수 사용
- CWND(혼잡 윈도우)의 증가를 시간을 기반으로 한 3차 함수 (Cubic Function)를 사용해서 조절합니다.
- CWND는 손실이 발생하기 전까지 완만하게 증가하다가, 일정 시간 후 급격히 증가하는 패턴을 보입니다.
- 이런 방식으로 네트워크의 용량을 예측하며 혼잡 상태를 미리 회피하려 합니다.
CUBIC의 동작 방식
- 패킷 손실 발생 전까지의 동작
- CWND를 Cubic 함수를 기반으로 증가시킵니다.
- 혼잡 윈도우 증가 속도는 처음에는 느리지만, 손실 직전에 가까워질수록 급격히 증가합니다.
- 패킷 손실 감지 후
- CWND는 기존 TCP와 마찬가지로 감소하지만, 이후 Cubic 함수의 곡선을 따라 천천히 회복됩니다.
- 선형적으로 증가하지 않고 시간에 따라 완만하게 증가하다가 다시 급격히 증가하는 특성을 가집니다.
- 손실을 예측하고 방지
- 패킷 손실을 혼잡의 신호로 삼는 대신, 네트워크가 혼잡해지기 전에 Cubic 함수의 특성상 CWND 증가를 둔화시킵니다.
- 이로 인해 혼잡 발생 가능성을 낮추고, 네트워크 용량을 안정적으로 탐색할 수 있습니다.
CUBIC과 기존 혼잡 제어와의 차이점
- AIMD와 Slow Start
- 손실 기반 대응: 손실이 발생한 후에 혼잡을 감지하고 CWND를 줄임.
- CWND 증가가 선형적 또는 지수적임.
- CUBIC
- 예측 기반 대응: 네트워크 혼잡이 발생하기 전 CWND 증가를 조절함.
- CWND 증가가 시간을 기반으로 한 3차 함수를 따르며, 더 빠르고 효율적인 대역폭 활용을 가능하게 함.
- 고대역폭 및 고지연 네트워크(예: 데이터 센터, 광통신망)에 적합.
CUBIC의 장단점
장점
- 고대역폭 환경에서 효율적
- 기존 TCP 대비 대역폭을 더 빠르게 탐색하고, 네트워크를 더 효율적으로 활용합니다.
- 혼잡 예측
- 혼잡 발생을 미리 예측하고 조절함으로써 패킷 손실을 방지하는 데 도움을 줍니다.
- 느린 성능 회복 극복
- AIMD처럼 선형적으로 CWND를 회복하지 않고, 곡선을 따라 빠르게 회복할 수 있습니다.
단점
- 저대역폭 환경에서는 성능이 낮을 수 있음
- 고대역폭 환경에 최적화되어 있으므로, 작은 네트워크나 저지연 환경에서는 기존 TCP와 차이가 적을 수 있습니다.
- 복잡한 알고리즘
- Cubic 함수 기반이므로 기존의 AIMD보다 구현이 복잡합니다.
결론
CUBIC은 기존 TCP의 혼잡 제어와 달리 네트워크 혼잡을 미리 예측하고 CWND를 조절하여 혼잡을 방지합니다. 특히 고대역폭·고지연 네트워크에서 효율적으로 작동하며, AIMD의 선형 증가보다 훨씬 빠르게 네트워크 성능을 최적화할 수 있는 혼잡 제어 알고리즘입니다.
BBR (Bottleneck Bandwidth and Round-trip propagation time)
존의 TCP 혼잡 제어 방식과 달리 대역폭(Bandwidth)과 RTT(Round-Trip Time)를 측정하여 최적의 전송 속도를 결정하는 현대적 혼잡 제어 알고리즘입니다. 이를 통해 최대 대역폭 활용과 최소 지연 유지를 동시에 목표로 합니다.
BBR의 동작 원리
BBR은 네트워크 병목 구간의 대역폭과 왕복 시간(RTT)을 주기적으로 측정해 최적의 송신 속도를 계산합니다. 네트워크 상태에 따라 다음 4가지 상태를 반복적으로 전환하며 동작합니다.
BBR의 4가지 동작 상태
- STARTUP 단계 (대역폭 탐색 단계)
- 목적: 최대 대역폭을 빠르게 찾기 위해 전송 속도를 지수적으로 증가시킵니다.
- 동작:
- 초기에 네트워크가 얼마나 데이터를 수용할 수 있는지 탐색합니다.
- 이는 Slow Start와 유사하지만, BBR은 RTT를 고려해 보다 적극적으로 대역폭을 탐색합니다.
- 결과: 네트워크 병목 구간의 대역폭이 최대에 도달하면 DRAIN 단계로 전환됩니다.
- DRAIN 단계 (큐 비우기 단계)
- 목적: STARTUP 단계에서 큐에 쌓인 데이터를 비우고 네트워크의 RTT를 안정화합니다.
- 동작:
- 전송 속도를 줄여서 네트워크에 남아있는 데이터를 소진시킵니다.
- 네트워크 큐가 비워지면 RTT가 최소화되고, 병목 대역폭이 더욱 정확하게 측정됩니다.
- 결과: 큐가 비워지면 PROBE_BW 단계로 넘어갑니다.
- PROBE_BW 단계 (대역폭 유지 단계)
- 목적: 현재 대역폭을 유지하면서 네트워크 상태를 주기적으로 점검합니다.
- 동작:
- 전송 속도를 일시적으로 높이거나 낮추며 최대 대역폭이 변화했는지를 탐색합니다.
- 이를 통해 변화하는 네트워크 환경(혼잡도, 대역폭 등)에 적응합니다.
- 특징:
- 대부분의 시간은 이 단계에서 머물게 됩니다.
- 병목 대역폭이 유지되면, 전송 속도도 안정적으로 유지됩니다.
- PROBE_RTT 단계 (RTT 측정 단계)
- 목적: 네트워크의 최소 RTT를 다시 측정합니다.
- 동작:
- 전송 속도를 일시적으로 줄여서 네트워크의 지연 시간을 측정합니다.
- RTT가 최소값으로 안정화되면 이를 기준으로 병목 대역폭을 다시 최적화합니다.
- 특징:
- 주기적으로 이 단계를 실행해 네트워크 상태의 변화를 감지하고 반영합니다.
BBR의 주요 특징
- 손실 기반이 아닌 측정 기반
- 기존 TCP 혼잡 제어(AIMD, CUBIC)는 패킷 손실을 혼잡의 신호로 사용하지만, BBR은 대역폭과 RTT를 실시간으로 측정합니다.
- 최대 대역폭과 최소 지연 유지
- 네트워크 병목의 대역폭을 최대한 활용하면서도 불필요한 데이터 큐잉을 최소화하여 RTT를 낮춥니다.
- 빠른 네트워크 적응
- 네트워크 상태가 변하면 4가지 상태를 통해 즉각적으로 적응하며 최적의 송신 속도를 조절합니다.
결론
BBR은 네트워크 상태를 실시간으로 측정해 최적의 송신 속도를 유지하는 혁신적인 혼잡 제어 알고리즘입니다.
- STARTUP(대역폭 탐색 단계): 대역폭을 빠르게 탐색
- DRAIN(큐 비우기 단계): 큐를 비우고 RTT를 안정화
- PROBE_BW(대역폭 유지 단계): 대역폭을 유지하고 변화에 적응
- PROBE_RTT(RTT 측정 단): 최소 RTT를 주기적으로 측정
이로써 BBR은 최대 대역폭을 활용하면서도 네트워크 혼잡을 방지하고 최소 지연을 유지하는 목표를 달성합니다. 이는 특히 고대역폭·저손실 환경에서 매우 효율적입니다.
'컴퓨터 과학 > 컴퓨터 네트워크' 카테고리의 다른 글
[컴퓨터 네트워크] 링크 계층 (0) | 2024.12.16 |
---|---|
[컴퓨터 네트워크] 네트워크 계층 (0) | 2024.12.16 |
[컴퓨터 네트워크] 프로토콜이란 무엇인가? (1) | 2024.09.03 |
[컴퓨터 네트워크] 헤더란 무엇인가? (0) | 2024.09.03 |