인프런 커뮤니티 질문&답변
TCP 연결이 끊길 때의 클라이언트, 서버, 자바 애플리케이션에서의 흐름
해결된 질문
작성
·
133
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
질문자 OS: mac
영상 기준 위치: 11분 30초 ~
강의록 기준 위치:
7. 네트워크 - 프로그램1.pdfp.29 ~질문 상황: 클라이언트 프로그램을 인텔리제이의 Stop 버튼으로 종료할 때의 흐름
안녕하세요. 위 상황에 대해서 제가 정리한 흐름이 맞는지 궁금해서 확인차 질문글 남깁니다.
1 ~ 4번의 전체적인 흐름이 맞는지와 2번의 자동적으로(반사적으로), 3번의 주체적으로 라는 표현이 적절한지 궁급합니다.
제가 생각한
자동적으로는: FIN을 받으면 내부적으로 곧바로 TCP 수신 버퍼가 닫힌다.제가 생각한
주체적으로는: if (FIN) then close TCP 수신 버퍼 와 같이 FIN을 조건문처럼 감지하고 수신 버퍼를 닫는다.
입니다.
제가 생각한 흐름
TCP 연결이 끊길 때 클라이언트 OS가 서버 OS에
FIN패킷을 보내고, 본인의 출력 스트림을 닫는다.서버 OS는
FIN패킷을 받으면 자동적으로(반사적으로) TCP 수신 버퍼가 닫힌다.서버 OS가 TCP 수신 버퍼가 닫힌 것을 주체적으로 인식해서 "
readUTF()에게 이 사실을 알려줘야지!" 라고 하면서readUTF()의 블로킹을 깨우는 동시에,EOF신호도 보낸다.readUTF()는 서버 OS에 의해 깨어나는 동시에EOF신호를 감지하게 되고 즉시EOFException을 던진다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. dev.rudevico님.
TCP 연결이 끊길 때의 흐름에 대해 잘 정리해주셨습니다. 질문해주신 사항에 대해 설명드리겠습니다.
TCP 연결이 끊길 때의 클라이언트:
- 클라이언트 프로그램에서 인텔리제이의 ‘Stop’ 버튼을 누르면, 클라이언트의 운영체제(OS)는 서버로
FIN패킷을 전송하게 됩니다. 이때, 클라이언트 측의 출력 스트림이 닫히며 연결 종료 절차가 시작됩니다.
- 클라이언트 프로그램에서 인텔리제이의 ‘Stop’ 버튼을 누르면, 클라이언트의 운영체제(OS)는 서버로
서버 OS의 반응:
- 서버 OS는
FIN패킷을 수신하면, 자동으로 TCP 수신 버퍼를 닫습니다. 여기서 “자동적으로(반사적으로)“라는 표현은 적절하며, 이는 운영체제의 TCP/IP 스택이 내부적으로 수행하는 작업을 의미합니다. TCP의 동작은 프로토콜에 의해서 정의된 반응이므로 자동적입니다.
- 서버 OS는
readUTF()의 동작:- 서버 OS가 TCP 수신 버퍼가 닫힌 것을 인식하고,
readUTF()메서드가 차단되어 있는 경우 이 블로킹을 풀어줍니다.EOFException을 발생시키기 위해EOF신호를 전달합니다. “주체적으로”라는 표현보다는 TCP 스택의 정상적인 동작이라고 보는 게 맞습니다.
- 서버 OS가 TCP 수신 버퍼가 닫힌 것을 인식하고,
readUTF()에서의 예외 처리:readUTF()는 OS의 신호를 통해 깨어나고EOF신호를 감지하게 됩니다. 이로 인해EOFException이 던져집니다. 이러한 예외는 프로그램이 리소스를 적절히 정리하고 종료할 수 있도록 해줍니다.
종합하자면, 모든 TCP/IP 스택의 흐름은 주로 자동적이고 프로토콜에 의해 정의된 동작에 따라 진행됩니다. 특히, OS 레벨에서의 작업은 프로그래머가 직접 제어하지 않으므로, “반사적”, “주체적”이라는 표현은 서로 바꾸어 사용할 수 있지만, 자동적으로 진행되는 부분이 많습니다.
관련된 자세한 내용을 참조하기 위해, 다음의 링크를 통해 다른 질문과 답변을 확인해 보세요:
- TCP 소켓 연결 종료 흐름에 대한 추가 자료
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





