개발 공부

(네트워크) TCP 3ways, 4ways handshake 본문

CS 스터디

(네트워크) TCP 3ways, 4ways handshake

아이셩짱셩 2021. 7. 7. 16:53

 

노션에서 보기

 

TCP(Transmission Control Protocol)란

 

 

  • TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
  • TCP는 전송 계층에 위치한다.
  • TCP는 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용된다.
  • TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 UDP(User Datagram Protocol)을 사용한다. 이것은 전달 확인 및 순차 보장 기능이 없는 대신 오버헤드가 작고 지연시간이 짧다는 장점이 있다.
  • 특징
    1. 연결지향적
    1. 3 way handshaking 과 4 way handshaking 작업으로 인한 신뢰성 보장
    1. 순서 보장
  • QUIC

 

Handshake

 

  • TCP는 3 way handshaking 과 4 way handshaking 작업으로 신뢰성을 보장한다.
  • 정확한 데이터 전송을 위해 서버-클라이언트 간의 세션을 먼저 수립하는 과정이다
  • 3-Way handshake는 TCP의 연결을 초기화하는 과정이다.
  • 4-Way handshake는 세션을 종료할 때 발생한다.
  • handshake 하는 동안 특정 비트를 활성화한 패킷을 주고 받는다.

 

패킷

  • Urg (Urgent) : 긴급 비트로 순서에 상관없이 먼저 송신됨
  • Ack (Acknowledgement) : 확인응답 비트
  • Psh (Push) : 버퍼가 차기를 기다리지 않고 바로 응용계층으로 전달, 대화형 트래픽에 사용 - Rst (Reset) : Establised된 회선에 강제 리셋 요청. 연결상의 문제가 있을 때 사용
  • Syn (Synchronize) : 송수신 간에 순서 번호의 동기화
  • Fin (Finish) : 연결 해제
  • TCP 헤더에는 Urg-Ack-Psh-Rst-Syn-Fin 6개의 flag bit 가 존재한다.
  • 보내고자하는 상태 플래그에 따라 1로 활성화 해서 보낸다.

 

3 way handshake

  1. 클라이언트가 서버에게 접속을 요청하는 SYN 패킷을 보낸다. 이때 클라이언트는 서버로부터 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다. 이때 seq number에 의미없는 난수를 보낸다.
  1. 서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN가 설정된 패킷을 보낸다. 이때 B서버는 SYN_RECEIVED 상태가 된다. 이때 서버는 ack number에 클라이언트의 seq number에 +1을 한 값을 보낸다.
  1. 클라이언트가 서버에게 ACK를 보내면 연결이 이루어지고 데이터를 전송한다. 이때 서버 상태는 ESTABLISHED 이다. 이 때 클라이언트는 ack number에 서버의 seq number에 +1을 한 값을 보낸다.

 

4 way handshake

  1. 클라이언트가 서버에게 연결을 종료하겠다는 FIN 패킷을 전송한다.
  1. 서버는 클라이언트에게 ACK 메시지를 보내고 자신의 통신이 끝날때까지 기다린다. 이때 서버는 TIME_WAIT 상태이다.
  1. 서버는 통신이 끝나면 클라이언트에게 FIN 패킷을 전송한다.
  1. 클라이언트가 서버에게 ACK 메시지를 보내고 통신이 종료된다.

 

패킷 교환 (payload) 절차

 

 

참고 :

https://www.thegeekstuff.com/2011/11/tcp-ip-fundamentals/

https://hwan-shell.tistory.com/271

https://ko.wikipedia.org/wiki/전송_제어_프로토콜

https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bloodsoda&logNo=220986271516

https://asfirstalways.tistory.com/356

http://www.ktword.co.kr/abbr_view.php?m_temp1=2437

https://rhyshan.com/278

https://www.cs.miami.edu/home/burt/learning/Csc524.032/notes/tcp_nutshell.html

https://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/

 

'CS 스터디' 카테고리의 다른 글

(데이터베이스) sql vs nosql  (0) 2021.07.19
(OS) 페이징  (1) 2021.06.28
Comments