TCP 제어 플래그가 연결 상태를 전달하는 방식

TCP 제어 플래그의 의미와 연결 수립·종료, 혼잡 제어, 패킷 분석 및 보안 모니터링 활용 방식을 정리한다.

2026-08-14 · 최초 발행 2025-08-10

TCP 통신의 상태를 담는 제어 비트

TCP는 신뢰성 있는 데이터 전송을 위해 연결의 시작, 데이터 전달, 종료 상태를 패킷 헤더로 교환한다. 이때 제어 플래그는 연결 설정과 해제, 혼잡 통지, 긴급 데이터 처리처럼 통신 흐름을 바꾸는 신호를 맡는다.

TCP 헤더의 기본 크기는 20바이트이며, 제어 플래그는 13번째 바이트에 위치한다.

TCP Header StructureSource Port - 2 bytesDestination Port - 2 bytesSequence Number - 4 bytesAcknowledgment Number -4 bytesData Offset, Reserved,Flags - 2 bytesWindow Size - 2 bytesChecksum - 2 bytesUrgent Pointer - 2 bytesOptions - Variable

플래그 영역은 총 9개의 비트로 구성되며, 각 비트가 서로 다른 제어 기능을 나타낸다.

혼잡 신호와 긴급 처리에 쓰이는 플래그

NS: ECN 신호 보호

NS는 ECN(Explicit Congestion Notification) 메커니즘의 보안을 강화하기 위한 플래그다. RFC 3540에서 정의된 실험적 기능으로, 악의적인 ECN 신호 조작을 막고 혼잡 제어 메커니즘의 신뢰성을 높이는 데 목적이 있다. 실제 구현에서 널리 사용되지는 않는다.

CWR: 혼잡 윈도우 축소 통지

CWR(Congestion Window Reduced)은 송신자가 ECN Echo 신호를 받은 뒤 혼잡 윈도우를 줄였음을 수신자에게 알린다. 송신 속도를 조절한 사실을 전달하는 것으로, 혼잡 제어 알고리즘의 일부로 동작한다.

ECE: ECN Echo

ECE는 SYN 플래그와의 조합에 따라 두 가지 의미를 갖는다.

  • SYN 플래그가 설정된 경우에는 ECN 기능 지원을 알린다.
  • SYN 플래그가 해제된 경우에는 네트워크 혼잡 발생을 알린다.

네트워크 경로의 라우터가 혼잡을 감지하면 IP 헤더의 ECN 필드를 설정한다. 이를 받은 TCP는 ECE 플래그를 설정해 송신자에게 혼잡 사실을 전달한다.

URG: 긴급 데이터 표시

URG는 Urgent Pointer 필드가 유효하다는 뜻이다. 긴급 데이터가 있어 우선 처리해야 함을 알리며, 텔넷이나 SSH 같은 인터랙티브 애플리케이션에서 중단 신호 등을 전달할 때 사용된다. 일반 데이터 스트림을 중단하고 긴급 데이터를 먼저 처리하도록 한다.

PSH: 애플리케이션으로 즉시 전달

PSH는 버퍼에 쌓인 데이터를 애플리케이션에 즉시 넘겨야 한다는 신호다. TCP는 효율을 위해 데이터를 버퍼링하지만, PSH가 설정되면 즉시 전달한다. 지연 없는 응답이 필요한 인터랙티브 애플리케이션, 채팅 애플리케이션, 실시간 데이터 스트리밍에서 사용된다.

연결의 시작과 응답, 종료를 나타내는 플래그

ACK: 수신 확인

ACK는 Acknowledgment Number 필드가 유효함을 나타낸다. 수신한 데이터를 확인하고 다음에 받아야 할 데이터의 시퀀스 번호를 알리는 역할을 한다. SYN 패킷을 제외한 거의 모든 TCP 패킷에 설정되며, 신뢰성 있는 데이터 전송의 핵심 메커니즘이다.

SYN: 초기 시퀀스 번호 동기화

SYN은 연결 설정 과정에서 초기 시퀀스 번호를 동기화하는 데 쓰인다. 클라이언트가 SYN 패킷을 서버에 보내고, 서버가 SYN-ACK로 응답한 뒤 클라이언트가 ACK를 보내면 연결이 수립된다. SYN이 설정된 패킷은 초기 시퀀스 번호를 전달한다.

FIN: 정상 종료 요청

