공든탑앱 열기

TCP

네트워크관리사 2급 · 전송 계층 · 약 13분

쉽게 말하면

TCP는 '꼼꼼한 배달 방식'이에요. 보내기 전에 "보낼게요?" "네, 준비됐어요" "그럼 보낼게요" 하고 세 번 인사해 연결을 만들고(3-way handshake), 조각마다 번호를 붙여 순서대로 맞추고, 못 받은 조각은 다시 보내요. 웹, 메일, 원격 접속처럼 하나라도 빠지면 안 되는 데이터에 써요.

시험용 정의

TCP(Transmission Control Protocol)는 전송 계층의 연결형·신뢰성 프로토콜이다. 3-way handshake로 연결을 맺고, 순서 번호·확인 응답(ACK)으로 빠진 데이터를 재전송하며, 슬라이딩 윈도우로 흐름 제어, 혼잡 제어까지 한다. 헤더는 기본 20바이트이고 데이터를 바이트 스트림으로 다룬다.

비유로 이해하기

등기우편과 전화 통화를 합친 것이다. 먼저 통화가 연결되는지 확인하고, 편지마다 일련번호를 붙여 보내고, 받은 쪽은 "5번까지 받았어요"라고 알려 주며, 빠진 번호는 다시 부친다.

자세히

그림으로 보기: 3-way 핸드셰이크(연결)

클라이언트서버
SYNseq = x, 연결하자
SYN + ACKseq = y, ack = x + 1
ACKack = y + 1, 연결 완료(ESTABLISHED)

그림으로 보기: 4-way 핸드셰이크(종료)

클라이언트서버
FIN보낼 것 다 보냈어
ACK알았어(남은 데이터는 마저 보냄)
FIN나도 끝
ACKTIME_WAIT 뒤 연결 해제

먼저 알아 둘 말

말뜻
TFTP인증 없이 간단히 파일을 주고받는 프로토콜. TCP가 아니라 UDP 69번을 쓴다
세그먼트TCP의 데이터 단위
순서 번호 / 확인 응답 번호보내는 데이터의 위치 / 다음에 받기를 기대하는 번호
윈도우 크기응답 없이 받을 수 있는 양. 받는 쪽이 알려 준다
혼잡 제어네트워크가 막히면 보내는 속도를 줄이는 것 (슬로 스타트 등)

TCP 헤더 주요 필드

필드뜻
출발지·목적지 포트각 16비트, 어느 프로그램인지
순서 번호(Sequence Number)이 세그먼트 첫 바이트의 번호
확인 응답 번호(Acknowledgment Number)다음에 받을 바이트 번호
헤더 길이기본 20바이트, 옵션 포함 최대 60
플래그URG, ACK, PSH, RST, SYN, FIN
윈도우 크기흐름 제어
체크섬오류 검사

플래그

플래그뜻
SYN연결 시작 요청 (순서 번호 동기화)
ACK확인 응답 번호가 유효함
FIN보낼 데이터 끝, 연결 종료 요청
RST연결을 즉시 강제로 끊음
PSH버퍼에 쌓지 말고 바로 위로 넘김
URG긴급 데이터 있음

연결과 종료

  • 연결(3-way): SYN → SYN+ACK → ACK. 서버 상태 LISTEN → SYN_RECEIVED → ESTABLISHED
  • 종료(4-way): FIN → ACK → FIN → ACK. 먼저 끊은 쪽은 마지막에 TIME_WAIT로 잠시 기다린다
  • SYN Flooding 공격: SYN만 잔뜩 보내고 ACK를 안 보내 서버의 연결 대기열을 가득 채운다

시험에 이렇게 나와요

확인 문제

Q1. TCP 연결을 맺는 3-way handshake의 순서는?

  1. SYN → SYN+ACK → ACK
  2. ACK → SYN → FIN
  3. SYN → ACK → FIN
  4. FIN → ACK → FIN → ACK
정답 보기

1번 SYN → SYN+ACK → ACK

클라이언트가 SYN, 서버가 SYN+ACK, 클라이언트가 ACK를 보내면 연결이 성립(ESTABLISHED)된다. 끊을 때는 FIN과 ACK를 양쪽이 주고받는 4-way handshake.

Q2. TCP 연결을 즉시 강제로 끊을 때 쓰는 플래그는?

  1. RST
  2. SYN
  3. PSH
  4. FIN
정답 보기

1번 RST

RST(Reset)다. FIN은 정상 종료(4-way), SYN은 연결 요청, PSH는 데이터를 바로 위 계층으로 넘기라는 표시다.

Q3. TCP 헤더에 없는 필드는?

  1. TTL
  2. 윈도우 크기
  3. 순서 번호
  4. 확인 응답 번호
정답 보기

1번 TTL

TTL은 IP 헤더 필드다. TCP 헤더에는 순서 번호, 확인 응답 번호, 윈도우 크기, 플래그 등이 있다.

Q4. TCP를 쓰는 서비스가 아닌 것은?

  1. TFTP
  2. HTTP
  3. SMTP
  4. SSH
정답 보기

1번 TFTP

TFTP다. UDP 69번을 쓴다. HTTP(80), SMTP(25), SSH(22)는 TCP를 쓴다.

Q5. 3-way 핸드셰이크의 순서로 옳은 것은?

  1. SYN → SYN+ACK → ACK
  2. SYN → ACK → SYN+ACK
  3. FIN → ACK → SYN
  4. ACK → SYN → FIN
정답 보기

1번 SYN → SYN+ACK → ACK

클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK.

Q6. TCP 헤더의 순서 번호(Sequence Number) 필드 크기는?

  1. 64비트
  2. 32비트
  3. 16비트
  4. 8비트
정답 보기

2번 32비트

포트·체크섬은 16비트, 순서 번호·확인 번호는 32비트.

헷갈리기 쉬운 O·X

TCP는 연결을 맺지 않고 바로 데이터를 보낸다.

정답 보기

X 3-way handshake로 연결부터 맺는다.

TCP 연결 종료는 4-way handshake로 이루어진다.

정답 보기

O FIN, ACK, FIN, ACK.

SYN Flooding은 TCP 연결 설정 과정을 악용한 공격이다.

정답 보기

O 반쯤 열린 연결로 대기열을 채운다.

함께 보면 좋은 개념