SH1R0_HACKER

TCP 연결 설정 및 해제 (3-way handshake, 4-way handshake) 본문

Forensic (STUDY)/네트워크

TCP 연결 설정 및 해제 (3-way handshake, 4-way handshake)

SH1R0_HACKER 2021. 2. 19. 14:42

[ 3-way handshake ]

TCP 통신을 이용해서 데이터를 전송하려면 네트워크 연결을 설정하는 과정이 필요합니다.

 

 

1. 클라이언트가 서버로 접속 요청 메시지(SYN)을 전송합니다.

포트 상태 : 클라이언트(CLOSED) , 서버(LISTEN)

 

2. 접속 요청(SYN)을 받은 서버가 클라이언트의 요청을 정상적으로 받았다는 대답(ACK)과 클라이언트의 포트를 개방해 달라는 요청(SYN)을 전송합니다. (SYN+ACK) 

포트 상태 : 클라이언트(SYN SENT), 서버(SYN RECEIVED)

 

3. 클라이언트는 서버가 보낸 SYN+ACK 를 받고 상태를 ESTABLISHED 로 변경한 후 포트를 개방해달라는 요청을 수락하는 ACK를 서버로 보냅니다.

포트 상태 : 클라이언트(ESTABLISHED), 서버(ESTABLISHED)

 

위 3단계의 과정이 정상적으로 이루어진다면 서버와 클라이언트 모두 연결이 성립(ESTABLISHED)되어 통신이 가능한 상태가 됩니다.


[ 4-way handshake ]

TCP 연결을 할 때 3 way handshake를 하는것과는 달리 연결을 종료할때는 4 way handshake를 합니다.

(서버측이 FIN 패킷을 먼저 전송할수도 있습니다.)

 

1. 접속 종료를 위해 클라이언트가 서버로 FIN 플래그를 전송합니다.

포트 상태 : 클라이언트 (FIN WAIT 1) , 서버 (ESTABLISHED)

 

2. FIN을 받은 서버는 확인했다는 의미의 메시지(ACK)를 클라이언트 측으로 전송하고, 포트에 연결되어있는 애플리케이션에 Close()를 요청한 후 자신의 통신이 끝날 때까지 기다립니다. 

포트 상태 : 클라이언트 (FIN WAIT 2), 서버 (CLOSE WAIT)

 

3. 서버에서 통신이 끝났다면 연결이 종료되었다고 클라이언트로 FIN 플래그를 전송합니다.

포트 상태 : 클라이언트 (FIN WAIT 2), 서버 (LAST_ACK)

 

4. FIN을 받은 클라이언트는 FIN을 받았다는 답장(ACK)를 서버측으로 전송합니다.

포트 상태 : 클라이언트 (TIME_WAIT), 서버 (CLOSED)

 

5. 일정시간이 경과된 후 클라이언트의 포트는 CLOSED 상태로 변합니다.

 

※ TIME_WAIT이 없다면 서버측에서 FIN 패킷을 보내기 전에 클라이언트로 보내는 패킷이 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황을 가정할 때 이 패킷은 손실됩니다. 따라서 클라이언트는 서버측에서 FIN 패킷을 수신하더라도 일정시간동안 세션을 남겨두는 과정을 거치는데, 이 과정을 TIME_WAIT 이라고 합니다.

'Forensic (STUDY) > 네트워크' 카테고리의 다른 글

포트 스캔 (Port Scan)  (0) 2021.02.24
TCP Header (TCP 헤더)  (0) 2021.01.05
Wireshark 사용법  (0) 2020.10.22