TCP는 트랜스포트 계층에서 사용되는 프로토콜이로 다음과 같은 특징을 지닌다.
TCP가 신뢰적으로 데이터를 전송할 수 있는 이유는 ‘핸드 쉐이킹’라는 과정이 있기 때문이다.
0단계: 서버 프로그램이 연결될 준비가 되어있는지 확인한다. (서버가 켜져있어야함)
1단계: 클라이언트는 서버에 연결을 요청을 보낼때 시퀀스 번호를 SYN 패킷에 담아서 보낸다.
2단계: 서버가 요청을 제대로 받으면 응답으로 ACK(Acknowledgement)를 클라이언트에 보낸다.
3단계: 클라이언트는 서버에 ACK 응답을 보낸다.
1단계: 연결 해제를 원하는 클라이언트는 서버에 FIN 패킷을 보낸다.
2단계: 요청을 받은 서버는 응답으로 ACK를 클라이언트에 보내고, 서버는 CLOSE_WAIT 상태로 들어간다.
3단계: 더이상 처리할 데이터가 없다면 서버는 클라이언트에 다시 FIN 패킷을 보낸다.
4단계: 클라이언트는 서버에 ACK를 보내 응답한다. 서버는 CLOSED 상태에 들어가며 연결을 종료한다.
간단하게 알아보는 TCP의 데이터 전송원리
TCP프로토콜은 패킷 전송을 사용하기 때문에 클라이언트는 서버에 데이터를 한번에 보내는것이 아니라 패킷 단위로 나눠서 보낸다.