본문 바로가기

사이버보안공부

3-Way Handshake & 4-Way Handshake 제대로 알고있니?

오늘은 이전 글에 이어서 4-Way Handshake를 덧붙여서 설명하고, 기존 내용에 좀 더 세부적으로 3,4-Way Handshake를 다뤄보려고 한다.

3-way Handshake 는 TCP에서 연결을 성립시키는 과정이다.

TCP Control Flag?

SYN( synchronization ) 연결 요청 플래그

통신 시작 시 세션을 연결하기 위한 플래그

 

ACK( Acknowledgement ) 응답 플래그

송신측으로부터 패킷을 잘 받았다는 걸 알려주기 위한 플래그

 

FIN( Finish ) 연결 종료 플래그

더 이상 전송할 데이터가 없고 세션 연결을 종료 시키겠다는 플래그

 

이외에도 RST, PSH, URG 등이 있다.

3-way Handshake?

3-Way Handshake는 위에서 말했다시피 TCP 통신을 이용하여 데이터를 전송하기 위해서

네트워크 연결을 설정하는 과정이다. (Connection Establish)

 

양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달을 시작하기 전에 한 쪽에서 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.

 

즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에, 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 말한다.

 

STEP1 (SYN)

클라이언트는 서버와 연결을 하기위해 SYN(요청) 패킷을 보낸다.

송신자가 최초로 데이터를 전송할 때 임의의 sequence number를 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다

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

Client : CLOSED → SYN_SENT

Server : LISTEN

STEP2 (SYN + ACK)

서버가 SYN(seq num)을 받고, 클라이언트에게 받았다는 신호인 ACK(seq num + 1)와 SYN(seq num2) 패킷을 보낸다.

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

Clent : CLOSED

Server : SYN_RECV

STEP3 (ACK)

클라이언트는 서버에게 ACK(seq num + 1)와 SYN(seq num2)를 받고 ACK(seq num2 + 1)

이때의 서버 상태가 ESTABLISHED 이다.

Client : ESTABLISHED

Server : SYN_RECV → ACK → ESTABLISHED

위와 같은 방식으로 통신하는것이 신뢰성있는 연결지향 프로토콜 TCP의 3-Way Handshake 방식이다.

 

이번애는 4-Way Handshake를 알아보자!

 

4-Way Handshake

4-Way Handshake는 TCP에서 연결을 종료하는 과정이다.

STEP 1(FIN, ACK)

클라이언트가 연결을 종료하겠다는 FIN, ACK플래그를 전송한다.

FIN, ACK를 동시에 보내는 이유는 세션을 유지하고, 패킷이 불필요하게 늘어나는 것을 방지하기 위해서이다.

위에서 FIN의 sequence number는 통신 과정 중 클라이언트가 마지막으로 받은 ACK의 sequence number로 지정된다.

ACK의 sequence number는 세션을 유지하므로서 클라이언트가 마지막으로 보낸 ACK의 sequence number로 지정된다.

Client : FIN_Wait1

Server : Close_Wait

STEP 2(ACK)

서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.

Client : FIN_Wait2

Server : Time_Wait

💡 Time_Wait은 패킷의 손실을 막기 위해 존재하는 상태이다.

STEP 3(FIN, ACK)

서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN, ACK플래그를 전송한다.

FIN은 위에서의 ACK에 대한 플래그이기에 sequence number 값을 그대로 가져오고,

ACK의 sequence number 값도 위 ACK의 값을 그대로 가져온다.

Client : Time_Wait

Server : Last_FIN

STEP 4(ACK)

클라이언트는 확인했다는 ACK 플래그를 보낸다.

이때 ACK의 sequence number는 FIN에 대한 ACK이므로 seq num2의 값에 1을 더해준다.

이렇게 세션을 종료하는 과정이 성립이 된다.

'사이버보안공부' 카테고리의 다른 글

Cookie wargame  (0) 2023.07.28
3-Way Handshake & 4-Way Handshake 실습  (1) 2023.07.26
3-Way Handshake  (0) 2023.07.24
OSPF실습  (0) 2023.07.22
VLAN  (0) 2023.07.21