TCP(Transmission Controll Protocol)에서 신뢰성을 확보하기 위해 사용되는 두 가지 중요한 과정이 있는데 바로 3-Way Handshake와 4-Way Handshake입니다. 이 글에서 각 과정에 대해 알아보도록 하겠습니다.
3-Way Handshake (연결 설정)
3-Way Handshake는 TCP 연결을 설정하기 위해 클라이언트와 서버 간에 이루어지는 세 단계의 과정입니다.
- SYN (Synchronization)
- 클라이언트는 서버에 클라이언트의 ISN(Inital Sequence Numbers)을 담아 SYN을 보냅니다.
- SYN - ACK (Synchronization-Acknowledgment)
- 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냅니다.
- ACK (Acknowledgment)
- 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK를 서버에 보냅니다.
이렇게 3-Way Handshake 과정 이후 신뢰성이 구축되고 데이터 전송을 시작합니다.
4-Way Handshake (연결 해제)
4-Way Handshake는 TCP 연결을 종료하기 위해 클라이언트와 서버간에 이루어지는 네 단계의 과정입니다.
- 클라이언트가 연결을 종료하겠다는 요청(FIN)을 보냅니다.
- 서버는 클라이언트의 요청을 확인하고 ACK를 보냅니다.
- 서버에서 데이터를 모두 보내고 통신이 끝나면 클라이언트에 FIN을 보냅니다.
- 클라이언트는 FIN을 확인했다는 ACK를 보내고 서버는 CLOSED 상태가 됩니다.
- 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫힙니다. (TIME_WAIT)
용어 정리
- SYN(Synchronization) : 연결 요청 플래그
- ACK(Acknowledgement) : 응답 플래그
- ISN(Initail Sequence Numbers) : 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호
- FIN(Finish) : 연결 종료 플래그
- TIME_WAIT : 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태