3-Way-Handshake
3-Way-Handshake는 TCP 연결을 통해 데이터를 전송하기 위해 TCP 연결을 설정하는 과정이다.
SYN
(SYNchronize)
- 클라이언트 ➡️ 서버
- 클라이언트의 TCP 연결 요청 패킷
- 클라이언트는 서버에 TCP 연결을 요청하는 SYN 패킷을 전송한다.
SYN - ACK
- 클라이언트 ⬅️ 서버
- 서버의 TCP 연결 수락 패킷
- TCP 연결 요청(SYN 패킷)을 받은 서버는 클라이언트에 연결 요청을 수락한다고 응답한다.
ACK
(ACKnowledgement)
- 클라이언트 ➡️ 서버
- 클라이언트의 TCP 연결 확인 패킷
- 클라이언트는 서버의 SYN - ACK 응답을 수신하고, 이를 확인했다는 사실을 서버에 알려주기 위해 서버에 ACK 패킷을 전송한다.
3-Way-Handshake
과정을 통과하면 클라이언트와 서버 양쪽 모두 데이터 전송 준비를 마쳤다는 것을 보장할 수 있다.
4-Way-Handshake
4-Way-Handshake는 TCP 연결을 통해 데이터 송수신을 모두 마친 뒤 TCP 연결을 해제하는 과정이다.
FIN
(FINish)
- 클라이언트 ➡️ 서버
- 클라이언트의 TCP 연결 종료 요청 패킷
- 클라이언트가 서버에게 TCP 연결을 종료하겠다는 FIN 패킷을 전송한다.
ACK
(ACKnowledgement)
- 클라이언트 ⬅️ 서버
- 서버의 TCP 연결 종료 요청 확인 패킷
- 서버는 클라이언트의 FIN 패킷 수신하고, 이를 확인했다는 사실을 클라이언트에게 알려주기 위해 ACK 패킷을 전송한다.
- 서버는 ACK 패킷 전송 후 자신의 통신이 끝날 때까지 대기한다.
FIN
- 클라이언트 ⬅️ 서버
- 서버의 TCP 연결 종료 합의 패킷
- 서버는 자신의 통신이 끝난 뒤, TCP 연결 종료에 합의한다는 의미로 클라이언트에 FIN 패킷을 전송한다.
ACK
- 클라이언트 ➡️ 서버
- 클라이언트의 TCP 연결 종료 합의 확인 패킷
- 클라이언트는 서버의 FIN 패킷 응답을 수신하고, 이를 확인했다는 사실을 서버에게 알려주기 위해 서버에 ACK 패킷을 전송한다.