حسین کعبی: وقتی فیگو را در جام جهانی زدم....
انتقال در مقیاسهای مختلف
شاید وقتی صحبت از انتقال دادههای دیجیتال به میان میآید، اولین چیزی که به ذهن میرسد، انتقال داده بین دو رایانه باشد، اما لازم است توجه داشته باشیم که انتقال دادهها از روی سطح دیسک به حافظه میانگیر دیسک یا از میانگیر به حافظه و از حافظه به پردازنده و... نیز مقیاسهای کوچکتری از انتقال دادههای دیجیتال هستند.
در مقیاس بزرگ نیز انتقال دادهها بین دو شهر یا حتی بین قارهها از طریق امواج ماهوارهای و غیره صورت میگیرد. تفاوت اصلی میان هر یک از مثالهای ذکر شده، در رسانه انتقال و اندازه اطلاعات و فاصله مبدا و مقصد است.
میزان خطا
در هر انتقال، در هر مقیاسی که باشد، احتمال رویداد خطا و تغییر دادههای دیجیتال وجود دارد، اما با توجه به تفاوتهای یاد شده، این احتمال متغیر است. مثلا در انتقال اطلاعات از حافظه به پردازنده، احتمال رویداد خطا و تغییر آنقدر کم است که میتوان با اطمینان بالایی گفت که دادهها بدون خطا منتقل میشوند، اما وقتی صحبت از فاصله دو شهر به میان میآید، موارد متعددی ظهور پیدا میکنند که میتوانند موجب بروز خطا و تغییر در دادهها شوند. جنس رسانه و مرغوبیت آن، عوامل محیطی همچون میدانهای الکتریکی و مغناطیسی، فاصلههای زیاد و تاخیر انتشار و... ازجمله مواردی هستند که میتوانند باعث رخداد خطا در انتقال شوند.
راههای مختلفی وجود دارد که بتوان رخداد خطا در انتقال دادهها را تشخیص داد. با توجه به این که احتمال تغییر 2 بیت از یک بسته اطلاعاتی در شبکه بسیار کم است یک راه تشخیص تغییر یک بیت خطا اضافه کردن بیت توازن (Parity) است. روش کار به این شکل است که با توجه به زوج یا فرد بودن تعداد یکهای موجود در یک بسته داده دیجیتال، یک بیت را به آن طوری اضافه میکنند که تعداد یکها زوج
(یا فرد) باقی بماند. مثلا اگر بسته حاوی داده 8 بیتی 01110101 باشد و بیت توازن فرد در نظر گرفته شود چون تعداد یکهای این بسته، فرد است، یک بیت «0» به این 8 بیت اضافه میشود تا تعداد یکها فرد باقی بماند و بسته 9 بیتی ارسال میشود. در مقصد نیز تعداد یکها شمارش میشود. در صورتی که تعداد فرد باشد، متوجه میشوند که بسته سالم به دستشان رسیده است. بنابراین بعد از جدا کردن بیت توازن، از دادههای 8 بیتی استفاده میکنند و در صورت زوج بودن تعداد یکها متوجه میشوند که خطایی رخ داده است. بنابراین میتوان درخواست مجدد ارسال آن بسته را به سمت مقصد فرستاد. با توجه به این خاصیت به وضوح میتوان دریافت که بیت توازن علاوه بر تشخیص یک بیت خطا قادر به تشخیص تعداد خطاهای فرد دیگر نیز هست. یعنی 3، 5 و... بیت خطا را نیز تشخیص میدهد اما نمیتواند 2، 4 و... بیت خطا را متوجه شود. در صورت وجود مثلا 2 بیت خطا، مقصد متوجه آن نشده و دادههای دریافتی را به عنوان دادههای سالم در نظر میگیرد. بنابراین به وضوح میتوان دریافت که اگر اطلاعات حیاتی باشد و احتمال رخداد خطا در 2بیت نیز زیاد باشد، استفاده از این روش مناسب نخواهد بود.
تشخیص و تصحیح خطا
پیش از این تنها قادر به تشخیص یک یا تعدادی خطا در یک رشته از دادههای دیجیتال بودیم البته بیت توازن را میتوان به یک رشته 100 بیتی (کمتر یا بیشتر) هم اضافه کرد، اما اگر بخواهیم علاوه بر تشخیص خطا، بتوانیم محل خطا را هم بفهمیم و به اینترتیب با تبدیل صفر به یک یا یک به صفر در آن قسمت، خطا را تصحیح کنیم، باید هزینه بیشتری را بپردازیم. برای این کار با استفاده از الگوریتمی به نام «کدهمینگ» میتوان با اضافهکردن 3 بیت به بسته 8 بیتی، در صورت داشتن تنها یک بیت خطا، آن را تشخیص داده و سپس آن را تصحیح کرد که این سه بیت به شکل خاصی تولید و به بسته داده الحاق میشود. مشاهده میشود که اضافه شدن سه بیت به هر 8 بیت و انتقال این میزان داده، در مجموع برای محیطی که رخداد خطا در آن احتمال پائینی دارد عاقلانه نیست.
بنابراین تنها در کاربردهای خاص از این روش استفاده میشود. معمولا در اینترنت و شبکههای معمول، از همان بیت توازن استفاده میشود. در این روش ضمن اینکه میزان دادههای انتقالی به حداقل میرسد میتوان در صورت تشخیص خطا در یک بسته، آن را مجددا درخواست کرد.
در پایان نیز بعد از دریافت کل اطلاعات، میتوان با استفاده از کدی به نام hash متوجه شد که آیا کل اطلاعات به سلامت دریافت شده یا خیر. در صورت تشخیص ناسالم بودن کل اطلاعات، باید همه آن را مجدد دریافت کرد! لازم به ذکر است که چون معمولا خیلی کم این اتفاق میافتد، این کار در کل مقرون به صرفه خواهد بود و استفاده از کد تصحیح خطا در این کاربردهای عمومی ترجیح داده نمیشود.
پارسا ستودهنیا
حسین کعبی: وقتی فیگو را در جام جهانی زدم....