연결된 클라이언트 혹은 서버 프로세스가 비정상 종료되면 발생하는 일
클라이언트 프로세스를 비정상 종료 시켰을 때
⇒ TCP 패킷 중 연결이 비정상적으로 종료(RST) 되었음
⇒ 클라이언트(64678 포트) 가 서버(25000 포트) 에 RST (Reset) 패킷을 보낸 상황
서버 프로세스를 비정상 종료 시켰을 때
⇒ 서버(25000 포트) 가 클라이언트(64678 포트) 에 RST (Reset) 패킷을 보낸 상황
프로세스 종료 시 OS 는 할당해준 자원을 강제 회수하며 여기에는 개방한 파일과 소켓이 포함된다.
프로세스 강제 종료보다 더 심각한 경우가 있을까?
쉽게 말해서 인터넷 통신을 사용 도중에 갑자기 LAN 케이블을 분리시키는 행위로 인해 서버와의 연결은 이미 끊어졌지만, 클라이언트는 연결이 되어 있다고 착각하는 경우와 유사하다.
⇒ Zombie Session 이 발생 !!
→ 대처 방법 :
“Heart Beat” : 서버에서는 주기적으로 모든 클라이언트에 간단한 응답을 요구하는 데이터를 보낸다.
→ 응답이 없을 경우, 서버는 해당 클라이언트의 연결을 종료시킨다.
⇒ 누가 먼저 우아하게 종료해야 하는가??
→ Server 의 모든 동작은 Passive 해야 하며, Active 한 동작은 Client 에서 발생되어야 한다!
→ Server 가 먼저 연결을 닫을 경우 Server 가 TIME_WAIT 상태에 빠지고, 이 때 Client 의 리소스를 제대로 회수할 수 없게 된다.
⇒ 즉, Client 가 먼저 종료되게 설계하여 TIME_WAIT 상태에 빠지게 하여, Server 가 리소스를 빠르게 회수할 수 있도록 해야 한다 !