[Network] TCP 3-way, 4-way Handshake

nnnyeong·2021년 7월 1일
0

Network

목록 보기
2/6

3일만의 네트워크 포스팅이다
오늘은 TCP 에서 연결을 생성하고 해제하는 과정인 3-way handshake, 4-way handshake 에 대해 공부해 보았다

역시나 세부적인 내용까지 정리되어 있는 글을 찾기가 참 어려웠다,,
CS 공부를 겉핥기 하지 않고 제대로 하는게 참 쉽지 않은 것 같다..!



연결 생성, 데이터 전달, 연결 해제

TCP 는 신뢰성 있는 데이터 전달 시에 사용되는 프로토콜이다.
데이터가 유실되어서는 안되고, 속도가 다소 느리더라도 안전하게 데이터를 전달하고자 한다.

자연스레 아무 때에나 데이터를 전달하지 않고
연결이 송신자와 수신자 사이에 연결이 생성되어있는지 확인 후 데이터를 보내고, 데이터를 다 보낸 이후에 연결을 해제해도 되는지 송신자 수신자가 서로 확인 후 안전하게 연결을 해제하는 방식으로 통신이 진행된다.

이 중, 수신자 송신자가 연결을 생성하는 과정이 3-way Handshake, 데이터를 주고 받은 뒤 연결을 해제하는 과정이 4-way Handshake 이다.




3-way Handshake

3-way Handshake 는 데이터 전송 전에 송신자와 수신자 사이에 세션을 수립하는 과정이다

Step 1

클라이언트는 서버에 연결을 요청하는 SYN 패킷을 보낸 후 서버의 응답을 기다리며 SYN_SENT 상태를 유지하고, 서버는 클라이언트의 요청을 받기 전엔 Wait for Cleint 상태를 유지한다.

Step 2

서버는 클라이언트가 보낸 SYN 패킷을 받고 SYN_RECEIVED 상태가 되고 SYN+ACK(요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷) 를 보내 응답한다.

Step 3

서버의 응답을 받은 클라이언트는 다시 서버에 ACK 패킷으로 응답하고 이를 서버가 받은 후 부터 세션이 생성되어 (Established) 연결이 완료 된다.


3 단계를 거치면서 클라이언트와 서버 모두 데이터를 전송하고 받을 준비가 되었다는 것을 보장하여 안전한 데이터 전송이 이루어 지게 된다.




4-way Handshake

3-way handshake 를 통해 안전하게 세션을 생성하고, 데이터를 주고 받은 뒤 연결을 해제 하고자 할 때, 4-way Handshake 과정이 이루어 지게 된다

Step 1

클라이언트는 연결을 종료하고자 서버에 FIN 플래그를 보내고 FIN_WAIT 상태에 들어간다.

Step 2

서버는 클라이언트로 부터 FIN 플래그를 받은 뒤 ACK 패킷을 보낸 후 데이터를 모두 보낼 때 까지 잠시 TIME_OUT 이 된다. 이 때 서버는 ClOSE_WAIT 상태이다.

Step 3

서버가 연결을 종료할 준비가 되면, 연결을 해제할 준비가 되었다는 FIN 플래그를 클라이언트에 전송하고, 서버는 LAST_ACK 상태가 된다.

Step 4

클라이언트는 서버에 ACK를 보내 응답하고 클라이언트의 상태는 FIN_WAIT 에서 TIME-WAIT 으로 변경된다. 클라이언트의 ACK 응답을 받은 서버는 연결을 해제한다.
이 때, 클라이언트는 ACK 를 보낸 이후 일정 시간동안 기다리게 되는데, 아직 서버에서 받지 못한 데이터가 연결이 해제되어 유실되는 경우를 대비해 잉여 패킷을 기다리는 TIME_WAIT 상태를 일정 시간 유지하게 된다.



참고 자료 1
참고 자료 2

profile
주니어 개발자까지 ☄️☄️

0개의 댓글