728x90
안녕하세요!
오늘은 TCP 연결 종료시의 상태를 한 번 살펴보려고 합니다.
대표적인 클라이언트와 서버 입장에서의 전이만 표현했습니다.
전체적인 TCP 상태 전이는 다른 포스팅에서 작성해보겠습니다.
아래 발그림을 같이 보겠습니다.
보통 Client가 연결 종료를 시작하는 Active Close를 하게 됩니다.
그렇다면 서버는 연결 종료 시작을 받는 Passive Close를 하게 됩니다.
클라이언트는 FIN을 보내고 ACK를 받으면서 FIN_WAIT_1 -> FIN_WAIT_2 상태로 들어가게 됩니다.
이 때, 서버로부터 FIN이 오기 전까지 클라이언트는 half-close 상태로 계속해서 데이터를 수신할 수 있습니다.
(물론 half-close를 할 수 있도록 프로그래밍 해야하며, half-close에 대해서도 한 번 포스팅 해봐야겠습니다.)
서버는 클라이언트에게 FIN을 보내고, 클라이언트는 이에 대한 응답인 ACK를 보내면서 서버는 종료가 됩니다.
이 때 클라이언트는 일정 시간동안 TIME_WAIT 상태를 갖게 됩니다.
일정 시간동안 TIME_WAIT 상태였던 클라이언트 소켓은 종료되고, 사라지게 됩니다.
(결과적으로 소켓 또한 File이기 때문에 CLOSED 상태로 표현하나 사실상 없어진다고 봐도 될 것 같습니다.)
TCP는 키워드도 많고 관련해서 이야기할 것이 참 많습니다.
다음 포스팅에서 뵙겠습니다!
728x90
'츄Log > 네트워크 프로그래밍 끄적' 카테고리의 다른 글
EchoServer/Client TCP 패킷 분석 - 1. 연결/연결 종료 (Wireshark) (0) | 2023.12.12 |
---|---|
TCP 소켓의 TIME_WAIT 상태는 왜 있는 것일까? (1) | 2023.12.08 |
Java NIO (New IO) (0) | 2023.11.29 |
Netty - 2. 핵심 구성 요소(채널, 채널파이프라인, 이벤트, 핸들러) (0) | 2023.11.29 |
Nagle's Alghorithm (네이글 알고리즘) (0) | 2023.11.27 |