철학과 학생의 개발자 도전기

TCP 흐름 제어/오류 제어/혼잡 제어 본문

컴퓨터네트워크

TCP 흐름 제어/오류 제어/혼잡 제어

Younghun 2023. 11. 30. 14:14

1. TCP와 패킷

  • 이메일, 채팅 메시지, 금융 거래 내용 등의 데이터를 전송하는 기본 단위가 패킷이다.
  • 하나의 데이터는 여러 개의 패킷으로 쪼개져서 전송된다.
  • TCP는 신뢰성을 보장하기 위해, 각 패킷에 번호를 부여하여 누락을 확인하고 순서에 맞게 재조립한다.
  • TCP는 신뢰성을 보장하기 위해, 흐름제어/혼잡제어/오류제어 기법을 사용한다.

2 . 흐름 제어

  • 송신자와 수신자 사이의 데이터 처리 속도 차이로 인해 수신자 버퍼의 오버플로우가 발생할 수 있다.
  • 이것을 방지하는 기법이 흐름제어다.
  • 수신자가 감당할 수 있는 속도로 데이터를 보내도록 송신자의 데이터 전송 속도를 제어한다.

1) 정지 - 대기

  • 패킷을 전송하고 확인 응답을 받은 후에 다음 패킷을 전송한다.
  • 속도가 느리다는 단점이 있다.

2) 슬라이딩 윈도우

  • 한 번에 보낼 데이터 개수를 동적으로 제어하는 기법이다.
  • 윈도우 : 송신자와 수신자의 버퍼 크기
  • 송신자는 수신자가 설정한 윈도우 크기만큼 확인 응답 없이 여러 개의 패킷을 전송할 수 있다.
  • 윈도우 크기는 동적으로 조절된다.
  • 윈도우 크기가 2이고 송신자가 0, 1, 2, 3, 4를 보내려고 한다. 송신자가 데이터 0, 1을 전송한 후 수신자에게 ACK을 받게 되면 송신자의 윈도우는 정상적으로 전송된 데이터 수만큼 오른쪽으로 이동한다.
  • 정지-대기 방식의 느린 속도를 개선했다.

3. 오류 제어

  • 오류를 검출하고 재전송하는 기법이다.
  • ARQ(Automatic Repeat Request) 기법을 사용해 패킷이 손상되었거나 손실되었을 경우, 재전송을 통해 오류를 복구한다.

1) Stop and Wait ARQ

  • 송신자가 패킷 하나를 송신하고, 수신자는 패킷의 에러 유무를 확인한 후 ACK 또는 NAK을 보낸다.
  • 수신자가 데이터를 받지 못했을 경우 NAK을 보내고, NAK을 받은 수신자는 데이터를 재전송한다.
  • 데이터나 ACK이 분실되었을 경우, 타임 아웃을 기다린 후 데이터를 재전송한다.

2) Go-Back-N ARQ

  • 송신자가 NAK을 받으면, NAK 프레임 번호부터 데이터를 재전송한다.
  • 수신자는 원하는 패킷 번호가 아닐 경우 데이터를 모두 폐기 처분한다.
  • 타임아웃(ACK 분실)의 경우, 마지막 ACK된 데이터부터 재전송한다.

출처: https://velog.io/@jsj3282/TCP-%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4-%EC%98%A4%EB%A5%98%EC%A0%9C%EC%96%B4
출처: https://velog.io/@jsj3282/TCP-%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4-%EC%98%A4%EB%A5%98%EC%A0%9C%EC%96%B4


3) SR(Selective-Reject) ARQ

  • GBn ARQ의 확인된 마지막 프레임 이후의 모든 프레임을 재전송하는 단점을 보완하는 기법이다.
  • SR ARQ는 손상되거나 손실된 프레임만 재전송한다.
  • 그러므로 수신자는 별도의 버퍼를 두고 수신한 데이터를 정렬해야 한다.
GBn ARQ SR ARQ
손상/분실된 프레임 이후의 프레임을 모두 재전송 손상/분실된 프레임만을 재전송
구조가 비교적 간단하고 구현이 단순 구조가 복잡(프레임 재배열 등의 추가 로직 필요)
데이터 폐기 방식을 사용하여 추가적 버퍼가 필요 없음 폐기 방식을 사용하지 않으므로 순차적이지 않은 프레임을 재배열하기 위한 버퍼가 필요
비용이 비교적 저렴(SR ARQ에 비해) 비용 및 유지관리 비용이 증가

4. 혼잡 제어

  • 한 라우터에 데이터가 몰려 모든 데이터를 처리할 수 없는 경우, 호스트들은 재전송을 하게 되고 결국 혼잡을 가중시켜 오버플로우나 데이터 손실이 발생한다.
  • 이러한 네트워크의 혼잡을 피하기 위해 송신자가 보내는 데이터의 전송 속도를 제어하는 것이 혼잡 제어다.

1) AIMD(Additive Increase Multicative Decrease)

  • 합 증가/곱 감소 알고리즘이다.
  • 윈도우 크기를 1로 시작한 후에 ACK 신호를 받을 때마다 윈도우 크기를 1씩 증가시킨다.
  • NAK을 받거나 타임 아웃이 발생하면, 윈도우 크기를 절반으로 감소시킨다.
  • 네트워크를 공유하는 호스트들이 비슷한 수준의 네트워크 사용률을 보이는 알고리즘이다.
  • 그러나 초반 전송 속도를 상승시키는데 오랜 시간이 걸리고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못한다.


2) Slow Start

  • 윈도우 크기를 1로 시작한 후에 패킷 전송에 성공하면 윈도우 크기를 2배로 늘린다.
  • 혼잡 현상이 발생하면 윈도우 크기를 1로 줄이고, Threshold를 이전 윈도우 크기의 절반으로 설정한다.
  • Threshold까지는 지수적으로 윈도우 크기를 증가시키고, Threshold를 넘어가면 윈도우 크기를 1씩 증가시킨다.
    https://velog.io/@jsj3282/TCP-%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4-%EC%98%A4%EB%A5%98%EC%A0%9C%EC%96%B4

혼잡 회피

  • 윈도우의 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 확률이 높다.
  • 따라서 이를 회피하기 위해 윈도우 크기를 선형적으로 증가시킨다.
  • 수신자가 일정 시간 동안 ACK을 수신하지 못하면 혼잡 상황이라고 인식

빠른 회복 정책

  • 혼잡 상태가 되면 윈도우 크기를 1이 아니라 절반으로 줄이고 선형 증가시키는 방법이다.
  • 이 정책을 적용하면 혼잡 상황 발생 이후에는 AIMD 방식으로 작동된다.

빠른 재전송

  • 수신자가 패킷을 받을 때 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다.
  • 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보낸다.
  • 따라서 중간에 패킷 하나가 손실되면 송신자는 순번이 중복된 ACK 패킷을 받게 되고, 손실된 패킷을 빠르게 재전송할 수 있다.
  • 빠른 재전송은 중복된 순번의 패킷을 3개(3 ACK) 받으면 재전송한다. 그리고 네트워크에 약간의 혼잡이 발생한 것으로 간주하여 윈도우 크기를 절반으로 줄인다.

'컴퓨터네트워크' 카테고리의 다른 글

HTTP와 HTTPS  (1) 2023.12.07
대칭키와 공개키  (0) 2023.11.30
TCP와 Handshake  (0) 2023.11.23
네트워크 계층  (0) 2023.11.23
UDP  (0) 2023.11.16