You are on page 1of 20

BAB I

PENDAHULUAN

1.1 Latar Belakang

Proses pengiriman informasi antara pengirim dan penerima dalam dunia


telekomunikasi seringkali mempunyai resiko akan terjadinya kesalahan terhadap
data yang dikirimkan tersebut. penyebab terjadinya kesalahan adalah adanya
gangguan yang terjadi pada level fisik yaitu pada media atau saluran komunikasi
yang digunakan, adanya gangguan radiasi elektromagnetik, cakap silang, petir
atau karena adanya gangguan akibat noise.

Gangguan tersebut menyebabkan informasi yang diterima pada terminal


penerima tidak lagi sesuai dengan apa yang dikirimkan. Mengingat validitas data
yang diterima tersebut harus tetap dapat dipertahankan untuk menjaga keaslian
dalam proses pertukaran informasi, maka diperlukan suatu cara bagaimana dapat
mendeteksi kerusakan data, sehingga dengan demikian pada sisi terminal
penerima dapat memperbaiki kesalahan-kesalahan terhadap data tersebut.

Banyak metode yang dapat dilakukan untuk proses pendeteksian ini,


diantaranya adalah yang berorientasi karakter (Character Oriented Redundacy
Chek) seperti Vertical Redundancy Check (VRC), Longitudinal redundancy
Check (LRC), Block Check Character (BCC).Dan yang berorientasi bit (Bit
Oriented Redundacy Chek ) seperti Cyclic Redundancy Check (CRC), dan
Polinomial Codes. Dalam penelitian ini metode yang digunakan adalah CRC (
Cyclic Redudancy Check ) yang mempunyai beberapa varian tergantung pada
bilangan polynomial yang digunakan dalam proses komputasinya.

Meskipun CRC tidak cukup aman sebagai algoritma kriptografi, tetapi CRC
cukup efektif digunakan karena algoritma CRC mudah diimplementasikan dalam
hardware maupun software, dan cukup cepat dalam melakukan komputasinya.
Untuk mempermudahproses komputasi tersebut, maka diperlukan sebuah
algoritmauntuk membantu proses encoder pada CRC 32.

1
1.2 Maksud dan Tujuan
 Memahami Pengertian CRC
 Mengetahui Memahami Konsep Dasar CRC
 Mengetahi Kegunaan CRC
 Mengetahui Perhitungan CRC Secara Manual

2
BAB II
PEMBAHASAN

2.1 CRC (Cyclic Redundancy Code)

CRC merupakan teknik untuk mendeteksi kesalahan-kesalahan di dalam


data digital, tetapi tidak bisa memperbaiki kesalahan apabila terdeteksi. Teknik ini
digunakan di dalam proses pengiriman data.

Pada saat pengiriman data, terkadang data yang yang diterima oleh
penerima tidak sesuai dengan data yang dikirimkan. Kondisi ini terjadi karena
adanya kerusakan data pada saat proses pengiriman data, disebabkan adanya
gangguan yang biasanya terjadi pada media komunikasi.

Dengan adanya kerusakan data yang mungkin terjadi, maka untuk


mendeteksi kerusakan data tersebut digunakan suatu cara untuk menghitung suatu
nilai terhadap data tersebut. Salah satu cara yang digunakan adalah CRC ( Cyclic
Redundancy Check ) yang mempunyai beberapa varian bergantung pada bilangan
polynomial yang digunakan

Algoritma yang dibuat dapat disebut dengan algoritma penghitungan


langsung, karena sebuah byte dari bytestring dioperasikan dengan menggunakan
logika XOR secara langsung dengan byte yang digeser keluar dari suatu register.
Di bawah ini merupakan diagram alur dari algoritma penghitungan langsung.

3
Gambar 1. Algoritma Perhitungan Langsung

Gambar 1 merupakan algoritma dari penghitungan langsung untuk metode


CRC 32. Pada algoritma ini yang pertama dilakukan adalah inisialisasi variabel
pada register dengan suatu nilai, dengan kata lain inisialisasi CRC umumnya
menggunakan bilangan hexa yaitu FFFFFFFF. Dan inisialisasi polynomial standar
CRC dalam hal ini menggunakan CRC 32 yaitu EDB88320 dalam bilangan hexa
juga.

