
کدگذاری سیگنال در شبکه – آموزش شبکه درس 24
کدگذاری در شبکه راهکاری است که برای ارسال سیگنال ها میان بخش های مختلف شبکه به کار می رود. در این درس راهکارهای مختلف کدگذاری سیگنال در شبکه را بررسی می کنیم.
کدگذاری سیگنال در شبکه
اولین گام برای آنکه بتوانیم لینکها و نودهای شبکه را در قالب بلوکهای ساختاری قابل استفاده به هم متصل کنیم، آن است که بتوانید درک کنیم که چطور باید آنها را در شیوه ای به هم متصل کنیم که بیتها بتوانند از یک گره – node – به گره دیگر بروند. همانطور که در پیش از این نیز ذکر شد، سیگنالها بر روی لینکهای مختلف منتشر میشوند. به همین خاطر، وظیفه ای که در اینجا داریم آن است که دادههای باینری که در گره منبع هستند و میخواهیم آن را به گره مبدل برسانیم را از میان لینکهای انتقال دهیم که به مقصد مشخص شده برسند و سپس سیگنالهای دریافت شده را مطابق با دادههای باینری که در گره ارسال کننده بودند، رمزگشایی کرده و تفسیر کنیم. ما در اینجا جزئیات مرتبط به مدلاسیون را نادیده میگیریم و فرض میکنیم که ما با دو سیگنال متفاوت یعنی آستانه بالائی و پائینی کار میکنیم. در عمل، این سیگنالها میتوانند متناسب با دو ولتاژ مختلف بر روی یک لینک پایه مسی، دو سطح متفاوت از توان بر روی یک فیر نوری و یا دو طول موج متفاوت در یک ارتباط رادیوئ در نظر گرفته شوند.
بیشتر عملکردهایی که در این بخش آمزش داده میشوند، به وسیله کارت شبکه انجام میشود- این قطعه سختافزاری امکان اتصال یک گره به یک لینک را میسر میکند. کارت شبکه حاوی یک جزء ارسال سیگنال است که بیتها را در گره ارسال کننده به صورت سیگنالی رمزگذاری میکند، همچنین دارای بخشی است که سیگنالهای دریافت از لینک ارتباطی را رمزگشایی مینماید. به همین خاطر، همانطور که در تصویر 2.3 نشان داده شده است، سیگنال میان دو جزء ارسال سیگنال تبادل میشود و جریانی از بیتها میان آداپتورهای شبکه ایجاد میگردد.

تصویر 2.3 اجزا انتقال سیگنالها میان دو گره؛ بیتها میان آداپتورهای دستگاهها انتقال پیدا میکنند.
بگذارید در اینجا دوباره به مسئله کد گذاری بیتها در قالب سیگنال بازگردیم. مشخص ترین کاری که در اینجا میتوان انجام داده آن است که مقدار دادههایی که برابر با یک هستند را در سیگنال بالائی قرار دهیم و مقدارهایی که برابر با صفر هستند را در سیگنال پائینی بگذاریم. این دقیقا همان الگوی است که برای طرح رمز نگاری معمول که به اندازه کافی نیز اصول رمزنگاری در آنها رعایت میشود یعنی « غیربرگشت به صفر (NRZ) یا Nonreturn to Zero » به کار میرود. برای مثال، تصویر 2.4 در اینجا نشان دهنده یک تصویر شماتیک از سیستم رمزنگاری شده غیربرگشت به صفر (NRZ) (در پائین) است که متناظر به انتقال توالیهای ویژه از بیتها (بالا) است.

