개발 (develop)

3-way Handshake ?

삽질그만 2020. 3. 31. 22:47

 

3-way Handshake란?

클라이언트와 서버간 데이터를 전송하기 위하여 양쪽 모두 데이터 전송 및 응답을 받을 준비가 되었는지 확인하는 절차이다.

 

TCP 통신 진행 순서 (1 ~ 3번까지가 3-way Handshake 이다)

STEP 1) Client --> Server : TCP SYN (접속 요청)
STEP 2) Client <-- Server : TCP SYN ACK (접속 요청 수락 응답)
STEP 3) Client --> Server : TCP ACK (접속 요청 수락 수신 응답)

STEP 4) Client --> Server : Data Send (데이터 전송)
STEP 5) Client --> Server : TCP FIN (연결 종료 요청)
STEP 6) Client <-- Server : TCP ACK (연결 종료 수신 응답) // TIME_WAIT 상태
STEP 7) Client <-- Server : TCP FIN (연결 종료 완료)
STEP 8) Client --> Server : TCP ACK (연결 종료 완료 응답)

[STEP 1] 
클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보내고, 서버로부터 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.

[STEP 2] 
서버는 SYN요청을 수신하고, 요청에 대한 ACK 와 SYN flag 가 설정된 응답 패킷을 클라이언트로 발송하고, 클라이언트가 다시 ACK으로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.

[STEP 3]
클라이언트는 서버에게 응답 ACK 패킷을 보낸다.
이후부터 데이터 전송이 이루어 지고, 이때의 서버 상태가 ESTABLISHED 이다.