Setelah inisialisai langkah berikutnya adalah pembacaan bytes stream atau


paket data yang dikirimkan dari pengirim. Bytes stream ini bisa dalam bentuk
string. Maksudnya bahwa data yang dikirimkan dapat berupa kumpulan huruf dan
/ atau angka serta kumpulan kata.

Langkah selanjutnya adalah menghitung nilai CRC sementara untuk setiap


byte pada bytes stream yang dikirimkan. Cara menghitung nilai CRC sementara
itu adalah dengan melakukan operasi ’XOR’ antara nilai CRC yang ada dengan
nilai byte yang akan terkirim. Dan melakukan operasi ’AND’ dengan FF heksa
atau 255. Lalu ulangi pembacaan byte yang akan terkirim sebanyak 8 kali, dengan
nilai awal adalah i=0. Selanjutnya adalah mengoperasikan nilai CRC awal yang
bernilai 1 dengan operasi ’AND’. Jika nilai CRC sementara bernilai 1 maka nilai

4
CRC sementara tersebut digeser ke kanan 1 bit kemudian nilai tersebut di ’XOR’
dengan polynomial standar. Tetapi jika tidak bernilai 1, maka nilai CRC
sementara tersebut hanya digeser saja sebanyak 1 bit ke kanan.

Setelah kedua kondisi tersebut terpenuhi terlihat pada diagram alur di atas
adanya penyatuan dua kondisi yang berbeda. Menandakan bahwa kedua kondisi
tersebut akan diproses selanjutnya. Yaitu proses pembacaan variabel i, dimana
adanya suatu kondisi yang menggambarkan apakah i lebih besar dari 8. Kondisi
ini menandakan bahwa pembacaan byte sudah diulang sampai i kali. Karena
pembacaan byte sebanyak 8 kali, maka kondisi akan menanyakan ”apakah
pembacaan atau variabel i lebih besar dari 8”, jika ”y” maka pembacaan stream
selesai, tetapi jika ”t” maka proses selanjutnya adalah pembacaan variabel i
kembali.

2.1.1 Prinsip Kerja CRC

Pada intinya prinsip kerja CRC adalah, kita menganggap suatu file yang
kita proses sebagai suatu string yang besar, yang terdiri dari bit-bit dan kita
operasikan suatu bilangan polynomial yang sangat besar. Untuk menghitung nilai
CRC, kita membagi bilangan polynomial sebagai representasi dari file, dengan
suatu bilangan polynomial kecil yang sudah terdefinisi untuk jenis varian CRC
tertentu. Nilai CRC adalah sisa hasil bagi tersebut yang biasa disebut dengan
checksum.

Setiap pembagian pasti menghasilkan suatu sisa hasil bagi (meskipun


bernilai 0 ), tetapi ada perbedaan dalam melakukan pembagian pada perhitungan
CRC. Secara umum (prinsip aljabar biasa), pembagian dapat kita lakukan dengan
mengurangi suatu bilangan dengan pembaginya secara terus-menerus sampai
menghasilkan suatu sisa hasil bagi (yag lebih kecil dari bilangan pembagi). Dari
nilai hasil bagi, sisa hasil bagi dan bilangan pembagi kita bias mendapat bilangan
yang dibagi dengan mengalikan bilangan pembagi dengan hasil bagi dan
menambahkan dengan sisa hasil bagi.

5
Dalam perhitungan CRC, operasi pengurangan dan penjumlahan dilakukan
dengan mengabaikan setiap carry yang didapat. Tentu saja hal ini juga akan
berpengaruh pada proses pembagian yang menjadi dasar utama dalam melakukan
perhitungan CRC. Operasi dalam CRC juga hanya melibatkan nilai 0 dan 1,
karena secara umum kita beroperasi dalam level bit. Contoh perhitungan dalam
CRC adalah sebagai berikut :

(1) 1101 (2) 1010 1010


