상세 컨텐츠

본문 제목

220117 3-way handshake

카테고리 없음

by hunss 2023. 1. 17. 13:20

본문

3-way handshake란?

TCP/IP 프로토콜을 이용해서 통신하는 응용프로그램들이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정.

 

과정

Step1.

클라이언트는 서버에 접속을 요청하는 SYN패킷을 보냄.

이때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT상태, 서버는 Wait for Client 상태.

Step2.

서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송

클라이언트가 다시 ACK 응답하기를 기다림. 서버는 SYN_RECEIVED 상태

Step3.

클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오갈 수 있음.

서버는 ESTABLISHED상태.

역할

1. 양쪽 모두 데이터를 전송할 준비되었다는 보장 / 실제로 데이터 전달이 시작하기 전에 한쪽이 다른쪽이 준비되었다는 걸 알 수 있도록 함.

2. 양쪽 모두 상대편에 대한 초기 순차 일련번호를 얻을 수 있도록 함.

 

4-way handshake

4-way handshake는 세션을 종료하기 위한 절차임.

과정

Step1.

클라이언트가 연결을 종료하겠다는 FIN플래그 전송. 

Step2.

서버는 FIN플래그를 받고, 일단 확인 메세지 ACK를 보내고 자신의 통신이 끝날때까지 기다리는 상태.

Step3.

연결을 종료할 준비가 되면, 연결해지를 위한 준비가 되었음을 알리기 위해 클라이언트에게 FIN플래그 전송.

Step4.

클라이언트는 해지준비가 되었다는 ACK를 확인했다는 메세지. 이 때 FIN-WAIT 에서 TIME-WAIT로 변경.

 

TIME-WAIT란?

서버에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황이 발생할 수 있는데, 이러면 클라이언트에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실됨.

 

클라이언트는 이러한 현상에 대비해서 서버로부터 FIN을 수신해도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 TIME-WAIT 임. 일정 시간이 지나면, 세션을 만료하고 연결을 종료시키며 CLOSE상태로 변화됨.