لایه پیوند داده (Data Link Layer) دومین سطح از مدل اتصال متقابل سامانه های باز (Open Systems) است.

در این لایه در مورد الگوریتم های دستیابی به ارتباطات قابل اعتماد بین دو کامپیوتر بحث میشود.

از مهم ترین وظایف لایه پیوند داده، انتقال داده ها از لایه شبکه ماشین مبدا به لایه شبکه ماشین مقصد است.

ابتدا مسائلی را که باید جهت طراحی لایه Data Link مدنظر گرفته شود، بررسی کرده و سپس به سرویس های ارائه شده روی آن خواهیم پرداخت.
لایه پیوند داده شبکه کامپیوتری

 

لایه پیوند داده وظایف خاصی دارد که باید انجام دهد. این وظایف عبارتند از:

1- ارائه سرویس های مشخص به لایه شبکه

2- مدیریت خطاهای انتقال

3- تنظیم جریان داده ها (به گونه ای که گیرنده های کند در برابر فرستنده های سریع به مشکل برنخورند!)

 

جهت رسیدن به این اهداف، لایه پیوند داده بسته های رسیده از لایه شبکه را گرفته و آنها را به صورت فریم (Frame) در می آورد.

هر فریم سه قسمت دارد: Header (سرآیند)، Data یا به اصطلاح Payload Field (داده اصلی) و Trailer (پی آیند)

مدیریت فریم ها کلیدی ترین وظیفه لایه Data Link است.

در بحث هایی که برای لایه پیوند داده انجام میشود، اصولی مطرح میشود که در لایه های دیگر نیز کاربرد دارند. (برای مثال کنترل خطا و کنترل جریان داده که از بحث این مطلب ما فراتر میرود.)

رابطه بسته و فریم در لایه پیوند داده

 

در ادامه سرویس هایی که به لایه شبکه داده میشود، را بررسی میکنیم.

وظیفه لایه پیوند داده، ارائه سرویس به لایه شبکه است.

مهم ترین این وظایف عبارت است از انتقال داده ها از لایه شبکه ماشین مبدا به لایه شبکه ماشین مقصد.

در لایه شبکه ماشین مبدا چیزی به نام Process وجود داد که تعددی بیت را به لایه پیوند داده میدهد تا به مقصدی خاص منتقل کند.

وظیفه لایه پیوند داده ماشین مبدا، انتقال این بیت ها به ماشین مقصد و رساندن آنها به دست لایه شبکه مقابل است.

این موضوع به طور کامل در تصویر زیر نشان داده شده است.

مسیر انتقال داده در لایه پیوند داده

 

البته برای سادگی بهتر است تصور کنیم دو پردازش در لایه پیوند داده، آنها را بین خود رد و بدل میکنند!

 

لایه پیوند داده را میتوان به گونه ای طراحی کرد که سرویس های مختلفی ارائه کند، که این سرویس ها از سیستمی به سیستم دیگر متفاوت است.

معقول ترین این سرویس ها به شرح زیر هستند:

1- سرویس غیرمتصل بدون تصدیق دریافت (Unacknowledged Connectionless Service)

2- سرویس غیرمتصل با تصدیق دریافت (Acknowledged Connectionless Service)

3- سرویس اتصال گرا با تصدیق دریافت (Acknowledged Connection-Oriented Service)

 

در ادامه به بررسی دقیق این سرویس ها خواهیم پرداخت.

در سرویس غیرمتصل بدون تصدیق دریافت، ماشین مبدا فریم های مستقلی را به ماشین مقصد میفرستد، بدون اینکه منتظر تصدیق دریافت آنها از طرف ماشین مقصد بماند.

هیچ اتصال منطقی بین دو ماشین برقرار نمیشود، پس نیازی به قطع اتصال هم نیست.

اگر فریمی در اثر نویز خط از بین برود، هیچ کوششی برای تشخیص این موضوع و مقابله با آن در لایه پیوند داده صورت نخواهد گرفت.

این سرویس برای مواقعی مناسب است که نرخ خطا بسیار پایین باشد و در این حالت مقابله با خطا به لایه های بالاتر واگذار میشود.

این سرویس برای ترافیک زمان-واقعی (مانند سرویس صدا)، که در آن دیر رسیدن بدتر از نرسیدن است، نیز مناسب است.

در اغلب LAN ها نیز لایه پیوند داده از سرویس های غیرمتصل بدون تصدیق دریافت استفاده میشود.

 

سرویس بعدی که قابلیت اعتماد بیشتری دارد، سرویس غیرمتصل با تصدیق دریافت است.

