네트워크 정상 종료

sungs·2025년 8월 10일

자바

목록 보기
66/95

네트워크 정상 종료

강제 종료와 달리 절차를 거쳐 클라이언트와 서버가 정상적으로 종료가 된 경우를 말한다.

  1. 서버측에서 close 호출.
  2. 서버가 클라이언트 측에다가 fin 패킷을 보냄.
  3. 그러면 클라이언트가 ack 패킷을 보내 응답.
  4. 클라이언트가 close를 호출. 서버에다 fin + ack 패킷을 보냄.
  5. 서버는 응답으로 ack를 보냄.

이러한 절차를 걸쳐 둘 다 종료된다.

2번 과정에서 클라이언트가 fin 패킷을 받으면 더이상 읽을 게 없다고 판단하여 EOF을 반환한다. 이때 스트림 유형에 따라 반환하는 게 다르다.

DataInuputStream -> EOFException 예외를 터뜨려 연결을 종료한다. 데이터 유형이 여러 개라 특정한 값으로 반환할 수 없기 때문이다.

BufferedInputStream -> null을 반환.
read() -> -1을 반환.

여기서 중요한 것은 상대방이 Fin 패킷을 보냈다는 것은 연결을 끊겠다는 것이다. 그러므로 Fin 패킷을 받았으면 close를 호출해 반드시 연결을 끊어줘야 한다.

profile
앱 개발 공부 중

0개의 댓글