네트워크

TCP 연결종료와 상태변화

개발정리 2024. 10. 29. 10:37

TCP 연결종료 과정은 4-way handshaking으로 연결할 때보다 조금 더 복잡하다. 

 

 

한 가지 대전제는 특별한 이유가 없다면 클라이언트 행동이 Active하다. 즉 연결을 맺고, 끊음이 모두 클라이언트이다. 

(서버가 연결을 끊을 경우는 특수한 경우)

 

 

 

1) 연결이 되어 있는 상태에서 클라리언트는 서버로 FIN + ACK 를 보내어 연결 끊을 것을 알린다.

2 ) 그리고 클라이언트는 ACK 가 오기를 기다린다. 

 

3) 이 후 서버도 FIN+ACK 를 보내고, 

4) ACK가 오기를 기다린다. 

 

이 과정이  4-way handshaking 이다. 여기서 중요한 상태 개념은 TIME_WAIT 상태이다. 서버로 부터 FIN+ACK 가 오면 클라이언트는 TIME_WAIT 상태가 된다. 이는 누군가 연결을 끊자고 한 것이고, 연결을 끊기 전에 발생하는 상태이다. 

 

 

TIME_WAIT 상태에서 일정 시간이 지나면 CLOSED가 되는데, 이 때 소켓이 회수된다.

(소켓은 유한 자원이기에 쓸 수 있는 개수 제한이 있다.)

 

 

...

 

 

TCP 상태변화 다이어그램은 아래와 같다.