TCP (Transmission Control Protocol)는 인터넷상에서 데이터를 주고받는 데 사용되는 핵심 프로토콜 중 하나이다. TCP 패킷은 데이터 전송을 위한 정보를 담고 있으며, 네트워크를 통해 데이터를 안정적이고 신뢰할 수 있게 전송하는 데 중요한 역할을 한다.
TCP 패킷은 크게 헤더(header)와 데이터(payload) 부분으로 나누어져 있다.

1 소스 포트(Source Port)와 대상 포트(Destination Port) (각각 16비트):
2 순서 번호(Sequence Number) (32비트):
3 확인 응답 번호(Acknowledgment Number) (32비트):
4 데이터 오프셋(Data Offset) 또는 헤더 길이 (4비트):
5 예약 필드(Reserved) (6비트):
6 플래그(Flags) (6비트):
7 윈도우 크기(Window Size) (16비트):
8 체크섬(Checksum) (16비트):
9 긴급 포인터(Urgent Pointer) (16비트):
10 옵션(Options) (가변 길이):
11 패딩(Padding):
데이터(Payload):
예를 들어, 웹 브라우저가 웹 서버에 HTTP 요청을 보내는 경우를 가정해보자.
TCP 패킷 예시
1 소스 포트: 12345 (임의의 고유 포트 번호)
2 대상 포트: 80 (HTTP 서비스를 위한 표준 포트)
3 순서 번호: 예를 들어 100 (이전 패킷의 순서 번호에 이어짐)
4 확인 응답 번호: 75 (서버로부터 받은 마지막 패킷의 순서 번호)
5 데이터 오프셋: 5 (헤더가 20바이트라는 것을 의미)
6 예약 필드: 0 (사용되지 않음)
7 플래그: SYN, ACK (연결 설정 및 데이터 수신 확인)
8 윈도우 크기: 65535 (수신 가능한 최대 데이터 크기)
9 체크섬: 0x1A2B (데이터 무결성 검사를 위한 값)
10 긴급 포인터: 0 (긴급 데이터 없음)
11 옵션: 없음 (옵션이 필요 없는 경우)
12 패딩: 없음 (옵션이 없기 때문에 필요 없음)
데이터 부분
데이터: "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n"