تصویر 2.4 شیوه غیربرگشت به صفر (NRZ) که برای رمزنگاری یک جریان بیت به کار میرود.
مسئله ای که در شیوه غیربرگشت به صفر (NRZ) وجود دارد آن است که در اینجا یک صف تکراری از چند توالی پشت سر هم یک ثانیه ای وجود دارد، که میتوان گفت، سیگنالها برای مدت زمان بیشتری در بالا میمانند؛ به صورت مشابه توالی صفر ثانیه به معنای آن است که سیگنالها برای یک مدت زمان طولانی تری در پائین میمانند. در اینجا دو مسئله اسی وجود دارند که در ارسال رشتههای بلند صفر و یک خود را نشان میدهد. اولین نکته در اینجا آن است که آن منجر به شرایطی میشود که به عنوان «خط مبنای گم شده – basline wander» شناخته میشود. به ویژه، این موضوع در شرایطی خود را نشان میدهد که دریافت کنند سیگنال ابتدا باید منتظر باشد که سطح سیگنالها را دریافت کند و سپس با کمک آنها تمایزی میان سیگنالهای بالائی و پائینی ایجاد کند. هر جائی که سیگنال پائین تر از مقدار متوسط باشد، در آن صورت دریافت کننده نتیجه میگیرد که آن برابر با صفر است و در غیر این صورت در صورتی که توان سیگنال بالاتر از مقدار متوسط باشد، دریافت کننده ان را یک تفسیر میکند. البته در اینجا مسئله این است که ما در اینجا با صف متوالی از صفرها و یکها روبرو هستیم و این میانگین به صورت مداوم تغییر میکند، و به سختی میتواند یک تغییر مشخص و معنادار در سیگنال را شناسایی کرد.
دومین مسئله در اینجا آن است که انتقال فرکانس از سطح بالا به پائین و بالعکس باید در سطحی باشد که امکان بازیابی و تشخیص آن وجود داشته باشد. مسئله سرعت بازیابی (clock recovery) در اینجا هم در فرایند کدگذاری و هم کدگشائی به وسیله یک ساعت مبنا (clock) انجام میشود، در هر چرخه یا سیکل ساعت (clock cycle) ارسال کننده یک بیت را انتقال میدهد و دریافت کننده نیز یک بیت را دریافت میکند. ساعت فرستنده و گیرنده به صورت بسیار دقیق با هم همزمان هستند تا دریافت کننده بتواند همان بیتهائی که از سوی ارسال کننده ارسال میشود را با همان ترتیب دریافت کند. اگر ساعت گیرنده حتی اندکی سریعتر و یا کندتر از ساعت فرستنده باشد، در آن صورت کدگشائی از سیگنالها به صورت درستی انجام نمی شود. شما میتوانید ارسال ساعات به دریافت کننده را بر روی یک کابل جداگانه تصور کنید، اما معمولا از این کار پرهیز میشود، زیر آن سبب میشود که هزینه کابل کشی دو برابر و یا حتی بیشتر شود. بنابراین، به جای این کار دریافت کننده ساعت را از طریق سیگنال دریافتی به دست میآورد – این سیگنال در فرایند سرعت بازیابی (clock recovery) تعیین میشود. هر جائی که سیگنال تغییر کند، مانند زمانی که از یک به صفر و یا از یک به صفر میرود، در آن صورت دریافت کننده مرزهای سیکل ساعت را درک میکند و میتواند مجددا خودش را با آن همزمان کند. هرچند، در یک دوره زمانی بلند، بدون یک چنین انتقالی ممکن است ساعت دچار خطا شود. به همین خاطر سرعت بازیابی وابسته به داشتن تعداد زیادی از انتقال در جریان سیگنال است و در اینجا اینکه چه دادههائی ارسال میشود، مسئله مهمی به شمار نمی رود.
یک روش که این مسئله را تشخیص داده است، به عنوان روش معکوس غیربرگشت به صفر (NRZI) شناخته میشود، که در این روش ارسال کننده یک انتقال از سیگنال جاری انجام میدهد تا یک را کدگذاری کند، و در آن حال باقی میمانند تا آن به حالت صفر کدگذاری شود. این میتواند مسئله توالی یکها را حل کند، اما نمی تواند کاری برای توالی صفرها انجام دهد. روش معکوس غیربرگشت به صفر (NRZI) در تصویر 2.5 نمایش داده شده است. یک روش جایگزین در اینجا که به عنوان کدگذاری منچستر (Manchester encoding) شناخته میشود، در اینجا یک کار صریح تر انجام میشود و در آن بخش ساعت به وسیله انتقال کاملا صریح و یا با استفاده دادهها کد شده NRZ و ساعت انجام میشود. (در اینجا به ساعت محلی به عنوان یک سیگنال داخلی فکر کنید که به وسیله جابجائی از پائین به بالا جایگزین میشود؛ یک جفت بالا/ پائین ، به عنوان یک سیکل ساعت در نظر گرفته میشود). روش کدگذاری منچستر در تصویر 2.5 نشان داده شده است. همانطور که مشاهده میشود، روش کدگذاری منچستر منجر به آن میشود که صفر به صورت حرکت از پائین به بالا کد گذاری شود، در حالی که یک به صورت حرکت از بالا به پائین کدگذاری میشود. به خاطر آن که هم صفرها و هم یکها در یک انتقال سیگنال مشخص میشود، میتوان ساعت را به صورت کارآمدی در قسمت دریافت کننده به دست آورد. (همچنین در اینجا روش متفاوتی برای کدگذاری منچستر (Manchester encoding) وجود دارد که به آن روش کدگذاری دیفرنسیالی (Differential Manchester) گفته میشود که در آن یک با اولین نیمه از سیگنال که برابر با نیمه پایانی از سیگنال بیت قبلی است کدگذاری میشود، و صفر نیز با استفاده از نیمه اول از سیگنال مخالف تا نیمه آخر سیگنال بیت قبلی کدگذاری میشود).
مسئله کدگذاری منچستر نیز با مسئله ای روبرو هستیم و آن این است آن نرخ در هر کدام از انتقالهای سیگنال که بر روی یک لینک ساخته میشود را دو برابر میکند، این به معنای آن است که دریافت کننده تنها نیمی از زمان قبل را فرصت دارد که بتواند هر کدام از پالسهای سیگنال را مشخص کند. هر گاه نرخ در هر کدام از سیگنالها تغییر کند، ما به آن نرخ باد (baud rate)می گوئیم. در مورد کدگذاری منچستر یک نرخ بیت نصف نرخ باد (baud rate) است، بنابراین کدگذاری در اینجا تنها 50% اثر بخش است. این را در ذهن داشته باشید که اگر دریافت کننده قادر به آن باشید که نرخ باد (baud rate) بالاتری را در کدگذاری منچستر به دست بیاورید، مانند آنچه که در تصویر 2.5 نشان داده شده است، هر دو سیستم غیربرگشت به صفر (NRZ) و معکوس غیربرگشت به صفر (NRZI) قادر هستند که دوبرابر بیتهایی که در یک دوره زمانی ارسال میشوند را انتقال دهند.