1010- 1111+ 1111-
-------- ----
0011 0101 0101

Pada contoh di atas tersebut, operasi pertama (1) adalah operasi umum
yang digunakan dalam operasi aljabar, yaitu dengan menghitung nilai carry yang
dihasilkan. Sedangkan operasi kedua (2) adalah operasi dasar yang akan
digunakan dalam proses perhitungan nilai CRC. Nilai carry diabaikan, sehingga
operasi pengurangan dan penjumlahan akan menghasilkan suatu nilai yang sama.
Kedua operasi ini bisa kita lakukan dengan operasi XOR.
Pada proses pembagian yang dilakukan akan tampak sekali bedanya,
karena pengurangan yang dilakukan sama seperti malakukan penjumlahan. Nilai
hasil bagi diabaikan, jadi hanya sisa hasil bagi (remainder) yang diperhatikan.
Dan remainder inilah yang akan menjadi dasar bagi nilai CRC yang dihasilkan.

2.1.2 Perhitungan CRC Secara Aljabar

Untuk melakukan perhitungan CRC terhadap suatu data, maka yang


pertama diperlukan adalah suatu bilangan polinom yang akan menjadi pembagi
dari data yang akan diolah ( disebut sebagai ‘poly). Dan kita juga menghitung
lebar suatu poly, yang merupakan posisi biat tertinggi. Misalkan kita sebut lebar
poly adalah W, maka jika kita mempunyai poly 1001, makam W poly tersebut
adalah 3. Bit tertinggi ini harus kita pastikan bernilai 1. Dengan mengetahui W
secara tepat sangat penting, karena berpengaruh pada jenis CRC yang akan
digunakan ( CRC 16, CRC 32, dan lain-lain).

6
Data yang diolah mungkin saja hanya beberapa bit saja, lebih kecil dari
nilai poly yang akan digunakan. Hal ini akan menyebabkan kita tidak mengolah
semua nilai poly yang telah ditentukan. Untuk mengatasi hal ersebut, dalam
perhitungan dasar secara aljabar, kita menambahkan suatu string bit sepanjang W
pada data yang akan kita olah. Tujuannya untuk menjamin keseluruhan data dapat
kita olah dengan benar.

Contoh perhitungan sebagai berikut :


Poly = 10011 (Width W = 4)

Bitstring + W zeros = 110101101 + 0000


Contoh pembagian yang dilakukan :

Nilai remainder inilah yang menjadi nilai CRC. Pada proses pembagian di atas,
kita mendapat hal penting yang perlu diperhatikan dalam perhitungan secara

7
aljabar ini adalah kita tidak perlu melakukan operasi XOR ketika bit tertinggi
bernilai 0, tapi kita hanya melakukan pergeseran (shift) sampai didapat bit
tertinggi yang bernilai 1. Hal ini akan sedikit mempermudah dan mempercepat
operasi aljabar.

Secara notasi bias dituliskan sebagai berikut :


a( x).xN = b( x). p( x) + r ( x)

Keterangan :
a( x) :Bilangan polynomial yang merepresentasikan data.
xN : Nilai 0 sebanyak W
b( x) : hasil bagi yang didapat
p( x) : poly
r ( x) : sisa hasil bagi, nilai CRC

Karena nilai CRC adalah sisa hasil bagi, maka untuk mengecek integritas data
dapat dilakukan dengan beberapa cara, diantaranya :

a. Kita hitung nilai CRC dari data yang asli, lalu kita cocokkan dengan nilai
CRC yang disimpan (di append dengan data ). Data yang asli mudah kita
dapatkan karena nilai CRC sepanjang N-1.

b. Data yang asli kita tambah dengan nilai CRC, lalu kita bagi dengan nilai poly,
maka sisa hasil bagi adalah 0 jika data benar.

2.1.3. Pendekatan Tabel CRC

Perhitungan nilai CRC yang berbasis bit akan sangat lama dan tidak
efisien. Cara tersebut dapat diperbaiki dengan melakukan operasi dengan basis
byte. Poly yang digunakan akan dioperasikan dalam bentuk byte, sehingga harus
panjang kelipatan 8 bit (byte). Misalkan sebagai contoh dalam memproses CRC 8

