본문 바로가기
네트워크

TCP 3-way handshake, 4-way handshake

by kiwi_wiki 2025. 1. 22.

TCP 3-way handshake

TCP 연결을 설정할 때 클라이언트와 서버가 서로의 상태를 확인하고 신뢰성 있는 데이터 전송 경로를 확보하는 과정임 (연결 설정 과정)

동작 과정

  • 클라이언트 -> 서버 (SYN)
    • 클라이언트가 서버로 SYN(Synchronize) 패킷을 전송하여 연결을 요청
    • 이때 초기 시퀀스 번호(ISN)를 생성하여 전송
  • 서버 -> 클라이언트 (SYN+ACK)
    • 서버가 클라이언트의 요청을 수락하고 SYN+ACK 패킷을 전송
    • 서버도 자신의 초기 시퀀스 번호(ISN)를 생성
  • 클라이언트 -> 서버 (ACK)
    • 클라리언트가 서버로 ACK(Acknowledgment) 패킷을 전송하여 연결이 완료되었음을 확인
Client                     Server
  | -------- SYN -------->  |   Step 1: 연결 요청
  | <----- SYN + ACK ------ |   Step 2: 요청 수락 및 응답
  | -------- ACK -------->  |   Step 3: 연결 확립 완료

역할

  • 양쪽의 연결 가능 여부 확인
  • 초기 시퀀스 번호 교환
  • 데이터 전송 전 연결 경로 설정

발생할 수 있는 문제

  • SYN Flooding Attack: 악의적인 클라이언트가 다량의 SYN 패킷을 전송해 서버의 리소스를 고갈시키는 공격
  • 방어 방법: SYN Cookies 나 방화벽 설정으로 대처

TCP 4-way handshake

TCP 연결을 정상적으로 종료하기 위한 과정. 양쪽 모두 연결을 종료할 준비가 되었을 때 각자의 연결을 독립적으로 닫음

동작 과정

  • 클라이언트 -> 서버 (FIN)
    • 클라이언트가 FIN(Final) 패킷을 보내 연결을 종료하겠다고 요청
  • 서버 -> 클라이언트 (ACK)
    • 서버가 클라이언트의 FIN 패킷을 수신하고 ACK 패킷을 보내 종료 요청을 확인
  • 서버 -> 클라이언트 (FIN)
    • 서버도 자신의 작업을 마무리하고 FIN 패킷을 전송하여 연결을 닫겠다고 요청
  • 클라이언트 -> 서버 (ACK)
    • 클라이언트가 서버의 FIN 패킷을 수신하고 ACK 패킷을 보내 연결 종료를 확인
Client                     Server
  | -------- FIN -------->  |   Step 1: 연결 종료 요청
  | <-------- ACK --------  |   Step 2: 요청 수락
  | <-------- FIN --------  |   Step 3: 서버 종료 요청
  | -------- ACK -------->  |   Step 4: 종료 확인

왜 4단계 일까?

  • 연결 종료 시 데이터 송수신이 완전히 끝났는지 확인하기 위해 각 방향의 연결을 독립적으로 종료
  • TCP는 양방향 통신이기 때문에 클라이언트와 서버 모두 종료 절차를 따로 진행
  3-way handshake 4-way handshake
목적 연결 설정 연결 종료
단계 수 3단계 4단계
패킷 종류 SYN, SYN + ACK, ACK FIN, ACK, FIN, ACK
데이터 전송 여부 데이터 전송 전 데이터 전송 후

 

728x90
반응형

'네트워크' 카테고리의 다른 글

HTTP 1/2/3  (0) 2025.01.22
HTTP 헤더  (0) 2025.01.22
HTTP & HTTPS  (0) 2025.01.21
브라우저  (0) 2021.01.24
HTTP 란?  (0) 2021.01.18