تصویر 2.5 استراتژیهای متفاوت کدگذاری
در اینجا به این نکته توجه کنید که، نرخ بیت (bit rate) اهمیت کمتر و یا برابر با نرخ باد (baud rate) (همانطور که در کدگذاری منچستر میبینید) دارد. اگر طرح مدلاسیون در اینجا به کار بگیرید (و یا قابل تشخیص باشد)، چها سیگنال متفاوت به جای دو مورد (یعنی سیگنالیهای بالائی و پائینی) خواهیم داشت، پس این امکان وجود دارد که در بازه ساعت دو بیت را کدگذاری کنیم، و در نتیجه نرخ بیتی (bit rate) در اینجا دو برابر نرخ باد (baud rate) خواهد شد. به صورت مشابه، این امکان وجود دارد که بتواند تا هشت سیگنال مختلف را با این شیوه مدلاسیون کرد، که به معنای آن است ما قدار به انتقال سه بیت به ازای هر بازه ساعت هستیم. به صورت کلی، لازم است این نکته را در ذهن داشته باشیم که ما مدلاسیون را به شدت ساده کردیم، زیرا مدلاسیون بسیار پیچیده تر از ایجاد سیگنالهای بالائی و پائینی است. غیر معمول نیست که ترکیب فاز و دامنه سیگنالها را تغییر دهیم و به همین خاطر ما میتوانیم 16 و یا حتی 64 الگوی مختلف در اختیار داشته باشید (که اغلب با سمبلهائی که در طول هر کدام از بازههای ساعت هستند بیان میشوند). مدلاسیون دامنه یک چهارم (QAM) – Quadrature Amplitude Modulation- یکی از روشهایی است که برای این چنین طرحهای مدلاسیونی به کار میرود.
روش کدگذاری نهایی که ما به بررسی آن میپردازیم به نام 4B/5B شناخته میشود، که در آن تلاش میشود ناکارآمدیهای کدگذاری منچستر بدون آنکه مشکلاتی نظیر اضافه شدن سیگنالهای بالا و یا پائین رخ دهد، بر طرف شود. ایده روش کدگذاری 4B/5B از این خواست که بتوان بیتهای بیشتری را وارد جریان بیتها کرد نشات میگیرد، و بنابراین میتواند توالیهای بلندتر صفر و یک را ایجاد کرد. به صورت اختصاصی، هر 4 بیت از دادهها واقعی در یک کد 5 بیتی قرار میگیرند و سپس به دریافت کننده ارسال میشوند، به همین خاطر به آن روش کدگذاری 4B/5B میگوئیم. کدهای 5 بیتی به صورتی انتخاب میشوند که هر کدام از یکها بیشتر ای یک صفر در ادامه خودشان ندارد و هیچ کدام از آنها دارای دو صفر پی در پی در ادامه خودشان نیستند. به همین خاطر، هنگامی که این بیتها به صورت پی در پی ارسال شوند، هیچکدام از کدهای 5 بیتی بیشتر از سه صفر پی در پی را انتقال نمی دهند. در نتیجه کدها 5 بیتی را میتواند با استفاده از روش معکوس غیربرگشت به صفر (NRZI) انتقال داد، که این عمل توضیح میدهد چرا تنها باید نگران صفرهای متوالی باشیم – روش کدگذاری معکوس غیربرگشت به صفر (NRZI) مسئله یکهای پی در پی را حل کرده است. توجه کنید که روش کدگذاری 4B/5B منجر به افزایش 80 درصدی انتقال دادهها میشود.
جدول 2.2 روش کدگذاری 4B/5B | |
سمبل 4 بیتی | کد 5 بیتی |
0 | 11110 |
1 | 1001 |
10 | 10100 |
11 | 10101 |
100 | 1010 |
101 | 1011 |
110 | 1110 |
111 | 1111 |
1000 | 10010 |
1001 | 10011 |
1010 | 10110 |
1011 | 10111 |
1100 | 11010 |
1101 | 11011 |
1110 | 11100 |
1111 | 11101 |
جدول 2.2 کدهای 5 بیتی را نشان میدهد که متانظر با 15 حالت ممکن از سمبلهای 5 بیتی هستند. دقت کنید که چون بیتها در اینجا برای انتقال 32 حالت متفاوت کافی هستند، و ما تنها از 16 مورد آنها برای انتقال دادهها استفاده میکنیم، در اینجا 16 کد، کنار گذاشته میشوند که ما میتوانید از آنها برای اهداف دیگری استفاده کنیم. از این میان کد 11111 در زمانی استفاده میشود که یک خط بی کار باشد و کد 00000 نیز در زمانی به کار میرود که یک خط از دست رفته باشد، و کد 00100 نیز برای مکث به کار میرود. از 13 کد باقیمانده 6 مورد آن معتبر نیستند، زیرا آنها قانون منتهی به صفر شدن و دو صفر پی در پی را نقض میکنند و در اینجا 6 سمبل کنترل متفاوت برای ما باقی میماند. برخی از پروتکلهای فریم بندی که در ادامه این بخش خواهیم خواهند از این سمبلهای کنترلی استفاده میکنند.