صفحه 1:
x فصل سوم
لایه پیوند داده
صفحه 2:
1 ملاحظات
طرامی تایه پیوند داده
۶ ارا
رایه سرویس های مشخصر “
a به لایه شبکه
. داده اصلی
abt pow 1
at آیند
* مدیریت خطاهای انتقال
٠ یز
: تنظیم > Ob داده ها
صفحه 3:
ملاحظات طرامی لایه پیوند دادهب
Trailer
Receiving machine
Packet
Payload field
Header
Frame
Trailer
Sending machine
Packet
|
Payload field
LS
رابطه بین بسته و فریم
Header
صفحه 4:
۲[ سرویس هایی ارایه شده به ليه شبكه
التقال داده ها ا( لایه شبکه میدا به لایه ماشین مقصد
.١ سرويس غير متصل(1855 0011116011011) بدون تصدیق
(Ack)cst,>
۲ سرویس غیر متصل با تصدیق دریافت
۳ سرویس اتصال-گرا ( 011610160 0016601101 )با تصدیق
دریافت
صفحه 5:
ویس هایی ارایه شده به لایه شیک
Host Host2 Host 1 Host
a = 5 5
4 4 4 4
3 8 sf ٠ 1 |e
TJ لاسب
2) | seem [Oe 2 2
1 1 1 1
Actual
data path
@ 0
( ۵)ارتباط مجازی ( «)ارتباط واقعی
صفحه 6:
سرویس هایی ارایه ¢ ده به لایه شبکه
سرويس غير متصل بدون تصديق دريافت(مس سس بسد)
* اتصال منطقى وجود ندارد
اين سرويس براى نرخ بايين خطا مناسب است
تشخيص خطا ندارد
* برای ترافیک ۲611106 مناسب است
* مقاپله پا خطا در لایه بالاتر
* اغلب آشآها و سرویس صدا
صفحه 7:
0 سرویس هایی ارایه شده به لایه شبکه
سرویس غیر متصل با تصدیق دریافت
۴اتصال منطقی بین مبدا و مقصد وجود ندارد
*دریافت فریم ها از سوی مقصد تصدیق می شود
*مناسب برای کانال های غیر قابل اعتماد
سیستم های پیسیم
صفحه 8:
سرویس هایی ارایه شده a لایه شبکه
سرویس اتصال گرا با تصدیق دریاخت
* بهترین سرویس لایه پیوند داده
شماره گذاری فریم
تصدیق دریافت توسط ماشین مقصد
* ارسال داده ها در سه مرحله
.١ برقراری اتصال و مقداردهی متغیر های لازم
۲ انتقال فریم ها
۳ قطع اتصال و آزاد سازی منایع
صفحه 9:
5 سرویس هایی ارایه شده به لایه شبکه
ba ink مسج | ;
layerprocess process
2 3 3 |
IFrames Packets
Transmission
line toa outer
محل فعالیت لایه پیوند داده
صفحه 10:
فریم بلدی
تعریف فریم بندی
؟ روش های کشف خطا
شمارش کارکترها
بايت های پرچم. با درج (byte/character stuffing) 2b
پرچم های شروع وپایان با درج بیت (bit stuffing)
حالت های غیر مجاز کدگذاری لایه نیزیکی
بت مه
صفحه 11:
47 9
Frame 2 Nowa
(Wrong) ‘character count
استريم كاركترها ( 8) بدون خطا ( 0 باخطا
كام
صفحه 12:
1 فريم بتديرسه
FLAG| Header Payload field Traller ime
(a)
Original charactors Aer stutfing
8 | هماع |2890 || ماح 8 |أعمم|| م
a |lesc|| B —+| a |lesc|/esc|) 5
a |lesc||riaa}| 8 | —+] a ||esc||esc||esc}|rac}| a
و |امعع | |معع | | معع ||معع || م اب | و |معع || معع|| م
(b)
تعیین ابتدا و انتهای فریم با استفاده از بایت پرچم @)
( 9) چهارتوالی بایت قبل و بعد از درج Sek
صفحه 13:
۹ فریم پندی..
)2( 0110111111111 | ۷ 0
(b) 0110111110411111011111010010
Stuffed bits
(c) 011011111111111111110010
درج بیت: ( «) داده اولیه ( ظ) داده هابصورتی که روی خط فیزیکی
ارسال می شود. ( 6 داده ها به ضورت که درا
3
نده دريافت مى شود.
صفحه 14:
1 کنترل خطا و کنترل جریان
كتترل خطا
* جكونكى ارسال فريم ها به ترتيب وسالم
* اطلاع از رسيدن بسته به مقصد
* تايمر براى حل مشكل فريم نايديد شده
كنترل جريات
* كنترل جريان براساس بازخور
* کنترل جویان براساس نرخ
صفحه 15:
کشف و تصمیم خطا
* کدهای تصمیع خطا error-correcting)
(code
* قابل استفاده در کانال های پر از خطا مانند لینک های بیسیم
* کدهای کشف خطا (error-detecting codes)
* قابل استفاده در کانال های قابل اطمینان مانند فیبرنوری
* فاصله همینگ
*به ازای کشف 4 خطا به کدی بافاصله همینگ 0+1
* طراحی کدی با 10 بیت داده اصلی و ۲ بيت افزونكى
به منظور کشف تمام خطاهای تک بیتی
صفحه 16:
1 کشف و تصمیم خطا (ادامه)
کلمه کد = Se oslo کننده(افزونگی) + داده اصلی
۲ + 1۳8 < 1
وزن کد( 0): تعداد بیتهای ۱ موجود در کد
فاصله همینگ ( 0): ,6 10011011
* تعداد بیتهای ۱ متفاوت در دو کد 10101101 XOR
6
* با 018 دو كد به دست مىآيد -
* فاصله همينتك يك مجموعه كد - حداقل فاصله همينك آن مجمكه(1/7)00110110
16
D(c,, c,)
صفحه 17:
7 کنترل خطا
۴ پیش رو Gly 43534! clsss : (Forward Error Correction)
تشخیص و تصحیح خطا
* يس رو(00116©11012) 151101 261507310 8): كدهاى افزونكى
فقط برای تشخیص خطا
صفحه 18:
5 کشف خطا
* سوال: |
اگر فاصله همینگ در یک مجموعه کد برابر ۵ باشد. چند بیت
گر ينك در يك مجمو ale 8
خطا قابل تشخیص است؟ چند بیت خطا قابل تصحیح
است؟ چرا؟
صفحه 19:
5 كشف خطا
جواب:
* براى تشخيص 4 خطا به کدی با فاصله همینگ 0+1
نیاز است
* براى تصحیح 4 خطا به کدی با فاصله همینگ 20+1
نیاز است
صفحه 20:
20
1
1
1
0
1
5
a
4
نا
16
روش
Block Sum Check
صفحه 21:
5
a
روش
Block Sum Check
صفحه 22:
5
a
روش
Block Sum Check
صفحه 23:
moe
برای ایجاد کدی با « بیت داده اصلی و ۲ بیت داده افزونه که
بتواند یک بیت خطا را تصحیح کند. حداقل چقدر باید
باشد؟
صفحه 24:
5۹ جواب
؟ کلمه کد: 121041
* تعداد پیام های مجاز 2۳
* برای تشخیص و تعیین محل وقوع يك بيت خطا: هر ييام به 2 كد
غير مجاز با فاصله يك نياز دارد
حداقل تعداد كدهاى لازم كه نبايستى هميوشانى داشته باشند:
2™(n+1)
* کل ترکیبات ممکنه:*2
my
2r(n+I) <2’ = mt+r+1<2"
n=m+r 2
صفحه 25:
sae و
برای تصحیح خطاهای تک بیتی بکار میرود
* شماره گذاری بیتها از چپ به راست
۴ شماره هایی که توانی از دو هستند (۰۱۰۲۰۴۸۸-) بیتهای افزونه چک
کننده ( 6 و مابقی (۳۵:۶۰۷۹..) داده اصلی( «)
مثال: توازن بیت داده ۱۳ توسط بیتهای افزونه ۱+۴+۸ چک میشود
صفحه 26:
states gees sy 35 Ow 5 فوران
تصحيح حداكثر عابيت خطاى يشت سرهم
* قرار دادن 6 کلمه کد 112-۳1 بیتی كنار هم (سطر به سطر)
flag] * ستولیربنسچان ازبدا سطرى
اگر حداکتر 1 خطای فورانی اتفاق بیافتد. یعنی در هر کلمه حداکثر
یک بیت خطا اتفاق افتاده است
2
t
2 بیتلازم برلیت صحیح bx ot 56 ۳ +1< 27
2
26
صفحه 27:
کشف و تصمیع قطارس,
Check bits
00110010000
10111001001
11101010101
11101010101
01101011001
01101010110
01111001111
10011000000
11111000011
10101011111
11111001100
00111000101
Order of bit transmission
ASCII
1001000
1100001
1101101
1101101
1101001
1101110
1100111
0100000
1100011
1101111
1100100
1100101
Char.
و« 5 3 ده
و وه
استفاده از کد همینگ برای تصحیح خطاهای فورانی
صفحه 28:
(CRC) csindyg cio}! 35
قو
* استفاده از تقسیم مبنای دو
* جمع و تفریق پیمانه دو (KOR)
۴ نمايش عدد با چند جملهای (۱۰۱۱۱ - 1+ 8+6 جع
۴ توافق فرستنده و گیرنده بر یک چند جمله ای G(X)
* کم ارزشترین و پر ارزشترین بیتهای 2)0) باید یک باشد
صفحه 29:
کد افزونگی چرفهای (احامه)
روال تولید CRC
* اضافه كردن ۲ بیت صفر به سمت راست داده اصلی( 6
- "ی کیک مت از تعداد بیهایهد)6
۴ تقسیم داده جدید بر 0628
ale 3 3 ارس
* افزودن باقيمانده تقسيم به صورت ۲ بیتی به سمت راست داده اصلى و ارسال
صفحه 30:
كد اف(ونگی چرفهای (ادامه)
teers محاسبه مجموع چک کد چند جمله ای
صفحه 31:
1 كد افزولتى چرخهای (ادامه)
* اكر در كيرنده كد ارسالى بر 3)20) تقسيم شود باقيمانده بايد صفر
شود در غیر اینصورت خطا
؟ سوال: در روش ن6ن) چه هنگام خطا در گیرنده غیر قابل
تشخیص خواهد بود#
صفحه 32:
کد افزونگی چرفهای (احامه)
* کدارسالی [ 500
ROO)
* با بروز خطاى md EC)
۷0
0
* با انجام عمل تقسیم در گیرنده ...
T@ =
۳۵ 1680
و
600
960
160
1)
R(x)
صفحه 33:
5 قابلیت تشفیص کد 16
* كليه خطاهای تك بيتى قابل تشخيص هستند ( < 560
- 5030 بايد حدلق[دو جمله دلشته باشد تا قابلشناسايئ: باشد
* اگر 0180© بر 1+ بخش يذير باشد آنكاه تمامى خطاهاى فرد قابل تشخيص
هستند. جرا؟
میتوان ثابت کرد که هیچ چند جملهای با تعداد جملات فرد بر 1 +۷ بخشپذیر نیست.
اگر تعداد خطاها فرد باشد. چند جملهای خطا فرد است لذا بر 1 + بخشپذیر
نخواهد بود
اثبات: برهان خلف. (12626 یک چند جملهای با تعداد جملات فرد که EBRD ORG Ly
A) =(+)QW) = odd=ern! os
صفحه 34:
7 قابليت تشخيص كد :160 )(ادامه)
* اگر 6620 حداقل دارای ۳ جمله باشد آنگاه تمامی خطاهای دو
بیتی قابل تشخیص
* اكر باقیمانده 7 بیتی باشد آنگاه تمام خطاهای فورانی با طول
کوچکتر پا مساوی 1
* اکثر خطاهای فورانی با طول بیشتر از ۶
- احتمال عدم تشخیص خطاهای فورانی به طول 7+1 برابر 271(۱)
- احتمال عدم تشخیص خطاهای فورانی به طول بیشتر از 71 برابر 1/27
صفحه 35:
توابع مولد استاندارد در CRC
1بیر + قر +غر بر بر 12 من
CSC- 16: x¥84+x54 X41
1+ قر + ثر بر :077 -0۳6
010-2 وقتی کار مبرود که طولک ارلکتر ۶ بسیتساشد
050-6 وقتی کار میرود که طولکلاکتر ۸ بيتساشد
در 016-60017 تمام خطاهای منفرد. مضاعف. تمام خطاهایی با تعداد بيت
فرد. تمام خطاهای پیوسته به طول ۱۶ و یا کمتر. درصد بالایی از خطاهای ۱۷و
۸ بیتی و بیشتر قابل تشخیص است
صفحه 36:
پروتکل های ساده لینک داده
خرض های اساسی در مدل ارتباطی (یر بنایی
ح ما هام a
مستقل بودن پروسس های فعال
. ارتباط لایه ها از طریق ردوبدل کردن ply
سرويس اتصال-گرای قابل اعتماد
ماشین مبدا منبع بی پایانی از داده ها دارد
کامپیوتر ها هیچ گاه از کار نمی افتند
. فقط داده خالص به لایه شبکه داده می شود
صفحه 37:
تعاریف پرولگل رب
#define MAX_PKT 1024 /+ determines packet size in bytes */
typedef enum {false, true} boolean; /* boolean type #/
typedef unsigned int seq_nr; * sequence or ack numbers */
typedef struct {unsigned char data[MAX_PKT];) packet;/* packet definition #/
typedef enum {data, ack, nak} frame_kind; /* frame_kind definition */
typedef struct { [+ frames are transported in this layer */
frame_kind kind; (+ what kind of a frame is it? */
seq_nr seq; * sequence number */
seq_nr ack; /* acknowledgement number */
/* the network layer packet */
packet info;
} frame;
صفحه 38:
‘+ Wait for an event to happen; return its type in event. »/
void wait_for_event(event_type *event)
/+ Fetch a packet from the network layer for transmission on the channel. */
void from_network_layer(packet +p)
+ Deliver information from an inbound frame to the network layer. */
void to_network_layer(packet +p);
‘+ Go get an inbound frame from the physical layer and copy it tor. #/
void from_physical_layer(frame *r);
/* Pass the frame to the physical layer for transmission. */
void to_physical_layer(frame +s);
۶ Start the clock running and enable the timeout event. #/
void start_timer(seq_nr k);
/* Stop the clock and disable the timeout event. +/
void stop_timer(seq_nr k);
‘+ Start an auxiliary timer and enable the ack_timeoutevent. */
void start_ack timer(void)
/+ Stop the auxiliary timer and disable the ack_timeoutevent. +/
void stop_ack timer(void):
/* Allow the network layer to cause a network layer ready event. +/
void enable_network layer(void);
‘+ Forbid the network layer from causing a network layer_ready event. */
void disable_network_layer(void);
‘+ Macro ine is expanded in-line: Increment k circularly, */
define inc(k) if (k < MAX_SEQ) k= k +1; else k= 0
به زان +
(ادامه)
صفحه 39:
پروتکل های ساده لینک داده
پروتکل یکطرخه تاممدود
الث ما مد من ن
. داده ها فقط در یک جهت منتقل می شوند.
لایه شبکه در گیرنده و فرستنده آماده به کار.
. زمان پردازش نادیده گرفته می شود.
. بافر محدودیتی ندارد.
. کانال ارتباطی کامل و بدون خطا.
صفحه 40:
/+ 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 sendert (void)
{
frame s; J+ buffer for an outbound frame */
packet buffer; /* buffer for an outbound packet */
while (true) {
from_network_layer(&butfer); /* go get something to send */
s.info = buffer 1+ copy it into s for transmission */
to_physical_layer(&s); ‘+ send it on its way */
) 1 * Tomorrow, and tomorrow, and tomorrow,
Creeps in this petty pace from day to day
To the last syllable of recorded time
- Macbeth, V, v #/
1
void receivert (void)
{
frame r;
event type event; ‘+ filled in by wait, but not used here #/
while (true) {
wait for eveni(&event); _/+ only possibilty is frame_arrival +/
from_physical_layer(&r); _/* go get the inbound frame */
to_network layer(&r.info); _/* pass the data to the network layer */
1
1
صفحه 41:
5 پروتکل های ساده لینک دادهب
يروتكل توقف_انتظار يكطرفه
۱. داده ها در یک جهت منتقل می شوند(دوطرفه
ناهمزمان)
۲ کانال ارتباطی کامل و بدون خطا
۳ برگردان بازخور به عنوان مجوز ارسال فریم بعدی
£ پروتکل توقف-انتظار (stop-and-wait)
صفحه 42:
/* Protocol 2 (stop-and-wait) also provides for a one-directional flow of data from
sender to receiver. The communication channel is once again assumed to be error
free, as in protocol 1. However, this time, the receiver has only a finite buffer
capacity and a finite processing speed, so the protocol must explicitly prevent
the sender from flooding the receiver with data faster than it can be handled. #/
typedef enum {frame_arrival} event type:
/* buffer for an outbound frame */
/* buffer for an outbound packet */
/* frame_arrival is the only possibility »/
/+ go get something to send */
1 copy it into s for transmission */
/* bye bye little frame #/
J+ do not proceed until given the go ahead */
/* buffers for frames */
/* frame_arrival is the only possibility */
/* only possibilty is frame_arrival */
J+ go get the inbound frame */
/* pass the data to the network layer */
/+ send a dummy frame to awaken sender */ 49
2 3 5 0 3 sender2(void)
{
frame s;
اتتظار packet buffer;
1
event_type event;
1
void receiver2(void)
{
frame r,s;
event type event;
while (true) (
wait_for_event(&event);
from_physical_layer(&r);
to_network_layer(&r.info):
to_physical_layer(&s);
#include "protocol.h”
while (true) {
from_network_layer(&butfer);
s.info = buffer;
to_physical_layer(&s);
wait_for_event(&event);
1
1
صفحه 43:
5 پروتکل های ساده لیلک دادهسسم
بروتكل یکطرفه برای کانال های نوی( دار
. داده ها در یک جهت منتقل می شوند.(دوطرفه
ناهمزمان)
۲ کانال ارتباطی می تواند دارای نویز باشد.
۳ فریم ها دارای یک شماره ترتیبی هستند.
۶ نام های دیگر این پروتکل ۳۸1۴ (تصدیق دریافت
مثبت با ارسال مجدد) یا ۸۸1660 (درخواست تکرار
خودکار)
صفحه 44:
{+ Protocol 3 (par) allows unidirectional data flow over an unreliable channel. +/
J must be 1 for protocol 3 +/
#define MAX_SEQ 1
typedef enum {frame_arrival, cksum_err, timeout} event_type:
J seq number of next outgoing frame */
}* scratch variable +/
}* butter for an outbound packet *|
/+ initialize outbound sequence numbers */
/* fetch first packet */
/* construct a frame for transmission */
J+ insert sequence number in frame اه
J send it on its way */
Js if answer takes too long, time out #/
J+ frame_arrival, cksum_err, timeout +/
Js get the acknowledgement */
J+ turn the timer off +/
/ get the next one to send */
/ invert next frame_to_send #/
include "protocol.h”
void sender3(void)
{
seq_nr next frame_to_send;
frame s;
packet buffer,
‘event_type event;
next_frame_to_send = 0;
from_network_layer(&butter);
while (true) {
butter;
next frame_to_send;
to_physical_layer(&s);
start_timer(s.seq);
wait for_event(&event);
if (event == frame_arrival) {
from_physical_layer(&s);
if (s.ack == next_frame_to_send) {
stop_timer(s.ack);
from_network_layer(&butter);
ino(next_frame_to_send);
نوی( دار
صفحه 45:
* possibilities: frame_arrival, cksum_err */
++ a valid frame has arrived. +/
/* go get the newly arrived frame */
/+ this is what we have been waiting for. #/
/* pass the data to the network layer */
/* next time expect the other sequence nr *
/+ tell which frame is being acked *
send acknowledgement +/
void receiver3(void)
{
seq_nr frame_expected;
frame r, s;
event_type event;
frame_expected = 0;
while (true) {
wait_for_event(&event):
if (event == frame_arrival) {
from_physical_layer(&r);
if (1.seq == frame expected) {
to_network_layer(&r.info)
inc(frame_expected);
s.ack = 1 - frame_expected;
to_physical_layer(&s);
پروتکل
یکطرفه
برای
کانال
های
نوی( دار
(ادامه)
صفحه 46:
پروتکل های پنجره لفزنده
* کانال های دوطرفه و راه های دستیابی به آن
* سوار(کول) کردن ۳1007۳02016 مزایا و معایب
* اصطلاحات پنجره دریافت. پنجره ارسال
* پیوتکل پنجره لغزنده ۱-بیتی
* پروتکل " ۱ تا به عقب برگرد"
* پروتکل تکرارانتخایی
46
صفحه 47:
پروتکل های پنجره لفزلده,
ae توا شخ
eke
@ 8 8 4
یک پنجره لفزنده یک واحدی. با شماره ترتیپی ۳سپیتی. ( 8) درشروع
کار.( ) بعد از ارسال اولین فریم. (2) بعد از آنکه اولین فریم
دریافت شد.( 4) بعد از آنکه فرستنده اولین تصدیق دریافت را گرفت
۳
صفحه 48:
1 يروتكل هاى ينجره لغزلده سم
يروتحل ينجره لغزنده ا١-بيتى
*۴پنجره گیرنده و پنحره فرستنده
*پروتکل توقف -انتظار
*وضعیت ارسال اولین فویم بطور همزمان
*نقش کلیدی فیلد تصدیق
صفحه 49:
پروتکل پنجره لفزنده ا-بیتی
/* Protocol 4 (sliding window) is bidirectional. */
/* must be 1 for protocol 4 #/
#define MAX_SEQ1
typedef enum {frame_arrival, cksum_ett, timeout} event_type;
/* 0 or 1 only */
/* 0 or 1 only */
/+ scratch variables */
/* current packet being sent */
/* next frame on the outbound stream +*/
(+ frame expected next */
/ fetch a packet from the network layer */
/* prepare to send the initial frame */
+ insert sequence number into frame */
/* piggybacked ack */
/* transmit the frame */
/ start the timer running */
#include "protocol.h"
void protocol4 (void)
seq_nr next_frame_to_send;
seq_nr frame_expected;
frame r, s;
packet buffer;
event_type event;
next_frame_to_send = 0;
frame_expected = 0;
from_network_layer(&buffer);
s.info = buffer;
s.seq = next_frame_to_send;
s.ack = 1 — frame_expected;
to_physical_layer(&s);
start_timer(s.seq);
صفحه 50:
ددهتگا, دنمده لغانده ا-نن/رسء
/* frame_arrival, cksum_err, or timeout +/
/* a frame has arrived undamaged. */
/* go get it */
/* handle inbound frame stream. */
/* pass packet to network layer */
/* invert seq number expected next */
/* handle outbound frame stream. +/
/* turn the timer off */
/* fetch new pkt from network layer */
(+ invert senderis sequence number */
/* construct outbound frame 4/
/* insert sequence number into it +/
/* seq number of last received frame */
/* transmit a frame */
J* start the timer running */
while (true) {
wait_for_event(&event);
if (event == frame_arrival) {
| 80:
if (r.seq == frame_expected) {
to_network_layer(&r.info);
inc(frame_expected);
if (rack == next_frame_to_send) {
stop_timer(r.ack);
from_network_layer(&butfer);
inc(next_frame_to_send);
}
s.info = buffer;
s.seq = next_frame_to_send;
s.ack = 1 — frame_expected;
to_physical_layer(&s):
start_timer(s.seq);
صفحه 51:
پروتکل پنجره لغزنده
B sends (0, 1, BO)
Assends (0, 1, AO)
Bagets (0, 1, AO)"
B Sends (0.6, Bo)
Agets (0, 1, BO)*
Asends (0, 0, AO).
B gots (0, 0, رل
B Sends (1
A gets (0, 0, 80)
‘Asends (1, 0, At)
B gets (1,0, AI}
B sends (1
hee 9, Py
Sends (1,'1,
OE ——=. B gets (1,1, AL
B Sons. Be
Time 5
دوسناریوی پروتکل ۶ ( ۸) حالت عادی ( ظ) حاا
از,چپ به راست عبارتند از : 8016 .5601و شماره بسته. بسته هایی که
[- لولس
(1,80 ,00 لومم
سم
“—— _B gets (1, 0, Al)"
oe 0 B sends (1, 1, B1)
B gets (0, 1, A2)*
ba (00, 2) © زوع رم دنور
pay را
B sends (1, 1, B3)
B gets (0, 1, AQ}
B Sends (ove Bo)
A gets (0, 0, BO)*
A Sena (0. A)
{a)
لت غیرعادی. اعداد داخل پرانتز
فته و
به لاية. شبکه تحویلامی شنوند .با #مشتعضی شده انار
صفحه 52:
۳۹ پروتکل های پنجره لفزنده
* پروتکل ۲ ۱ تا به عقب برگرد"
* فرستادن 87 فريم به جای یک فریم
*اكر يهناى باند « تافير رفت وبركشت عددى بزرك باشد
آنگاه پنجره ارسال بزرك
* تکنیک لوله کشی
» (۱ + )1۱ - بهره خط در روش توقف و انتظار
» اگر 1< 8 کارایی خط زیر 40۰
» مقابله با خطا : ۱.رهیافت تا به عقب برگرد
۲.تکرار انتخابی
Cope bl 92 «#بهنا انلاب يتس رثانيه) #تاخير يفنو ب ركش طلثانيه)
صفحه 53:
مثال
۹
CHR
eb 0b DD D(a]
1
Frames
ب مقابله با es در خط لوله .تاثیر خطا وقتی که ( ۵) اندازه پنجره
دریافت گيرنده ۱ است. و (ظ) پنجره دریافت بزرگ است.
صفحه 54:
J Protocol 5 (pipelining) allows multiple outstanding frames. The sender may transmit up
to MAX_SEQ frames without waiting for an ack. In addition, unlike the previous protocols,
the network layer is not assumed to have a new packet all the time. Instead, the
network layer causes a network_layer_ready event when there is a packet to send. */
#define MAX_SEQ 7 I+ should be 2°n — 1 +/
typedef enum {frame_arrival, cksum_err, timeout, network_layer_ready} event type:
#include "protocol.h*
static boolean between(seq_nr a, seq_nr b, seq_nrc)
{
J Return true if a <=b <c circularly; false otherwise. */
if (((@ <=b) B& (b > )) Il (6 <a) && (a <=b)) Il ((b <c) && (¢<a)))
return(true);
else
retum(false);
}
static void send_data(seq_nr frame_nr, seq_nr frame_expected, packet buffer[])
{
J Construct and send a data frame. */
frame s; /* scratch variable */
s.info = buffer{frame_nr); ۸ insert packet into frame */
s.seq = frame_nr; /* insert sequence number into frame */
s.ack = (frame_expected + MAX_SEQ) % (MAX_SEQ + 1):/* piggyback ack */
to_physical_layer(&s); J transmit the frame +!
start timer(frame_nr); /+ start the timer running /
}
يروتكل
ON’
به
عقب
بركرد"
(ادامه)
صفحه 55:
پروتکل " ۱۲ تا به عقب برگرد"سسم
/* MAX_SEQ > 1; used for outbound stream +/
/* oldest frame as yet unacknowledged */
/* next frame expected on inbound stream +/
/* scratch variable */
/* buffers for the outbound stream */
/* # output buffers currently in use */
/* used to index into the buffer array */
/* allow network_layer_ready events +/
/* next ack expected inbound */
/* next frame going out */
/* number of frame expected inbound */
/* initially no packets are buffered */
3s
void protocol5(void)
seq_nr next_frame_to_send;
seq_nr ack_expecte:
‘seq_nr frame_expected;
frame r;
packet buffer[MAX_SEQ + 1];
seq_nr nbuffered:
seq_nr i;
‘event_type event;
enable_network_layer();
ack_expected = 0;
next_frame_to_sen
frame_expecte
nbuffered = 0;
صفحه 56:
يروتكل ” ١ تا به عقب يركزد سم
while (true)
wait_for_event(&event) 1+ four possibilities: see event_type above */
switch(event) {
case network layer_ready: _/* the network layer has a packet to send #/
/* Accept, save, and transmit a new frame. */
from_network_layer(&bufferjnext_frame_to_send)); + fetch new packet #/
nbuffered = nbuffered + 1; /* expand the sender's window #/
send_data(next_frame_to_send, frame_expected, buffer)/* transmit the frame #/
inc(next_frame_to_send); /* advance sender's upper window edge اه
break;
case frame_arrival: 1 a data or control frame has arrived #/
from_physical_layer(&r); _/* get incoming frame from physical layer +/
if (seq
/+ Frames are accepted only in order. */
to_network_layer(&r.info); /* pass packet to network layer #/
inc(frame_expected); /* advance lower edge of receiver's window #/
صفحه 57:
ددهتكاء ” ١1 ا ده عقب لاركاد اسمس
/* Ack n implies n— 1, n— 2, etc. Check for this. +/
while (between(ack_expected, rack, next_frame_to_send)) {
/* Handle piggybacked ack. */
nbuffered = nbutfered —1; /+* one frame fewer buffered +/
stop_timer(ack_expected); /* frame arrived intact; stop timer +/
inc(ack expected); /* contract sender's window *|
}
break;
case cksur_err: break; + just ignore bad frames */
case timeout ۸۶ trouble; retransmit all outstanding frames */
next_frame_to_send = ack expected; /* start retransmitting here */
for (i nbuffered: i++) {
send_data(next_frame_to_send, frame_expected, buffer):/* resend 1 frame */
inc(next_frame_to_send); /* prepare to send the next one */
1
if (nbuffered < MAX_SEQ)
enable_network_layer()
else
disable_network_layer();
57
صفحه 58:
شبیه سازی چند تایمر بوسیله نرم افزار
(b)
Real
time
10:00:00.0
63 - 2 اجب [ 1 ]5
SO Pointer to next timeout
Frame being timed
Ticks to go
(a)
صفحه 59:
پروتکل های پنجره لفزنده
پروتکل تکرار انتفابی
*مناسب برای خطوط پر ویز
*بافر کردن فریم های سالم بعد از یک یا چند فریم معیوب
* ينجره ارسال متغير ولی پنجره دریافت ثابت
*مساله همپوشانی
* تصدیق دریافت منفی
صفحه 60:
بروتکل تکرار التضای
‘+ Protocol 6 (nonsequential receive) accepts frames out of order, But passes packets to the
network layer in order, Associated with each outstanding frame is a timer. When the timer
expires, only that frame is retransmitted, not all the outstanding frames, as in protocol 5. +/
define MAX_SEQ 7 J+ should be 2°n—1 +!
#define NR_BUFS ((MAX_SEQ + 1)2)
typedef enum {frame_arrival, cksum_etr, timeout, network layer_ready, ack timeout} event type;
#include *protocol.h"
boolean no_nak = true; J+ no nak has been sent yet +!
seq nr oldest frame = MAX- SEQ + 1 J+ initial value is only for the simulator +/
static boolean between(seq_nr a, seq_nr b, seq_nr c)
{
+ Same as between in protocolS, but shorter and more obscure. */
return ((a <=b) && (b <<) Il((¢ <a) && (a <=b)) Il ((b <c) 88 (<a)
static void send frame(frame_kind fk, seq_nr frame_nr, seq_nr frame_expected, packet buffer)
{
J» Construct and send a data, ack, or nak frame. ¥/
frame s; J» scratch variable */
; Pe kin
ta) info = bufterfframe_nr % NR_BUFS};
5۵9و - 180060: J+ only meaningful for data frames */
s.ack = ({rame_expected + MAX_SEQ) % (MAX_SEQ + 1);
if (k == nak) no_nak = false; 7+ one nak per frame, please #/
to_physical_layer(&s); J+ transmit the frame */
it (Ik == data) start_timer(frame_nr % NR_BUFS);
stop_ack_timer(); J+ no need for separate ack frame */
}
fata, ack, or nak */
صفحه 61:
پروتکل تکرار التفابی
+ lower edge of sender's window #/
/+ upper edge of sender's window + 1 #/
/+ lower edge of receiver's window */
/* upper edge of receiver's window + 1 */
+ index into buffer pool */
/* scratch variable *|
/* butters for the outbound stream #/
/* buffers for the inbound stream */
J+ inbound bit map */
/+ how many output buffers currently used #/
/+ initialize */
/* next ack expected on the inbound stream */
J+ number of next outgoing frame */
/+ initially no packets are buffered */
61
void protocol6(void)
{
seq_nt ack_expected;
‘seq_nr next _frame_to_send;
seq_nr frame_expected;
seq_nr too_far;
inti;
frame r;
packet out_buf[NR_BUFS];
packet in_buf[NR_BUFS};
boolean arrived[NR_BUFS];
seq_nr nbuffered;
event_type event;
enable_network_layer();
ack_expected = 0
next frame_to_send = 0;
frame_expected = 0;
too_far = NR_BUFS;
nbuffered = 0;
for (i= 0; i < NR_BUFS; i++) arrived[i] = false;
صفحه 62:
while (true) {
wait_for_event(&event); Js five possiblities: see event type above */
switch(event) {
‘case network_layer_ready: J» accept, save, and transmit anew frame */
nbutfered = nbutfered + 1; J» expand the window +/
from_network_layer(&out buffnext_frame_to_send % NR_BUFS)); /* fetch new packet +/
send_frame(data, next_frame_to_send, frame_expected, out_buf);/* transmit the frame */
ino(next frame_to_send); J+ advance upper window edge */
break:
case frame_arrival: J a data or control frame has arrived اه
from_physical_layer(&r); Js fetch incoming frame from physical layer */
1 lata) {
OS3q 00
send_frame(nak, 0, frame_expected, out_buf); else start_ack_timer();
0 ی نی 0 tame eras bu se saa
10
=true; —/* mark buffer as full +/
in_bufff.seq% NR_BUFS|=.info; _/* insert data into butfer */
انتفابئن while (aived{irame_expected %NF_BUFS)){
۸۶ Pass frames and advance window. «/
(اداممج) to_network_layer(&in_buf{frame_expected % NR_BUFS));
no_nak = true;
atrived{frame_expected % NR_BUFS] = false;
inc(trame_expected); /* advance lower edge of receiver's window #/
incttoo_far); J+ advance upper edge of receiver's window */
start_ack timer(); Js to see If a separate ack is needed */
صفحه 63:
يروتكل تكرار التفابييسم
frame to send) 094 نی | nas &8 between(ack_expected,(r.ack+1)%6(MAX حو منا )ةا
send_frame(data, (r.ack#+1) % (MAX_SEQ + 1), fame axpecred out_but);
while (between(ack_expected, rack, next_frame_to_send)) {
nbuffered = nbuffered - 1 + handle piggybacked ack #/
stop_timer(ack_expected % NR_BUFS); /* frame arrived intact */
inc(ack_expected); J+ advance lower edge of sender's window */
}
break;
case cksum_err:
if (no_nak) send_frame(nak, 0, frame_expected, out_buf)/* damaged frame */
break;
case timeout:
send_frame(data, oldest frame, frame_expected, out_buf);/* we timed out */
break;
case ack_timeout:
send_frame(ack,0,frame_expected, out buf); /* ack timer expired; send ack «/
1
if (nbuffered < NR_BUFS) enable_network_layer(); else disable_network_layer();
6s
صفحه 64:
4567
پروتکل تکرار التقاییسء
01238
0123
0
4567
4567
0123
0123
0
012345 7
01234 77
(b)
0123456
0123456
(a)
Sender
Receiver
( ۸) پنجره های ارسال ودریافت هفت تایی در لحظه شروع. ( ظ) بعد از رسیدن
هفت فریم به مقصد. وقبل از بازگشت تصدیق دریافت به فرستنده. (ع) پنجره
های ارسال و دریافت چهارتایی در لحظه شروع. ( 0) بعد از رسیدن چهار فریم
به مقصد. و قبل از بازگشت تصدیق دریافت به فرستنده
64
صفحه 65:
15 چند لمونه 1
١ يروتكل های لینک داده
HDLC ٠ کت
كنترلسطح بللاولينكدا
ay بيوند داده در اینترنت
صفحه 66:
نمونه از پروتکل های لینک دادهسم
01111110
66
16
Checksum
20
Data
8
Control
Address.
فرمت فریم در پروتکل های بیت-گرا
01111110
Bits
صفحه 67:
نمونه از پروتکل های لیلک دادهسم
Next
Next
Modifier
PIF
PIF
PIE
Seq
Type
Type
Bits
(a)
(b)
فیلد کنترل در یک ( ۸) فریم اطلاعاتی ( 0 فریم سرپرستی ( ۰ فریم
9
بدون شماره
صفحه 68:
نمونه ا( يروتكل هاى لينك داددسم
User's home Intemet provider's office
Client process
using TCP/IP
Dial-up
telephone line
Troe 2
TCPIIP connection
using PPP
یک کامپیوتر خانگی می تواند نقش میزبان ایترنت رابازی کند.
68
صفحه 69:
1
Flag
01111110
69
لموله ا( يروتكل هاى لينى دادس
Variable 24
1
Payload | Checksum
If
192
Protocol
Control
00000011
1
Address
111011
فرمت فریم کامل ۳۳ برای حالت بدون شماره
1
Flag
01111110
Bytes
صفحه 70:
successful
Network
NCP
configuration
0
Authentication
Both sides,
agree on options
Establish +[ Authenticate
Failed
Failed
Terminate Open
Done
لموله ا( پروتکل های لینک داد۵سسه
Carrier
detected
Dead
Cartier
dropped
مراحل ساده شده برقراری و قطع خط در پروتکل ۳۳۳
صفحه 71:
ago) از پروتکل های لینک خاد۵س,
Description
List of proposed options and values
All options are accepted
Some options are not accepted
Some options are not negotiable
Request to shut the line down
OK, line shut down
Unknown request received
Unknown protocol requested
Please send this frame back
Here is the frame back
Just discard this frame (for testing)
Direction
دا
۱۰8
۱"
۱۰-8
دا
۱۰
۱"
۱
با
۱"
با
انواع فریم های 10
Name
Configure-request
Configure-ack
Configure-nak
Configure-reject
Terminate-request
Terminate-ack
Code-reject
Protocol-reject
Echo-request
Echo-reply
Discard-request
صفحه 72:
پایان