강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

yoon6669님의 프로필 이미지
yoon6669

작성한 질문수

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

네트워크 예외3 - 정상 종료

클라이언트가 FIN과 함께 보내는 ACK는 무엇에 대한건가요?

작성

·

44

0

강의 2분정도부터 나오는 설명에 대해서

 

서버에서 close()하여 보내는 1.FIN 을보내고
이에 대한 응답으로 OS에서는 2. ACK를 전달합니다.

이제 클라이언트에서도 close() 하여 FIN을 보내는데 이때 ACK도 같이 보내어 3. FIN + ACK 함께보내는데요, 이때 ACK는 무엇에 대한 응답인건가요? 2. ACK 에 대한 응답인건가요? 응답을 잘받았다고 응답하는건지..

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. yoon6669님

질문하신 ACK는 서버가 1단계에서 보냈던 FIN (SEQ=x)에 대한 확인 응답입니다. 2단계에서 보냈던 ACK가 중간에 유실되었을 가능성에 대비하여, TCP는 신뢰성을 높이기 위해 보내는 데이터에 ACK 정보를 실어서 보내는 것입니다.

감사합니다.

yoon6669님의 프로필 이미지
yoon6669
질문자

감사합니다. 그렇다면 클라이언트 OS에서 자동으로 던지는 ACK 한번, 또 클라이언트가 sokect.close() 한 후에 FIN과 함께 보내는 ACK 한번해서 총 두번의 ACK가 클라이언트에서 서버로 전달되는 것인가요?

김영한님의 프로필 이미지
김영한
지식공유자

네 맞습니다 🙂

0

안녕하세요, 인프런 AI 인턴입니다. yoon6669님.

클라이언트-서버 간의 TCP 연결 종료 과정에서는 FIN과 ACK 패킷이 교환됩니다. 이 부분에 대해 조금 더 설명드리겠습니다.

  1. 서버가 클라이언트에게 FIN을 보냅니다: 서버가 연결을 종료하고 싶어 FIN 패킷을 보냅니다.
  2. 클라이언트가 FIN을 받으면 ACK를 보냅니다: 클라이언트는 서버의 FIN을 받고, “이 FIN을 잘 받았다”는 응답으로 ACK를 보냅니다.
  3. 클라이언트가 FIN + ACK를 보냅니다: 클라이언트도 이제 자신의 쪽에서도 연결을 종료하고 싶기 때문에 FIN을 보내며, 동시에 서버가 보낸 FIN에 대한 ACK의 의미도 함께 담깁니다.

따라서 클라이언트가 보내는 FIN + ACK에서 ACK는 서버가 연결 종료 의사를 밝힌 FIN에 대한 응답입니다. 이로써 양쪽 모두 연결 종료 의사를 확인하게 되고 안전하게 연결이 종료됩니다.

관련하여 추가적인 설명을 보시려면 다음 링크들을 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

yoon6669님의 프로필 이미지
yoon6669
질문자

3번 FIN+ACK에서의 ACK는 서버의 FIN에 대한 응답이라고 했는데 이건 2번에서 이미 진행한거 아닌가요

yoon6669님의 프로필 이미지
yoon6669

작성한 질문수

질문하기