Halo World

TCP 3-way handshaking 연결과정 및 4-way handshaking 연결종료과정 본문

개발 지식/NETWORK

TCP 3-way handshaking 연결과정 및 4-way handshaking 연결종료과정

_Yeony 2017. 6. 1. 18:00

| TCP


 - TCP는 UDP와 달리 연결-지향 전송프로토콜로써 물리적 연결이 아닌 가상적 연결을 이용하여 통신

 - 신뢰성 있는 서비스를 제공

 - 패킷을 '세그먼트'라고 부름

    - 세그먼트는 20~60 바이트의 헤더와 응용 프로그램으로부터 온 데이터로 구성

    - 헤더는 선택항목이 없다면 20바이트이며, 선택항목이 있다면 60바이트까지임



| TCP 연결


 - 연결 설정, 데이터 전송 및 연결 종료의 3단계를 필요로하고 이를 3-way handshaking(세 방향 핸드셰이크)라고 부른다.




 > 3단계 연결 절차

  

  1) 클라이언트는 SYN 플래그만 설정되어있는 첫 번째 세그먼트인 SYN 세그먼트를 전송

    * 세그먼트는 순서번호들의 동기화를 위한 것

    (이때, SYN 세그먼트는 데이터를 운반할 수 없으나 순서번호 1개를 소비)


  2) 서버는 2개의 플래그 비트가 설정된 두 번째 세그먼트인 SYN+ACK 세그먼트를 전송

    (SYN+ACK 세그먼트는 데이터를 운반할 수 없으며 순서번호 1개 소비)


  3) 클라이언트가 세 번째 세그먼트를 전송 (ACK 세그먼트)

      ACK 플래그와 확인응답 번호 필드를 사용 (두 번째 세그먼트를 수신한 것에 대한 확인응답)

     (데이터를 운반하지 않는다면 ACK 세그먼트는 순서번호를 소비하지 않음) 





> 데이터 전송


  - 연결이 설정된 후에 양방향으로 데이터 전송이 발생

    (클라이언트와 서버 모두 데이터와 확인응답 전송 가능)

  - 클라이언트에 의해 보내진 데이터 세그먼트에는 PSH(push) 플래그가 설정되어있음

    (서버 TCP가 데이터가 수신되자마자 서버 프로세스에게 데이터를 전달하는 것을 알도록 하기 위해)

  - 서버로부터 온 세그먼트는 PSH 플래그를 설정하지 않음





> 연결 종료

 

 - 대부분 클라이언트가 종료하지만, 서버와 클라이언트 모두 종료 가능


 - 종료 방법

  1) 3-way handshaking

    - 클라이언트 TCP는 클라이언트 프로세스로부터 종료 명령을 수신한 후 FIN 플래그가 설정된 첫 번째 FIN 세그먼트를 전송

    - 수신한 서버 TCP는 상황에 대한 처리를 알리고 클라이언트로부터 온 FIN 세그먼트 수신에 대해 확인하기위해 ACK 세그먼트를 클라이언트에게 송신

    - 서버 TCP 서버 프로세스로부터 종료 명령을 수신한 후 FIN 플래그가 설정된 FIN 세그먼트를 전송

    - 클라이언트 TCP는 TCP 서버로부터 FIN 세그먼트 수신에 대한 확인으로 마지막 세그먼트인 ACK 세그먼트를 전송






2) 절반-폐쇄

   - TCP에서 데이터를 받고 있는 도중에 한쪽이 데이터 전송을 중단하는 것 (대부분 클라이언트에서 중단)

   - 클라이언트는 FIN 세그먼트를 전송함으로써 연결을 절반 폐쇄하고, 서버는 ACK 세그먼트를 송신함으로써 이를 받아들임

     -> 이 경우 클라이언트에서 서버로의 데이터 전송을 멈추지만, 서버는 여전히 데이터 송신 가능

     -> 서버가 데이터를 다 전송하고 FIN 세그먼트를 보낼 경우, 클라이언트는 ACK 세그먼트 전송 가능




 



* 그림 출처 : http://www.ktword.co.kr/abbr_view.php?nav=2&m_temp1=1901&id=995