TCP 연결이 끊길 때의 클라이언트, 서버, 자바 애플리케이션에서의 흐름
[질문 템플릿]
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 소켓 연결 종료 흐름에 대한 추가 자료
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
RequestHandler 버전 간 process() 파라미터 차이 질문
0
73
2
리플렉션 default
0
52
1
그럼 SOURCE나 CLASS는 어떤 경우에 사용하나요?
0
77
2
네트워크 프로그램 자원종료 Socket 정리 시 closed 사용 문의
0
100
2
FileInputStream의 transferTo 사용 시 Buffer 문의
0
64
1
오타 제보 드립니다
0
74
2
강좌 복습 팁이 있으신 분들 공유해주시면 감사하겠습니다.
0
106
1
16강 질문있습니다.
0
49
1
한글이 깨질 떄 어떻게 해야 하나요?
0
78
1
자원 정리시 에러가 발생 했을 때 메모리 상황 및 실무에서 로그 확인 방법
0
91
1
인텔리제이에서 네모(스탑버튼) 누르는 것의 의미
-1
67
1
강의 섹션 8: 네드워크 -프로그램 3부분 10:45 오타?
0
87
2
제대로 이해한게 맞나 궁금합니다
0
78
1
File,Files 강의 2번쨰 Files 07:30 에 tmep 파일들을 다 지운건가요 ?
0
63
1
/.well-known/appspecific/com.chrome.devtools.json 에러에 대해서
0
621
1
Socket 자원을 정리할때 stream 을 정리하지 않는 이유가 궁금합니다.
0
89
1
클라이언트 강제종료시 오류 메세지
0
106
2
고급 2편에는 퀴즈가 없네요?
0
98
1
55. 네트워크 프로그램5 - 자원정리2 질문
0
67
1
클라이언트가 FIN과 함께 보내는 ACK는 무엇에 대한건가요?
1
105
2
BufferedInputStream이 1바이트씩 조회해도 성능이 좋은 이유
0
79
1
오타제보
0
63
2
문자 집합 호환성 여부를 판단할 때
0
53
1
utf-8, char
0
53
1





