TCP 제어 비트 · 플래그 vs 전송 제어 문자
전송 제어 문자 (ASCII)
| 문자 | ASCII | 풀네임 | 역할 |
|---|---|---|---|
| SOH | 0x01 | Start Of Header | 헤더 시작 |
| STX | 0x02 | Start Of Text | 본문 시작 |
| ETX | 0x03 | End Of Text | 본문 끝 |
| EOT | 0x04 | End Of Transmission | 전송 완전 종료 |
| ENQ | 0x05 | Enquiry | 응답 요청 |
| ACK | 0x06 | Acknowledgment | 수신 확인 |
| NAK | 0x15 | Negative ACK | 수신 오류·재전송 요청 |
| SYN | 0x16 | Synchronous Idle | 동기 신호 |
| ETB | 0x17 | End of TX Block | 블록 전송 끝 |
| DLE | 0x10 | Data Link Escape | 다음 문자를 제어문자로 |
프레임 구조: SOH → STX → 데이터 → ETX → EOT
TCP 플래그 (헤더 비트)
| 플래그 | 풀네임 | 역할 |
|---|---|---|
| SYN | Synchronize | 연결 요청 |
| ACK | Acknowledgment | 수신 확인 |
| FIN | Finish | 정상 종료 |
| RST | Reset | 강제 종료 |
| PSH | Push | 즉시 전달 |
| URG | Urgent | 긴급 데이터 |
⚠ SYN·ACK 이름 겹침 주의!
ASCII SYN(0x16) = 동기 신호 문자
TCP SYN = 연결 요청 플래그
ASCII ACK(0x06) = 수신 확인 문자
TCP 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 처럼).
📋 표준 제어 비트 6개 — 상세
| 비트 | 풀네임 | 1로 켜지면 | 언제 쓰나 | 함께 쓰는 필드 |
|---|---|---|---|---|
| URG | Urgent | 긴급 데이터가 들어 있으니 순서를 건너뛰고 먼저 처리하라 | Ctrl+C 같은 인터럽트 전달 | 긴급 포인터(Urgent Pointer) 필드가 유효해진다 |
| ACK | Acknowledgment | 확인 응답 번호가 유효하다 | 연결 수립 이후 거의 모든 세그먼트에 켜져 있다 | 확인 응답 번호(Ack Number) 필드 |
| PSH | Push | 버퍼에 쌓지 말고 즉시 응용 계층으로 올려라 | Telnet·SSH 등 대화형 통신 | — |
| RST | Reset | 연결을 즉시 강제로 끊어라 | 비정상 상황 — 없는 포트로 접속, 오류 발생 | — |
| SYN | Synchronize | 연결을 열자. 순서 번호를 동기화 | 3-way 핸드셰이크의 1·2단계 | 순서 번호(Seq Number) 초기화 |
| FIN | Finish | 보낼 데이터가 끝났다. 정상 종료하자 | 4-way 핸드셰이크 | — |
🧠 순서 암기 — 「U A P R S F」
헤더에 나오는 순서 그대로 URG · ACK · PSH · RST · SYN · FIN. "유 아 프 러 스 프" 처럼 소리로 외우거나, 긴급→확인→밀어→끊어→열어→닫아 로 뜻을 붙여 외운다.
헤더에 나오는 순서 그대로 URG · ACK · PSH · RST · SYN · FIN. "유 아 프 러 스 프" 처럼 소리로 외우거나, 긴급→확인→밀어→끊어→열어→닫아 로 뜻을 붙여 외운다.
➕ 확장 비트 3개 (참고)
| 비트 | 풀네임 | 역할 |
|---|---|---|
| CWR | Congestion Window Reduced | 송신측이 혼잡 윈도를 줄였음을 알림 |
| ECE | ECN-Echo | 수신측이 혼잡이 발생했음을 송신측에 되돌려 알림 |
| NS | Nonce Sum | ECN 신호의 위·변조 방지용 (실험적, 현재는 거의 안 씀) |
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를 켜면 긴급 포인터 필드가 유효해진다 — 이 짝은 시험 단골
• ACK는 연결 수립 후 거의 항상 1이다 — "ACK가 켜져 있으면 응답 번호 필드가 유효하다"는 뜻
• SYN과 FIN은 각각 순서 번호를 1 소비한다 (데이터가 없어도)
• "제어 비트는 각 1바이트"는 오답 — 각 1비트다
• URG를 켜면 긴급 포인터 필드가 유효해진다 — 이 짝은 시험 단골
🔗 3-way / 4-way 핸드셰이크의 전체 흐름과 TCP 상태 전이는
「4계층 — 전송」 섹션에 정리되어 있다 → 바로 가기