PENGGUNAAN ESCAPE BYTE SERIAL
Bagaimana pembatas juga bisa menjadi data?
Penerima serial menerima karakter, sedangkan aplikasi harus mengidentifikasi pesan. SLIP mengodekan C0 dan DB dalam payload sebagai urutan dua byte sehingga END yang tidak di-escape dapat membatasi paket. Penerima membalikkan pemetaan tersebut sambil mempertahankan statusnya antaroperasi pembacaan. Nilai-nilai khusus ini merupakan bagian dari SLIP dan tidak secara otomatis menyediakan pemeriksaan kesalahan atau keamanan.
Karakter vs paket
Batas karakter saja tidak mengidentifikasi pesan aplikasi.
Lakukan escape pada data khusus
SLIP merepresentasikan byte khusus dalam payload dengan urutan dua byte.
Pertahankan status
Parser harus mempertahankan status escape meskipun suatu operasi pembacaan berakhir setelah DB.
Petakan titik akhir dan cakupannya.
Pastikan protokol dan pengaturan yang sebenarnya.
Lakukan pengujian berizin menggunakan data yang tidak berbahaya.
Daftar periksa pemilihan dan verifikasi — perluas
Pastikan protokol dan lapisan perekaman; uji byte biasa dan byte khusus; verifikasi pembacaan terpisah, penanda berulang, serta penanganan kesalahan dalam lingkungan yang diizinkan.
Saluran serial mengirimkan aliran byte. Bagaimana program penerima mengetahui di mana sebuah pesan berakhir? Salah satu pendekatan menetapkan sebuah penanda khusus. Namun, data pengukuran atau berkas dapat berisi nilai byte yang sama, dan pengirimannya tanpa perubahan dapat disalahartikan sebagai akhir pesan. Penggunaan escape byte mengatasi ambiguitas tersebut. Untuk memahaminya, bedakan penerimaan karakter, batas paket, dan makna pada tingkat aplikasi, alih-alih hanya memperhatikan laju baud.

Karakter yang benar tidak secara otomatis membentuk sebuah paket
Antarmuka serial asinkron yang umum menggunakan bit awal, bit data, dan bit henti untuk mengidentifikasi sebuah karakter. Setelah karakter mencapai program, karakter-karakter tersebut membentuk urutan byte. Penerima tidak secara otomatis mengetahui di mana suatu pembacaan suhu dimulai dan berakhir. Batas karakter dan batas pesan lengkap merupakan dua persoalan yang berbeda.
Protokol aplikasi dapat menggunakan panjang tetap, kolom panjang, pengaturan waktu, atau penanda khusus untuk membatasi pesan. Masing-masing memiliki kondisi dan kompromi tersendiri. Artikel ini menggunakan SLIP, sebuah contoh pembingkaian serial sederhana, untuk menjelaskan penanda dan penggunaan escape. Artikel ini tidak menyiratkan bahwa setiap protokol serial menggunakan SLIP atau bahwa protokol yang ada boleh diubah sembarangan.
Server perangkat serial tiga-dalam-satu satu port FCT-1100-F1S1 dari Feichang memberikan konteks nyata untuk koneksi serial ke jaringan. Byte yang diteruskan melalui antarmuka atau jaringan tidak secara otomatis memperoleh makna bisnis baru. Artikel ini tidak menyimpulkan protokol pembingkaian internal produk tersebut; periksa dokumentasi dan konfigurasinya untuk mengetahui kemampuan sebenarnya.
Mengapa satu penanda dapat memiliki dua peran
Misalkan kedua titik akhir sepakat bahwa sebuah byte tertentu menandai akhir. Saat menerimanya, parser menyerahkan data sebelumnya yang tersimpan dalam buffer. Gagasan ini menyerupai tanda baca yang menandai akhir kalimat. Namun, konten biner dapat memuat nilai byte apa pun; tidak ada nilai yang dipilih yang secara otomatis dijamin tidak terdapat dalam payload.
Sebuah rekaman pengukuran mungkin berisi nilai yang sama dengan penanda akhir. Haruskah parser memperlakukan kemunculan tersebut sebagai data atau sebagai batas? Nilai itu saja tidak dapat menentukan kedua peran tersebut. Pengirim dan penerima memerlukan aturan bersama yang mengubah cara nilai-nilai khusus direpresentasikan pada jalur transmisi.
Sekadar melarang suatu nilai membatasi apa yang dapat dinyatakan oleh data asli dan dapat mengubah hasil pengukuran tanpa terdeteksi. Mengganti tembaga dengan serat optik juga tidak menghilangkan ambiguitas tersebut: konversi optik mengubah media transmisi, bukan interpretasi oleh protokol aplikasi. Kualitas sambungan dan aturan pengodean harus diperiksa secara terpisah.
Escape mengubah representasi, bukan data
Escape dapat dipahami sebagai sinyal untuk menafsirkan byte berikutnya menggunakan aturan yang disepakati. Pengirim memeriksa payload dan mengganti nilai byte yang dilindungi dengan urutan khusus. Penerima membalikkan pemetaan tersebut dan seharusnya memperoleh konten asli yang sama.
Dalam contoh SLIP yang dijelaskan oleh RFC 1055, nilai heksadesimal C0 adalah END dan DB adalah ESC. C0 di dalam payload menjadi DB DC; DB di dalam payload menjadi DB DD. C0 yang tidak di-escape memberikan batas akhir yang sebenarnya. Nilai-nilai khusus ini berlaku untuk contoh ini, bukan untuk setiap protokol serial.
Mengapa DB juga perlu di-escape? DB memicu penafsiran khusus terhadap byte berikutnya. Jika DB asli dikirim tanpa pembeda, nilai biasa berikutnya dapat disalahartikan sebagai sufiks escape. Melindungi pembatas maupun penanda awal escape mencegah munculnya ambiguitas baru.

