لایه پیوند داده‌ای

بندانگشتی|لایهٔ پیوند داده‌ای
**لایهٔ پیوند داده‌ای**
دومین سطح از مدل اتصال متقابل سامانه‌های باز می‌باشد. در این لایه بر روی الگوریتم‌های دستیابی به ارتباطات قابل اعتماد بین دو کامپیوتر همسایه بحث می‌شود. این لایه دارای وظایفی به قرار زیر است:
* ارائه سرویس‌های مشخص به لایهٔ شبکه
* مدیریت خطاهای انتقال
* تنظیم جریان داده‌ها
برای تحقق این اهداف این لایه اقدام به فریم بندی اطلاعات می‌نمایید.

## ارائه سرویس‌های مشخص به لایه شبکه
از مهم‌ترین وظایف لایه پیوند داده انتقال داده‌ها از لایه شبکهٔ ماشین مبدأ به لایه شبکه ماشین مقصد می‌باشد. این ارتباط (بخش الف) در شکل مقابل نشان داده شده‌است. البته این اتصال ارتباطی همچون بخش (ب) که ارتباطی واقعی است، را دنبال می نماید.
سرویس‌هایی که لایه پیوند داده ارائه می‌کند، از سیستمی تا سیستم دیگر متفاوت است. اما از مهم‌ترین سرویس‌ها عبارت‌اند از:
* **سرویس غیر متصل بدون تصدیق دریافت**: این سرویس در اکثر LANها مورد استفاده قرار می‌گیرد.
* **سرویس غیر متصل با تصدیق دریافت**: این سرویس برای کانال‌های غیر اعتمادی مثل سیستم‌های شبکه بی‌سیم مناسب است.
**سرویس اتصال گرا با تصدیق دریافت**:این سرویس که مناسب‌ترین سرویس این لایه است در سه مرحله انجام می‌گیرد.
# مقدار دهی متغیرهای لازم برای شمارش فریم‌ها و غیره.
# انتقال فریم ها.
# قطع اتصال و آزادسازی متغیرها و بافر ها.

## فریم بندی
جهت فریم بندی روش‌های زیر وجود دارد:
# **شمارش کاراکتر ها**: در این روش تعداد کاراکترهای فریم در یکی از فیلدهای سرآیند آن نوشته می‌شود. وقتی این فریم به مقصد برسد، لایه پیوند داده مقابل به کمک آن‌ها فریم داده‌ای را مشخص می‌کند.

البته در این روش ممکن است بیت مشخص‌کننده آغاز و انتهای فریم هم آسیب ببیند. در این صورت راهی باقی نمی ماند جز اینکه به فکر روش مورد اعتماد دیگری باشیم.
# **بایتهای پرچم، با لاگذاری بایت**: در این روش فلگ‌هایی (نشانه) برای مشخص کردن ابتدا و انتهای فریم داده‌ای استفاده می‌شود.این روش هم مشکلات خاص خود را دارد چونکه ممکن است بخشی از داده‌ها شامل بایت‌های پرچم قراردادی باشد.
# **پرچم‌های شروع و پایان، با لاگذاری بیت**: در این شیوه هر فریم با طرح بیتی ۰۱۱۱۱۱۱۰ شروع می‌گردد و در سمت فرسنده به محض مشاهده ۵ بیت ۱ پشت سرهم یک ۰ قرار می‌دهد. عکس این رویداد در قسمت گیرنده رخ می‌دهد.
# **حالت‌های غیر مجاز کُدگذاری لایه‌ٔ فیزیکی**: در این روش در اصل نوعی افزونگی داریم. مثلاً در برخی LANها هر بیت داده با دو بیت فیزیکی نشان داده می‌شود: بیت ۱ با زوج بالا-پایین و بیت ۰ با زوج پایین-بالا.
در بسیاری از پروتکل‌های لینک داده برای اطمینان بیشتر از ترکیب روش‌های گفته شده‌استفاده می‌شود.

## کنترل خطا
جهت کنترل خطای دریافت اطلاعات معمولاً از دو مکانیزم استفاده می‌شود.
* **تصدیق دریافت**: گیرنده دریافت بسته را تصدیق می‌کند.
* **استفاده از زمانسنج**: هر بسته اگر در مدت زمان معینی به مقصد نرسید، دوباره ارسال می‌شود .

## کنترل جریان
برای یکی کردن سرعت ارسال و دریافت بسته‌های اطلاعاتی معمولاً از راهکارهای کنترل جریان استفاده می‌شود. در زیر چند راهکار را بیان می کنیم.
* **کنترل جریان بر اساس بازخورد**: گیرنده آمادگی خود را برای دریافت بسته‌ها اعلام می‌کند.
* **کنترل جریان بر اساس نرخ**

## پروتکل‌های لینک داده
* پروتکل یکطرفه نا مقید
* پروتکل توقف-انتظار یکطرفه
* پروتکل یکطرفه برای کانال‌های نویز دار
* پروتکل پنجره لغزنده ۱-بیتی
* پروتکل N تا به عقب برگرد
* پروتکل تکرار انتخابی 
در این بخش پروتکل یکطرفه نا مقید که ساده‌ترین این پروتکل ها(و البته ناقص‌ترین آنها) را ارائه می کنیم: 

`
<pre>
/* Protocol 1 (utopia) provides for data transmission in one direction only, from
   sender to receiver.  The communication channel is assumed to be error free
   and the receiver is assumed to be able to process all the input infinitely quickly.
   Consequently, the sender just sits in a loop pumping data out onto the line as
   fast as it can. */

typedef enum {frame_arrival} event_type;
#include "protocol.h"

void sender1(void)
{
  frame s;			/* buffer for an outbound frame */
  packet buffer;		/* buffer for an outbound packet */

  while (true) {
        from_network_layer(&buffer);	/* go get something to send */
        s.info = buffer;	/* copy it into s for transmission */
        to_physical_layer(&s);	/* send it on its way */
  }	/* Tomorrow, and tomorrow, and tomorrow,
 	   Creeps in this petty pace from day to day
	   To the last syllable of recorded time.
	        - Macbeth, V, v */
}

void receiver1(void)
{
  frame r;
  event_type event;		/* filled in by wait, but not used here */

  while (true) {
        wait_for_event(&event);	 /* only possibility is frame_arrival */
        from_physical_layer(&r); /* go get the inbound frame */
        to_network_layer(&r.info); /* pass the data to the network layer */
  }
}
</pre>
`


## ارزیابی پروتکل‌ها
تکنیک‌هایی جهت ارزیابی پروتکل‌های شبکه وجود دارد. این تکنیک‌ها بایستی دقیق و مبتنی بر اصول ریاضی باشد. دو روش زیر از مهم‌ترین این روش‌ها هستند.
* مدل ماشین حالت محدود
* مدل شبکه پتری

## پیوند به بیرون
مدل مرجع OSIمقایسه مدل‌های OSI و TCP/IPمدل مرجع TCP/IP

## منابع

*شبکه‌های کامپیوتری* - آندرواس. تَنن بام - ویراست چهارم۲۰۰۳

رده:پروتکل‌های اواس‌آی
رده:پروتکل‌های لایه پیوند
رده:مدل مرجع OSI