CS/Network

TCP - handShake

whyWhale 2021. 5. 4.

3-way-handshake(연결 성립)


3-way-handshake

  1. 클라이언트는 서버에 접속 요청하는 SYN(A)를 보낸다.
  2. 서버는 클라이언트 요청인 SYN(A)를 받고 클라이언트의 요청을 수락한다는 ACK(A+1)와 SYN(B)를 보낸다.
  3. 클라이언트는 서버의 수락 응답인 ACK(B+1)을 보내면 연결이 된다 .(ESTABLISHED)

 

3 way handshake 요약

 

  1. A : 내 목소리 들려?(SYN)
  2. B : 응 들려(SYN+1) , 너도 내 목소리 들려?(ACK)
  3. A : 응 들려(ACK+1)

 

4-way-handshake(연결 해제)


 

4-way-handshake

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 보낸다.
  2. 서버는 칼라이언트의 FIN요청을 받고 확인메시지인 ACK를 보낸다.
    1. 그리고 나서 데이터를 모두 보낼 때 까지 잠깐 TIME OUT이 된다.
  3. 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
  4. 클라이언트는 FIN메시지를 확인했다는 ACK를 보낸다.
  5. 클라이언트의 ACK메시지를 받은 서버는 소켓 연결을 CLOSE 한다.

 

※ 약어

  • SYN(Synchronize Sequence Number)
  • ACK(Acknowlegement)

 

 

TCP Header


  • TCP Header에는 Code bit( Flag Bit)이라는 부분이 존재한다. 
  • 이 부분은 총 6bit로 이루어져 있다.
    • URG
    • ACK
    • PSH
    • RST
    • SYN
    • FIN 
  •  SYN 패킷의 경우  { 1 2 3 4 5 6 } 5번째가 1인 000010 이되고 ACK 경우 010000 이 된다.

왜 3 Way 인가

  • 클라이언트와 서버가 통신을 하기 전에 서로가 잘 전달하는지 체크하는 셈이다.
  • TCP Connection은 양방향성 이다.
  • 클라이언트가 서버에게 존재를 알리고 서버 또한 클라이언트에게 존재를 알려야 두 쪽에서 통신이 가능하다.
  • 그래서 2-Way로는 부족하다.

 

왜 랜덤한 SequectNumber로 보내는가.

  • Connection을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다.
  • 그러므로 두 통신 호스트가 사용하는 포트 번호 쌍을 사용하는 가능성이 존재한다. 
  • 서버 측에서 패킷을 보고 SYN 패킷을 구분하게 되는데 난수가 아닌 순차적인 number로 전송되면 이전의 Conection으로 부터 오는 패킷으로 인식할 수 있다.
  • 이러한 문제가 발생할 가능성을 줄이기 위해 난수로 ISN을 설정하는 것이다.

 

 

 

'CS > Network' 카테고리의 다른 글

DNS Round Robin  (0) 2021.05.14
HTTP와 HTTPS  (0) 2021.05.11
TCP 와 UDP  (0) 2021.05.05
HTTP의 GET과 POST  (0) 2021.05.03
[CS]_Network 핵심 요약 정리  (0) 2021.04.10

댓글