خطا در شبکههای کامپیوتری به شرایطی گفته میشود که اطلاعات دریافتی با اطلاعات ارسالی مطابقت نداشته باشد. نویزها، مزاحمت زیادی برای سیگنالهای دیجیتالی در طول زمان انتقال ایجاد میکنند یا به عبارتی خطاهایی را برای بیتهای باینری در حال انتقال به وجود میآورند. در این صورت ممکن است یک بیت 0 به بیت 1 تغییر کند و یا بالعکس.
در این مقاله به بررسی راههای تشخیص خطا در شبکه های کامپیوتری پرداختهایم.
تشخیص خطا در کدها (اجرا شده در لایه Data link یا Transport layer مربوط به مدل OSI)
هر پیغامی که منتقل میشود ممکن است در اثر نویز، به هم ریخته شود. جهت جلوگیری از این امر، میتوان از کدهای تشخیص خطا استفاده نمود. کدهای تشخیص خطا اطلاعات اضافهای هستند که به این پیغامهای دیجیتالی افزوده میشوند تا در صورت بروز خطا در طول زمان انتقال آن را تشخیص دهند.
روش اصلی جهت تشخیص خطا استفاده از بیتهای افزوده شده است، جایی که بیتهای مازاد به منظور تسهیل در شناسایی خطا اضافه میشوند.
انواع خطاهای شبکه های کامپیوتری
این خطاها را میتوان به دو دسته تقسیم کرد:
- Single-Bit Error (خطاهای تک بیتی)
- Burst Error (خطاهای متوالی)
Single-bit Error یا خطاهای تک بیتی
فقط یک بیت از واحدهای داده از یک به صفر یا از 0 به 1 تغییر میکند.
Single-bit error عمدتا در انتقال دادههای موازی (parallel) رخ میدهد. به عنوان مثال، اگر از هشت سیم برای ارسال هشت بیت از یک بایت استفاده شود و یکی از سیمها خراب شود، خطای تک بیتی برای هر بایت رخ میدهد.
Burst Error یا خطاهای متوالی
خطایی است که در آن چندین بیت از صفر به یک یا از 1 به 0 تغییر میکند. خطای Burst یا خطای متوالی، از اولین بیت مختل شده تا آخرین آنها در نظر گرفته میشود.
مدت زمان خطای burst نسبت به خطای single bit بیشتر است و عمدتا در انتقال دادههای Serial رخ میدهد. تعداد بیتهایی که تحت تاثیر قرار میگیرند، بستگی به مدت زمان نویز و میزان داده دارد.
تکنیکهای تشخیص خطا در شبکه های کامپیوتری
برخی از تکنیکهای مهم جهت شناسایی خطا عبارتند از:
- Simple Parity check
- Two-dimensional Parity check
- Checksum
- Cyclic redundancy check
1. تکنیک Simple Parity
Parity checking از بیتهای parity جهت بررسی دقیق انتقال دادهها استفاده میکند. Parity bit به تمام واحدهای داده (به طور معمول هفت یا هشت بیت) اضافه میشود تا دادهها منتقل شوند. Parity bit مربوط به هر واحد داده، طوری تنظیم میشود که تمامی بایتها یا اعداد فرد داشته باشند و یا مجموعهای از بیتهای زوج.
- یک مکانیزم ساده و ارزان جهت شناسایی خطاها به شمار میرود.
- در این تکنیک، یک بیت مازاد به عنوان parity bit وجود دارد که به انتهای هر واحد داده اضافه میشود تا تعداد یکها، زوج شود. بنابراین، تعداد کل بیتهای منتقل شده 9 خواهد بود.
- در صورتی که تعداد بیتهای 1 فرد باشد، parity bit 1 به آن اضافه میشود و در صورتی که تعداد بیتهای 1 زوج باشد، parity bit 0 به انتهای واحد داده اضافه میشود.
- در انتهای فرایند دریافت parity bit از دادههای دریافت شده محاسبه میشود و با parity bitهای دریافت شده، مقایسه میگردد.
- این تکنیک کل 1های فرد را ایجاد میکند بنابراین به آن even-parity checking نیز گفته میشود.
– معایب Simple Parity check
- تنها قادر به شناسایی خطاهای تک بیتی (single-bit) است که بسیار نادر هستند.
- در صورتی که دو بیت با هم عوض شوند، امکان تشخیص خطا را ندارد.
2. تکنیک Two-Dimensional Parity
Two-Dimensional Parity قادر به شناسایی یک یا چند خطای بیت میباشد. در صورتی که خطای یک یا چند بیتی رخ دهد، دریافت کننده پیام را با parity bit تغییر یافته دریافت میکند. این امر نشان دهنده این است که خطایی رخ داده و شناسایی شده است.
- عملکرد را میتوان با استفاده از بررسیهای Two-Dimensional Parity که دادهها را درون جدول سازماندهی میکند، بهبود بخشید.
- بیتهای Parity check برای هر ردیف محاسبه میشوند که معادل single-parity check است.
- در بررسی Two-Dimensional Parity، یک بلوک از بیتها به دو ردیف تقسیم میشود و ردیف مازاد بیتها به کل بلوکها اضافه میشود.
- در پایان فرایند دریافت، parity bitها با parity bitهای دریافت شده از دادهها مقایسه میشوند.
– معایب بررسی Two-Dimensional Parity
- چنانچه دو بیت در یک واحد داده مختل شوند و دقیقا دو بیت دیگر با همان موقعیت مکانی در یک واحد داده دیگر نیز مختل گردد، در آن صورت 2D Parity checker قادر به شناسایی خطا نخواهد بود.
- در برخی موارد نمیتوان از این تکنیک جهت شناسایی خطاهای 4بیتی یا بیشتر استفاده کرد.
3. تکنیک Checksum
Checksum روشی جهت شناسایی خطاست که بر پایه مفهوم افزونگی طراحی شده است که به دو دسته تقسیم میشود:
- Checksum Generator
Checksum در قسمت ارسال کننده ایجاد میشود. Checksum generator، دادهها را به قسمتهایی برابر n bit تقسیم میکند. سپس همه این قسمتها با استفاده از one’s complement arithmetic (مکمل یک) به هم اضافه میشوند.
مجموع دادهای که به دادهی اصلی اضافه میشود، به عنوان checksum field معروف است. دادههای توسعه یافته از طریق شبکه منتقل میشوند.
فرض کنید L مجموع کل قسمتهای دادهها میباشد، در آن صورت checksum معادل ?L خواهد بود.
فرستنده، مراحل زیر را انجام میدهد:
-
- واحد بلوک به بخشهای k تقسیم شده و هر یک دارای n bit میباشد.
- تمامی قسمتهای K جهت به دست آوردن مجموع با استفاده از مکمل یک، به هم اضافه میشوند.
- حاصل جمع، کامل شده و تحت عنوان checksum field شناخته میشود.
- دادهی اصلی و checksum field از طریق شبکه، ارسال میشوند.
- Checksum Checker
Checksum در قسمت دریافت کننده، تایید میشود. دریافت کننده، داده های دریافتی را به قسمتهایی برابر با n bit تقسیم میکند و تمام این قسمتها به هم اضافه میشوند و سپس این حاصل جمع، کامل میشود. در صورتی که متمم جمع صفر باشد، داده پذیرفته میشود و در غیر این صورت، داده پذیرفته نشده و رد میشود.
دریافت کننده، مراحل زیر را انجام میدهد:
-
- واحد بلوک به بخشهای k تقسیم شده و هر یک دارای n bit میباشد.
- تمامی قسمتهای K جهت به دست آوردن مجموع با استفاده از مکمل یک، به هم اضافه میشوند.
- حاصل جمع کامل میشود.
- در صورتی که حاصل جمع صفر باشد، داده پذیرفته میشود و در غیر این صورت، دادهها مورد قبول واقع نمیشوند.
4. تکنیک Cyclic Redundancy یا CRC
CRC تکنیکی است که جهت تعیین خطا استفاده میشود جهت شناسایی سالم بودن دادههای دریافتی مورد استفاده قرار میگیرد. این رویکرد، کار خود را با تقسیم باینری بیتهای دادههای ارسالی انجام میدهد.
فرستنده عملیات تقسیم را بر روی بیتهای ارسالی انجام داده و باقیمانده را محاسبه نموده و قبل از این که بیتهای واقعی را بفرستد، باقیمانده را به انتهای بیتهای واقعی میافزاید. فرستنده بیتهای دادههای واقعی را به همراه باقیمانده به صورت رمز ارسال میکند. در ضمن در صورتی که خطایی رخ داده باشد، ارسال مجدد انجام میشود.
از طرفی دیگر، دریافت کننده پیام نیز عملیات تقسیم را با استفاده از همان مقسوم روی کلمه رمز اجرا مینماید. در صورتی که عدد باقیمانده با بیتهای صفر برابر باشد، دادهها مورد پذیرش واقع شده و در غیر این صورت دادهها از بین میروند.
مراحل تشخیص خطا در تکنیک CRC:
- در تکنیک CRC، یک رشته از تعداد nهای صفر به واحد دادهها پیوست میشود و این تعداد n، کمتر از تعداد بیتهای از پیش تعیین شده است، به عبارتی n+1 بیت
- دادههایی که اخیرا گسترش پیدا کردهاند با استفاده از یک فرایند و توسط یک تقسیم کننده، تقسیم میشوند که تحت عنوان binary division معروف است. باقیماندهی تولید شده از این تقسیم نیز CRC remainder نامیده میشود.
- CRC remainder توسط صفرهای پیوست شده به انتهای دادههای اصلی، جایگزین میشوند. این واحد تازه تولید شده به دریافت کننده ارسال میشود.
- دریافت کننده، دادههای دنبال شده توسط CRC remainder را دریافت میکند. در ضمن دریافت کننده با کل این واحد مانند یک single unit رفتار میکند و توسط همان تقسیم کنندهای که جهت یافتن CRC remainder مورد استفاده قرار گرفته، تقسیم میشود.

