TCP (Transmission Control Protocol)
Reliable network(신뢰할 수 있는 네트워크)
- unreliable network의 문제점을 보장
Unreliable network(신뢰할 수 없는 네트워크)
발생하는 문제
- 손실(lost): 패킷이 손실될 수 있는 문제
- 순서 바뀜: 패킷의 순서가 바뀌는 문제
- 혼잡(Congestion): 네트워크가 혼잡한 문제
- 과부하(Overload): 수신자가 과부하 되는 문제
데이터 전송 과정
- 송신자가 수신자에게 데이터 전송을 시작
- 송신자가 데이터를 전송하면 TCP에 의해 데이터가 보내짐
- 데이터는 네트워크를 통해 수신자에게 도착
- 도착한 데이터는 수신자의 버퍼에 저장
- 수신자의 애플리케이션이 버퍼에 저장된 데이터를 읽으면 전송이 완료
발생할 수 있는 문제점
- 송신자가 빠른속도로 데이터를 전송할 때, 수신자의 버퍼는 가득차게 되고, 버퍼가 차 있는 동안 데이터 손실이 잃어남
- 사용하는 네트워크에 많은 인원의 데이터 전송으로 정체 현상이 발생할 때, 과부하가 일어남
흐름 제어
- 송신측의 속도가 빠를 경우
Stop and Wait
- 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송

Sliding Window
- 데이터를 하나만 보내고 응답을 기다리는 것이 아닌, 한 번에 여러 개의 데이터를 보내고 각각에 번호를 매김, 이후 수신자의 응답을 기다림
- 보내는 과정에서 손실 발생 시 손실 발생한 데이터부터 다시 전송

송신 버퍼
- 보내야 할 데이터 저장

- 200 이전의 바이트는
전송
, 확인응답을 받음
- 200 ~ 202 바이트는
전송
, 확인응답을 못 받음
- 203 ~ 211 바이트는
전송 가능
수신 윈도우
- 받을 수 있는 데이터의 범위 (송신 윈도우보다 작거나 같도록 범위를 송신에서 제어)

- 200바이트 이전의 데이터
송신 윈도우
- 현재 전송하거나 전송할 수 있는 데이터의 범위

- 200 ~ 202 바이트 전송
- 203 ~ 206 전송 가능
송신 윈도우 이동

- 203 ~ 204 바이트 전송, 수신 측에서 확인 응답,
송신측은 203~209 범위로 이동
- 205 ~ 209 전송 가능
혼잡 제어
- 사용하는 네트워크에 많은 인원의 데이터 전송 할 때
- 한 라우터에 데이터가 몰릴 경우, 송신자는 라우터가 처리하지 못한 데이터를 잃어버린 데이터로 간주하고 다시 보내게 되어 혼잡하게 됨
- 흐름 제어는 송신, 수신 사이의 전송속도를 조절
- 혼잡 제어는 호스트와 라우터를 포함한 보다 넓은 관점
AIMD(Additive Increase / Multiplicative Decrease)
- 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법
- 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄임
- 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형상태로 수렴하게 되는 특징
문제점
- 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못함
(= 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식)
Slow Start (느린 시작)
- Slow Start 방식은 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려줌
(= 한 주기가 지나면 window size가 2배가 됨)
- 전송속도는 AIMD에 반해 지수 함수 꼴로 증가
대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨림
- 초기 네트워크의 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있음
- 혼잡 현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가, 그 이후부터는 완만하게 1씩 증가
Fast Retransmit (빠른 재전송)
- 수신자가 예상한 순서대로 패킷을 받지 못했을 때 사용
- 특정 패킷이 도착하지 않고 다음 패킷이 먼저 도착하면, 수신자는 누락된 패킷에 대한 순번을 가진 ACK(확인 응답) 패킷을 여러 번 보냄
- 송신자는 같은 순번의 ACK를 세 번 받으면 해당 패킷이 누락됐다고 판단하고 재전송
- 이 과정에서 네트워크의 혼잡 상태를 감지하고 윈도우 크기를 조절해 전송 효율을 관리
Fast Recovery (빠른 회복)
- 혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법
- 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 됨