TCP - 3 way hand shaking

2022. 12. 8. 00:17네트워크 및 통신

목차
1. TCP
  1.1. 3 way hand shaking
  1.2. 4 way hand shaking

 


1. TCP

 

4계층의 프로코톨(규약)이다. L4라고도 한다.

 

  • TCP에는 연결이라는 개념이 있다.
    • Connection, Session
  • 연결이 되기 때문에 상태라는 개념이 있다.
    • 로그인, 로그아웃
  • 연결은 순차적으로 진행된다. 

 

<그림 1> 1. 2. 3 순으로 파일 A를 쪼개서 보낸다.


1.1  3 way hand shaking

 

3-way-hand shaking이란, TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

 

그림으로 3 way hand shaking을 이해해보도록하자.

 

<그림 2> 3 way hand shaking

그림 2의 용어부터 한 번 정리해보자.

  • syn : synchronize sequence numbers의 약자이며, 클라이언트가 서버에게 연결을 요청할 때 먼저 보낸다.
  • ack : acknowledgment의 약자이며, 그대로 해석하면 승인이라는 뜻이된다.
  • 연결 : 데이터를 주고 받는 것을 의미한다.

과정을 순서대로 정리해보자면,

 

클라이언트가 syn 패킷을 서버에 보낸다. 이 때, 클라이언트는 syn을 보내고 syn/ack 응답을 기다리는 syn_sent 상태, 서버는 wait for client 상태이다. (가운데 맨위 화살표에 해당한다.)

 

서버는 syn요청을 받고 클라이언트에게 요청을 수락한다는 syn와 ack를 보내고, 클라이언트가 다시 응답하기를 기다린다.

이 상태를 syn_received 라고한다.(가운데 두 번째 화살표에 해당한다.)

 

마지막으로 클라이언트가 ack을 서버에게 보내고 연결된다. 이 떄부터 데이터가 오갈수 있게 된다. 이 때의 서버 상태를 established라고 한다.

 

이 과정을 3 way hand shaking이라고 한다.

 

 

 

3 way hand shaking의 역할을 정리해보자면,

 

  • TCP의 연결을 초기화 할 때 사용한다.
  • 서버, 클라이언트 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터가 전달되기 전에 준비됨을 알린다.
  • 서버와 클라이언트 모두 상대에 대한 초기 순차 일련번호를 얻을 수 있다.

 

 

1.2  4 way hand shaking

 

 

연결이 되었다면 연결을 끊기도 해야한다. 이를 4 way hand shaking이라고 한다.

 

<그림 3> 4 way hand shaking

과정을 정리해보자면,

 

클라이언트가 연결을 종료하겠다는 FIN을 전송한다. 이 상태를 FIN-Wait라고 한다.(아래에서 4번째)

 

서버는 FIN을 받고, 확인 메시지인 ack를 보내고 자신의 통신이 끝날때까지 기다린다. 이 상태를 서버의 close_wait이라고 한다.(아래에서 3번째)

 

서버는 연결을 종료할 때가 되면, 연결해지를 위한준비가 되었음을 알리기 위해 클라이언트에게 FIN을 전송한다. 이 때의 서버 상태를 last_ack 라고한다.(아래에서 2번쨰)

 

클라이언트는 해지준비가 되었다는 ack를 확인했다는 메시지를 보냈다. 클라이언트의 상태는 fin_wait에서 time_wait으로 바뀐다.

 

 

 

time_wait 상태가 있는 이유

만약 서버에서 FIN을 보내기 전에 전송한 패킷(데이터)가 세션이 종료된 후에 도착한다면, 데이터가 유실될 것이다.

이런 사태를 대비해서 time_wait이라는 상태로 패킷을 기다리는데 이를 time_wait이라고 하며, 이 시간(디폴트 240초)이 지나면 세션을 만료하고 연결을 종료시켜 close 상태로 변화한다.

 

 

마지막으로 각 부분 별로 용어와 설명을 추가한 그림이 있으니 참고하도록 하자.

<그림 4>

 

'네트워크 및 통신' 카테고리의 다른 글

RPC(Remote Procedure Call) 통신  (0) 2023.05.26
웹 소켓(Web Socket) 소개  (0) 2023.01.26
HTTP Message  (0) 2022.12.14
HTTP Protocol  (0) 2022.12.13
네트워크의 이해  (0) 2022.12.07