인터넷에서 데이터는 효율적인 라우팅을 위해 패킷 단위로 쪼개져 같은 목적지로 전송되며
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 이후 수신 데이터는 폐기하고 재전송 받는다
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
'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 |