TCP CLOSE WAIT?
TCP Close Wait는 TCP/IP 프로토콜에서 일어나는 상태 중 하나입니다. 이 상태는 TCP 연결이 종료되었음을 나타내며, 상대방에서 종료 요청을 보낸 후 자신이 받은 데이터를 모두 처리하기를 기다리는 상태입니다.
보통 클라이언트 측에서 서버와의 연결을 종료하는 경우, 클라이언트는 서버로부터 FIN 메시지를 받습니다. 그러면 클라이언트는 ACK 메시지를 서버로 보내고, 더 이상 데이터를 보내지 않는 것으로 판단하여 연결을 종료합니다.
그러나 서버는 아직 클라이언트로부터 모든 데이터를 받지 못한 경우가 있을 수 있습니다. 이 경우, 서버는 받지 못한 데이터를 모두 처리할 때까지 Close Wait 상태에 머무릅니다. 이러한 상태에서 더 이상 데이터가 전송되지 않으면, 서버는 클라이언트에게 FIN 메시지를 보내고, ACK 메시지를 받아 연결을 완전히 종료합니다.
일반적으로, Close Wait 상태가 오래 지속되는 경우, 이는 서버에서 처리되지 않은 데이터가 많은 것을 의미할 수 있으므로, 이를 확인해 보는 것이 좋습니다. 따라서, 이 상태를 확인하고 분석하는 것이 중요합니다.
점검방법
TCP Close Wait 알람이 발생한 경우, 서버에서 처리되지 않은 데이터가 많을 가능성이 있으므로, 해당 상태를 확인하고 분석하는 것이 중요합니다. 이를 위해서는 다음과 같은 작업을 수행할 수 있습니다.
- 네트워크 연결 분석: Close Wait 상태가 발생한 서버의 IP 주소와 포트 번호를 확인하여, 해당 연결이 어디서부터 시작되었는지, 어디로 연결되어 있는지 등을 확인합니다. 이를 위해 네트워크 분석 도구를 사용할 수 있습니다.
- 시스템 로그 분석: 서버의 시스템 로그를 확인하여, 해당 연결에 대한 오류 메시지나 경고 메시지 등이 있는지 확인합니다. 이를 통해 서버에서 발생한 문제를 추적할 수 있습니다.
- 서버 프로세스 확인: Close Wait 상태가 발생한 서버에서 어떤 프로세스가 실행 중인지 확인합니다. 해당 프로세스가 서비스 중인 애플리케이션이라면, 해당 애플리케이션에서 어떤 작업을 수행하고 있는지, 어떤 데이터를 처리하고 있는지 등을 파악합니다.
- 리소스 사용량 확인: Close Wait 상태가 발생한 서버의 리소스 사용량을 확인합니다. CPU, 메모리, 디스크 등의 자원을 사용하는데 이상이 있는지 확인하고, 필요한 경우 해당 자원을 확보합니다.
- 네트워크 장애 대응: Close Wait 상태가 발생한 경우, 네트워크 장애가 원인일 수 있으므로, 해당 장애를 대응합니다. 예를 들어, 네트워크 연결 상태를 확인하고, 장비를 교체하거나, 재시작하는 등의 작업을 수행할 수 있습니다.
- 보안 대응: Close Wait 상태가 발생한 경우, 보안 문제가 원인일 수 있으므로, 보안 대응을 수행합니다. 예를 들어, 방화벽 설정을 확인하거나, 악성코드 검사를 수행하는 등의 작업을 수행할 수 있습니다.
위와 같은 작업을 수행하여 Close Wait 상태가 발생한 원인을 파악하고 대응하는 것이 중요합니다. 이를 통해 서버의 안정성을 유지하고, 서비스 장애를 방지할 수 있습니다.
CLOSE WAIT 상태 확인 명령어
- 리눅스
TCP Close Wait 상태를 확인하는 명령어는 운영체제나 네트워크 장비에 따라 다를 수 있습니다. 여기에서는 Linux 운영체제에서의 명령어를 예시로 들어보겠습니다.
Linux에서는 netstat 명령어를 사용하여 현재 열려있는 포트 및 TCP 연결 상태를 확인할 수 있습니다. TCP Close Wait 상태의 연결은 "CLOSE_WAIT"라는 상태로 표시됩니다.
따라서, 다음과 같은 명령어를 사용하여 Close Wait 상태의 연결을 확인할 수 있습니다.
$ netstat -anp | grep CLOSE_WAIT
위 명령어는 netstat 명령어를 실행한 후, 출력 결과에서 CLOSE_WAIT 문자열을 검색하여 해당 연결을 찾습니다.
-anp 옵션은 모든 연결 정보를 출력하고, 포트와 프로세스 정보도 함께 표시합니다. 이를 통해, Close Wait 상태의 연결이 어떤 프로세스와 연결되어 있는지 파악할 수 있습니다.
- 윈도우서버
윈도우 서버에서는 다음과 같은 명령어를 사용하여 TCP Close Wait 상태를 확인할 수 있습니다.
C:\> netstat -ano | findstr CLOSE_WAIT
위 명령어는 netstat 명령어를 실행한 후, 출력 결과에서 CLOSE_WAIT 문자열을 검색하여 해당 연결을 찾습니다.
-an 옵션은 모든 연결 정보를 출력하고, -o 옵션은 해당 연결에 대한 프로세스 ID를 표시합니다. 따라서, 위 명령어를 실행하면 Close Wait 상태의 연결이 어떤 프로세스와 연결되어 있는지 확인할 수 있습니다.
Windows에서 netstat 명령어를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
C:\> netstat -ano
Active Connections
Proto Local Address Foreign Address State PID
TCP 127.0.0.1:5354 0.0.0.0:0 LISTENING 9624
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 820
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
...
위 결과에서 Proto는 프로토콜 종류 (TCP 또는 UDP)를 나타내며, Local Address는 로컬 주소를 나타냅니다. Foreign Address는 원격 주소를 나타내며, State는 현재 연결 상태를 나타냅니다. PID는 해당 연결에 대한 프로세스 ID를 나타내며, 현재 실행 중인 프로세스를 식별할 수 있습니다.
findstr 명령어는 출력 결과에서 특정 문자열을 검색하여 해당하는 행만 출력합니다. 따라서, 위 명령어에서 findstr CLOSE_WAIT는 CLOSE_WAIT 문자열이 포함된 연결 정보만 출력하도록 필터링합니다.
결과값에는 Proto, Local Address, Foreign Address, State, PID 정보가 출력되며, 이 중 State 정보가 CLOSE_WAIT 인 경우 해당 TCP 연결이 Close Wait 상태임을 나타냅니다. 따라서, 이를 통해 Close Wait 상태의 TCP 연결을 확인할 수 있습니다.
또한, TCPView라는 유틸리티를 사용하여 GUI 환경에서도 TCP 연결 정보를 확인할 수 있습니다. 이는 Microsoft에서 제공하는 유틸리티로, 다음 링크에서 다운로드할 수 있습니다.
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
TCPView를 실행한 후, CLOSE_WAIT 상태의 연결을 찾아보면 해당 연결에 대한 프로세스 ID와 상태 정보를 확인할 수 있습니다.
'IT & 네트워크' 카테고리의 다른 글
SOAP서버 & DB서버 (0) | 2023.05.03 |
---|---|
ttf 폰트와 otf 폰트의 차이 (0) | 2023.04.26 |
파워셀(PowerShell) 튜토리얼 모음 (0) | 2023.04.04 |
mount -a 명령어의 동작 & /etc/fstab 파일의 역할 (0) | 2023.04.04 |
리눅스서버에서 네트워크 드라이브 마운트하는 방법 (0) | 2023.04.04 |