Ikuti contoh singkat dari pengirim ke penerima
Ambil payload asli 11 C0 22 DB 33. Kedua nilai khusus tersebut tidak dapat ditempatkan langsung dalam aliran berbingkai sebagai konten biasa. Pengodean menghasilkan 11 DB DC 22 DB DD 33; penanda END yang sebenarnya membatasi hasil tersebut sehingga penerima dapat membedakan peran kontrol dari data yang dipulihkan.
Ilustrasi ini menempatkan C0 sebelum dan sesudah paket. RFC 1055 membahas pengiriman END di awal sebagai cara untuk membuang derau yang terakumulasi; hasil dengan panjang nol akibat penanda berturut-turut tidak boleh diserahkan sebagai paket IP normal. Protokol lain belum tentu menggunakan penanda yang identik pada kedua ujungnya.
Setelah dekode, C0 dan DB dalam payload kembali menjadi data biasa. Pembatas itu sendiri bukan bagian dari konten yang diserahkan. Pengodean dapat menambah jumlah byte pada jalur transmisi. Penghitung server serial, hasil perekaman, dan panjang data aplikasi dapat berbeda bila diukur pada lapisan yang berbeda, tanpa membuktikan adanya kehilangan data.
Penerima harus mengingat statusnya saat ini
Parser tidak selalu dapat menentukan makna setiap byte secara terpisah. Setidaknya, parser harus membedakan pembacaan normal dari kondisi menunggu sufiks setelah penanda awal escape. Dalam status normal, END menandai batas paket; DB mengubah status menjadi menunggu sufiks, bukan langsung mengeluarkan DB sebagai data asli.
Dalam status menunggu, penerima menerapkan pemetaan yang disepakati dan kembali ke status normal. Hubungan antara dua byte dipertahankan oleh status parser; kedua byte tersebut tidak harus tiba dalam operasi pembacaan perangkat lunak yang sama. Jika satu operasi pembacaan berakhir dengan DB dan operasi berikutnya dimulai dengan DC, penerima harus mempertahankan status dan menyelesaikan konversi.
Implementasi nyata juga memerlukan aturan untuk sufiks yang tidak valid, batas buffer, paket kosong, dan interupsi. Artikel ini tidak menetapkan satu strategi penanganan kesalahan yang universal. Jika perangkat lunak menghapus status penguraian pada setiap operasi pembacaan jaringan, atau menganggap setiap operasi pembacaan sebagai sebuah pesan, pembingkaian dapat gagal meskipun transportasi telah mengirimkan seluruh byte.

