TCP
END TO END간 통신을 담당하는 전송계층 중 연결형 프로토콜이다.
특징
TCP는 신뢰성있는 정보전송을 할 수있다.
신뢰성이 있는 이유는
- 통신 확인을 위한 3-way, 통신 종료를 위한 4-way 핸드쉐이킹을 제공합니다.
- 패킷 교환 방식을 사용합니다. 즉, 정보를 보내기 위해 패킷 단위로 구분하여 전송하는데 전송 구간들이 모두 같은 통로를 이용합니다.
- 위 구간을 통해 전송하면서 패킷단위로 넘버링 하여 (시퀀스 넘버) 사용자가 요청한 정보의 작은 단위가 모두 잘 도착하였는지 확인까지 가능합니다.
- 이 외로 및 흐름 제어, 오류제어, 혼잡제어 등을 제공합니다.
한마디로, 네트워크 상황, 나와 통신하는 상대방까지 신경쓰며 정보들이 잘 전송될 수 있도록 노력하고 있기 때문에 높은 신뢰도를 가집니다.
선수 지식: TCP는 정보전달을 위해 일정 크기의 정보들을 패킷이라는 단위로 쪼개어서 보낸다는 사실
오류제어
상대방이 패킷을 잘받았는지 확인하기 위한 제어 방식입니다.
해당 방식은 총 3가지가 있습니다.
StopAndWait
- ACK를 받고 나서 다음 데이터를 보내는 방식(순차적) 입니다.
- 흐름제어의 슬라이딩 윈도우를 사용할 수 없는 단첨이 있습니다.

GoBackN
- 연속적으로 [1~N]개 단위로 패킷들을 전송하다가 일부 오류가 난 지점부터 다시 해당 순번 부터 해당 단위 끝까지 보내는 방식입니다.
- 성공된 데이터까지 다시 보내야하는 오버헤드 존재합니다.

SelectiveRepeat
- GoBackN처럼 일정 단위 개로 전송하다가 오류가 발생한 데이터 부분만 재전송하는 방식이다.
- 버퍼의 데이터가 순차적이지 않는 단점이 있어 추가 정렬이 필요하다는 단점이 있습니다.
혼잡제어
네트워크 내에 패킷의 수가 과도하게 되면서 경로 구간들이 빽빽하게 들어가 있어 교통체증이 발생하는 것인데 이 현상을 혼잡이라고 합니다.
그래서 이러한 혼잡이 있는 유무를 알고 수신, 송신 측 전송 속도를 다루어 모두가 원활하도록 제어하는 방식입니다.
AMID (Additive Increase/ Multiplicative Decrease)
- 처음 패킷 보내고 정상이면 윈도우 크기 1씩 증가합니다.
- 패킷 전송 실패하거나 일정시간을 넘어버리면 전송속도를 낮춥니다.
- 네트워크에 늦게 들어온 호스트가 처음에 불리하지만 시간이 점차 지나면서 평행 상태로 수렴합니다.
단점
- 처음 전송 속도를 올리는데 순차적으로 증가하여 시간이 걸립니다.
- 네트워크가 혼잡해지는 상황을 미리 감지하지 못하고 혼잡한 후에 알고 나서야 대역폭을 줄입니다.
Slow Start
- AMID와 유사하게 정상이면 위도우 크기를 +1개하고 , 한 주기가 지나면 2의 지수승으로 확장합니다.
- AMID 와 달리 전송속도를 기하급수적으로 증가시킬 수 있습니다.
- 하지만 혼잡이 감지되면 윈도우를 1로 줄립니다.
- 혼잡 현상이 발생한 윈도우 크기의 절반까지만 증가시키고 이이후에 완만하게 1씩 증가합니다. 즉, 중간부터 AMID로 진행하는 것입니다.
쵸크 패킷
- 무의미한 정보를 일단 보내어 돌아오는 시간을 측정하여 혼잡도를 판단하는 방식입니다.
- 초크 패킷을 자주 사용하면 혼잡의 오버헤드의 원인이 될 수도 있다는 단점이 있습니다.
흐름제어
송신측 수신측에는 외부로 부터 데이터들을 바로 담아내기전 버퍼라는 곳에서 부터 처리하게 됩니다.
그렇기 때문에 송신,수신측 버퍼 처리량 또한 고려하여 패킷을 얼마만큼 보내는지도 고려합니다. 왜냐하면 수신측 버퍼가 꽉차서 송신측은 계속 쓸데없이 데이터를 보내는 행위를 절약할 수 있기 때문입니다.
Stop And Wait
- 송신측은 무조건 수신측으로부터 응답이 올때까지 기다리는 방식입니다.

Sliding Window
- 송신측이 수신측에서 받은 윈도우 크기를 참고하여 흐름을 제어하는 방식입니다.
- 송신측은 수신측의 윈도우 크기를 알기 위해서 수신 측이 한번의 처리할 수 있는 데이터양을 3 Way HandShake할때 송신측에 전달합니다.
- 송신측 수신측은 윈도우 단위로 패킷들을 보내고 송신측은 일정단위로 윈도우를 왼쪽에서 오른쪽으로 이동시킵니다.
- 상대방에게 응답을 받지 않아도 범위 내에서 데이터를 보내게 되고 패킷의 왕복 시간 RTT가 크다면 흐름제어가 필요하다고 생각하여 윈도우 크기를 감소킵니다.
