네트워크 혼잡 회피란?
네트워크 혼잡 회피(Congestion Avoidance) 알고리즘은 TCP(Transmission Control Protocol) 프로토콜에서 네트워크 혼잡을 회피하기 위해 사용되는 알고리즘입니다. 이 알고리즘은 네트워크 상황을 모니터링하고, 네트워크 혼잡을 발견하면 데이터 전송 속도를 감소시키는 방식으로 동작합니다. 이를 통해 네트워크 혼잡을 회피하고, 안정적인 데이터 전송을 보장합니다.TCP 프로토콜에서 사용되는 대표적인 네트워크 혼잡 회피 알고리즘으로는 다음과 같은 것들이 있습니다.
- Slow Start: 처음 데이터를 보낼 때 데이터 전송 속도를 빠르게 늘려가는 알고리즘입니다. 데이터 전송이 원활하게 이루어지고, 혼잡 현상이 발생하지 않으면 데이터 전송 속도를 지수적으로 증가시킵니다.
- Congestion Avoidance: Slow Start 이후, 데이터 전송 속도를 선형적으로 증가시키는 알고리즘입니다. 이때, 패킷 손실이 발생하거나 일정 기준을 초과할 경우, 데이터 전송 속도를 감소시킵니다.
- Fast Retransmit: 일정 시간동안 ACK(Acknowledgement) 패킷을 받지 못할 경우, 재전송하는 알고리즘입니다. Slow Start나 Congestion Avoidance보다 효율적으로 패킷 손실을 처리할 수 있습니다.
- Fast Recovery: Fast Retransmit 이후에 사용되는 알고리즘으로, 패킷 손실을 처리하는 동안 데이터 전송 속도를 절반으로 감소시키는 것이 아니라, 속도를 조금 늦추는 방식으로 데이터 전송 속도를 감소시킵니다.
이러한 네트워크 혼잡 회피 알고리즘들은 TCP 프로토콜에서 사용되며, 안정적인 데이터 전송을 보장하기 위해 매우 중요합니다.
Fast Retansmit 이란?
Fast Retransmit은 TCP(Transmission Control Protocol) 프로토콜에서 사용되는 네트워크 혼잡 제어(Congestion Control) 알고리즘 중 하나입니다. Fast Retransmit 알고리즘은 패킷 손실을 감지하고, 해당 패킷을 재전송하는 것을 목적으로 합니다.Fast Retransmit 알고리즘은 일반적으로 Timeout 기반의 재전송보다 더 빠르게 패킷을 재전송할 수 있는 장점이 있습니다. Timeout 기반의 재전송은 일반적으로 매우 느리며, 속도가 느리기 때문에 재전송이 많이 발생할 수 있습니다. 반면 Fast Retransmit 알고리즘은 패킷 손실이 발생하면 ACK(Acknowledgement) 패킷이 오기를 기다리지 않고 바로 재전송을 시도합니다. 이러한 방식으로 빠르게 재전송을 처리할 수 있습니다.
Fast Retransmit 알고리즘은 패킷이 손실되었다는 것을 판단하는 기준이 되는 임계값을 설정합니다. 일반적으로 패킷을 재전송하는데 필요한 ACK 패킷의 수는 3개입니다. 따라서, 패킷 손실이 발생하면 ACK 패킷이 3개 이상 연속으로 오지 않으면, 해당 패킷을 재전송합니다. 이를 3 Duplicate ACKs라고 합니다.
Fast Retransmit 알고리즘은 Timeout 기반의 재전송보다 더 빠르게 패킷을 재전송할 수 있는 장점이 있지만, 잘못된 Duplicate ACKs로 인해 패킷이 재전송되는 경우도 있습니다. 이러한 경우를 방지하기 위해서는 TCP 프로토콜에서는 Fast Recovery 알고리즘을 함께 사용합니다. Fast Recovery 알고리즘은 Fast Retransmit이 발생한 후에 데이터 전송 속도를 조금 늦추는 방식으로 동작합니다.
Reliable Network에서 Overload는 네트워크 상황에서 발생하는 혼잡 현상을 말합니다. 네트워크는 유한한 대역폭(Bandwidth)을 가지고 있기 때문에, 동시에 많은 양의 데이터가 전송될 경우 네트워크 혼잡이 발생할 수 있습니다. 이러한 혼잡 현상은 데이터 전송 속도를 저하시키고, 패킷 손실을 야기할 수 있습니다.
Overload는 일반적으로 다음과 같은 상황에서 발생할 수 있습니다.
- 대역폭 초과
네트워크의 대역폭을 초과하는 양의 데이터가 전송되는 경우 발생합니다. 대역폭은 유한하기 때문에, 대역폭을 초과하는 양의 데이터가 전송되면 다른 데이터 전송 속도가 느려지고, 패킷 손실이 발생합니다.- 라우터 혼잡
네트워크의 라우터에서 처리할 수 있는 데이터 양을 초과하는 양의 데이터가 전송되는 경우 발생합니다. 이 경우, 라우터에서 처리되지 못한 데이터는 버려지거나, 큐(Queue)에 쌓이기 때문에 패킷 손실이 발생하고, 전송 속도가 느려집니다.- 데이터 전송 속도 불균형
대량의 데이터가 특정 노드로 전송될 경우, 해당 노드에서는 다른 노드보다 데이터 처리 속도가 느려지기 때문에 혼잡 현상이 발생할 수 있습니다.Overload를 방지하기 위해서는 네트워크 혼잡 회피(Congestion Avoidance) 알고리즘이 사용됩니다. 이 알고리즘은 TCP(Transmission Control Protocol) 프로토콜에서 사용되며, 네트워크 혼잡을 감지하면 데이터 전송 속도를 감소시켜 혼잡 현상을 회피합니다.
따라서, 플로우 컨트롤은 전송 중에 발생하는 수신 버퍼의 오버플로우를 방지하면서, 안정적인 데이터 전송을 위해 중요한 기술입니다.
수신측이 송신측보다 데이터 처리 속도가 빠르면 문제없지만, 송신측의 속도가 빠를 경우 문제가 생긴다.
수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실 될 수 있으며, 만약 손실 된다면 불필요하게 응답과 데이터 전송이 송/수신 측 간에 빈번히 발생한다.
이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절해야한다.
해결방법
Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
Sliding Window (Go Back N ARQ)
수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
목적 : 전송은 되었지만, acked를 받지 못한 byte의 숫자를 파악하기 위해 사용하는 protocol
LastByteSent - LastByteAcked <= ReceivecWindowAdvertised
(마지막에 보내진 바이트 - 마지막에 확인된 바이트 <= 남아있는 공간) ==
(현재 공중에 떠있는 패킷 수 <= sliding window)
동작방식 : 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
Window : TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window를 가지고 있다. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 된다.
세부구조
Sliding Window(슬라이딩 윈도우)는 네트워크 프로토콜에서 데이터를 전송하는데 사용되는 방식 중 하나입니다. Sliding Window는 전송하는 데이터의 일부분만 보내고, 수신 측에서 ACK(Acknowledgement)를 받은 후에 나머지 데이터를 전송하는 방식입니다. 이를 통해 전송 속도를 향상시키고, 데이터 손실을 최소화할 수 있습니다.
Sliding Window는 일반적으로 다음과 같은 요소로 구성됩니다.
- Window Size(윈도우 크기)
- Window Size는 전송할 수 있는 데이터의 크기를 나타내며, 일반적으로 바이트(Byte) 단위로 표현됩니다. Window Size는 송신 측과 수신 측에서 모두 동일해야 하며, 데이터 전송 시에 윈도우 크기를 초과하지 않도록 제한됩니다.
- Sequence Number(시퀀스 번호)
- Sequence Number는 전송되는 데이터의 순서를 나타내는 번호입니다. Sequence Number는 송신 측에서 할당되며, 수신 측에서는 Sequence Number를 이용하여 전송된 데이터의 순서를 파악할 수 있습니다.
- Acknowledgement Number(ACK 번호)
- Acknowledgement Number는 수신 측에서 전송한 데이터를 송신 측에서 잘 받았는지를 알려주는 번호입니다. ACK 번호는 송신 측에서 전송한 데이터의 시퀀스 번호와 동일하거나, 그보다 큰 번호를 가지며, 수신 측에서는 ACK 번호를 이용하여 전송한 데이터의 일부분만 수신한 경우에도 송신 측에게 알려줄 수 있습니다.
- Timeout(타임아웃)
- Timeout은 데이터 전송에 소요되는 시간을 나타내며, 일반적으로 밀리초(millisecond) 단위로 표현됩니다. Timeout은 ACK를 수신하는데 걸리는 시간을 고려하여 설정됩니다. 만약, ACK를 수신하지 못한 경우 Timeout이 발생하면 해당 데이터를 다시 전송하게 됩니다.
Sliding Window는 일반적으로 TCP(Transmission Control Protocol) 프로토콜에서 사용됩니다. TCP 프로토콜에서는 Sliding Window를 이용하여 데이터 전송 속도를 향상시키고, 데이터 손실을 최소화할 수 있습니다.
[ref]