대상 MAC이 모두 0인 프레임 수신

대상 MAC이 모두 0인 프레임 수신

우리는 GOOSE 메시지(멀티캐스트 메시지, 일반 객체 지향 변전소 이벤트, IEC61850 프로토콜 표준의 일부) 구독 모듈을 구현하려고 합니다. 거의 모든 경우에 GOOSE 메시지를 지연 없이 읽을 수 있었습니다. 그러나 간헐적으로 GOOSE 메시지가 3초 지연된 후 애플리케이션에 도착합니다. 오류 상황에서 캡처된 PCAP 파일을 분석한 결과, GOOSE 메시지가 지연 없이 장치 네트워크 계층에 도달한 것을 확인했습니다.

recvfrom하위 계층에서 메시지를 가져오기 위해 호출을 사용합니다 .

리눅스 버전: linux-3.8.13

다음과 같이 전화에 응답하십시오.

unsigned char etherFrameRx[1518];

recvLen = recvfrom (hPktSock, etherFrameRx, sizeof(etherFrameRx),
          MSG_TRUNC, NULL, NULL);

소켓은 다음과 같이 초기화됩니다.

hPktSock = socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL);
arg |= O_NONBLOCK;
ret = fcntl (hPktSock, F_SETFL, arg);

지연(장치 MAC 계층에서 메시지를 수신한 후 애플리케이션이 메시지를 수신하는 데 걸리는 시간)이 기록되어 있지만 애플리케이션은 대상 MAC이 "모두 0"(0:0:0)인 프레임을 계속해서 수신합니다. :0:0:0) . 그리고 Wireshark 로그(eth0 인터페이스)에서는 이러한 메시지를 확인할 수 없습니다. 커널의 이러한 연속적인 예외 메시지는 GOOSE 수신을 지연시킵니다.

장치 시간이 동기화된 후에는 이 문제가 발생할 가능성이 더 높습니다. SNTP는 시간 동기화를 위한 메커니즘입니다.

Wireshark(GOOSE에 가입된 장치에 설치됨)를 사용하여 오류 상황에서 캡처된 .pcap 파일은 다음 경로에서 공유됩니다.

[사용 불가]

로그에는 12:36:11.636989에 GOOSE 메시지가 수신되었습니다. 그런데 앱의 업데이트 시간은 12:36:14.8012 입니다.

Linux 커널이 대상 MAC이 모두 0인 프레임을 반환하는 이유는 무엇입니까?

관련 정보