
TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 연결 지향형 프로토콜입니다. 우리가 인터넷을 사용할 때, 웹사이트 접속, 이메일 전송, 파일 다운로드 등 대부분의 네트워크 통신에서 TCP가 중요한 역할을 합니다.
이번 글에서는 TCP 프레임(TCP 세그먼트)의 구조를 세부적으로 분석하고, 각 필드가 어떤 역할을 하는지 자세히 설명하겠습니다.
TCP 프레임이란?
TCP는 데이터를 세그먼트(Segment) 단위로 나누어 전송하며, 이 세그먼트가 바로 TCP 프레임입니다. TCP 프레임은 크게 두 부분으로 나뉩니다.
-
TCP 헤더(Header): 20~60바이트 크기로, 송수신 제어 정보를 포함
-
데이터 영역(Data): 실제 전송할 데이터 (Payload)
TCP는 데이터가 손실되거나 순서가 바뀌지 않도록 흐름 제어, 오류 검출, 재전송 등의 기능을 포함하고 있습니다.
TCP 헤더 구조 (TCP Header Structure)
TCP 헤더는 20바이트(옵션 포함 시 최대 60바이트)이며, 아래와 같은 필드로 구성됩니다.
TCP 헤더 필드 상세 설명
필드명 | 크기 (비트) | 설명 |
---|---|---|
출발지 포트 번호 (Source Port) | 16비트 | 데이터를 보내는 포트 번호 |
목적지 포트 번호 (Destination Port) | 16비트 | 데이터를 받는 포트 번호 |
순서 번호 (Sequence Number) | 32비트 | 바이트 단위의 순서 지정 |
확인 응답 번호 (Acknowledgment Number) | 32비트 | 다음에 받을 바이트 번호 |
헤더 길이 (Data Offset) | 4비트 | 헤더의 길이(4바이트 단위) |
예약 (Reserved) | 3비트 | 미래 사용을 위한 예약 필드 |
플래그 (Flags, Control Bits) | 9비트 | 연결 설정/종료, 데이터 제어 등 |
윈도우 크기 (Window Size) | 16비트 | 수신 가능한 데이터 크기 |
체크섬 (Checksum) | 16비트 | 오류 검출을 위한 필드 |
긴급 포인터 (Urgent Pointer) | 16비트 | 긴급 데이터의 위치 표시 |
옵션 (Options, Padding 포함) | 0~40바이트 | 추가 기능 제공 |
TCP 플래그(제어 비트) 상세 설명
TCP 헤더에는 9개의 제어 비트(Flags)가 포함되어 있습니다.
플래그 | 비트 수 | 설명 |
URG | 1비트 | 긴급 데이터(긴급 포인터 사용) |
ACK | 1비트 | 확인 응답(Acknowledgment) |
PSH | 1비트 | 데이터를 즉시 전달(버퍼링 방지) |
RST | 1비트 | 연결 강제 종료(Reset) |
SYN | 1비트 | 연결 설정(Handshake 시작) |
FIN | 1비트 | 연결 종료 요청 |
CWR | 1비트 | 혼잡 제어 감소(Congestion Control) |
ECE | 1비트 | 혼잡 상태 탐지(Early Congestion Notification) |
NS | 1비트 | ECN 관련 기능(실험적) |
📌 주요 플래그 사용 예시
-
TCP 3-Way Handshake (연결 설정)
-
클라이언트 → 서버 :
SYN
-
서버 → 클라이언트 :
SYN + ACK
-
클라이언트 → 서버 :
ACK
-
-
TCP 연결 종료 과정
-
클라이언트 → 서버 :
FIN
-
서버 → 클라이언트 :
ACK
-
서버 → 클라이언트 :
FIN
-
클라이언트 → 서버 :
ACK
-
TCP 데이터 영역 (Payload)
TCP 데이터 영역은 실제 애플리케이션이 전송하는 데이터를 포함하는 부분입니다.
-
최대 크기:
65535 바이트 - (IP 헤더 + TCP 헤더)
-
MTU (Maximum Transmission Unit)에 따라 크기 조정
-
TCP는 데이터 손실을 방지하고, 순서를 보장함
TCP는 흐름 제어와 혼잡 제어 기능을 통해 데이터가 네트워크에서 안정적으로 전달되도록 보장합니다.
TCP 프레임 예시 (Packet 구조)
아래는 TCP 프레임의 구조를 시각적으로 표현한 예시입니다.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port (16bit) | Destination Port (16bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number (32bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number (32bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data Offset | Reserved | Flags | Window Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer | (Options, if any) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data (Payload) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
TCP vs UDP 비교
TCP와 UDP(User Datagram Protocol)는 대표적인 전송 계층 프로토콜입니다.
특징 | TCP | UDP |
연결 방식 | 연결 지향(Connection-oriented) | 비연결(Connectionless) |
신뢰성 | 신뢰성 높음 (재전송, 순서 보장) | 신뢰성 낮음 (손실 가능) |
속도 | 느림 (오버헤드 존재) | 빠름 (오버헤드 적음) |
사용 사례 | 웹, 이메일, 파일 전송 | 스트리밍, VoIP, 온라인 게임 |
결론
TCP는 데이터 전송에서 신뢰성을 보장하는 중요한 프로토콜입니다.
-
헤더 구조를 통해 데이터 순서를 보장하고 오류를 감지
-
3-way Handshake를 통해 연결을 설정하고, 4-way Handshake를 통해 연결을 해제
-
혼잡 제어, 흐름 제어 등을 통해 네트워크 안정성을 유지
TCP를 이해하면 네트워크 프로그래밍과 보안 분석에서 큰 도움이 됩니다. 앞으로 Wireshark 등을 활용해 실제 패킷을 분석해보는 것도 추천합니다!
[…] TCP 프레임 구조 […]