답변:
CAN 사양의 6.1 절 :
BIT ERROR : 버스에서 비트를 전송하는 장치도 버스를 모니터링합니다. 모니터링되는 비트 값이 전송 된 비트 값과 다른 경우 해당 비트 시간에 비트 오류가 감지되어야합니다. 중재 필드의 채워진 비트 스트림 동안 또는 ACK 슬롯 동안 '열성'비트를 보내는 것은 예외입니다.
따라서 다른 하나가 '0'을 전송할 때 먼저 '1'을 전송하는 노드는 비트 오류를 기록한 다음 공식적으로 설명 된대로 오류 플래그를 전송하여 오류를 정상으로 신호합니다 (3.1.3 절 참조). 섹션 6.2.
비공식적으로, 해당 노드가 오류 활성 인 경우 (일반적인 경우 여야 함) 6 개의 우세 비트의 오류 플래그를 전송하며 다른 모든 노드도 (물량 오류로) 감지합니다. 이는 해당 메시지를 완전히 파기하는 효과가 있습니다.
각 송신기는 재전송의 정확한 타이밍에 따라 하나의 버스의 게인 제어 전에 충분히 시작될 수 있습니다. 그렇지 않으면 동일한 시퀀스가 다시 발생할 수 있습니다. (또는 다른 우선 순위가 높은 메시지가 잠시 동안 둘 다 해제 될 수 있습니다!)
아래 @clabbacchio의 답변에서 영감을 얻은 확장 답변.
"불쾌한 노드"를 언급하고 clabbacchio는 두 노드가 서로 다른 시간에 전송하는 경우 각 수신기가 다중 수신으로 수행 할 작업을 결정해야한다는 유효한 지점을 만듭니다.
이것은 작년에 해킹에 의해 입증되었습니다 . 이 백서에서는 "PSCM 사양"섹션에서 공격자가 버스의 일반 메시지와 동기화하고 "좋은"ECU가 전송하려고하는 메시지 바로 전에 악의적 인 메시지를 재생하는 방법에 대해 설명합니다. 수신 ECU는 메시지 카운터가 증가하지 않았기 때문에 이전 메시지를 수락하고 메시지 카운터를 업데이트 한 다음 "양호한"메시지를 잘못된 것으로 버립니다.
귀하의 질문에, 당신은이 가설을 세웁니다 :
지배적 인 비트를 가진 사람은 누구나 전송됩니다.
두 메시지가 정확히 동시에 전송된다고 가정합니다. 이는 더 일반적인 문제의 특정 사례입니다. Martin의 유효한 답변은이 특정 문제를 다루지 만 두 노드가 서로 다른 시간에 전송하는 (보다 일반적인) 경우는 무시합니다.
이 경우, ID는 동일하지만 버스 상에 서로 다른 페이로드가 순환하는 두 개의 메시지가 있으며, 두 메시지를 구별하고 수신해야하는 컨텐츠인지 여부를 결정하는 것은 수신자의 논리에 달려 있습니다. 두 메시지를 구별하지 못하면 데이터를 잘못 해석하여 오류 프레임보다 더 심각한 문제를 일으킬 수 있습니다.
예를 들어, 하나의 메시지에는 온도 센서의 판독 값이 포함되고 다른 하나에는 동일한 바이트에서 액추에이터의 목표 위치가 포함된다고 말하고 (SHOULD NEVER HAPPEN IN REAL LIFE), 액추에이터가 알지 못하는 상태에서 목표 값으로 얻도록 할 수 있습니다.