TCP는 두 통신 지점 사이에 신뢰성 있고 순서가 보장되는 바이트 스트림을 제공하는 전송 계층 프로토콜이다. 네트워크에서 패킷이 누락되거나 순서가 바뀌어도 순서 번호와 재전송 등을 이용해 애플리케이션에 일관된 흐름을 전달한다. TCP 표준 RFC 9293
연결과 바이트 스트림
TCP는 연결 상태를 관리하며 양방향으로 데이터를 주고받는다. 그러나 애플리케이션이 한 번 전송한 데이터 덩어리의 경계를 그대로 보존하는 메시지 프로토콜은 아니다. 받는 쪽에서는 여러 전송이 합쳐지거나 하나의 전송이 나뉘어 읽힐 수 있어 길이 정보나 구분자 같은 메시지 해석 규칙이 필요하다.
손실과 속도에 대응하기
확인 응답과 재전송은 전송 중 손실을 처리한다. 수신 측의 처리 여유를 반영하는 흐름 제어와 네트워크 혼잡에 대응하는 혼잡 제어는 목적이 다르다. 따라서 회선 대역폭이 충분하더라도 지연, 손실, 수신 프로그램의 처리 속도에 따라 체감 속도가 달라질 수 있다.
| 상황 | 구분할 문제 |
|---|---|
| 연결 자체가 안 됨 | 주소·포트·경로·서버 상태 |
| 연결 후 응답이 느림 | 전송 지연 또는 애플리케이션 처리 |
| 일부 데이터만 읽힘 | 메시지 경계 처리와 읽기 반복 |
전송 성공과 업무 성공
예를 들어 문서 저장 데이터를 보낸 뒤 TCP 확인 응답을 받았다고 데이터베이스 저장까지 완료됐다고 결론 내릴 수 없다. 서버의 애플리케이션 응답과 저장 결과를 확인해야 한다. 연결이 끊긴 경우에는 처리 여부가 불명확할 수 있으므로 재요청의 중복 처리도 애플리케이션에서 설계한다.
다른 계층과의 관계
UDP는 개별 데이터그램을 전달하며 TCP와 제공하는 보장이 다르다. TCP 자체가 웹 내용을 암호화하지는 않으므로 보안 연결에는 TLS 같은 보호 계층이 필요하다. HTTP는 그 위에서 요청과 응답의 의미를 정한다.