* 번역자 : 신석영

* 작성일 : 2008년 4월 21일

* 원문    : http://msdn2.microsoft.com/en-us/library/ms819739.aspx


TCP TIME-WAIT Delay

TCP 연결이 닫히게 되면, 접속을 처리했던 소켓의 쌍은 TIME-WAIT이라 알려진 상태로 전환 된다.

이 상태가 되면 일정한 시간동안 "동일 프로토콜, 원본주소, 목적지 주소, 원본 포트, 목적지 포트"를

사용하는 다른 접속을 차단한다. 이 기능으로 인해 사용 가능한 포트의 부족으로 서비스 거부(DOS)가

일어날 수 있다. 왜냐하면, 네트웍 애플리케이션은 많은 외부 접속을 순식간에 처리하기 위해서

가능한 많은 포트가 재활용 될 수 있는 상태에 있어야 하지만, 상기 포트들이 시스템풀에 곧바로

되돌려지지 않기 때문이다.


이 시점이 되면, 애플리케이션은 양쪽 다 멈추게 되며, 포트가 사용 가능할 때까지 기다리게 되거나

에러와 함께 중단된다.


포트 가용성의 측면에서 본 TIME-WAIT의 효과

TIME-WAIT은 TCP 세그먼트들이 잘못 전달되거나 지연되어 전달되지 말았어야 할것들이

예상치 않게 전달되지 않도록 이것들은 통과시키기 위한 충분한 시간을 보장하기 위해 만들어 졌다.

이것은 같은 접속정보로 애플리케이션을 설정 한 것과는 관계가 없다.


RFC 793 (전송 제어 프로토콜 DAPRA 인터넷 프로그램 프로토콜) 규약에서는 소켓쌍이

MSL(Maximum Segment Lifetime)의 2배나 4분 동안 재사용 될 수 없도록 시간을

지정하고 있다. 이 시간 간격은 Windows Server 2003 TCP/IP의 기본 설정값이다. 많은 접속이

동시에 들어오거나, 연속으로 빠르게 들어오는 상황에는, 애플리케이션에서 포트를 원활하게

할당 할 수 있도록 이 값을 기본값 보다 더 작게 설정하는것이 가능하다.


TIME-WAIT 값 변경하기

Windows Server 2003 운영체제 상에서는 TCP/IP 는 TIME-WAIT의 행동을 제어하는 두가지 방법을 제공한다.:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 하위에 있는 TcpTimedWaitDelay 레지스트리 값은 기본설정을 변경 할 수 있다.  Windows Server 2003 TCP/IP에서는           최소 30초에서 최대 300초까지 설정 할 수 있으며, 대부분의 환경에서 문제를 일으키지 않는다.
  • 유저가 접근 가능한 생명주기가 짧은 포트들의 개수는 외부접속을 처리하기 위한 자원으로 사용되며, 이 값은KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 키의 하위에 있는 MaxUserPorts 레지스트리 값을 편집함으로서 조절이 가능하다. 기본적으로 애플리케이션에서 외부에 접속하기 위해 소켓을 요청하면 1024번에서 5000번 사이의 포트 번호가 제공된다. MaxUserPorts는 외부로 부터 들어오는 접속을 허용하기 위해 관리자가 선택한 가장 높은 포트 번호가 된다. 예를 들면 10,000(10진수)으로 이 값을 설정하게 되면 약 9000명의 유저가 접속을 할 수 있게된다. 이 개념에 대한 자세한 것은 RFC 793: Transmission Control Protocol DARPA Internet Program Protocol Specification(http://go.microsoft.com/?linkid=5311465)을 참고하라.

  • 비고 MaxUserPorts 값을 65535 로 지정하는것도 가능하지만, 본적으로 Windows Server 2003 에서는 외부의 접속을 처리하기위해 포트 번호를 5000번까지만 할당 해 놓았다. 만약 애플리케이션이 동시에 많은 네트웍 접속을 처리해야하거나 짧은 시간에 이를 처리하려면, 애플리케이션 개발자는 WSANOBUFS(10055)에러를 내지 않기 위해 MaxUserPorts 값을 늘려주고 TcpTimedWaitDelay 를 줄여 주어야 한다. (WSANOBUFS:  시스템 버퍼 공간이 부족하거나 큐가 가득차서 소켓 처리가 수행될 수 없을 때 발생하는 오류)

< 역자의 정리 >

* TIME-WAIT상태에서 포트에 도착한 패킷은 모두 무시된다.

* TIME-WAIT으로 인해서, 포트 재사용이 원활하지 못하면 일정시간동안 서비스 거부가 될 수 있다.

* 레지스트리에 있는 TcpTimedWaitDelay 값과 MaxUserPorts값을 조절하여 재사용성을 높이는것이 가능하다.

2008/11/07 09:08 2008/11/07 09:08

트랙백 주소 :: http://thinkit.or.kr/windows/trackback/1808

  1. Subject: thyroid-s

    Tracked from thyroid-s 2016/03/12 08:39  삭제

    Think IT ::

  2. Subject: My Blog

    Tracked from My Blog 2016/03/12 08:50  삭제

    Think IT ::