3 Way-Handshake 란, 전송제어 프로토콜(TCP)에서 통신을 하는 장치간 서로 연결이 잘 되어있는지 확인하는 과정/방식이다. 더 쉽게 말하자면 송수신자(데이터를 주고 받는 두 사람이라고 생각한다면)사이에 연결을 확인하는 과정이다.
TCP 프로토콜은 연결지향적이기 때문에 데이터 전송 시 상대방이 내 신호를 받을 수 있는지 확인하고 전송을 하게 되는데 이때 보내는 곳에서 받는 곳이 신호를 잘 받을 수 있는 지를 확인하는 것이 3 way handshake 이다.
간단히 설명하자면 아래와 같다.
1단계 : (송신자가 수신자에게) 들림?
2단계 : (수신자가 송신자에게) ㅇㅇ, 너도 들림?
3단계 : (송신자가 수신자에게) ㅇㅇ, 나도 잘 들림 굿굿.
조금 더 자세히 설명해보자면 아래와 같다.
1단계 : 송신자가 수신자에게 SYN, 즉 Synchronize Sequence Number 라는 임의의 랜덤 숫자(Seq Number)가 포함되어있는 연결 요청을 보내게 된다.
2단계 : 수신자가 요청을 수락하고, 송신자에게도 SYN 연결요청을 전송한다. 이 때 수신자가 송신자에게 보내는 SYN에는 ACK, 즉 Acknowledgement number가 포함되어 있는데, 이 번호는 처음에 받은 SYN에 있는 Seq Number에 +1한 값을 가지게 된다. 이 ACK가 포함된 새로운 SYN을 송신자에게 전송함으로서 먼저 보내준 SYN은 잘 받았고, 보내주는 ACK가 담긴 새로운 SYN은 잘 받았는지 다시 물어보게 된다.
3단계 : 송신자가 ACK가 담긴 새로운 SYN을 잘 받았다는 의미로 또 다시 새로운 SYN을 송신자에게 보내게 되는데 이때도 마찬가지로 수신자로부터 받은 Acknowledgement number(ACK)에 +1한 값을 가지는 ACK를 보낼 SYN에 담아 같이 전송하게 된다. 이렇게 됨으로써 송신자와 수신자간의 연결이 확립되는것이다.