TCP 3-Way Handshake는 왜 필요할까요?
https://sunny-sideup.tistory.com/54
저번 질문에 대해서 생각하다보면 당연하게 들 수 있는 질문일 것 같아, 함께 준비해보았습니다.
💡 실전 핵심 답변
TCP는 연결 지향 프로토콜이기 때문에 데이터를 보내기 전에 먼저 연결을 수립해야 합니다. 이때 사용하는 과정이 3-Way Handshake입니다.
클라이언트가 SYN을 보내 연결을 요청하고, 서버가 SYN-ACK로 요청을 수락하면서 자신의 초기 순서 번호를 알려줍니다. 마지막으로 클라이언트가 ACK를 보내 서버의 응답을 확인하면 양쪽 모두 연결이 준비되었다고 판단합니다.
이 과정이 필요한 이유는 양쪽이 서로 송수신 가능한 상태인지 확인하고, 데이터의 순서 보장과 재전송에 필요한 초기 Sequence Number를 동기화하기 위해서입니다.
👀 TCP는 무엇이고, UDP는 무엇일까요?
TCP는 연결을 먼저 맺고, 데이터의 순서와 도착을 보장하는 신뢰성 중심 프로토콜입니다.
UDP는 연결 없이 바로 보내며, 순서나 도착을 보장하지 않는 대신 빠르고 단순한 프로토콜입니다.
둘 다 전송 계층 프로토콜이며, TCP는 정확성이 중요할 때, UDP는 실시간성이 중요할 때 주로 사용됩니다.
| 비교 항목 | TCP | UDP |
| 연결 방식 | 연결 지향 | 비연결형 |
| 연결 수립 | 3-Way Handshake 필요 | 연결 수립 없음 |
| 신뢰성 | 높음 | 낮음 |
| 데이터 도착 보장 | 보장 | 보장하지 않음 |
| 순서 보장 | 보장 | 보장하지 않음 |
| 재전송 | 지원 | 지원하지 않음 |
| 속도 | 상대적으로 느림 | 상대적으로 빠름 |
| 오버헤드 | 큼 | 작음 |
| 데이터 단위 | Byte Stream | Datagram |
| 주요 사용 예 | 웹 통신, 파일 전송, 이메일, 로그인/결제 | DNS, 실시간 스트리밍, VoIP, 온라인 게임 |
| 핵심 키워드 | 정확성, 신뢰성, 순서 보장 | 속도, 단순함, 실시간성 |
❓ TCP는 왜 연결을 먼저 맺어야 할까요?
TCP는 데이터를 보내기 전에 다음을 먼저 확인합니다.
1. 클라이언트가 서버에게 데이터를 보낼 수 있는가?
2. 서버가 클라이언트에게 데이터를 보낼 수 있는가?
3. 양쪽이 어떤 순서 번호부터 데이터를 주고받을 것인가?
4. 연결을 위한 기본 상태를 서로 알고 있는가?
TCP는 신뢰성 있는 전송을 제공하기 위해 데이터의 순서, 손실 여부, 재전송 등을 관리합니다.
🤝 3-Way Handshake 과정
Client → Server : SYN
Server → Client : SYN + ACK
Client → Server : ACK

1단계: SYN
클라이언트가 서버에게 연결을 요청합니다.
Client → Server
SYN
Seq = x
의미는 다음과 같습니다.
“서버야, 나 너와 TCP 연결을 시작하고 싶어.
나는 sequence number를 x부터 사용할게.”
여기서 Seq = x는 클라이언트가 선택한 초기 Sequence Number, 즉 ISN입니다.
cf) TCP에서 Sequence Number와 Acknowledgment Number는 데이터 순서 보장, 손실 감지, 재전송에 핵심적으로 사용됩니다.
2단계: SYN + ACK
서버는 클라이언트의 요청을 받고 응답합니다.
Server → Client
SYN + ACK
Seq = y
Ack = x + 1
의미는 다음과 같습니다.
“좋아, 네 요청을 받았어.
네가 보낸 x도 확인했으니 다음에는 x+1부터 보내.
그리고 나는 sequence number를 y부터 사용할게.”
여기서 중요한 점은 서버도 자신의 초기 Sequence Number를 클라이언트에게 알려준다는 것입니다.
3단계: ACK
클라이언트가 서버의 응답을 확인합니다.
Client → Server
ACK
Ack = y + 1
의미는 다음과 같습니다.
“서버가 보낸 y를 확인했어.
이제 다음 데이터는 y+1부터 받으면 돼.”
이 단계가 끝나면 클라이언트와 서버는 TCP 연결이 수립되었다고 판단하고, 실제 데이터를 주고받을 수 있습니다.
연결 수립 완료
→ HTTP 요청 같은 실제 데이터 전송 가능
추가 문의 사항
Q. TCP 연결이 끝난 뒤 바로 HTTP 요청을 보내나요?
HTTP라면 TCP 연결 후 바로 HTTP 요청을 보낼 수 있습니다.
하지만 HTTPS라면 TCP 연결 이후에 TLS Handshake가 추가로 필요합니다.
HTTP:
TCP Handshake → HTTP 요청
HTTPS:
TCP Handshake → TLS Handshake → HTTP 요청
Q. SYN Flooding 공격은 무엇인가요?
SYN Flooding은 공격자가 대량의 SYN 요청을 보내고 마지막 ACK를 보내지 않아, 서버에 많은 half-open connection을 만들게 하는 공격입니다.
서버는 SYN을 받으면 SYN-ACK를 보내고 일정 시간 연결 상태를 유지해야 합니다. 공격자가 이 과정을 대량으로 반복하면 서버의 연결 대기 자원이 고갈될 수 있습니다.
공격자 → 서버: SYN
서버 → 공격자: SYN+ACK
공격자: ACK 안 보냄
서버: 연결 대기 상태 유지
참고자료:
https://developer.mozilla.org/ko/docs/Glossary/TCP_handshake?utm_source=chatgpt.com
TCP 핸드셰이크 (TCP handshake) - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN
developer.mozilla.org
http://www.ktword.co.kr/test/view/view.php?no=1901
TCP 연결 설정
TCP 3-way Handshaking TCP 연결 설정, TCP의 3단계 핸드세이킹(2025-07-12)SYN 세그먼트, SYN+ACK 세그먼트, ACK 세그먼트, TCP 3-way Handshake, TCP three way Handshake, TCP 3way Handshake 1. TCP 연결 3단계 핸드세이킹 ㅇ TC
www.ktword.co.kr
https://networkwalks.com/tcp-3-way-handshake-process/
TCP 3-way Handshake Process - Networkwalks Academy
TCP uses a process called 3-way Handshake which is very important for Cybersecurity & Ethical HACKlNG. This article explains this in detail.
networkwalks.com
'프로그래밍 > CS' 카테고리의 다른 글
| [데이터베이스] RDMS와 NoSQL의 차이는 무엇인가요? (0) | 2026.06.16 |
|---|---|
| [네트워크] 웹 브라우저에 www.google.com 입력하면 일어나는 일 (0) | 2026.06.11 |