8
bit (1 byte) agar lebih sederhana. Register akan berisi 8 bit, dan pada sekali shift
akan menggeser sebanyak 4 bit.

Misalkan isi awal register : 10110100 Kemudian 4 bit pertama akan


digeser (1011), dan memasukkan 4 bit baru misalkan (1101).

Maka 8 bit register sekarang adalah : 01001101

4 bit yang digeser (top bits) : 1011

Polynomial yang digunakan (W=8) : 101011100 Langkah selanjutnya


adalah dengan melakukan XOR terhadap isi register dengan polynomial.

Top Register
1011 01001101

1010 11100 (*1) operasi XOR dimulai

pada bit tertinggi

----------------------+ bernilai 1.

0001 10101101 hasil XOR

Tabel 1. Polynomial

Karena Top (isi register yang digeser keluar) masih mengandung nilai 1, maka
ulangi lagi langkah di atas.

2.1.4. CRC 32

CRC 32 adalah metode yang digunakan untuk mendeteksi kesalahan


dengan menggunakan polynomial 32 bit atau dengan kata lain polynomial 4 byte.
Proses perhitungan pada CRC 32 bit adalah sebagai berikut:

9
4 ruang kosong pada ilustrasi di atas menggambarkan register yang akan kita
gunakan untuk menampung hasil CRC sementara (pada proses pembagian yang
melibatkan operasi XOR). Proses yang dilakukan pada register ini adalah :

1. Masukkan bitstring (data) ke dalam register dari arah kanan ke kiri (shift
per byte) setiap saat register tidak terisi penuh.

2. Jika register sudah terisi penuh (berisi 4 byte), maka geser satu byte kearah
kiri (keluar register), dan isi register dari arah kanan dengan 1 byte dari
bitstring.

3. Jika register yang digeser keluar punya nilai 1, maka lakukan operasi XOR
terhadap keseluruhan isi reister (termasuk yang telah digeser keluar,
dimulai dari bit tertinggi yang bernilai 1) dan nilai dari poly. Ulangi
langkah ini sampai semua bit dari byte yang tergeser keluar bernilai 0.

4. Ulangi langkah 2 dan 3 sampai semua proses bitstring (data inputan)


selesai diproses.

Pada CRC 32, untuk setiap byte yang digeser keluar dapat dihitung nilainya yang
digunakan dalam operasi XOR dengan isi register. Nilai – nilai yang tersimpan di
dalam register disebut dengan table CRC.

2.1.5. Kasus

Pesan = 110101 ( Yang Di Transmisikan )

Polinomial = 101 ( Divisor )

Pesan akan ditambahkan dengan bit nolsebanyak lebar bit polinomial. Dalam hal
ini, lebar bit polinomial adalah 2, maka pesan akan ditambahkan dengan 00
menjadi 11010100, dan akan dibagi dengan polinomial.Pembagian ini sama saja
dengan men-XOR-kan semua bit yang dibagi dengan bit pembagi.

10
Perhitungan P ( x )

