본문 바로가기

CS(Computer Science)

CS Study 1주차 : TCP 3way, 4way handShake

TCP란?

연결 지향형 프로토콜로, 연속성 있는 데이터 패킷을 주고 받을 때 사용한다.

특징

  • 전송되는 데이터의 신뢰성  보장(흐름 제어, 혼잡 제어, 오류 제어)
  • 파일전송에 주로 사용
  • 가상 회선을 만들어 신뢰성 보장

TCP 3 way Handshake

연결하고자 하는 두 장치 간의 논리적 접속을 성립하기 위해서 사용하는 연결 확인 방식으로, 3번의 확인 과정을 거친다고 해서 3 way handshake라고 부른다.

 

 TCP 3-way HandShaking 역할

- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제 데이터 전달이 시작하기 전에 한쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.

- 양쪽 모두 상대편에 대한 초기 순차일련번호를 얻을 수 있도록 한다.

 

TCP의 3-way HandShakin 과정

과정을 그림으로 표현하면 위와 같은데 자세히 알아보기 전에 처음 보는 용어들이 많이 보인다. 정리를 하면 아래와 같다.

  • SYN(Synchronize Sequence Numbers) : 연결 확인을 위해 보내는 무작위의 숫자값
  • ACK(Acknowledgements) : Client 혹은 Server로부터 받은  SYN에 1을 더해 SYN을 잘 받았다는 ACK
  • ISN(Initial Sequence Numbers) : Client와 Server가 각각 처음으로 생성한 SYN

이제 과정을 자세하게 나누면 이름에 맞게 3단계로 진행이 된다.

 

1. Client가 Server에 접속을 요청하는 SYN 패킷을 보낸다.

이 때 Client는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태, Server는 Wait for Client 상태이다.

 

2. Server는 SYN 요청을 받고 Client에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고

Client가 다시 ACK로 응답하기를 기다린다. 이 때 Server는 SYN_RECEIVED 상태가 된다.

 

3. Client는 Server에게 ACK를 보내고 이후부터는 연결이 이루어지고 데이터가 오가게 되는 것이다.

이때의 Server 상태는 ESTABLISHED이다.

위와 같은 방식으로 통신하는 것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3-way handShake 방식이다.

 

TCP 4 way Handshake

4 way handshake는 3 way handshake와 반대로 가성 회선 연결을 해제할 때 주고받는 확인 작업이다. 4번의 확인 과정을 거친다.

 

TCP 4-way handshaking 과정

 

3 way handshake 과정에서 보지 못한 용어가 있다. 아래와 같은 의미를 가지고 있다.

  • FIN(Finish) : TCP 연결을 종료하겠다는 메세지

이제 과정을 자세하게 확인하면 아래와 같다.

 

1. Client가 연결을 종료하겠다는 FIN플래그를 전송한다. 이때 Client는 FIN-WAIT 상태가 된다.

 

2. Server는 FIN플래그를 받고, 일단 확인메세지 ACK를 보내고 자신의 통신이 끝날때까지 기다리는데

이 상태가 CLOSE-WAIT 상태다.

 

3. 연결을 종료할 준비가 되면, 연결해제를 위한 준비가 되었음을 알리기 위해 Client에게 FIN플래그를 전송한다.

이때 Server의 상태는 LAST-ACK이다.

 

4. Client는 해제준비가 되었다는 ACK를 확인했다는 메세지를 보낸다.

Client의 상태가 FIN-WAIT 에서 TIME-WAIT으로 변경된다.

 

TIME-WAIT은 혹시 모를 패킷 전송 실패에 대비하기 위해 존재하는 소캣이다.

만약 TIME-WAIT이 없으면 패킷의 손실이 발생하거나, 통신자 간 연결 해제가 제대로 이루어지지 않을 수 있기 때문에

중요하다.

 


참고 블로그

첫 번째 블로그

두 번째 블로그