2012-11-22 2 views
0

IP 대기열에 문제가있는 것 같습니다.IP 대기열을 사용하는 중 Netlink 오류가 발생했습니다.

나는 실험을하기 위해 사용하고있는 리눅스 머신을 가지고있다. 리눅스 머신은 두 개의 NIC를 가지고 있고, 두 대의 다른 컴퓨터를 연결하고, 네트워크 트래픽을 관리하는 라우터로 구성됩니다. 들어오는 모든 패키지가 iptables를 사용하여 캡처되고 C 응용 프로그램에 의해 분석됩니다.

패킷을 분석하는 응용 프로그램에는 실험의 일부로 지연 기능이 내장되어 있습니다.

그래서 저는 매우 빠른 컴퓨터가 하나의 패킷을 분석하고 처리하는 (상대적으로) 느린 리눅스 라우터와 리눅스 라우터를 통해 패킷을 보내고 있습니다.

이 상황은 linux-router에 연결된 컴퓨터 중 하나에서 보낸 사람 응용 프로그램을 시작하면 linux-router의 내 IP 대기열이 (거의) 즉시 채워지는 결과를 가져옵니다.

IP 대기열의 최대 길이는 현재 1024로 설정되어 있으며 오버플로하면 패킷이 삭제됩니다. 이것은 예상과 나는 그것으로 괜찮습니다.

그러나, (그리고 재미있는 얻는 곳이다), 때때로 나는 다음과 같은 오류 얻을 : 시작시

"Failed to receive netlink message: No buffer space available"

, 나는 이것이 IP 큐 오버 플로우로 인한라고 생각하지만, 일부 후 분석 내가 때로는 IP 대기열 버퍼 오버플로하지 않은 경우에도 오류가 나타납니다, 언젠가는 버퍼 DID 오버플로에도 불구하고 메시지를 얻을하지 마십시오. 내가 > cat /proc/net/ip_queue을 실행하면

, 나는 (또한 IP 큐 오버 플로우를 모니터링하는 데 사용) 다음 표 얻을 :

Peer PID   : 27389 
Copy mode   : 2 
Copy range  : 65535 
Queue length  : 0 
Queue max. length : 1024 
Queue dropped  : 1166875 
Netlink dropped : 2916 

지난 2 개 값을 살펴보면를 Queue dropped는로 관리하지 않은 패킷을 참조 할 것 버퍼가 꽉 찼기 때문에 IP 대기열에 들어갑니다. 나는 리눅스 라우터를 포격하면서이 가치 상승을 볼 수있다. Netlink dropped (이름에서 알 수 있듯이 :)) 내가하는 오류와 관련이있는 것 같습니다.

이 오류로 인해 자료를 검색하는 데 최선을 다했지만 필요한 방향으로 나를 가리킨 것처럼 보이지 않는 항목을 찾을 수 없었습니다.

결론 : 왜이 오류가 발생하며이를 피하려면 어떻게해야합니까?

+0

내 생각에 NFQUEUE를 지연시키지 말고 qdiscs (패킷에 다른 표시를하고 패킷 표시에서 qdisc를 선택하여 NFQUEUE로 선택할 수 있음)라고 생각합니다. – BatchyX

답변

0

setsockopt를 사용하여 netlink 수신 소켓의 수신 버퍼 공간을 늘리십시오. 오류가 제거되어야합니다!

관련 문제