Jadi, Didapat pesan dengan CRC ( P (x) = 11010111

2.1.6. Memeriksa pesan pada Receiver

Hal ini dapat dlakukan dengan dua cara, yaitu :

a. Cara 1 :
 Pertama receiver akan memisahkan pesan dan checksum, kemudian akan
menghitung checksum untuk pesan ( setelah manambahkan bit nol
sebanyak lebar bit polinomal )
 Lalu receiver akan membandingkan kedua checksum tersebut ( yang di
terima dan yang di hitung )
 Jika kedua checksum tersebut sama besar, maka tidak terjadi eror selama
transmisi

11
Pesan = 11010111 ( Pesan Diterima )

 Checksum pesan yang di terima = 11

b. Cara 2
 Receiver akan menghitung checksum untuk keseluruhan pesan
 Kemudian memeriksa apakah hasilnya sama dengan no ( berarti tidak
terjadi error selama transmisi )

Pesan : 100110001101

Divisor : 11001

12
2.2. Vertical Redundancy Check (VRC)

Vertical Redundancy Check disebut juga dengan Parity Checking


merupakan salah satu dari metode pendeteksi error yang tertua dan paling
sederhana. Dengan teknik ini satu blok bit tambahan ditambahkan ke tiap byte
pada message, sehingga jumlah bit paritasnya genap. Secara konsep VRC dapat
digambarkan sebagai berikut:

Nilai dari paritas bit tambahan ini didasarkan pada jumlah dari satu pada tiap byte
yang ditransmisikan, k bit diperlukan dtransmisikan sebagai single blok. Hanya
dengan menambahkan satu bit parity sehingga %2

2.2.1. Model parity checking

Perity bit ini diset untuk membuat jumlah total dari 1 di dalam byte
(termasuk parity bit) menjadi genap atau ganjil. Contohnya untuk data empat bit,
1001, terdapat 1 sebanyak dua bit. Untuk parity genap nol (0) ditambahkan di
akhir data agar paritynya genap. Kemudian untuk parity ganjil 1 ditambahkan agar
partynya ganjil. Seperti ditunjukkan pada table berikut ini.

PARITY DATA DATA DENGAN


PARITY

GENAP 1001 10010

GANJIL 1001 10011

Kelemahan parity checking dapat mendeteksi terjadinya kesalahan, tetapi tidak


dapat mendeteksi kesalahan apa yang terjadi. Lebih lanjut jika ada dua bit
dipertukarkan, parity cek tidak dapat mendeteksi error. Secara mudah hal ini dapat
dilihat bahwa parity dapat mendeteksi error hanya ketika sebuah bit ganjil ditukar
Bila jumlah bit genap maka pendeteksian error gagal. Oleh karena itu
kemungkinan pendeteksian error dengan parity checking hanya 50%, akibatnya
sekarang teknik ini jarang digunakan.

13
2.2.2. Teknik Deteksi Eror VRC

VRC Merupakan metode pemeriksaan kesalahan per-karakter dan


digunakan pada sistem yang berorientasi karakter, misalnya terminal. Dengan cara
ini, setiap karakter yang dikirimkan (terdiri dari 7 bit) diberi tambahan 1 bit pariti
yang akan diperiksa oleh penerima untuk mengetahui kebenaran karakter yang
diterima tersebut. Cara ini hanya dapat melacak kesalahan yang terjadi pada
pengiriman data berkecepatan menengah.

Misalnya ASCII huruf A, kodenya adalah hex 41:


1000001 ASCII 7 bit (terdapat 2 bit 1)
1000001 1 tambahkan 1, jumlah bit 1 jadi ganjil (odd parity)
1000001 2 tambahkan 0, jumlah bit 1 jadi genap (even parity)

Contoh “even parity” :


Pengirim
Data : 1 1 0 0 0 0 1
b1 b2 b3 b4 b5 b6 b7
Ada 3 bit “1” (ganjil), ditambahkan bit 1, jumlah bit “1” jadi genap.
Kirim: Data & Parity = 11000011

Penerima
Proses (algoritma) even parity :
Hitung jumlah bit 1 => x
Jika x = genap disimpulkan tidak ada error
Jika x = ganjil, terjadi error
Terima: Data & Parity = 11100011
Error?

Penerima memeriksa pariti dari karakter yang diterima, bila tidak sesuai dengan
ketentuan maka akan diketahui adanya kesalahan pada waktu penyaluran data.

14
VCR mempunyai kekurangan, yaitu bila ada 2 bit yang terganggu maka tidak
dapat terlacak, sehingga dianggap pariti-nya akan benar.

Gambar. 2. Vertical Redundancy Check

2.2.3. Contoh Kasus

15
2.3. Longitudinal Redudancy Check (LRC)

Dengan menggunakan LRC data dikirim secara blok. Cara ini sama seperti
VRC hanya saja penambahan Bit Parity tidak saja pada akhir karakter tetapi juga
pada akhir setiap blok karakter yang dikirimkan. Untuk setiap bit dari seluruh blok
karakter ditambahkan ‘1’ Bit Parity termasuk juga Bit Parity dari masing masing
karakter. Tiap blok mempunyai satu karakter khusus yang disebut Blok Check
Character (BCC) yang dibentuk dari Bit uji dan dibangkitkan dengan cara sebagai
berikut “Tiap Bit BCC merupakan Parity dari semua Bit dari blok yang mempunyai
nomor Bit yang sama, jadi Bit ‘1’ dari BCC merupakan Parity genap dari semua Bit
‘1’ karakter yang ada pada blok tersebut dan seterusnya”.

2.3.1. Prinsip Kerja LRC

LRC memiliki keunggulan dalam kecepatan untuk mendeteksi error pada


single Bit maupun burst error. Namun jika pada unit data terdapat 2 Bit mengalami
kerusakkan pada posisi yang sama, maka LRC checker tidak dapat mendeteksi error .
Kerugian terjadi overhead akibat penambahan Bit Parity per 7 Bit untuk karakter.
Gambar 3 merupakan pola LRC untuk mendeteksi kesalahan.

Gambar 3 Pola LRC mendeteksi kesalahan

16
Horizontal. Scenario dari pengiriman datanya dapat dilihat pada gambar 4

Gambar 4 Scenario dari pengiriman data


Ternyata blok yang di terima oleh penerima seperti gambarr 6,
Perhitungan paritas pada sisi penerima, untuk baris 2 menghasilkan 0 (genap)
yang seharusnya 1 (ganjil) seperti pada baris yang lain. Demikian pada kolom 6
menghasilkan 0 (genap) yang seharusnya 1 (ganjil) sepeti pada kolom yang lain.
Jika dua eror ini disilangkan maka akan diketahui bahwa error terjadi pada bit di
baris 2 klom 6, koreksi dilakukan dengan menginversi bit 0 menjadi 1 atau 1
menjadi 0 pada posisi bit yaang baris dan kolomnya dinyatakan error, gambar 6
mennunjukkan proses deteksi error yang terjadi

Gambar 6 Blok data yang diterima

Untuk melakukan perhitungan LRC, ditambahkan karakter tambahan (bukan


satu bit) di bagian kiri dan bagian bawah blok :

a. Block Check Character (BCC) pada tiap blok data. Tiap bit BCC merupakan
pariti dari semua bit dari blok yang mempunyai nomor bit yang sama. Jadi bit

17
1 dari BCC merupakan pariti genap dari semua bit 1 karakter yang ada pada
blok tersebut, dan seterusnya
b. Ditentukan seperti parity, tetapi menghitung secara longitudinal pada pesan
(dan juga secara vertikal)
c. Kalkulasi berdasarkan pada bit ke-1, ke-2 dst (dari semua karakter) pada blok
menggunakan operator XOR (paritas genap) atau ~XOR (paritas ganjil) :

· Bit ke-1 dari BCC ß jumlah 1 pada bit ke-1 dari karakter

· Bit ke-2 dari BCC ß jumlah 1 pada bit ke-2 dari karakter

· 98% laju deteksi error untuk burst errors ( > 10 bit)

· Mampu mengoreksi error sebuah bit

· Mampu mengoreksi error sebuah drive yang rusak (dalam RAID)

· Perbaikan signifikan dibandingkan parity checking

2.3.2. Contoh Kasus LRC

18
BAB III

PENUTUP

3.1 Kesimpulan

Dari hasil kasus yang telah dilakukan, dapat disimpulkan :

1. Algoritma yang digunakan adalah algoritma penghitungan langsung. Karena


sebuah byte dari bytestring dioperasikan dengan menggunakan logika XOR
secara langsung dengan byte yang digeser keluar dari suatu register.

2. Dengan menggunakan CRC 32, maka inisialisasi polynomial standar CRC 32


adalah EDB88320 dan pembacaan paket data yang dikirimkan (bytestream)
sebanyak 8 kali. Karena terdapat 8 byte data yang terbaca oleh CRC. Paket
data yang terbaca dituliskan dalam bentuk bilangan hexadecimal.

19
DAFTAR PUSTAKA

20

You might also like