카테고리 없음

RealTek network driver 충돌현상

JamesK78 2012. 2. 1. 18:27
winpcap 사용하여 네트워크 패킷을 모니터링 하는 프로그램을 만들어서 사이트에 배포를  했었다.
일전에도 비슷한 기능을 하는 프로그램을 만들어서 배포 했었기에 별다른 문제가 없을 것으로 판단 했다.

그러나 전혀 의외의 문제가 발생했다.
네트워크 연결이 끊어지거나 인터넷이 안되는 현상 이었다.
도저히 상식적으로 이해가 가질 않았다. 패킷을 단순히 read 하는 역할만 했기에 왜 이러한 현상이 발생하는지
원인분석을 해보았다.

약 300대의  PC를 조사한 결과 문제가 발생한는 PC에서 동일한 네트워크 카드를 사용하였고, 특정 드라이버 버전이 설치된 PC 에서만 이러한 현상이 발생했다.

문제가 발생한 PC를 할당받아서 분석 한 결과 문제는 PCAP 이 문제가 아니었다.
PACKET 를 READ ( pcap_next_ex) 하여 IP  Spoofing 을 체크하는 로직이 있는데 , 여기서 GetAdaptersInfo 함수를
사용하고 있었다.

패킷이 들어올때마다 GetAdaptersInfo 를 호출하니 트래픽이 많을 때 끊기는 것이었다.
이 함수의 내부에서는 network adapter 에 정보를  요청할 것이고 드라이버에서 해당 정보를 올려주는 것으로 보인다.
 근데 이 부분에서 드라이버의 버그가 있었던 것이고...드라이버가 hang 걸리면서 hardware error or request timed out 이 되어 버리는 것이다.

이 로직을 개선 하고 패치 한 후에 더이상 문제가 발생 하지 않았다.

결론은 간단했지만 이 문제를 분석하는데에  pcap 부분만 중점적으로 보다보니 소스를 전체 리뷰 하는 것을 놓치고 말았다. promiscuous mode 일때에는 증상이 더욱 빨리 나타났기에....

삽질 3일~~




지금까지 네트워크 GetAdapterInfo 함수를 1만번 호출해보자.