본문 바로가기
지식창고

TCP 연결 설정과 종료 과정

by Justin입니다. 2025. 3. 30.

3-Way Handshake

3-Way Handshake는 클라이언트와 서버 간의 연결을 설정하기 위한 3단계 과정이다. 

 

1. 클라이언트 → 서버: SYN 패킷 (연결 요청)

  • 클라이언트는 연결을 요청하기 위해 SYN 플래그를 설정한 패킷을 서버로 보냄.
  • 클라이언트는 이 패킷에 자신의 시퀀스 번호(Seq=x)를 포함시킴.
Client → Server: [SYN, Seq=x]
  • Seq=x: 클라이언트가 설정한 시퀀스 넘버
  • SYN=1: 연결을 요청하는 플래그 설정

2. 서버 → 클라이언트: SYN-ACK 패킷 (응답)

  • 서버는 클라이언트의 SYN 요청을 받으면, SYN-ACK 패킷을 응답으로 보냄.
  • 이때 서버는 자신의 시퀀스 번호(Seq=y)와 클라이언트의 Seq 번호 + 1을 포함한 Ack=x+1 값을 설정함.
Server → Client: [SYN, ACK, Seq=y, Ack=x+1]
  • Seq=y: 서버의 시퀀스 넘버
  • Ack=x+1: 클라이언트의 시퀀스 넘버 + 1
  • SYN=1, ACK=1: 연결을 수락하며 응답

3.  클라이언트 → 서버: ACK 패킷 (연결 완료)

  • 클라이언트는 서버의 SYN-ACK 응답을 확인하고, ACK 패킷을 서버에 보내 연결을 완료함.
  • 클라이언트는 서버의 시퀀스 번호 + 1Ack 값으로 설정함.
Client → Server: [ACK, Seq=x+1, Ack=y+1]
  • Seq=x+1: 클라이언트의 시퀀스 넘버 + 1
  • Ack=y+1: 서버의 시퀀스 넘버 + 1
  • SYN=0, ACK=1: 연결 설정을 위한 최종 확인

 

 

 

 

4-Way Handshake

4-Way Handshake는 클라이언트와 서버 간의 연결을 종료하는 과정이다. 

1. 클라이언트 → 서버: FIN 패킷 (연결 종료 요청)

  • 클라이언트는 더 이상 데이터를 보내지 않기 위해 FIN 플래그가 설정된 패킷을 서버에 보냄.
  • 클라이언트는 이 패킷에 자신의 시퀀스 번호(Seq=x)를 포함시킴.
Client → Server: [FIN, Seq=x]
  • FIN=1: 연결 종료 요청
  • Seq=x: 클라이언트의 시퀀스 넘버

2. 서버 → 클라이언트: ACK 패킷 (확인 응답)

  • 서버는 클라이언트의 FIN 패킷을 받으면, ACK 패킷을 보냄으로써 종료 요청을 확인함.
  • 서버는 클라이언트의 Seq 번호 + 1을 포함한 Ack=x+1 값을 설정함.
Server → Client: [ACK, Ack=x+1]
  • Ack=x+1: 클라이언트의 시퀀스 넘버 + 1
  • FIN=0, ACK=1: 클라이언트의 종료 요청을 확인함.

3. 서버 → 클라이언트: FIN 패킷 (서버의 연결 종료 요청)

  • 서버는 이제 자신도 더 이상 보낼 데이터가 없으면, 자신의 FIN 패킷을 클라이언트에게 보냄.
  • 서버는 자신의 시퀀스 번호(Seq=y)를 포함시킴.
Server → Client: [FIN, Seq=y]
  • FIN=1: 서버의 종료 요청
  • Seq=y: 서버의 시퀀스 넘버

4. 클라이언트 → 서버: ACK 패킷 (최종 응답 및 종료)

  • 클라이언트는 서버의 FIN 요청을 받으면, ACK 패킷을 보내서 연결 종료를 최종적으로 확인함.
  • 클라이언트는 서버의 시퀀스 번호 + 1Ack 값으로 설정함.
Client → Server: [ACK, Ack=y+1]
  • Ack=y+1: 서버의 시퀀스 넘버 + 1

'지식창고' 카테고리의 다른 글

HTTP 요청 메세지 분석  (0) 2025.03.29
인코딩의 종류  (0) 2025.03.29