네트워크 문제로 인한 웹 서비스 장애가 발생하였을 때 나타나는 대표적인 증상과 체크사항
우선, Client에서 Web Server의 특정 포트로부터 응답이 없는 증상을 들 수 있습니다. 문제발생 원인을 규명하기 위해 체크해야할 사항은 다음과 같습니다.
1. TCPView, Netstat를 통해 해당 포트를 어떤 프로세스에서 사용하고 있는지를, 웹 서버에서 얼마나 많은 포트가 열려있는지 확인합니다. 만약 해당 포트를 제3사 응용 프로세스에서 사용한다면, 해당 서비스를 중지하고 웹 사이트를 시작하여 문제를 해결할 수 있습니다.
2. 혹은 기존 포트 연결이 많아 동적 사용자 포트가 부족하여 추가연결을 생성하지 못하고 있다면, MaxUserPort 레지스트리 값을 65534 으로 설정하여 주시기 바랍니다. 이 레지스트리 값은 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 아래 존재합니다.
3. 다음으로 Network Monitor log를 수집하여 패킷이 정상적으로 전송되는지 확인합니다. 문제라고 인식되는 원인으로 Web Server와 Client 통신 중 RST ACK로 응답하는 경우가 있습니다.
3-1. 이러한 증상의 첫번째 원인은 Web Server에서 해당 포트로 SYN을 보내지만, Web Server 와 Client 사이에 방화벽이 설정되어 있거나 네트워크 장비가 존재할 경우 Client 로부터 패킷을 받지 못하여 Web Server 에서 RST을 보내는 것입니다. 이 경우, Web Server 와 Client 사이에 Proxy server, Firewall의 문제가 있는지 확인해야 합니다. 웹 가속기도 문제 발생 원인이 될 수 있으므로 웹 가속기와 함께 사용하는 필터를 일시적으로 비활성화하여 테스트하여 봅니다.
3-2. 두번째 원인은ListenBackLog, ServerListenBacklog값이 적은 경우입니다. 이를 해결하기 위해서는 ListenBackLog는 레지스트리에서, ServerListenBacklog는 인터넷 서비스 관리자 혹은 메타베이스에서 조정하여야 합니다.
3-3. 마지막으로 수많은 SYN 요청이 다른 IP 주소로부터 유입될 경우, 즉 TCP/IP 공격을 할 경우 입니다. 이를 예방하기 위해서 다음 기술문서를 참고하여 TCP/IP 스택을 강화하여 주시기 바랍니다. 다음 기술문서를 참고하여 SynAttackProtect, TcpMaxPortsExhausted, TCPMaxHalfOpen, TCPMaxHalfOpenRetried 레지스트리 값을 설정하여 주시기 바랍니다. https://support.microsoft.com/kb/315669
추가적으로 Windows Server 2000(IIS5) 이고 컨텐츠들이 NAS 장비에 있을때 Web Server로부터 응답이 느린 증상이 발생할 수 있습니다.
IIS5에서는 SMB Protocol 을 통해서 파일 변경 통지 정보를 listening 하게 됩니다. 여기서 SMB(Server Message Block)는 네트워크를 통해 원격지 컴퓨터 상의 파일이나 서비스에 대한 요구를 할 수 있게 하는 프로토콜입니다. 이 때 두 서버 사이에서 Maxcmds 값의 협상이 이루어 지고, 보다 작은 값으로 정해지게 됩니다. 따라서 이 경우, 클라이언트 쪽에서는 MaxCmds 레지스트리 값(권장값:2048)을, 서버쪽에서는 MaxMpxCt 레지스트리 값(권장값:2048)을 늘려주어야 합니다.
네트워크 이슈 원인 파악을 위해 기본 자료외에 다음과 같은 자료를 수집하여야 합니다.
1. Network Monitor
이 tool은 지정 네트워크 구간에 있는 네트워크 패킷 흐름을 모니터링하는데 사용됩니다.
수집 과정
1> 아래 경로에서Network Monitor Tool를 다운받아 설치합니다.
2> 네트워크 모니터를 실행한 후, 메뉴바에서 Capture ->Networks를 실행하여, Local Computer(네트워크 모니터를 설치한 머신)의 Mac Address를 확인합니다.
3> Capture->Buffer Settings에서 Buffer Size를 100MB로 설정합니다.
4> Capture->Filter에서 Address Pair는 *Any<->*Any 인지 확인합니다.
5> Network Monitor Capure를 시작합니다. (Capture->Start 메뉴를 실행합니다.)
6> 문제를 재현합니다.
7> Capture를 중지합니다. (Capture->Stop 메뉴를 실행합니다.)
8> 네트워크 모니터 로그를 File->SaveAs를 통하여 저장합니다.
2. Netstat
수집 과정
Netstat –an > netstat.txt (IIS5)
Netstat –ano > netstat.txt (IIS6)
3. TCPView
수집 과정
TCPView for Windows v2.51
https://www.microsoft.com/technet/sysinternals/Networking/TcpView.mspx
4. ping, telnet 테스트
Ping <서버명/서버IP>
telnet <서버명/서버IP> :80