티스토리 뷰

Overview

TCP 프로토콜에서 3way Handshake 4way Handshake가 언제 발생하고, 어떻게 동작하는지 알아봅니다.

TCP 프로토콜이란?

네트워크 계층 중 전송 계층에서 사용하는 프로토콜로, 신뢰성있고 연결지향적인 프로토콜

  • 신뢰성 : 패킷 손실, 중복, 순서바뀜 등이 없도록 보장합니다.
  • 연결지향적 : 같은 전송계층의 UDP가 비연결성인 것과는 달리, 연결지향적인 프로토콜. 이와 관련되어 연결 관리를 위한 연결설정 및 연결해제가 필요한데 아래 연결방법에 대해 설명합니다.

TCP Control FLAG

TCP Header(출처 : http://www.ktword.co.kr)

FLAG설명
URG(Urgent)긴급 시 URG를 1로 설정함 (순서와 상관없이 먼저 송신됨)
ACK(Acknowledge)패킷을 받았다는 확인응답으로 1로 세팅 시 확인번호 유효함, 0으로 세팅 시 확인번호 미포함
PSH(Push)버퍼링 된 데이터를 상위 계층(어플리케이션 레이어)로 즉시 전달하기 위해 사용
RST(Reset)연결(ESTABLISHED) 된 세션을 강제로 리셋하기 위함. 비 정상적인 세션을 끊기 위해 사용되며 현재 접속된 곳과 즉시 연결을 끊고자 할때 사용되는 비트
SYN(Synchronize)TCP 연결설정을 초기화하기위한 시퀀스 비트
FIN(Finish)연결설정을 종료시키기 위한 비트

3Way-Handshake

클라이언트-서버 간 연결을 생성하기 위해, 3방향 핸드셰이크를 사용합니다.

3Way-Handshake(출처 : http://www.ktword.co.kr)

  • SYN: 클라이언트가 서버에게 SYN 메시지를 보낸다. 이 메시지에 포함된 시퀀스 번호는 클라이언트가 임의로 설정한 값
  • SYN+ACK: 서버가 클라이언트에게 SYN+ACK 메시지로 응답한다. 이때 서버의 상태는 SYN_RECEIVED 가 됩니다.
  • ACK: 클라이언트가 서버에게 수락확인 메세지인 ACK 플래그에 비트를 1로 보낸다. 이때 양단의 상태는 연결되었다는 상태인 ESTABLISHED 가 됩니다.

4Way-Handshake

클라이언트-서버 간 연결을 종료하기 위해, 4방향 핸드셰이크를 사용합니다.

4Way-Handshake(출처: http://www.ktword.co.kr)

  • FIN : 클라이언트가 서버에게 연결을 종료하기 위해 FIN 플래그를 보낸다. 이때 클라이언트의 상태는 FIN_WAIT 가 된다.
  • ACK: 서버가 클라이언트에게 연결 종료에 대한 확인으로 FIN+ACK 메시지로 응답한다. 자신의 통신이 끝날때까지 서버는 CLOSE_WAIT 상태가 된다.
  • FIN: 서버가 연결 종료할 준비가 되었으면, 서버가 클라이언트에게 FIN 플래그를 전송한다. 이때 서버의 상태는 LAST_ACK 상태가 되고, 이때 클라이언트 상태는 FIN_WAIT 에서 TIME_WAIT로 변경됩니다.
  • FIN+ACK: 클라이언트는 연결 종료 준비가 되었다는 응답패킷으로 ACK플래그를 전송합니다.

TIME-WAIT

클라이언트는 FIN플래그를 받은 후 세션을 바로 종료시키지 않고, 대기하게 되는데 이 상태를 TIME_WAIT 라고 합니다.
클라이언트가 세션을 즉시 종료하게 되면 지연 패킷 등 특정 상황에 대해 패킷이 유실을 방지해야합니다. 이를 대비하여 일정시간 세션을 열어놓고 대기하게 됩니다.

참고

TCP Control Flag TCP 제어 플래그
CLOSE_WAIT & TIME_WAIT 최종 분석

'Network > 네트워크' 카테고리의 다른 글

[네트워크] OSI 7 계층 (OSI 7 LAYER)  (0) 2016.03.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
Total
Today
Yesterday