FIN은 데이터 전송이 끝난 뒤 정상적으로 연결을 종료하기 위한 신호다. 연결 한쪽 방향의 종료를 요청하며 TCP 종료 절차를 시작한다. FIN을 보낸 쪽에 상대방이 ACK로 응답한 뒤, 상대방도 자신의 FIN을 보내는 방식으로 진행된다.

RST: 즉시 연결 해제

RST는 비정상적인 연결을 곧바로 종료하는 플래그다. 존재하지 않는 연결에 대한 패킷을 받거나 프로토콜 오류가 발생했을 때 사용된다. FIN 절차를 거치지 않는 강제 종료 신호이며, 스캐닝 감지와 DoS 공격 방어 같은 보안 상황에서도 활용된다.

SYN과 ACK, FIN으로 이어지는 연결 상태 전환

연결 수립에서는 SYN과 ACK가 초기 시퀀스 번호와 응답 상태를 교환한다.

ServerClientServerClientSYN (seq=x)SYN-ACK (seq=y, ack=x+1)ACK (ack=y+1)

클라이언트가 초기 시퀀스 번호를 담은 SYN 패킷을 보낸다. 서버는 SYN과 ACK가 모두 설정된 패킷으로 응답하고, 클라이언트가 ACK를 보내면 연결이 수립된다.

종료는 각 방향의 전송 완료를 따로 확인하므로 FIN과 ACK가 순차적으로 교환된다.

ServerClientServerClientFIN (seq=m)ACK (ack=m+1)FIN (seq=n)ACK (ack=n+1)

클라이언트가 FIN을 보내면 서버는 ACK로 응답한다. 서버가 남은 데이터 전송을 마친 뒤 FIN을 보내고, 클라이언트가 ACK로 응답하면서 연결이 종료된다.

브라우저 연결에서 보이는 플래그 조합

웹 브라우저가 서버와 통신할 때도 플래그는 연결 전 과정에 나타난다. 연결 시도는 SYN, 서버 응답은 SYN-ACK, 연결 확인은 ACK로 진행된다. HTTP 요청과 서버 응답에는 즉시 처리를 요청하는 PSH-ACK가 설정될 수 있다.

연결을 닫을 때 브라우저는 FIN-ACK를 보내고 서버는 ACK로 확인한다. 이어 서버가 FIN-ACK를 보내면 브라우저가 최종 ACK를 전송한다.

차단된 포트에 연결을 시도한 경우에는 다른 흐름이 나타난다. 클라이언트가 SYN을 보내고, 방화벽이 RST-ACK가 설정된 패킷으로 연결 거부를 응답하면 클라이언트는 즉시 연결 시도를 중단한다.

플래그 패턴에서 드러나는 공격 시도

SYN Flood

SYN Flood는 공격자가 다수의 SYN 패킷을 보내고 ACK 응답을 무시하는 방식이다. 서버의 연결 테이블이 반개방 상태 연결로 채워질 수 있다. SYN 쿠키, 연결 타임아웃 감소, 방화벽 필터링 등이 방어 기법으로 사용된다.

RST 패킷 삽입

RST 공격은 정상 TCP 세션의 시퀀스 번호를 추측해 RST 패킷을 삽입하고 통신 세션을 강제로 종료시키는 방식이다. 패킷 필터링과 TCP 시퀀스 번호 무작위화로 대응할 수 있다.

FIN Scan

FIN Scan은 FIN 패킷으로 포트 스캐닝을 수행한다. 닫힌 포트는 RST로 응답하지만 열린 포트는 응답하지 않는다. 비정상적인 FIN 패킷을 탐지하고 차단하는 방식으로 방어한다.

패킷 분석과 방화벽 정책에 적용하기

Wireshark에서는 다음 필터로 SYN만 설정된 연결 시작 패킷을 확인할 수 있다.

tcp.flags.syn==1 && tcp.flags.ack==0

이 필터는 네트워크 문제 해결과 보안 모니터링에 활용된다. 방화벽 정책도 TCP 플래그 조합을 기준으로 구성할 수 있다. 예를 들어 내부 네트워크에서 시작되지 않은 SYN-ACK 패킷을 차단하는 규칙을 둘 수 있다.

iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP

플래그의 의미와 조합을 읽을 수 있으면 정상적인 연결 상태 전환과 비정상 패킷을 구분하는 데 도움이 된다. TCP 통신을 설계하거나 장애와 보안 이벤트를 분석할 때, 패킷의 제어 비트는 가장 먼저 확인할 신호 중 하나다.

TCP네트워크제어 플래그패킷 분석네트워크 보안