특정 사이트 접속시 TCP 통신이 지연되는 현상 해결 방법

2024. 4. 9. 16:29카테고리 없음

728x90

 사내 서버(이하 '내부 A서버'로 칭합니다)에서 사외 특정 서버(이하 '외부 Z서버'로 칭합니다)의 웹페이지에 접속해야 하는 일이 있었습니다. 그런데 이상하게도 내부 A서버에서 외부 Z서버의 웹페이지에 접속하면 짧으면 3초 느리면 9초 정도가 지나야 웹페이지가 뜨는 이상한 현상이 있었습니다. 더욱 이상한 것은 사내의 다른 서버에서(내부 B, C 서버) 외부 Z서버의 웹페이지를 호출하면 1초도 안걸리고 정상적으로 바로 뜬다는 점이었습니다. 

웹페이지를 호출하는 시간이 많이 소요됨

사내의 또 다른 서버에서 외부 Z서버 웹페이지를 호출해 보았는데 어떤 서버는 3~9초 이상 소요되었고, 또 다른 서버는 웹페이지가 뜨는데 1초도 걸리지 않았습니다. 왜 그런지 원인을 알아보기 위해서 내부 A서버에 WireShark를 설치하고 패킷을 떠봤습니다.

내부 A서버와 외부 Z서버 간의 TCP 3-way handshake 과정을 살펴보았습니다. 최초 내부 A서버에서 외부 Z서버 쪽으로 SYN 패킷을 보내는데, 아래의 검은 영역의 부분을 보면 내부 A서버에서 외부 Z서버로 SYN 패킷을 보낼 때 TCP Retransmission 재전송이 2번이 발생하였고, 그 이후에 외부 Z서버로부터 SYN + ACK 응답을 받고, 내부 A서버에서 ACK 응답을 보내면서 연결이 이루어 지는 것을 확인 할 수 있었습니다. 즉, 검은 영역부분의 TCP Retransmission 재전송 시간동안 연결이 지연되었던 것이었습니다.

그렇다면 외부 Z서버 쪽에서 SYN 패킷 신호를 필터링하여 걸러내고 있을 것 같다는 생각이 들어 외부 Z서버쪽 담당자에게 문의를 해보았습니다.

[외부 Z서버 담당자의 말]

확인 결과 DDoS 장비 보안정책에 의한 패킷드랍이 발생하는 것으로 보입니다.

과거에 TCP메카니즘상 혼잡제어 플래그를 활용한 디도스 공격사례가 존재하여 보안대응으로 규칙성 패킷드랍으로 파악됩니다.

따라서 안정적 통신을 위해서는 출발지 서버에서 혼잡제어 비트설정을 어떤경우에 하는지를 확인하여 조치하신 후 접속하면 해결될 것으로 생각됩니다.

 위와 같이 답변을 받았는데 이를 토대로 힌트를 얻어서 구글링을 해본 결과 해당 증상은 윈도우 서버의 ECN(Explicit Congestion Notification) 기능과 관련되어 있다는 것을 알아내었습니다. 일부 네트워크 제품 중 ECN 기능이 활성화 된 TCP 접속 요청 패킷을 무시하는 것들이 있다고 합니다. ECN 표준에 의하면 이런 경우 일정시간(몇 초 정도) 타임아웃이 지난 후 ECN 기능 없이 TCP 접속 요청 패킷을 보내게 되어 있다는 것입니다. 따라서 해결방법은 (클라이언트 쪽) 윈도우 서버 또는 (클라이언트 쪽)윈도우 PC에서 ECN 기능을 비활성화 하면 됩니다. 그 방법은 아래와 같습니다.

'내부 A서버'의 윈도우 OS에서 관리자 모드로 실행창을 열고 아래와 같이 입력합니다.

netsh interface tcp show global

 그러면 위와 같이 ECN 기능이 enabled 로 설정되어 있음을 확인할 수 있습니다. 이제 ECN 기능을 비활성화 하기 위해 아래와 같이 입력합니다.

netsh interface tcp set global ecn=disabled

이후 다시 netsh interface tcp show global 명령어로 ECN 기능을 보면 disabled로 바뀌어 있는 것을 확인할 수 있습니다.

이제 다시 외부 Z서버의 특정 웹페이지를 호출해 보았더니 아래와 같이 1초도 걸리지 않고, 곧바로 웹페이지가 정상적으로 호출 되는 것을 확인할 수 있었습니다.

웹페이지를 호출하는 시간이 대폭 줄어들었습니다.

728x90