CS/네트워크
TCP 3 Way-Handshake & 4 Way-Handshake
NineOne
2021. 4. 6. 01:39
TCP 3 Way-Handshake
- TCP/IP 프로토콜을 이용하여 통신을 진행할 때, 두 종단 간 정확한 데이터 전송을 보장하기 위해 연결을 설정하는 과정이다.
- 실제로 데이터 전달이 시작하기전에 한쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
- SYN : Synchronize Sequence Number
- ACK : Acknowledgement
- 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
- 서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYNflag가 설정된 패킷을 발송한다. 클라이언트가 다시 ACK으로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.
- 클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게된다. 이때의 B서버 상태가 ESTABLISHED 이다.
4 Way-Handshake
- 3 Way-Handshake는 TCP의 연결을 초기화 할 때 사용한다면, 4 Way-Handshake는 세션을 종료하기 위해 수행되는 절차이다.
- 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
- 서버는 클라이언트의 요청(FIN)에 대한 응답으로 ACK 패킷을 보낸다.
- 서버가 처리해야 할 모든 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
- 클라이언트는 확인했다는 응답으로 ACK 패킷을 보낸다.
- 클라이언트의 ACK 패킷을 받은 서버는 소켓 연결을 close 한다.
- 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 기다리는 과정을 거친다. (TIME_WAIT)
정리
- TCP는 연결지향적인 특성과 자체적으로 오류를 처리하며 순서서가 뒤바뀐 패킷을 교정해주는 기능이 더불어 주로 데이터의 신뢰도가 중요하다고 판단되어질 때 쓰인다.
- 신뢰도 확보가 중요하거나 용량이 큰 데이터(파일전송)를 전달해야 할 때, 실시간일 필요는 없을 때 활용된다.
- 하지만 데이터의 신뢰성 보다 전송 속도가 중요시되는 경우면 어떨까? 스트리밍 서비스 같은 경우 속도가 생명이다. 만약 계속해서 버퍼링이 걸린다면 사용자는 매우 불쾌할 것이다.
- UDP 프로토콜은 위와 같은 과정이 없이 단순히 데이터만을 전송하므로 속도가 빠르다. 스트리밍 서비스 같은경우 약간의 화질이나 음질의 손상이 있다 해도 끊기지 않는 서비스가 중요하다. 그래서 UDP방식을 사용한다.
출처
github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/3%20way%20handshake.md