정보통신기사 필기

TCP 제어 비트 · 플래그 vs 전송 제어 문자

전송 제어 문자 (ASCII)
문자ASCII풀네임역할
SOH0x01Start Of Header헤더 시작
STX0x02Start Of Text본문 시작
ETX0x03End Of Text본문 끝
EOT0x04End Of Transmission전송 완전 종료
ENQ0x05Enquiry응답 요청
ACK0x06Acknowledgment수신 확인
NAK0x15Negative ACK수신 오류·재전송 요청
SYN0x16Synchronous Idle동기 신호
ETB0x17End of TX Block블록 전송 끝
DLE0x10Data Link Escape다음 문자를 제어문자로
프레임 구조: SOH → STX → 데이터 → ETX → EOT
TCP 플래그 (헤더 비트)
플래그풀네임역할
SYNSynchronize연결 요청
ACKAcknowledgment수신 확인
FINFinish정상 종료
RSTReset강제 종료
PSHPush즉시 전달
URGUrgent긴급 데이터
⚠ SYN·ACK 이름 겹침 주의!
ASCII SYN(0x16) = 동기 신호 문자
TCP SYN = 연결 요청 플래그
ASCII ACK(0x06) = 수신 확인 문자
TCP ACK = 수신 확인 비트
→ 이름 같지만 완전히 다른 것!
구분전송 제어 문자 (ASCII)TCP 플래그
위치데이터 내부 (페이로드 안)TCP 헤더 비트
크기1 byte 문자각 1 bit
계층2~7계층4계층 전용
표준ASCII (ISO 646)RFC 793
목적데이터 구조·흐름 표시TCP 연결 상태 제어
🎚️ TCP 제어 비트(Control Bits) 상세
TCP 헤더 안에서 연결의 상태를 지시하는 비트들이다. 각각 1 bit이고, 1이면 켜짐(설정), 0이면 꺼짐. 여러 개를 동시에 켤 수 있다(SYN+ACK 처럼).
TCP 헤더 13~14번째 바이트 (16 bit) — 이 안에 제어 비트가 들어 있다 Data Offset 4bit Reserved 3bit NS CWR ECE URG ACK PSH RST SYN FIN 확장 (ECN·혼잡 알림) RFC 3168 / 3540 표준 제어 비트 6개 — 시험 범위 (RFC 793) 🧠 순서 암기 : U · A · P · R · S · F
📋 표준 제어 비트 6개 — 상세
비트풀네임1로 켜지면언제 쓰나함께 쓰는 필드
URGUrgent긴급 데이터가 들어 있으니 순서를 건너뛰고 먼저 처리하라Ctrl+C 같은 인터럽트 전달긴급 포인터(Urgent Pointer) 필드가 유효해진다
ACKAcknowledgment확인 응답 번호가 유효하다연결 수립 이후 거의 모든 세그먼트에 켜져 있다확인 응답 번호(Ack Number) 필드
PSHPush버퍼에 쌓지 말고 즉시 응용 계층으로 올려라Telnet·SSH 등 대화형 통신—
RSTReset연결을 즉시 강제로 끊어라비정상 상황 — 없는 포트로 접속, 오류 발생—
SYNSynchronize연결을 열자. 순서 번호를 동기화3-way 핸드셰이크의 1·2단계순서 번호(Seq Number) 초기화
FINFinish보낼 데이터가 끝났다. 정상 종료하자4-way 핸드셰이크—
🧠 순서 암기 — 「U A P R S F」
헤더에 나오는 순서 그대로 URG · ACK · PSH · RST · SYN · FIN. "유 아 프 러 스 프" 처럼 소리로 외우거나, 긴급→확인→밀어→끊어→열어→닫아 로 뜻을 붙여 외운다.
➕ 확장 비트 3개 (참고)
비트풀네임역할
CWRCongestion Window Reduced송신측이 혼잡 윈도를 줄였음을 알림
ECEECN-Echo수신측이 혼잡이 발생했음을 송신측에 되돌려 알림
NSNonce SumECN 신호의 위·변조 방지용 (실험적, 현재는 거의 안 씀)
ECN(명시적 혼잡 알림)은 패킷을 버리기 전에 미리 "혼잡하다"고 알려주는 방식이다. 시험에서 "TCP 제어 비트는 몇 개인가"를 물으면 6개가 정답이다.
🔀 실제로 나타나는 플래그 조합
조합누가 → 누구에게의미
SYN클라이언트 → 서버3-way ① 연결 요청
SYN + ACK서버 → 클라이언트3-way ② 요청 수락 + 확인
ACK클라이언트 → 서버3-way ③ 연결 성립 (이후 데이터 전송)
PSH + ACK양방향데이터를 보내면서 즉시 올리라고 지시 — 가장 흔한 데이터 전송 형태
FIN + ACK종료를 시작하는 쪽4-way "내 데이터는 끝났다"
RST거부하는 쪽연결 즉시 강제 종료 — 열려 있지 않은 포트로 접속하면 이게 온다
RST + ACK거부하는 쪽확인과 함께 강제 종료
아무것도 없음—NULL 스캔 — 정상 통신이 아니라 포트 스캔 공격
⚠️ 시험에서 갈리는 두 쌍

PSH vs URG

PSH = "지금 있는 것 전부 빨리 올려라"
 → 순서는 지킨다. 버퍼링만 안 함

URG = "이 부분만 먼저 처리하라"
 → 순서를 건너뛴다. 긴급 포인터로 위치 지정

🧠 PSH는 속도, URG는 새치기

RST vs FIN

FIN = 정상 종료. "할 말 다 했다"
 → 4-way 절차를 밟는다. 남은 데이터 전송 보장

RST = 비정상 강제 종료. "그만!"
 → 절차 없이 즉시 끊음. 버퍼 데이터 버려진다

🧠 FIN은 인사하고 나가기, RST는 문 쾅 닫기

⚠️ 자주 나오는 진술
• ACK는 연결 수립 후 거의 항상 1이다 — "ACK가 켜져 있으면 응답 번호 필드가 유효하다"는 뜻
• SYN과 FIN은 각각 순서 번호를 1 소비한다 (데이터가 없어도)
• "제어 비트는 각 1바이트"는 오답 — 각 1비트다
• URG를 켜면 긴급 포인터 필드가 유효해진다 — 이 짝은 시험 단골
🔗 3-way / 4-way 핸드셰이크의 전체 흐름과 TCP 상태 전이는 「4계층 — 전송」 섹션에 정리되어 있다 → 바로 가기