전송을 제어하는 프로토콜. 데이터를 메세지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜입니다.
연결형 서비스를 지원하고 인터넷 환경에서는 기본적으로 사용하는 방식입니다.
IP와 보통 같이 사용 합니다.
IP는 배달을 한다면 TCP는 패킷을 추적 및 관리를 합니다. 패킷을 전송을 성공하면 ACK(acknowledgment)라는 신호를 날립니다. 제 시간에 도착을 하지 않는 다면 TIMEOUT이 발생하고 패킷손실이 발생한 패킷은 재전송을 합니다.
TCP장치 사이에 논리적인 접속을 성립하기 위해서 사용함.
데이터를 전송하기전에 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미함.

Client ===> Server : SYN(Synchronize Sequence Numbers) 패킷을 보낸다.
SYN_SENT상태로 대기
Server ===> Client : SYN ACK(요청을 수락하겠다는 패킷)을 발송한다. 클라이언트가 다시 ACK로 응답하기를 기다린다. SYN_RECEIVED상태
Client ===> Server : ACK를 보내고 연결이 이루어지고 데이터가 오가게 된다. ESTABLESHED상태로 변경

Client ===> Server : 연결을 종료하겠다는 클라이언트가 FIN flag를 서버에 전송
Server ===> Client : 서버는 확인 메세지 전송 통신이 끝날때까지 대기 (TIME_WAIT)
Client ===> Server : 서버가 통신이 끝났다고 클라이언트에게 FIN flag 전송
Server ===> Client : 클라이언트는 확인했다고 서버에 전송
비연결 지향적인 프로토콜이고 연결이 되지 않고 전송하는 방식이라 TCP보단 빠르지만 데이터 전달의 신뢰성이 굉장히 떨어진다. 패킷손실이 발생한 패킷은 재전송을 해주지 않는다는 특징이 있다.