(1) TIME_WAIT
: TIME_WAIT 상태란, 연결 종료 시 마지막 패킷 전송 실패를 대비하기 위한 상태.

○ TIME_WAIT 상태의 필요성


- Four-way handshaking 과정이 끝난 상태에서 A의 소켓이 바로 소멸되는 것이 아니라 TIME_WAIT 상태로 들어가게 된다.
- 반면 B는 바로 연결이 종료되고 소켓도 소멸된다. 즉, 먼저 연결종료 요청을 할 경우 TIME-WAIT 상태를 거쳐야 한다.
- B가 마지막 ACK를 받지 못할경우 다시 A에게 FIN을 보내게 되는데 A가 이미 종료 했다면 정상적인 종료가 이루어지지 못한다.
- 혹시 모를 패캣 전송 실패에 대비하기 위해 TIME_WAIT가 존재하는 것이다.

○ TIME_WAIT 상태의 문제점과 해결
- 실제 TIME_WAIT가 2~3분 정도 걸리기 때문에, 만약 서버가 재가동을 위해 TIME_WAIT에 머물러 있는 경우 해당 소켓을
  다시 사용할 수 없다.
- 그래서 TCP/IP는 TIME_WAIT에 빠져있는 소켓을 다시 사용할 수 있는 방법을 제공한다.
- 소켓 옵션의 옵션값에 SO_REUSEADDR 을 사용하여 TIME_WAIT 상태의 소켓도 바로 바인딩하여 사용할 수 있다.

※ 소켓옵션 관련 포스팅 자료
  2012/03/02 - [[ Socket ]/Theory] - 5. 소켓옵션 - setsockopt()

'T heory > Protocol' 카테고리의 다른 글

TCP 와 UDP 프로토콜 (서술형)  (1) 2012.03.08
TCP 와 UDP 프로토콜  (2) 2012.03.08
[TCP] TIME_WAIT  (0) 2012.03.02
RTP (Real-time Transport Protocol)  (0) 2012.02.22
FTP & TFTP 프로토콜  (0) 2011.12.15
[권고안] SIP 표준  (0) 2011.04.29
by Latte 하늘이도우사 2012. 3. 2. 15:31