ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1035 / 1500
네트워크난이도 중하5분 답변 목표 · 보강본

TCP에서 상대가 FIN을 보냈습니다. 우리 쪽도 즉시 모든 송신을 중단해야 하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

TCP는 양방향 바이트 흐름이므로 한쪽의 FIN은 그 방향으로 더 보낼 데이터가 없다는 의미입니다. 반대 방향의 송신이 즉시 불가능해진다는 뜻은 아닙니다. 애플리케이션 프로토콜이 허용하는 half-close 의미를 확인해야 합니다.

동작 원리와 전제

상대의 송신 종료를 읽기 EOF로 관찰해도 아직 응답을 보낼 수 있습니다. 반대로 RST는 연결의 비정상 종료로 다른 처리가 필요합니다. 입력 EOF를 빈 메시지나 일시적 데이터 부재와 혼동하지 않습니다.

선택과 실패 처리

서버는 남은 응답을 보낸 뒤 적절한 방향을 shutdown하고 close할 수 있지만 무한히 기다리지 않습니다. TLS와 HTTP 같은 상위 프로토콜은 자체 종료·길이 규칙이 있어 TCP FIN만으로 메시지 완전성을 확정하지 않습니다.

구체적인 사례와 검증

파일 처리 프로토콜에서 클라이언트가 모든 입력을 보내고 write 방향을 닫은 뒤 서버의 계산 결과를 기다리는 흐름은 half-close를 활용할 수 있습니다. 서버가 FIN을 받자마자 소켓 전체를 닫으면 정상 응답을 보낼 기회를 잃습니다. 반대로 HTTP에서는 body 길이와 chunk 종료 등 상위 규칙이 있어 EOF를 무조건 정상 메시지 종료로 해석하면 잘린 요청을 성공 처리할 수 있습니다. 송신 완료도 로컬 버퍼 처리와 상대 애플리케이션의 수신·처리를 구분해야 합니다. 종료 중에 업무 효과가 이미 발생했다면 재접속한 client가 같은 논리 ID로 결과를 확인할 수 있어야 합니다.

요청 전송 뒤 half-close, 응답 중 단절, FIN 재전송·RST·부분 메시지를 시험합니다. 버퍼와 진행 중 I/O 수명은 실제 완료까지 유지합니다. 연결 종료 상태와 업무 요청 성공 여부는 별도로 기록하고 불확정 변경은 멱등 조회로 처리합니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: TCP는 양방향 바이트 흐름이므로 한쪽의 FIN은 그 방향으로 더 보낼 데이터가 없다는 의미입니다.
  • 선택 조건: 서버는 남은 응답을 보낸 뒤 적절한 방향을 shutdown하고 close할 수 있지만 무한히 기다리지 않습니다.
  • 검증 기준: 요청 전송 뒤 half-close, 응답 중 단절, FIN 재전송·RST·부분 메시지를 시험합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 상대의 FIN이 양방향 송수신과 업무 요청의 즉시 종료를 뜻한다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 스트림에서 일부 또는 여러 메시지가 한 번에 읽힐 때 길이·경계를 어떻게 복원하나요?
  • 종료된 TCP의 보호 상태와 앱의 열린 소켓 누수·실제 포트 고갈을 어떻게 구분하나요?
  • 취소 요청 뒤에도 완료가 올 수 있다면 버퍼와 작업 카운터를 언제 회수하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기