TCP란?
애플리케이션 사이에서 안전하게 데이터를 통신하는 네트워크 프로토콜이다.
TCP 특징
- 신뢰성 보장
- 연결 지향적
- 양단간 애플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 통신
- 같은 전송 계층인 UDP가 비연결성인 것과는 달리, TCP는 연결지향적
- TCP 오류 제어: 데이터 유실 및 훼손 시 재전송(ARQ)을 통해 오류를 복구
- TCP 흐름 제어: 송신자와 수신자 간의 데이터 처리 속도 차이(슬라이딩 윈도우 등)를 해결
- TCP 혼잡 제어: 네트워크 전체의 혼잡도를 파악하여 송신량(AIMD, Slow Start 등)을 조절
동작 방식
TCP는 통신 전 연결을 수립하고 통신이 끝나면 연결을 종료한다.
통신 과정에서 아래와 같이 데이터를 패킷 형태로 쪼개어 송수신한다.
- 바이트 스트림에서 받은 데이터를 일정 단위로 분할
- 분할된 데이터 단위에 TCP 헤더를 붙여서 TCP 세그먼트를 생성
- TCP 세그먼트를 IP 데이터그램으로 변환
- IP 데이터그램을 수신 애플리케이션에 보냄
Info
IP 데이터그램은 인터넷 통신에 사용되는 데이터 패킷
TCP 세그먼트
TCP 세그먼트는 헤더와 데이터 필드가 나뉘어져 있다.
내부에는 발송/수신 각각의 포트와 시퀀스 번호가 담겨져 있다.
- Source Port: 데이터를 발송하는 애플리케이션의 포트 번호입니다.
- Destination Port: 데이터를 수신하는 애플리케이션의 포트 번호입니다.
- Sequence Number(SYN): TCP 통신 과정에서 데이터를 일정 단위로 분할하는데요. 분할된 데이터의 순서입니다.
- Acknowledgment Number(ACK): 데이터를 수신하는 애플리케이션 입장에서, 다음으로 받고 싶은 TCP 세그먼트의 Sequence Number입니다.
Info
통신 과정에서 분할된 데이터가 순서대로 전달되지 않거나 각자 다른 경로로 통신될 수 있다.
그러나 TCP 헤더가 있어서 데이터를 안전하고 정확하게 원상복구할 수 있다.
- MSS: TCP로 전송할 수 있는 최대 페이로드 크기
- MTU: MSS + 헤더 크기

TCP State

