TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 제공할 뿐만 아니라, 데이터 전송이 끝난 후 안전하게 연결을 종료하는 과정도 중요합니다. 이를 위해 TCP는 4-way 핸드셰이크(Four-Way Handshake) 를 사용하여 송신자와 수신자 간의 연결을 질서 있게 종료합니다.
이 과정은 네트워크 자원의 낭비를 방지하고, 불필요한 데이터 전송을 차단하여 안정적이고 신뢰성 있는 연결 종료를 보장합니다.
1. 4-way 핸드셰이크의 개념
TCP 연결을 종료하는 과정은 총 네 번의 패킷 교환을 통해 진행되며, 이는 각 측에서 연결 종료 요청과 확인 절차를 독립적으로 수행할 수 있도록 설계되었습니다.
📌 연결 종료 과정
FIN 전송 (클라이언트 → 서버)
- 데이터 전송을 끝낸 측(예: 클라이언트)이 FIN(마침, Finish) 플래그가 설정된 패킷을 전송하여 더 이상 데이터를 보내지 않겠다는 의사를 밝힙니다.
ACK 응답 (서버 → 클라이언트)
- 서버는 클라이언트의 FIN 요청을 받고 이를 수락했음을 알리는 ACK(확인 응답) 패킷을 보냅니다.
- 하지만 이 시점에서 서버는 여전히 데이터를 전송할 수 있으며, 연결이 완전히 종료되지는 않습니다.
FIN 전송 (서버 → 클라이언트)
- 서버도 모든 데이터 전송이 완료되면, 자신의 FIN 패킷을 클라이언트에게 전송하여 더 이상 데이터를 보내지 않겠다고 선언합니다.
ACK 응답 및 연결 종료 (클라이언트 → 서버)
- 마지막으로 클라이언트는 서버의 FIN 요청을 확인하는 ACK 패킷을 응답하며 연결이 완전히 종료됩니다.
- 이 과정이 완료되면 클라이언트와 서버 모두 연결이 끊어졌다는 사실을 인지하게 됩니다.
💡 네 번의 메시지가 오고 가기 때문에 "4-way"라는 이름이 붙었습니다.
2. 각 단계의 중요성
🔹 안전한 종료 보장
- 연결을 즉시 끊는 것이 아니라, 양측 모두 데이터 전송이 끝났음을 확인한 후 종료되도록 설계되어 있습니다.
- 이를 통해 데이터 손실 없이 모든 정보가 올바르게 송수신되었음을 보장할 수 있습니다.
🔹 상태 관리 및 자원 해제
- TCP는 상태 기반(Stateful) 프로토콜이므로, 각 연결이 어떤 상태에 있는지 명확히 구분해야 합니다.
- 4-way 핸드셰이크를 통해 연결이 명확히 종료됨을 확인한 후 네트워크 자원을 해제할 수 있습니다.
🔹 지연 종료(TIME_WAIT) 상태
- 클라이언트가 마지막 ACK를 보낸 후, 일정 시간 동안 TIME_WAIT 상태로 대기하게 됩니다.
- 이는 지연된 패킷이나 재전송 패킷이 네트워크에 남아 있을 가능성을 고려하여 안전한 종료를 보장하는 메커니즘입니다.
3. 실생활 적용 사례
✅ 예제 1: 웹 브라우저와 웹 서버 간의 연결 종료
- 사용자가 웹사이트에서 브라우저 창을 닫거나, 페이지를 이탈하면 브라우저는 더 이상 서버와 통신할 필요가 없습니다.
- 브라우저가 서버에 FIN 패킷을 보내면서 "나는 더 이상 데이터를 보내지 않겠다"라고 선언합니다.
- 서버는 ACK로 응답한 뒤, 자신의 데이터 전송이 끝나면 다시 FIN 패킷을 브라우저에 보냅니다.
- 브라우저는 마지막으로 ACK를 보내며 연결이 종료됩니다.
💡 이러한 과정을 거쳐야 브라우저와 서버 간의 연결이 깔끔하게 종료되고, 불필요한 네트워크 리소스 소모를 방지할 수 있습니다.
✅ 예제 2: 온라인 쇼핑몰에서 결제 후 연결 종료
- 사용자가 온라인 쇼핑몰에서 결제를 완료한 후 브라우저 창을 닫거나 홈 화면으로 돌아감.
- 서버와의 연결을 종료해야 하지만, 결제 데이터가 완전히 전송되었는지를 확인해야 함.
- 클라이언트(브라우저)는 FIN 패킷을 보내고, 서버는 ACK로 응답.
- 서버 역시 모든 결제 처리 과정을 마친 후 FIN을 보내고, 클라이언트가 최종 ACK를 전송하여 연결 종료.
💡 결제 시스템에서는 신뢰성이 중요한 만큼, 4-way 핸드셰이크를 통해 연결을 안전하게 종료함으로써 데이터 무결성을 보장합니다.
4. 3-way 핸드셰이크와의 비교
구분 | 3-way 핸드셰이크 | 4-way 핸드셰이크 |
---|---|---|
목적 | 연결을 설정하는 과정 | 연결을 안전하게 종료하는 과정 |
패킷 교환 횟수 | 3번 (SYN → SYN-ACK → ACK) | 4번 (FIN → ACK → FIN → ACK) |
상태 유지 | 연결 상태를 확립하여 데이터 전송 준비 | 데이터 전송이 끝난 후 연결을 종료하는 과정 |
주요 특징 | 서버와 클라이언트가 동시에 데이터 전송 가능 | 양측이 독립적으로 종료 요청을 할 수 있음 |
💡 3-way 핸드셰이크는 연결 설정을 위한 과정이며, 4-way 핸드셰이크는 연결 종료를 위한 과정입니다.
5. 결론
✅ TCP의 4-way 핸드셰이크는 네트워크 연결을 안전하게 종료하기 위한 필수 과정입니다.
✅ 각 단계에서 송신자와 수신자가 서로의 상태를 확인하고 응답하면서 신뢰성 있는 데이터 전송을 마무리합니다.
✅ TIME_WAIT 상태를 통해 패킷 손실을 방지하고, 네트워크 자원을 효율적으로 관리할 수 있습니다.
✅ 웹 브라우징, 결제 시스템, 데이터 전송 종료 등 다양한 네트워크 환경에서 필수적으로 사용됩니다.
'네트워크 > TCP' 카테고리의 다른 글
TCP 혼잡 제어: 혼잡 회피 (Congestion Avoidance) (0) | 2025.03.09 |
---|---|
TCP 연결 종료: 안전한 종료 과정 (0) | 2025.03.09 |
오류 제어: 재전송 메커니즘 (0) | 2025.03.09 |
오류 제어: 오류 감지 및 수정 (0) | 2025.03.09 |
데이터 전송: 흐름 제어 (0) | 2025.03.09 |