3-way handshake & 4-way handshake
3-way handshake
- TCP/IP 프로토콜을 이용해서 통신을 할 때, 두 종단 간 정확한 데이터 전송 보장을 위해 연결을 설정하는 과정이다. 즉, 상대방 컴퓨터와 사전에 세션을 수립하는 과정이다.
- SYN : Synchronize Sequence Number
- ACK : Acknowledgement
연결 과정
- A 클라이언트가 B 서버에 접속을 요청하는
SYN(a)
패킷을 보낸다. SYN 을 보내고 A 클라이언트는 SYN/ACK 응답을 기다리는 SYN_SENT
상태, B 서버는 Wait for Client
상태가 된다.
- B 서버는 클라이언트의 요청인
SYN(a)
패킷에 대한 수락 응답으로 ACK(a+1)
패킷과 A 클라이언트에게 포트를 열어달라는 SYN(b)
패킷을 보내고 A 의 ACK 응답을 기다린다. 이 때 B 서버는 SYN_RECEIVED
상태가 된다.
- A 클라이언트는
ACK(a+1)
패킷과 SYN(b)
패킷을 받고 이에 대한 응답으로 ACK(b+1)
패킷을 보내며 연결이 성립된다. A와 B는 ESTABLISHED
상태가 된다.
4-way handshake
- TCP/IP 프로토콜에서는 4-way handshake 로 연결 설정을 해제한다.
연결 과정
- A 클라이언트는 연결을 종료하겠다는
FIN 플래그
를 전송한다. A 클라이언트는 FIN_WAIT
상태가 된다.
- B 서버는
FIN 플래그
를 받고 확인 메세지 ACK 를 보내고 자신의 통신이 끝날 때까지 기다리는데 이 상태가 B서버의 CLOSE_WAIT
상태이다.
- 연결을 종료할 준비가 되면 연결 해지를 위한 준비가 되었음을 알리는
FIN 플래그
를 A 클라이언트에게 전송한다. 이 때 B 서버는 LAST_ACK
상태가 된다.
- A 클라이언트는 해지 준비가 되었다는 ACK를 확인했다는 메세지를 보낸다. A 클라이언트의 상태는
FIN_WAIT
-> TIME_WAIT
으로 변경된다. 이 상태는 클라이언트가 서버에게 아직 받지 못한 데이터를 기다리는 상태이다.