SH1R0_HACKER
TCP 연결 설정 및 해제 (3-way handshake, 4-way handshake) 본문
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 |