Batas bukanlah pemeriksaan kesalahan atau jaminan keamanan
Escape mengatasi ambiguitas representasi. Escape tidak secara otomatis menambahkan deteksi kesalahan, transmisi ulang, autentikasi, atau enkripsi. Membagi aliran menjadi paket tidak membuktikan bahwa setiap paket benar atau bahwa pengirimnya tepercaya. SLIP sendiri menawarkan layanan yang terbatas dan tidak boleh diperlakukan sebagai protokol keamanan umum untuk kontrol industri.
Protokol yang berbeda juga dapat menerapkan pemeriksaan dan escape pada tahap yang berbeda. Pembingkaian mirip HDLC pada PPP memiliki aturan tersendiri untuk flag, transparansi, dan pemeriksaan bingkai; rinciannya tidak identik dengan SLIP. Mencampur nilai penanda, sufiks escape, atau tahap pemeriksaan dapat menyebabkan kedua sisi menerima byte, tetapi tidak satu pun menerima sebuah paket sebagai valid.
Petakan lokasi data aplikasi asli, pengodean, transportasi fisik atau jaringan, dekode, dan validasi aplikasi. Saat menyelidiki kesalahan, identifikasi lapisan pengamatan sebelum membandingkan konten yang diharapkan. Perbandingan langsung byte demi byte antara lalu lintas yang dikodekan dan kolom aplikasi yang telah didekode dapat menimbulkan kesan adanya gangguan yang sebenarnya tidak ada.
Periksa kesesuaian aturan dengan sampel kecil yang dapat diulang
Mulailah dengan dokumentasi perangkat dan protokol. Catat versi, pengaturan antarmuka, paketisasi, dan titik perekaman. Uji data biasa, data yang mengandung nilai akhir, data yang mengandung nilai escape, dan nilai khusus yang berurutan. Periksa bentuk yang dikodekan maupun yang didekode. Ini merupakan metode ilustratif, bukan klaim bahwa produk tertentu telah diukur.
Kemudian uji operasi pembacaan yang terpisah, operasi pembacaan yang menggabungkan data, dan koneksi yang terputus jika implementasi perlu menanganinya. Gunakan data yang tidak berbahaya dalam lingkungan yang diizinkan, bukan byte contoh sebagai perintah pada sistem produksi aktif. Jika titik akhir menggunakan protokol yang berbeda, tentukan pihak yang melakukan konversi sebelum berulang kali mengubah laju baud.
Ingat lapisannya: UART mengidentifikasi karakter, aturan pembingkaian mengidentifikasi pesan, dan escape mencegah nilai khusus dalam payload disalahartikan sebagai penanda kontrol. Memisahkan ketiganya menjelaskan mengapa sebuah port dapat menerima byte sementara aplikasi tetap tidak dapat menyusun kembali pesan yang lengkap.
Referensi utama
RFC 1055: SLIP, Juni 1988, bukan standar Internet; RFC 1662: PPP dalam Pembingkaian Mirip HDLC, Juli 1994. Konteks produk: server perangkat serial FCT-1100-F1S1; ini tidak menyatakan bahwa produk tersebut menggunakan SLIP.
Diterjemahkan dari artikel teknis berbahasa Mandarin: Baca artikel asli berbahasa Mandarin.
Pertanyaan praktis yang umum
Apakah penerimaan karakter serial secara otomatis mengidentifikasi sebuah paket?
Tidak. Penerimaan karakter UART dan pembingkaian aplikasi merupakan hal yang terpisah; kedua titik akhir memerlukan aturan pembingkaian yang sama.
Bagaimana SLIP melakukan escape pada C0 dan DB dalam payload?
C0 dalam payload menjadi DB DC dan DB dalam payload menjadi DB DD; END yang tidak di-escape menandakan batas. Protokol lain mungkin menggunakan aturan yang berbeda.
Apakah penggunaan escape byte menggantikan pemeriksaan integritas atau enkripsi?
Tidak. Escape menghilangkan ambiguitas antara penanda kontrol dan nilai payload; escape tidak secara otomatis menyediakan deteksi kesalahan, transmisi ulang, autentikasi, atau enkripsi.
Cakupan dan bacaan lanjutan
Contoh umum pembingkaian SLIP, bukan klaim mengenai produk tertentu atau data hasil pengukuran.
Penutupan sebagian (half-close) TCP dan balasan serial · Beban unit RS485 dan anggaran kemampuan penggerak


