본문 바로가기

개발에 도움이 되는/Network

TCP 3-way handshake, 4-way handshake

- Handshake : 완전한 통신이 시작되기 전에 통신의 시작 부분에서 통신의 Protocol을 약속하는 정보를 서로 주고받는 자동화된 합의 과정

 

- 이 과정에서 쓰일 TCP Packet Flag 정보

  1. SYN (Synchronize Sqeunce Number) : 연결 설정의 의미를 지님 

  2. ACK (Acknowledgement) : 응답 확인의 의미를 지님

  3. FIN (Finish) : 세션 연결을 종료시킬 때 사용, 연결 해제의 의미를 지님

 

 

- 3-way handshake : 정확한 전송을 보장하기 위해 상대방과 사전에 세션을 수립하는 과정. TCP 연결은 3번의 과정을 통해 이루어짐.

 

  - 과정

    1. 클라이언트가 서버와 연결하려면 랜덤으로 생성된 Seq 값을 서버에게 보냄

 

    2. 서버는 이를 확인하고 받은 Seq + 1 값을 ACK에 저장하고, 클라이언트와 마찬가지로 랜덤으로 생성된 Seq 값을 클라이언트로 보냄

 

    3. 클라이언트는 이를 확인하고, 받은 Seq + 1 값을 ACK에 저장하고, 서버가 마지막으로 보낸 ACK 값을 Seq 값에 담아서 보냄

 

   이 이후에 전송되는 모든 Packet은 SYN bit는 Off이다. 그러므로 SYN bit가 켜져 있는 Packet은 HandShake 과정의 처음 두 Packet 밖에 없음

 

 

- 4-way handshake : TCP 연결을 해제하는 과정. 총 4번의 과정을 통해 이루어짐.

 

 

  - 과정

    1. 클라이언트가 서버와의 연결 종료를 위해 서버에 FIN packet을 보냄

 

    2. 서버는 이를 확인하고 받은 Seq + 1 값을 ACK에 저장하여 보내고, 전송할 데이터가 남아있으면 이어서 계속 전송하면서 자신의 통신이 끝날 때까지 기다림

 

    3. 서버가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 클라이언트에게 FIN packet을 보냄

    

    4. 클라이언트는 확인했다는 ACK를 보내고 연결을 해제

 

서버에서 FIN을 보낸 후에도 혹시 모를 지연된 데이터를 위해 바로 CLOSE를 하지 않고 TIME_WAIT 과정을 거침

240초 (default) 동안 혹시 모를 지연된 데이터를 받기 위해 대기 후 CLOSE

 

- 전체 흐름 요약

 

반응형