TCP
쉽게 말하면
TCP는 '꼼꼼한 배달 방식'이에요. 보내기 전에 "보낼게요?" "네, 준비됐어요" "그럼 보낼게요" 하고 세 번 인사해 연결을 만들고(3-way handshake), 조각마다 번호를 붙여 순서대로 맞추고, 못 받은 조각은 다시 보내요. 웹, 메일, 원격 접속처럼 하나라도 빠지면 안 되는 데이터에 써요.
시험용 정의
TCP(Transmission Control Protocol)는 전송 계층의 연결형·신뢰성 프로토콜이다. 3-way handshake로 연결을 맺고, 순서 번호·확인 응답(ACK)으로 빠진 데이터를 재전송하며, 슬라이딩 윈도우로 흐름 제어, 혼잡 제어까지 한다. 헤더는 기본 20바이트이고 데이터를 바이트 스트림으로 다룬다.
비유로 이해하기
등기우편과 전화 통화를 합친 것이다. 먼저 통화가 연결되는지 확인하고, 편지마다 일련번호를 붙여 보내고, 받은 쪽은 "5번까지 받았어요"라고 알려 주며, 빠진 번호는 다시 부친다.
자세히
그림으로 보기: 3-way 핸드셰이크(연결)
그림으로 보기: 4-way 핸드셰이크(종료)
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 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를 안 보내 서버의 연결 대기열을 가득 채운다
시험에 이렇게 나와요
- 3-way 핸드셰이크 → SYN → SYN+ACK → ACK, SYN 받은 서버는 SYN_RECEIVED
- 정상 종료 → FIN / 강제 종료 → RST, 플래그 → URG·ACK·PSH·RST·SYN·FIN
- TCP 헤더 길이 → 포트 16비트, 순서 번호 32비트, 체크섬 16비트
- TCP → 연결형·신뢰성, 실시간 화상 통신에는 UDP
- TFTP는 UDP를 쓴다
확인 문제
Q1. TCP 연결을 맺는 3-way handshake의 순서는?
- SYN → SYN+ACK → ACK
- ACK → SYN → FIN
- SYN → ACK → FIN
- FIN → ACK → FIN → ACK
정답 보기
1번 SYN → SYN+ACK → ACK
클라이언트가 SYN, 서버가 SYN+ACK, 클라이언트가 ACK를 보내면 연결이 성립(ESTABLISHED)된다. 끊을 때는 FIN과 ACK를 양쪽이 주고받는 4-way handshake.
Q2. TCP 연결을 즉시 강제로 끊을 때 쓰는 플래그는?
- RST
- SYN
- PSH
- FIN
정답 보기
1번 RST
RST(Reset)다. FIN은 정상 종료(4-way), SYN은 연결 요청, PSH는 데이터를 바로 위 계층으로 넘기라는 표시다.
Q3. TCP 헤더에 없는 필드는?
- TTL
- 윈도우 크기
- 순서 번호
- 확인 응답 번호
정답 보기
1번 TTL
TTL은 IP 헤더 필드다. TCP 헤더에는 순서 번호, 확인 응답 번호, 윈도우 크기, 플래그 등이 있다.
Q4. TCP를 쓰는 서비스가 아닌 것은?
- TFTP
- HTTP
- SMTP
- SSH
정답 보기
1번 TFTP
TFTP다. UDP 69번을 쓴다. HTTP(80), SMTP(25), SSH(22)는 TCP를 쓴다.
Q5. 3-way 핸드셰이크의 순서로 옳은 것은?
- SYN → SYN+ACK → ACK
- SYN → ACK → SYN+ACK
- FIN → ACK → SYN
- ACK → SYN → FIN
정답 보기
1번 SYN → SYN+ACK → ACK
클라이언트 SYN, 서버 SYN+ACK, 클라이언트 ACK.
Q6. TCP 헤더의 순서 번호(Sequence Number) 필드 크기는?
- 64비트
- 32비트
- 16비트
- 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 반쯤 열린 연결로 대기열을 채운다.