TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 연결 지향형( connection-oriented ) 전송 계층 프로토콜이다. IP(Internet Protocol) 위에서 동작하며, 응용 계층(Application Layer)과 인터넷 계층(Internet Layer) 사이에서 통신을 담당한다.
TCP 헤더는 최소 20바이트에서 최대 60바이트까지 확장 가능하다.
| 필드 | 크기 | 설명 |
|---|---|---|
| Source Port | 16 bits | 송신자의 포트 번호 |
| Destination Port | 16 bits | 수신자의 포트 번호 |
| Sequence Number | 32 bits | 전송 데이터의 순서를 나타냄 |
| Ack Number | 32 bits | 수신이 완료된 데이터의 다음 순번 |
| Data Offset | 4 bits | 헤더 길이 |
| Reserved | 3 bits | 예약 필드 |
| Flags | 9 bits | 제어 비트 (SYN, ACK, FIN 등) |
| Window Size | 16 bits | 수신자가 현재 수신 가능한 데이터 양 |
| Checksum | 16 bits | 오류 검출 |
| Urgent Pointer | 16 bits | 긴급 데이터 위치 |
| Options | 가변 | 선택 사항 (e.g., 윈도우 크기 조절 등) |
sequenceDiagram
participant 클라이언트
participant 서버
클라이언트->>서버: SYN (Seq=x)
서버->>클라이언트: SYN-ACK (Seq=y, Ack=x+1)
클라이언트->>서버: ACK (Ack=y+1)
→ 연결 성립 후 데이터 전송 시작
sequenceDiagram
participant 클라이언트
participant 서버
클라이언트->>서버: FIN
서버->>클라이언트: ACK
서버->>클라이언트: FIN
클라이언트->>서버: ACK
→ FIN 패킷은 각각의 방향으로 독립적으로 종료 처리를 한다.
송신자는 수신자의 윈도우 크기(Window Size) 만큼만 데이터를 전송할 수 있으며, 수신자가 ACK을 보낼 때 윈도우 크기를 조정함.
수식 표현 (최대 전송 가능 바이트 수):
[
\text{전송 가능 범위} = \text{Last ACKed Seq Num} + \text{Window Size}
]
cwnd (congestion window)를 1 MSS로 설정하고 지수적으로 증가시킴.[
\text{cwnd} \leftarrow \text{cwnd} \times 2
]
[
\text{cwnd} \leftarrow \text{cwnd} + 1
]
| 항목 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결 지향 | 비연결형 |
| 신뢰성 | 보장 | 보장하지 않음 |
| 전송 속도 | 상대적으로 느림 | 빠름 |
| 사용 예시 | HTTP, FTP, SMTP 등 | DNS, VoIP, 스트리밍 등 |
TCP는 인터넷에서의 신뢰성 있는 통신을 보장하기 위한 핵심 프로토콜로, 다양한 제어 기법을 통해 데이터 전송의 정확성과 순서를 보장한다. 이러한 특성으로 인해 대다수의 인터넷 응용 서비스에서 채택되어 사용되고 있다.