728x90
✔️ 흐름 제어란?
흐름제어는 송신측과 수신측 사이의 데이터 처리 속도 차이를 해결하기 위한 기법이다.
데이터를 주고 받는 과정에서 송신측과 수신측 모두 데이터를 저장할 수 있는 버퍼를 사용한다. 수신측의 처리 속도보다 송신측의 처리 속도가 더 빠른 경우, 수신측 버퍼가 제한된 저장 용량을 초과한 이후에 도착하는 패킷은 손실 될 수 있다. 이는 불필요한 패킷 전송을 야기한다. 이를 해결하기 위한 것이 흐름제어이다.
- TCP 버퍼
송신측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 데이터를 전송하고, 수신측은 도착한 TCP 세그먼트를 애플리케이션이 읽을 때까지 버퍼에 보관한다.
✔️ Stop and Wait
Stop and Wait는 매번 전송한 패킷에 대해 확인 응답(ACK)을 받으면 다음 패킷을 전송하는 방법이다.
- 패킷을 하나씩 보내기 때문에 비효율적임.
✔️Sliding Window
Sliding Window는 수신 측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답(ACK) 없이 패킷을 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 방식이다.
- 윈도우 크기(window size)
- 윈도우 크기란 Sliding Window Protocol에서 송신측 및 수신측이 ACK없이 보낼 수 있는 프레임의 개수이다.
- 윈도우 크기가 4이면, 송신측에서 ACK를 받지 않아도 4개의 프레임을 연속적으로 보낼 수 있다는 의미이다.
- 송신자는 수신자의 확인 응답(ACK)을 받기 전까지 데이터를 보낸다.
- 송신측은 일정시간 동안 수신측으로부터 확인 응답(ACK)을 받지 못하면(time out), 패킷을 재전송한다.
- 수신측에서 송신측으로 확인 응답(ACK)을 보낼 때 TCP 헤더에 윈도우 크기를 담아서 보낸다.
➕ 동작 방식
- 최초로 수신측은 윈도우 사이즈를 7로 정한다.
- 송신측 수신자의 확인 응답(ACK)을 받기 전까지 데이터를 보낸다.
- 수신측은 확인 응답(ACK)을 송신측에게 보내면, 슬라이딩 윈도우 사이즈을 충족할 수 있게끔 윈도우를 옆으로 옮긴다.
- 이후 데이터를 다 받을 때까지 1~3 과정을 반복한다.
흐름 제어
- Stop and Wait
- Window Sliding Protocol
✔️ 혼잡 제어
혼잡 제어(congestion control)은 송신 측에서 보내는 데이터의 전송 속도를 제어하여 네트워크가 혼잡해지지 않게 조절하는 것이다.
한 라우터에 데이터가 몰릴 경우, 한 라우터가 데이터를 모두 처리할 수 없게 된다. 이런 경우 송신측에서는 데이터 손실로 간주하데이터를 계속 재전송하여 네트워크를 혼잡하게 한다. 이런 상황을 방지하기 위해 송신 측의 전송 속도를 적절히 조절하여 예방하는 것을 혼잡 제어라고 한다.
✔️ AIMD ( Additive Increase / Multiplicative Decrease)
AIMD 는 합 증가/ 곱 감소 방식으로, 처음에 패킷을 하나씩 보내고 문제 없이 도착하면 윈도우 크기(window size)를 1씩 증가시켜가며 전송하는 방식이다. 만약, 전송에 실패하면 윈도우 크기를 반으로 줄인다.
윈도우의 크기를 굉장히 조금씩 늘리기 때문에 제대로 된 속도로 통신하기까지 시간이 오래 걸린다는 단점이 있다.
✔️ Slow Start(느린 시작)
- Slow Start는 보낸 데이터의 ACK가 도착할 때마다 윈도우의 크기를 1,2,4,8,16,... 과 같이 지수적으로 증가시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄이는 방식이다.
- 보낸 데이터의 ACK가 도착할 때마다 윈도우 크기를 증가시키기 때문에 처음에는 윈도우 크기가 느리게 증가할지라도, 시간이 가면 갈수록 윈도우 크기가 점점 빠르게 증가한다는 장점이있다.
✔️ Fast Retransmit(빠른 재전송)
- Fast Retransmit은 3개의 동일한 ACK가 들어온다면 패킷 손실로 간주하고 재전송하는 방법이다.
- 현재 데이터 전송 과정에서 301-400에 해당하는 패킷이 손실되었다. TCP는 각 패킷마다 전송 시간과 응답 시간을 기록하고 일정 시간이 지나도 응답 받지 못한다면 데이터가 유실되었다고 판단한다. 이 경우, fast retransmit은 3개의 동일한 ACK를 수신하고 데이터 손실로 간주한다.
- 손실된 패킷이 확인되면 해당 패킷부터 이후에 보냈던 모든 패킷들을 다시 한 번 모두 전송한다.
- 송신 측은 자신이 설정한 타임아웃 시간이 지나지 않았어도 해당 패킷을 재전송할 수 있기 때문에 보다 빠른 전송률을 유지할 수 있다.
✔️ 흐름 제어 vs 혼잡 제어
- 흐름 제어 : 송수신 측 사이의 패킷 수를 제어하는 기능
- 혼잡 제어 : 네트워크 내의 패킷 수를 조절하여 네트워크의 오버플로우 방지하는 기능
#참고 자료
728x90
'CS 지식 > 네트워크' 카테고리의 다른 글
[네트워크] HTTP 프로토콜 개요 & HTTPS (0) | 2024.09.04 |
---|---|
[네트워크] TCP & UDP (0) | 2024.09.01 |
[네트워크] TCP 3 way handshake & 4 way handshake (0) | 2024.08.30 |
[네트워크] OSI 7 계층 (0) | 2024.08.29 |