본문 바로가기
CS 지식

[TCP] 3-way / 4-way handShake

by chanfficial 2022. 11. 2.

TCP 는 장치들 사이에 논리적인 접속을 성립하기 위해 handShake 를 사용한다.


1. TCP 3-way handShake

: TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결하는데 필요한 프로세스이며, 데이터를 주고받기 전에 서버와 클라이언트가 확인 패킷을 3단계로 교환하여 연결을 맺는다.

 

 

TCP Flag

Flag 설명
SYN(연결 요청 플래그) - TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을    연결하는 데 사용되며 초기에 시퀀스 번호를 보낸다.
ACK(응답 플래그) - 상대방에게 패킷을 받았다는 것을 알려주는 패킷으로 다른 플래그와 같이 출력되기도 한다.
- 수신자가 송신자의 시퀀스 번호에 ACK를 보낸다. (보통 +1 하여 보냄)
- ACK 응답을 통해 보낸 패킷에 대한 성공 여부를 판단하여 재전송하거나 다음 패킷을 전송한다.

 

 

TCP의 3-way handShaking 과정

1) 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 전송한다.

    이때 클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.

 

2) 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN Flag 가 설정된 패킷을 발송한 다음,

    클라이언트가 다시 ACK 로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.

 

3) 클라이언트가 서버에게 ACK 를 보낸 다음 연결이 이루어지고 데이터가 오가게 된다.

    이때 서버는 ESTABLISHED 상태가 된다.

 

상태 설명
LISTEN 포트가 열려있어 연결을 기다리고 있는 상태
SYS_SENT SYN 을 보내서 연결을 요청한 상태
SYN_RECEIVED SYN 요청을 받아서 SYN+ACK 로 응답했으나 ACK 는 받지 못한 상태
ESTABLISHED 클라이언트와 서버가 연결된 상태

 

2. 4-way handShake

: TCP/IP 네트워크 환경에서 서버와 클라이언트 연결을 해제(세션 종료)하는데 필요한 프로세스

 

 

TCP Flag

Flag 설명
FIN(연결 종료 플래그) - 세션 연결을 종료시킬 때 사용되며 더이상 전송할 데이터가 없음을 나타낸다

 

 

TCP의 4-way handShaking 과정

1) 클라이언트에서 연결 종료를 위해 서버에 FIN 패킷을 보내고 FIN_WAIT1 상태가 된다. (서버에서 먼저 끊을 수도 있음)

 

2) 서버는 클라이언트에게 FIN 패킷을 받은 뒤 응답 패킷 ACK 를 보내고 CLOSE_WAIT 상태가 된다.

 

3) 서버의 통신이 끝나 연결을 종료할 준비가 되면 클라이언트에게 FIN 패킷을 보내고 LAST_WAIT 상태가 된다.

 

4) 클라이언트는 확인 패킷 ACK 를 보내고 TIME_WAIT 상태가 된다.

 

상태 설명
FIN_WAIT1 Close 를 호출한 측의 소켓이 FIN 을 보내고 진입하는 상태
CLOSE_WAIT Close 를 받으면 ACK 를 보내고 진입하는 상태
FIN_WAIT2 ACK 신호를 받은 소켓은 FIN_WAIT1 -> FIN_WAIT2 상태로 변경됨
LAST_WAIT Close 호출 후 FIN 을 보내고 진입하는 상태
TIME_WAIT Close 를 받고 ACK 를 보낸 다음 진입하는 상태
CLOSED 연결이 종료된 상태

'CS 지식' 카테고리의 다른 글

HTTP의 GET 과 POST  (0) 2022.11.12
HTTP 와 HTTPS  (0) 2022.11.12
대칭키와 공개키  (0) 2022.11.10
TCP와 UDP의 특징과 차이  (0) 2022.11.04
OSI 7계층이란 ?  (1) 2022.11.03