인터넷에서 데이터는 효율적인 라우팅을 위해 패킷 단위로 쪼개져 같은 목적지로 전송되며

TCP는 패킷에 각각 번호를 부여하여 목적지에서 재조립한다. (패킷 분실 확인 처리/ 패킷 추적)

 

패킷의 구성 : 헤더 (수신단 인터넷 주소, 순서) / 데이터 / 테일러 (에러정보)

 


1. 흐름제어 (정지-대기, 슬라이딩 윈도우)

송수신단 사이 데이터 처리속도 차이를 제어 > 데이터 처리속도를 조절해 수신자의 버퍼 오버플로우 방지

 

1) 정지-대기 (stop and wait)

매번 패킷에 전송 후 정지-대기, 확인 응답 받은 뒤 다음 패킷 전송가능

> 비효율적

 

2) 슬라이딩 윈도우 (sliding window)

윈도우 : 송수신단에서 만들어진 버퍼크기

수신단에서 설정한 윈도우 크기 만큼 송신단에서 확인 응답이 없어도 세그먼트 전송 가능 (연속적)

> 데이터 흐름 동적 조절

 

 

2. 오류제어 (ARQ : 정지-대기, GBn, SR)

ARQ (Auto Repeat Request) : 자동 반복 요청. 프레임 손상/손실 시 재전송 요청 (흐름제어와 연관성)

 

1) 정지-대기 ARQ

송신단에서 1개 프레임을 전송하면 수신단에서 ACK 혹은 NAK 전송 (에러 유무 응답)

  • ACK : 다음 프레임 전송
  • NAK : 손상된 프레임 번호 반환

 

데이터 프레임과 ACK 프레임은 0,1 번호를 번갈아 부여하여 구분

NAK응답/ 데이터, ACK 분실 시 타임아웃 > 재전송 

 

2) Go-Back-n ARQ

프레임 손상/분실, ACK 손실로 인한 타임아웃 시 확인된 마지막 프레임 이후 모든 프레임 재전송

송신단은 전송한 프레임의 복사본을 가짐 (ACK, NAK 구분)

수신단은 NAK 이후 수신 데이터는 폐기하고 재전송 받는다

 

GBn ARQ에서 데이터 프레임 손실된 경우
GBn ARQ에서 데이터 프레임 분실된 경우

 

 

3) SR ARQ (Selective-Reject ARQ)

손상/손실된 프레임만 재전송 (GBn ARQ의 모든 프레임을 재전송하는 단점 보완)

별도의 데이터 재정렬, 버퍼 필요 : 수신단에 버퍼를 두어 수신데이터 정렬 (비용증가)

 

 

 

3. 혼잡제어 (AIMD, Slow Start)

하나의 라우터에 데이터가 몰려 모든 데이터 처리가 어려울 때 > 호스트들 재전송 > 혼잡가중 > 오버플로우/데이터 손실 발생 가능

네트워크 혼잡을 피하기위해 송신단의 데이터 전송/처리속도를 제어하는 기법

 

1) AIMD (Additive Increase Multicative Decrease)

합 증가 - 곱 감소 알고리즘

 

  • 패킷 1개 전송 > 전송한 패킷이 문제 없이 도착 > 윈도우 사이즈 +1 하며 전송
  • 전송 실패/타임아웃 > 윈도우 사이즈 절반 감소

나중에 진입 > 초기엔 불리하지만 결국엔 시간 흐르면 공평해짐

문제점 : 초기에 높은 대역폭 사용 못함 (처음에 전송속도 올리는데 많은 시간 소요), 네트워크 혼잡성 미리 감지 못함

 

 

2) Slow Start

AIMD 와 시작 같음 (시작 느림)

ACK마다 윈도우 사이즈 +1 > 한 주기 이후 윈도우 사이즈=2배 

혼잡 현상 발생했던 윈도우 사이즈 절반 까지는 지수 함수 꼴로 윈도우 증가, 이후 +1씩 증가

 

  • 혼잡 회피 : 윈도우 크기가 임계 값에 도달하면 데이터 손실 가능성 높음 > 회피하기 위해 윈도우 선형증가(+1) > 혼잡하면 윈도우 크기 세그먼트 후 1로 감소 + 임계값을 손실 발생했을 때의 윈도우 사이즈 절반으로 감소
  • 빠른 회복 : 혼잡상태 > 윈도우 사이즈 절반으로 감소 > 선형증가(+1)
  • 빠른 재전송 : 중복된 순번의 패킷 3개 수신 시 재전송, 윈도우 사이즈 절반으로 감소

 


Reference

 

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

1. 패킷(Packet)이란? 인터넷에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해 데이터를 여러 개의 조각으로 나누어 전송을 하게 되는데, 이때의 조각을 이라고 한다. 쉽게 말

velog.io

 

반응형

'CS Interview > Network' 카테고리의 다른 글

HTTP & HTTPS / GET & POST (HTTP METHOD)  (0) 2021.05.06
[TCP] 연결, 해제, FLAG/ 3-way handshake, 4-way handshake  (0) 2021.05.04
TCP와 UDP  (0) 2021.05.04

+ Recent posts