TCP의 대표적인 3가지 제어방법

송해광·2022년 7월 27일
0

결론부터 이야기하자면 TCP는 흐름 제어, 오류 제어, 혼잡 제어 3가지 제어기능이 있다.

이 3가지 기능에 대해서 자세하게 살펴보자.

1. 흐름 제어

-> 송신 측과 수신 측의 데이터 처리 속도가 다를 때 오류가 생길 수 있기 때문에 전송되는 데이터의 양을 조절하는 흐름 제어기능이 있다.
( 수신 측의 데이터 처리속도가 빠르면 문제 되지 않지만, 송신 측의 속도가 빠를 경우 문제가 된다 -> 수신 측의 데이터 용량을 초과한 이후에 도착한 패킷이 손실되거나 수신 측 버퍼가 넘치는 오버플로우 발생 가능!)

따라서, 송신 측의 데이터 전송량을 조절!!

해결 방법

1. Stop and Wait : 매번 전송한 패킷에 대한 응답(ACK)을 받은 후에 다음 패킷을 보내는 방법

(https://benlee73.tistory.com/186 에서 그림 활용하였습니다.)
하지만, 이런 식으로 하면 많은 패킷을 주고 받아야 하는데 상당히 비효율적 입니다.

2. Sliding Window : 송신 측이 수신 측에서 받은 윈도우 크기를 참고해서 데이터의 흐름을 제어하는 방식

  1. 최초 윈도우 사이즈 = 7(0~6 까지) 설정
  2. 송신자(sender)는 수신자(receiver)의 응답(ack)를 받기 전까지 데이터를 전송
  3. 수신자(receiver)는 응답(ack)를 송신자(sender)에게 보내면, 슬라이딩 윈도우 사이즈를 충족할 수 있게 윈도우를 옆으로 옮기며 데이터를 모두 전송할때까지 반복
    윈도우 크기 = 수신 측이 한번에 처리할 수 있는 데이터의 양으로 3 way handshake할 때 송신 측에 전달되며 이후 수신 측의 버퍼에 남아있는 공간에 따라 변한다.
    (https://steady-coding.tistory.com/507에서 그림 활용하였습니다.)

2. 오류 제어

-> TCP는 통신 중에 오류가 발생하면 해당 데이터를 재전송하는데 이때 재전송 기반 오류 제어 ARQ(Automatic Repeat Request)를 사용

오류를 알 수 있는 방법

  1. 송신 측이 ACK를 받지 못함 (데이터 유실 or ACK 유실 )
  2. 중복된 ACK 수신
  3. 수신 측이 NACK(부정응답)을 보냄

해결 방법

1. Go Back N : 오류 발생 지점부터 재전송

(https://benlee73.tistory.com/186 에서 그림 활용하였습니다.)

  • 성공적으로 전송된 데이터까지 재전송하기 때문에 비효율적 *

2. Selective Repeat : 오류가 발생한 데이터만 재전송하는 방식


(https://benlee73.tistory.com/186 에서 그림 활용하였습니다.)

  • 수신 측 버퍼의 데이터가 순차적이지 않다 -> 정렬 필요 *

3. 혼잡 제어

-> 네트워크 내 패킷 수가 급증하는 현상(혼잡)을 방지하고 제거하기 위한 기능

혼잡 제어 기법

1. AIMD(Additive Increase/Multicative Decrease) : 처음에 패킷을 하나씩 보내고 문제 없으면 윈도우 크기 +1, 실패하면 윈도우 크기 / 2

-> 윈도우 크기가 1씩 늘기 때문에 시간이 너무 오래 걸린다

2. Slow Start : 윈도우 크기를 1,2,4,8... 같이 지수적으로 증가시키다가 혼잡이 감지되면 윈도우 크기 1로

-> ACK가 도착할 때마다 윈도우 크기를 증가시키기 때문에 처음에는 윈도우 크기가 조금 느리게 증가할지라도, 시간이 가면 갈수록 윈도우 크기가 점점 빠르게 증가한다는 장점

3. Fast Retransmit : TCP가 받은 데이터 중 3번 이상 중복된 ACK 번호를 받으면 재전송한다.

-> 타임 아웃 시간이 지나지 않아도 해당 패킷을 재전송 가능하기에 빠른 재전송률을 유지한다.

profile
끝까지 해보고 하는 후회는 반성이 되어 앞을 보게 하지만 끝까지 하지 않고 하는 후회는 미련이 되어 뒤를 보게 한다.

0개의 댓글