전송 계층의 프로토콜로 PORT 번호를 사용해 애플리케이션에서 사용하는 프로세스까지 정확하게 도달하기 위해서 데이터를 패킷 단위로 분할하여 전송함
- 시퀀스 번호와 ACK 번호를 사용하여 순서가 바뀌거나 패킷이 손실되는 것을 방지함
- 시퀀스 번호: 패킷에 순서 부여
- ACK 번호: 응답 번호
TCP는 UDP와 달리 상대방이 데이터를 잘 받았는지 확인하기 위해서 ACK 번호를 확인 후 다음 패킷을 보낸다. 모든 패킷에 대해 응답을 확인하게 된다면 응답 시간이 그만큼 길어질 것이다. 따라서 최대한 가능한 만큼의 패킷을 한꺼번에 보내고 나서 응답을 받는 것이 효율적이지만 중간에 장애가 발생하게 된다면 패킷 유실이 발생할 수 있다. 따라서 적절한 송신량(Window size)를 조절해야 한다.(Sliding window)
데이터의 유실이 발생할 경우
TCP는 통신을 시작하기 전에 먼저 연결하는 과정을 거쳐야 한다. 상대방이 통신이 불가한 경우를 데이터가 유실될 수 있기 때문에 데이터를 주고 받을 수 있는 확인 작업이 필요하다.
모든 데이터를 주고받는 통신이 완료되었다면 연결을 해제해야 한다. 종료 과정에서는 한 단계가 추가가 되어 4-way가 되었으며 송신측에서 수신측으로 남은 데이터를 다 보낼 때까지 기다렸다가(CLOSE_WAIT) FIN을 보내는 과정이 추가되었기 때문이다.
TCP는 연결 작업이외에도 기존 통신에 대한 응답인지 구별하기 위해서 Flag를 사용한다.
수신측의 Buffer는 한정된 크기를 가지므로 그 이상을 넘어서게 되면 이후에 도착한 패킷을 버퍼에 담지 못하고 버려지게 된다. (계속 유실된다면 불필요한 응답 증가와 재전송 요구 증가)
수신측이 패킷을 지나치게 많이 받지 않도록 송신측의 전송 속도를 조절하기 위해서 수신측이 송신측에게 현재 자신의 상태를 피드백한다.
1. Stop and wait: 매번 전송한 패킷에 대해 확인 응답을 받는다.
2. Sliding window: 수신측에서 설정한 윈도우 사이즈만큼 확인 응답없이 한꺼번에 패킷을 전송한다.