Bus Networking에서 다뤘듯이 CAN은 프레임에 특정 수신자를 명시하는 대신 식별자로 데이터의 내용(의미)을 표시해 버스 전체에 실어 보낸다 — 어떤 노드도 스테이션 주소 같은 시스템 구성 정보에 의존하지 않으므로, 네트워크에 노드를 추가해도 기존 노드의 하드웨어·소프트웨어를 바꿀 필요가 없다[1]. 그런데 모든 노드가 버스의 모든 메시지를 물리적으로 받는다면, 그중 자신에게 필요한 메시지만 골라내는 절차가 따로 있어야 한다. 이 절차가 acceptance filtering이며, ISO 11898 Part 1은 이를 데이터링크 계층의 표준 기능으로 규정한다[2].
필터 메커니즘
CAN 컨트롤러의 acceptance filter는 수신한 식별자를 필터 레지스터 값과 비교해, 그 결과에 따라 메시지를 수신 버퍼에 저장할지 버릴지 정한다. 예를 들어 Philips(현 NXP) SJA1000 컨트롤러는 수신 식별자를 acceptance code 레지스터와 대조하고, 판정을 통과한 메시지만 완전한 형태로 수신 버퍼에 저장한다 — 통과하지 못한 메시지는 애플리케이션에 전달되지 않고 그대로 버려진다[3]. 여기에 mask 레지스터를 함께 쓰면 식별자의 특정 비트 위치를 “don’t care”로 지정할 수 있어, 식별자 하나가 아니라 식별자 그룹 단위로 필터링할 수도 있다[1].
물리적 수신과 필터링의 분리
이 필터링은 애플리케이션에 전달되는 시점의 선별일 뿐, 물리적 수신 자체를 건너뛰지는 않는다. CAN 네트워크에서 하나의 메시지는 모든 노드에 동시에 받아들여지거나 어느 노드에도 받아들여지지 않아야 하므로[1], 버스에 실린 모든 프레임은 acceptance filter를 통과하지 못하는 노드에서도 컨트롤러 단에서는 빠짐없이 수신·검증된다. 위 그림에서 노드 C가 필터에는 탈락하지만 컨트롤러(원)까지는 수신이 도달하는 이유가 여기에 있다.
실제 네트워크에서 어떤 노드가 어떤 식별자를 보내고 어떤 노드들이 그 식별자를 받아야 하는지는 communication matrix로 문서화되며, 각 노드의 acceptance filter 설정은 이 매트릭스에서 도출된다[4].