CS/네트워크
흐름제어 & 혼잡제어
sun._.ny
2022. 8. 9. 18:16
흐름제어
송신 측과 수신 측의 TCP 버퍼 크기 차이로 인해 생기는 데이터 처리 속도 차이를 해결하기 위한 기법
* TCP 버퍼란?
송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을 때까지 버퍼에 보관
수신 측이 송신 측보다 데이터 처리 속도가 빠르다면 문제가 없지만,
송신 측의 속도가 빠를 경우에는 수신 측에서 제한한 저장 용량을 초과한 이후에 도착하는 패킷은 손실될 수 있음.
만약 손실된다면 불필요한 추가 패킷 전송이 발생하게 됨
◆ 흐름 제어 기법
1) Stop and Wait
- 매번 전송한 패킷에 대해 확인 응답을 받아야만, 그 다음 패킷을 전송하는 방법
- 패킷을 하나씩 보내기 때문에 비효율적인 방법
2) Sliding Window
- 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 패킷을 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법
- 윈도우에 포함된 패킷을 계속 전송하고, 수신 측으로부터 확인 응답이 오면 윈도우를 옆으로 옮겨 다음 패킷들을 전송함
혼잡제어
송신 측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 초과된 데이터는 라우터가 처리하지 못함
이때 송신 측에서는 라우터가 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하여 네트워크를 혼잡하게 함
이런 상황은 송신 측의 전송 속도를 적절히 조절하여 예방 가능한데, 이를 혼잡제어라고 함
◆ 혼잡 제어 기법
1) AIMD (Additive Increase/Multicative Decrease)
- 처음에 패킷을 하나씩 보내고 문제 없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송 (=Additive Increase)
- 만약 전송에 실패한다면, 윈도우 크기를 반으로 줄임 (=Multicative Decrease)
- 윈도우 크기를 너무 조금씩 늘리기 때문에 네트워크의 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다는 단점이 존재
2) Slow Start (느린 시작)
- 윈도우의 크기를 1, 2, 4, 8, ... 과 같이 지수적으로 증가시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄이는 방식
- 보낸 데이터의 ACK가 도착할 때마다 윈도우 크기를 증가시키기 때문에, 처음에는 윈도우 크기가 조금 느리게 증가하더라도 시간이 갈수록 점점 빠르게 증가한다는 장점이 존재
3) 빠른 재전송 (Fast Retransmit)
- 수신 측에서 순서대로 도착한 마지막 패킷의 다음 순번을 ACK 패킷에 실어서 보냄
- 이러한 ACK를 중복해서 3개 받으면 재전송이 이루어짐
- 송신 측은 자신이 설정한 타임 아웃 시간이 지나지 않았어도 바로 해당 패킷을 재전송할 수 있기 때문에 보다 빠른 재전송률을 유지할 수 있음
4) 빠른 회복 (Fast Recovery)
- 혼잡한 상태가 되면 윈도우 크기를 반으로 줄이고, 선형 증가시키는 방법
- 해당 방법을 적용하면 혼잡 상황을 한 번 겪고 나서부터는 AIMD 방식으로 동작함
결론적으로...
흐름제어는 송수신 측 사이의 패킷 수를 제어하는 기능
혼잡제어는 네트워크 내의 패킷 수를 조절하여 네트워크의 오버플로우를 방지하는 기능