프로그래밍/CS

[네트워크] TCP 3-Way Handshake는 왜 필요할까?

노란구슬 2026. 6. 12. 22:20
728x90
반응형
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

 

728x90
반응형