در این سرویس نیز هیچ اتصال منطقی بین مبدا و مقصد وجود ندارد، ولی دریافت فریم ها از سوی ماشین مقصد تصدیق میشود.

بدین ترتیب، فرستنده میتواند پی ببرد که آیا فریم ها به درستی دریافت شده اند یا خیر؛ اگر فریمی در مدت زمان معین به مقصد نرسد، میتوان آنرا دوباره ارسال کرد.

این سرویس برای کانال های غیر قابل اعتماد (مانند سیستم های بیسیم) مناسب است.

 

لازم هست تاکید کنیم که توجه به تصدیق دریافت در لایه پیوند داده فقط برای بهینه سازی سیستم است و هیچ الزامی در آن نیست، چون این کار را همیشه میتوان در لایه شبکه انجام داد.

اگر تصدیق دریافت در زمان مشخص از راه نرسد، فرستنده میتواند بسته را دوباره ارسال کند.

مشکل اینجاست که فریم ها معمولا طول مشخصی دارند، در حالی که بسته ای که لایه شبکه میفرستد چنین نیست.

اگر بسته ای (مثلا) به 10 فریم شبکسته شود و 20% این فریم ها گم شوند، زمان رسال بسته بسیار طولانی خواهد شد.

اما اگر برای هر فریم تصدیق دریافت درخواست شود، این کار سریعتر میشود.

در کانال های قابل اعتماد مانند فیبر نوری، بار اضافی چنین پروتکل های سخت گیرانه ای در لایه پیوند داده غیرضروری است؛ اما در محیط های ذاتا پُر نویز، مانند بیسیم (Wireless) بسیار ارزشمند خواهد بود.

 

بهترین سرویسی که لایه پیوند داده میتواند به لایه شبکه بدهد، سرویس اتصال-گرا (Connection-Oriented) است.

در این سرویس قبل از شروع ارسال داده از مبدا به مقصد، یک اتصال بین آنها برقرار میشود.

هر فریمی که روی این اتصال فرستاده میشود، شماره گذاری شده است و لایه پیوند داده دریافت آنها را نیز تضمین میکند.

همچنین تضمین میشود که هر فریم فقط یک بار (و به همان ترتیب ارسال) دریافت شود. اما در سرویس های غیرمتصل، میتوان انتظار داشت که بسته ای چندین بار ارسال (و در نتیجه چندین بار هم دریافت) شود.

سرویس اتصال گرا، استریم قابل اعتمادی از بیت ها را در اختیار لایه شبکه میگذارد.

 

ارسال داده ها در سرویس اتصال گرا سه مرحله دارد:

در مرحله اول اتصال برقرار شده و متغیرهای لازم (برای شمارش فریم ها و اینکه کدام فریم ها دریافت شده اند و کدام نه) ست میشوند.

در مرحله دوم، فریم ها منتقل میشوند.

و در مرحله آخر، اتصال قطع شده و منابع آن (متغیرها و بافرها) آزاد میشوند.

 

اجازه دهید این تعریف را با یک مثال پایان دهیم.

یک زیرشبکه WAN متشکل از چند مسیریاب (Router) که با خطوط نقطه به نقطه (Peer-to-Peer) تلفن به یکدیگر متصل شده اند، را در نظر بگیرید.

وقتی یک فریم به مسیریاب میرسد، سخت افزار، آنرا از نظر خطا چک میکند و سپس به نرم افزار لایه پیوند داده (که میتواند روی چیپ های کارت شبکه قرار داشته باشد) تحویل میدهد.

نرم افزار لایه پیوند داده فریم را چک میکند تا مطمئن شود همان چیزیست که باید باشد و اگر چنین بود، قسمت داده اصلی آنرا به نرم افزار مسیریابی میدهد.

نرم افزار مسیریابی، مسیر خروجی مناسب را تعیین کرده و بسته را به لایه پیوند داده پس میدهد تا ارسال شود. (مطابق تصویر زیر)

محل فعالیت لایه پیوند داده

 

نرم افزارهای مسیریابی معمولا حوصله بسته هایی که مدام گم میشوند را ندارند و دوست دارند بسته ها، درست و مرتب روی خطوط Peer-to-Peer تحویل شوند.

این مسئله بر عهده پروتکل لایه پیوند داده است که خطوط پر نویز و غیرقابل اعتماد را به صورتی مطمئن (یا نسبتاً مطمئن) در آورد.

با اینکه در تصویر فوق، نرم افزار لایه پیوند داده (در هر روتر) در دو نقطه دیده میشود، اما در واقع یک پردازش واحد است که به کمک جدول ها و ساختمان داده های مختلف، تمام کارها را انجام میدهد و تمام خطوط را کنترل میکند.