BISA arbitrase dilakukan dengan ID, dan setiap node di bus dapat mengirimkan dengan ID apa pun (idealnya tidak, tetapi sebuah node jahat bisa).
Bagaimana jika dua node berbeda terhubung pada bus CAN yang sama mengirimkan pesan dengan ID yang sama tetapi byte data yang berbeda?
Pemikiran saya: Ini akan menghasilkan sampah di bus. Siapa pun yang memiliki bit dominan itu hanya akan ditransmisikan.
Jawaban:
Bagian 6.1 dari spesifikasi CAN :
Jadi, simpul yang pertama mentransmisikan '1' ketika yang lain mentransmisikan '0' akan mencatat Kesalahan Bit dan kemudian sinyal kesalahan seperti biasa - dengan mengirimkan flag kesalahan (lihat Bagian 3.1.3), seperti yang dijelaskan secara formal dalam Bagian 6.2.
Secara informal, jika simpul itu aktif kesalahan (yang seharusnya merupakan kasus biasa) akan mengirimkan bendera kesalahan 6 bit dominan, yang juga akan dideteksi oleh semua simpul lain (sebagai kesalahan barang). Ini memiliki efek menghancurkan pesan itu sepenuhnya:
Setiap pemancar kemudian akan mencoba mentransmisikan ulang - tergantung pada waktu yang tepat dari transmisi ulang, yang satu mungkin mulai cukup sebelum yang lain mendapatkan kendali bus. Kalau tidak, urutan yang sama dapat terjadi lagi. (Atau pesan dengan prioritas lebih tinggi dapat membuat keduanya tidak aktif untuk sementara waktu!)
Jawaban yang diperluas terinspirasi oleh jawaban @ clabbacchio di bawah ini.
Anda menyebutkan "node jahat", dan clabbacchio membuat poin yang valid bahwa jika dua node mentransmisikan pada waktu yang berbeda, masing-masing penerima perlu memutuskan apa yang harus dilakukan dengan beberapa reseptinya.
Ini ditunjukkan oleh retas tahun lalu . Makalah ini membahas, di bagian "spesifik PSCM", bagaimana penyerang dapat menyinkronkan pesan biasa di bus dan memainkan pesan jahat mereka tepat sebelum pesan yang akan dikirim ECU "baik". ECU penerima menerima pesan sebelumnya, memperbarui penghitung pesannya dan kemudian membuang pesan "baik" sebagai kesalahan, karena penghitung pesannya tidak bertambah.
sumber
Dalam pertanyaan Anda, Anda membuat hipotesis ini:
Yang mengasumsikan bahwa dua pesan ditransmisikan pada waktu yang bersamaan, yang merupakan kasus khusus dari masalah yang lebih umum. Jawaban sah Martin mencakup masalah khusus ini, tetapi mengabaikan kasus (lebih umum) di mana dua node mentransmisikan pada waktu yang berbeda.
Dalam hal ini, akan ada dua pesan dengan ID yang sama tetapi muatan berbeda yang beredar di bus, dan terserah pada logika penerima untuk membedakan antara dua pesan dan memutuskan apakah itu adalah konten yang harus mereka terima. Jika mereka gagal membedakan dua pesan, mereka mungkin salah menafsirkan data dan menyebabkan masalah yang lebih serius daripada hanya frame kesalahan.
Misalkan mengatakan bahwa satu pesan berisi pembacaan sensor suhu, yang lain berisi posisi target aktuator pada byte yang sama (HARUS TIDAK PERNAH TERJADI DALAM KEHIDUPAN NYATA), Anda mungkin memiliki aktuator mendapatkan itu sebagai target tanpa menyadarinya.
sumber
Jika bidang data pesan berbeda, Anda (semoga!) Akan mendapatkan bingkai kesalahan di bus karena CRC yang salah.
sumber