tcp 통신 도중 송수신지의 처리 능력이 다르기 때문에
데이터가 중간에 유실될 수 있다.
이를 방지하기 위해서 흐름 제어(Flow Control) 기법이 TCP에서 사용된다.
대표적인 흐름제어 기법으로 Stop-and-Wait 기법과 Sliding Window 기법이 있다.
Stop-and-Wait 는 모든 패킷에 대하여 확인 응답을 받아야만 다음 패킷을 전송하는 방식이다.
이러한 방식은 앞에 패킷이 정상적으로 보내지지 않으면 계속 대기하고 해당 패킷을 보내는 작업을 기다리게 되므로
다음 패킷전송이 지체되는 단점이 존재하여 비효율적이다.
반면 Sliding window 기법은 각 송수진지에 있는 슬라이딩 윈도우를 활용하는 방식으로,
계속해서 자신의 윈도우 크기(Window Size)를 상대에게 알려주는
"윈도우 광고 기법"을 사용한다.
TCP 흐름제어의 동작 과정에서는 수신측과 송신측의 윈도우 크기를 서로 알리면서
윈도우 크기가 변하기도 한다.
송신측 윈도우는 Congestion window로 cwnd 라고 표기한다.
수신측 윈도우는 Receiver window로 rwnd 라고 표기한다.
아래는 Sliding window 기법을 통한 TCP 흐름제어의 동작을 살펴보자.
Slilding 윈도우 기법은 패킷 하나를 보내고 기다리는게 아니라 여러개를 동시에 보낼 수 있다.
하지만 동시에 보낼 수 있는 사이즈가 지정되어 있으며, 이 사이즈를 윈도우라고 부른다.
위의 그림을 보면 현재 윈도우 사이즈는 7이며 7개의 데이터를 한번에 보낼 수 있음을 보여준다.
위에 그림에서 송신측에서 Data 0,1 을 보냈을 때 cwnd와 rwnd 의 크기가 두개 줄어든 모습을 볼 수 있다.
그리고 수신측에서 0과 1을 잘 받았다고 ACK 2를 보내면
cwnd와 rwnd 각각 다시 크기가 두개가 늘어난 모습을 볼 수 있다.
이런식으로 윈도우가 옆으로 미끄러지는 모습을 연상케 하여 Sliding window 라고 부른다.
또한, 수신측에서 받은 데이터마다 ACK를 보내주는 것이 아닌
받은 Data + 1 을 하여 ACK 를 보내주는 모습을 보이고 있다.
위에서 Data 3,4,5 를 받고 ACK 6 을 보내주는 모습을 볼 수 있다.
'네트워크' 카테고리의 다른 글
[네트워크] PORT (0) | 2022.10.10 |
---|---|
[네트워크] TCP 혼잡제어 (0) | 2022.10.07 |
[네트워크] ARQ (0) | 2022.10.05 |
[네트워크] 3-way handshake, 4-way handshake (0) | 2022.10.04 |
[네트워크] TCP header (0) | 2022.10.03 |