FIN_WAIT
Network/Network 2012. 3. 22. 09:55FIN_WAIT_2 란 무엇인가
웹서버등 통신관련 서버를 관리하다보면 TCP 연결에서 FIN_WAIT_2 라는 악명높은 상태를 종종 보게된다.
결론적으로는 이런 문제로 각 OS 벤더 (IBM AIX, HP HPUX 등등)에서는 RFC 규정을 무시하여, 이런 FIN_WAIT_2 상태를 없앨 수 있는 기능을 제공한다.
TCP에서 이런 상황이 발생하는 경우는 UDP와 달리 복잡한 신호를 주고 받기 때문이다.
00 Server-Client (흔한 경우는 www.abcd.com - 인터넷익스플로러)
01 Server : (send close, 데이터 전송 불가, 수신은 가능)
02 Server : FIN_WAIT_1(데이터를 다보냈으니 끊겠다 )
03 Client : CLOSE-WAIT (엥, 서버가 끊겠다네)
07 Client : LAST-ACK (이제 다 끊었어)
RFC 규정대로라면 재부팅하기 전에는 없어지지 않게 되서, 종국에는 서비스가 불가능할 수 있는 끔찍한 일이다.
결론적으로는 이런 문제로 각 OS 벤더 (IBM AIX, HP HPUX 등등)에서는 RFC 규정을 무시하여, 이런 FIN_WAIT_2 상태를 없앨 수 있는 기능을 제공한다.
TCP에서 이런 상황이 발생하는 경우는 UDP와 달리 복잡한 신호를 주고 받기 때문이다.
00 Server-Client (흔한 경우는 www.abcd.com - 인터넷익스플로러)
01 Server : (send close, 데이터 전송 불가, 수신은 가능)
02 Server : FIN_WAIT_1
03 Client : CLOSE-WAIT (엥, 서버가 끊겠다네)
04 Client : CLOSE-WAIT (알았어, 곧 끊고 알려줄께)
05 Server : FIN_WAIT_2 (아.. 조금만 기다리면 되겠네... )
06 Client : (send close, 어플리케이션에서 송수신 불가)07 Client : LAST-ACK
08 Server : TIME-WAIT (이제 나도 정리 해야지)
09 Server : TIME-WAIT (정리 다 했다, 너도 정리해)
10 Client : CLOSED (끝~~~)
11 Server : 2x MSL( Maximum Segment Life; 대기)
12 Server : CLOSED (나도 끝)
별거 아닌 것 같은 TCP 통신 끊는 과정이, 내부적으로는 꽤 복잡하다.
FIN_WAIT_2 문제는 가끔 server 쪽을 잘못 개발하기도 하지만, 대부분은 client 에서 LAST-ACK 을 보내지 않고 끊어진 경우로, 보통 bug때문이다.
서버 관리자가 client 를 고쳐 주기는 힘들기 때문에, OS 에서 RFC 규격외 기능으로 일정기간후에 끊어버리는 형식으로 대안을 제공하는 까닭이다.
출처 - http://bugcide.blogspot.com/2011/03/finwait2.html
출처 - http://bugcide.blogspot.com/2011/03/finwait2.html
'Network > Network' 카테고리의 다른 글
HTTP 상태 코드 (0) | 2013.10.16 |
---|---|
Multicast (UDP) (0) | 2012.04.06 |
inet_addr, inet_ntoa (0) | 2012.02.22 |
Multicast (2) IGMP (0) | 2012.01.15 |
Multicast (1) 기본 이론 (0) | 2012.01.15 |