← 질문 목록
#312깊이 0

TCP 연결은 어떤 상태를 지나 닫히는가?

네트워크심화프로토콜

양쪽이 각자 닫아야 해서 한 번에 안 끝난다. 먼저 닫는 쪽과 받는 쪽이 서로 다른 상태를 지난다.

  • 연결됨

    • FIN_WAIT_1

      먼저 닫는 쪽이 FIN을 보낸다

  • FIN_WAIT_1

    • FIN_WAIT_2

      상대가 그 FIN에 ACK만 보낸다

  • FIN_WAIT_2

    • TIME_WAIT

      상대도 다 보내고 FIN을 보낸다

  • TIME_WAIT

    • 닫힘

      2MSL을 기다린 뒤 없앤다

받는 쪽은 다른 길을 간다. FIN을 받으면 CLOSE_WAIT로 가서 아직 보낼 것을 마저 보낸다. 다 보내고 자기 FIN을 보내면 LAST_ACK가 되고, 마지막 ACK를 받으면 닫힌다.

CLOSE_WAIT가 쌓여 있으면 상대 탓이 아니다. 내 쪽 코드가 소켓을 안 닫고 있다는 뜻이다.

TIME_WAIT가 필요한 이유는 마지막 ACK가 유실될 수 있어서다. 그러면 상대가 FIN을 다시 보내는데, 그때 응답할 쪽이 남아 있어야 한다. 그 사이 늦게 도착한 옛 패킷이 새 연결로 섞이는 것도 막는다.

TIME_WAIT는 먼저 닫은 쪽에 생긴다. 서버에 쌓였다면 서버가 먼저 끊고 있다는 신호다. 양쪽이 동시에 닫으면 둘 다 생긴다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

TCP 연결은 어떤 상태를 지나 닫히는가?