حال این مفاهیم را از طریق یک مثال بیان میکنیم.
فرض کنید داده اصلی 11100 است و تقسیم کننده 1001
- CRC Generator
-
- یک CRC generator از تقسیم modulo-2 استفاده میکند. در ابتدا سه صفر به انتهای داده پیوست میشود تا طول تقسیم کننده 4 شود و همانطور که میدانیم طول رشتههای صفرهایی که پیوست میشوند همیشه یکی کمتر از طول تقسیم کننده میباشد.
- حال عدد ما میشود 11100000 و عدد به دست آمده تقسیم بر تقسیم کننده 1001 میشود.
- باقیمانده به دست آمده از این تقسیم باینری تحت عنوان CRC remainder شناخته میشود. مقدار عددی تولید شده از CRC remainder، عدد 111 است.
- CRC remainder توسط رشتهای از اعداد، صفر را به انتهای واحد داده پیوست میکند و رشته نهایی 11100111 خواهد بود که از طریق شبکه ارسال میشود.
- CRC Checker در تشخیص خطا در شبکه های کامپیوتری
-
- عملکرد CRC checker مشابه عملکرد CRC generator است.
- زمانی که رشتهی اعداد 11100111 دریافت میشود، سپس CRC checker تقسیم modulo-2 را انجام میدهد.
- رشتهی اعداد به همان تقسیم کننده، یعنی 1001 تقسیم میشود.
- در این حالت، CRC checker باقیماندهی صفر را ایجاد میکند. بنابراین، داده پذیرفته میشود.
تشخیص خطا در شبکه های کامپیوتری