Protokoli

Published on March 2017 | Categories: Documents | Downloads: 36 | Comments: 0 | Views: 356
of 29
Download PDF   Embed   Report

Comments

Content



Osnovni protokoli sloja veze
podataka

Definicije funkcija za protokole koji slede
#define MAX_PKT 10! "# Odredjuje veli$inu paketa u %ajtovi&a #"
t'pedef unsi(ned int se)_nr* "# redni %roj ili %roj potvrde #"
t'pedef struct +unsi(ned c,ar data-MAX_PKT.*/ packet* "# definicija paketa #"
t'pedef enu& +data0 ack0 nak/ fra&e_kind*
t'pedef struct +
fra&e_kind kind* "# vrsta ovo( okvira#"
se)_nr se)* "# redni %roj #"
se)_nr ack* "# %roj potvrde #"
packet info* "# paket &r1no( sloja #"
/ fra&e*
"# 2ekaj da se ne3to do(odi* upi3i tip do(adjaja u pro&enljivu event#"
void 4ait_for_event5event_t'pe #event6*
"# 7z&i iz &re1no( sloja paket za prenos#"
void fro&_net4ork_la'er5packet #p6*
"# Podatke iz dolazno( okvira isporu$i &re1no& sloju #"
void to_net4ork_la'er5packet #p6*

"# Preuz&i dolazni okvir iz fizi$ko( sloja i kopiraj (a u r #"
void fro&_p,'sical_la'er5fra&e #r6*
"# Prosledi fizi$ko& sloju okvir za slanje #"
void to_p,'sical_la'er5fra&e #s6*
"# Pokreni sat i o&o(u8i do(odjaj ti&eout #"
void start_ti&er5se)_nr k6*
"# 9austavi sat i one&o(u8i do(adjaj ti&eout #"
void stop_ti&er5se)_nr k6*
"# O&o(u8i &re1no& sloju da izazove do(adjaj net4ork_la'er_read' #"
void ena%le_net4ork_la'er5void6*
"# 9a%rani &re1no& sloju da izazove do(adjaj net4ork_la'er_read' #"
void disa%le_net4ork_la'er5void6*
"# Macro inc : cikli$no uve8ava k za jedinicu #"
#define inc5k6 if 5k ; MAX_<=>6 k ? k @ 1* else k ? 0

Protokol 1
neo(rani$en jednos&eran prenos
Pretpostavke:
A
Podaci se prenose sa&o u jedno& s&eru
A
Mre1ni slojevi su uvek spre&ni i na izvori3tu i na
odredi3tu
A
Bre&e o%rade je zane&arljivo
A
Caferi su neo(rani$ene veli$ine
A
Ko&unikacioni kanal ne (u%i okvire

Protokol 1
neo(rani$en jednos&eran prenos
void sender15void6
+
fra&e s*
packet %uffer*
4,ile 5true6
+ fro&_net4ork_la'er5D%
uffer6*
sEinfo ? %uffer*
to_p,'sical_la'er5Ds6*
/
/
void receiver15void6
+
fra&e r*
event_t'pe event*
4,ile 5true6
+ 4ait_for_event5Dev
ent6*
fro&_p,'sical_la'er5Dr6*

to_net4ork_la'er5DrEinfo6*
/
/
t'pedef enu& +fra&e_arrival/ event_t'pe*
#include FprotocolE,F

Protokol
jednos&erni protokol Gstani i $ekajG
Pretpostavke:
A
Podaci se prenose sa&o u jedno& s&eru
A
Mre1ni slojevi su uvek spre&ni i na izvori3tu i na
odredi3tu
A
Podaci se o%radjuju ograničenom %rzino&
A
Caferi su ograničenog kapaciteta
A
Ko&unikacioni kanal ne (u%i okvire
9adatak protokola je da spre$i po3iljaoca da zatrpa
pri&aoca podaci&a koje on ne sti1e da o%radi

Protokol
jednos&erni protokol Gstani i $ekajG
void sender5void6
+
fra&e s*
packet %uffer*
event_t'pe event*
4,ile 5true6 +
fro&_net4ork_la'er5D%uffer6*
sEinfo ? %uffer*
to_p,'sical_la'er5Ds6*
4ait_for_event5Devent6*
/
/
void receiver5void6
+
fra&e r0 s*
event_t'pe event*
4,ile 5true6 +
4ait_for_event5Devent6*
fro&_p,'sical_la'er5Dr6*
to_net4ork_la'er5DrEinfo6*
to_p,'sical_la'er5Ds6*
/
/
t'pedef enu& +fra&e_arrival/ event_t'pe*
#include FprotocolE,F

Protokol H
jednos&erni protokol na %u$ni& kanali&a
A
7koliko se okvir o3teti priliko& slanja0
posla8e&o (a ponovoI
A
Jta se de3ava ako se potvrda o3tetiK
A
Od(ovor: koristiti taj&er i nu&erisati pakete
A
Dovoljno je koristiti jedan %it za nu&erisanje
paketa
#define MAX_<=> 1
t'pedef enu& +fra&e_arrival0 cksu&_err0 ti&eout/
event_t'pe*
#include FprotocolE,F

void senderH5void6
+
se)_nr neLt_fra&e_to_send* "# redni %roj slede8e( okvira koji se 3alje #"
fra&e s*
packet %uffer* "# %afer za pakete koji se 3alju#"
event_t'pe event*
neLt_fra&e_to_send ? 0* "# inicijalizacija %rojeva odlazni, paketa#"
fro&_net4ork_la'er5D%uffer6* "# uz&i prvi paket #"
4,ile 5true6 +
sEinfo ? %uffer* "# napravi okvir za preno3enje#"
sEse) ? neLt_fra&e_to_send* "# unesi redni %roj u okvir#"
to_p,'sical_la'er5Ds6* "# po3alji okvir#"
start_ti&er5sEse)6* "# ako potvrda ne sti(ne na vre&e0 isklju$i se #"
4ait_for_event5Devent6* "# fra&e_arrival0 cksu&_err0 ti&eout #"
if 5event ?? fra&e_arrival6 +
fro&_p,'sical_la'er5Ds6* "# uz&i potvrdu #"
if 5sEack ?? neLt_fra&e_to_send6 +
fro&_net4ork_la'er5D%uffer6* "# uz&i slede8i okvir za slanje#"
inc5neLt_fra&e_to_send6* "# predji na slede8i redni %roj #"
/
/
/
/

void receiverH5void6
+
se)_nr fra&e_eLpected*
fra&e r0 s*
event_t'pe event*
fra&e_eLpected ? 0*
4,ile 5true6 +
4ait_for_event5Devent6* "# &o(u8nosti: fra&e_arrival0cksu&_err #"
if 5event ?? fra&e_arrival6 + "# sti(ao je ispravan okvir #"
fro&_p,'sical_la'er5Dr6* "# uz&i pristi(li okvir #"
if 5rEse) ?? fra&e_eLpected6 +
to_net4ork_la'er5DrEinfo6* "# prosledi podatke &re1no& sloju #"
inc5fra&e_eLpected6* "# slede8i put o$ekuj dru(i dru(i redni %roj #"
/
sEack ? 1 M fra&e_eLpected* "# za%ele1i koji je okvir potvrdjen #"
to_p,'sical_la'er5Ds6* "# po3alji potvrdu #"
/
/
/

Provera rada protokola
kona$ni& auto&ato&
A
<tanja auto&ata ozna$i&o sa <NO (de je
< ? 0 ili 10 okvir koji po3iljalac poku3ava da 3alje
N ? 0 ili 10 okvir koji pri&alac o$ekuje
O ? 00 10 M ili A0 i predstavlja stanje kanala
A
P&a&o 1Q &o(u8i, stanja
A
Risu sva stanja dostupna iz inicijalno(

Provera rada protokola
kona$ni& auto&ato&
A
Kona$ni auto&at za protokol H

Provera rada protokola
kona$ni& auto&ato&
A
Ra osnovu auto&ata ispituje&o
potencijalne (re3ke u definisanju protokola

Re s&e postojati putanja u kojoj po3iljalac dva
puta &enja stanje0 dok pri&alac ostaje u
isto& stanju

Deadlock – postoji podskup dostupni, stanja
iz ko( ne&a prelaza i unutar ko(a nije
&o(u8e napredovanje protokola

Protokol klizni, prozora
A
Dvos&erni prenos podataka
A
Mo(u8e S3lepovanjeG potvrde uz podatke
A
Ru&erisanje paketa od 0 do
A
Po3iljalac 5pri&alac6 u svako& trenutku $uvaja
skup redni, %rojeva okvira koje s&e da po3alje
5pri&i6
A
Beli$ina prozora je o(rani$ena veli$ino& %afera
A
Tranice prozora ne &oraju %iti konstantne
veli$ine
1 2 −
n

Protokol ! M jedno%itni protokol klizni, prozora
#define MAX_<=> 1
t'pedef enu& +fra&e_arrival0
cksu&_err0 ti&eout/ event_t'pe*
#include FprotocolE,S
void protocol! 5void6
+
se)_nr neLt_fra&e_to_send*
se)_nr fra&e_eLpected*
fra&e r0 s*
packet %uffer*
event_t'pe event*
neLt_fra&e_to_send ? 0*
fra&e_eLpected ? 0*
fro&_net4ork_la'er5D%uffer6*
sEinfo ? %uffer*
sEse) ? neLt_fra&e_to_send*
sEack ? 1 M fra&e_eLpected*
to_p,'sical_la'er5Ds6*
start_ti&er5sEse)6*
4,ile 5true6 +
4ait_for_event5Devent6*
if 5event ?? fra&e_arrival6 +
fro&_p,'sical_la'er5Dr6*
if 5rEse) ?? fra&e_eLpected6 +
to_net4ork_la'er5DrEinfo6*
inc5fra&e_eLpected6*
/
if 5rEack ?? neLt_fra&e_to_send6 +
fro&_net4ork_la'er5D%uffer6*
inc5neLt_fra&e_to_send6*
/
/
sEinfo ? %uffer*
sEse) ? neLt_fra&e_to_send*
sEack ? 1 M fra&e_eLpected*
to_p,'sical_la'er5Ds6*
start_ti&er5sEse)6*
/
/

Protokol U
tipa Svrati se RG
A
Kada pri&alac do%ije po(re3an okvir ili (a
uop3te ne do%ije0 sve slede8e okvire
od%acuje ne 3alju8i za nji, potvrdu
A
Ovoj strate(iji od(ovara prozoru pir&aoca
veli$ine 1
A
Takodje0 izostavlja&o pretpostavku da
&re1ni sloj uvek i&a spre&an paket za
slanje

#define MAX_<=> V "# Tre%a %iti Wn M 1 #"
t'pedef enu& +fra&e_arrival0 cksu&_err0 ti&eout0 net4ork_la'er_read'/ event_t'pe*
#include FprotocolE,F
static %oolean %et4een5se)_nr a0 se)_nr %0 se)_nr c6
+
"# Brati true ako cikli$no va1i 5a ;?% ; c6 #"
if 555a ;? %6 DD 5% ; c66 XX 55c ; a6 DD 5a ;? %66 XX 55% ; c6 DD 5c ; a666
return5true6*
else
return5false6*
/
static void send_data5se)_nr fra&e_nr0 se)_nr fra&e_eLpected0 packet %uffer-.6
+
"# Rapravi i po3alji okvir podataka #"
fra&e s*
sEinfo ? %uffer-fra&e_nr.* "# 7nesi paket u okvir #"
sEse) ? fra&e_nr* "# unesi redni %roj u okvir #"
sEack ? 5fra&e_eLpected @ MAX_<=>6 Y 5MAX_<=> @ 16* "# 3lepuj potvrdu #"
to_p,'sical_la'er5Ds6* "# po3alji okvir #"
start_ti&er5fra&e_nr6* "# uklju$i taj&er #"
/

void protocolU5void6
+
se)_nr neLt_fra&e_to_send* "# MAX_<=> Z 1* koristi se za odlazni tok #"
se)_nr ack_eLpected* "# poslednji potvrdjeni okvir #"
se)_nr fra&e_eLpected* "# slede8i okvir koji se o$ekuje u dolazno& toku #"
fra&e r*
packet %uffer-MAX_<=>@1.* "# %aferi za odlazni tok #"
se)_nr n%uffered* "# %roj izlazni, %afera koji se trenutno koriste #"
se)_nr i* "# za indeksiranje niza %afera #"
event_t'pe event*
ena%le_net4ork_la'er56* "# o&o(u8ava do(adjaje net4ork_la'er_read' #"
ack_eLpected ? 0* "# slede8a o$ekivana dolazna potvrda #"
neLt_fra&e_to_send ? 0* "# slede8i okvir koji se 3alje#"
fra&e_eLpected ? 0* "# %roj o$ekivano( dolazno( okvira #"
n%uffered ? 0* "# na po$etku ne&a paketa u %aferu #"
4,ile 5true6 +
4ait_for_event5Devent6* "# $etiri &o(u8nosti #"
s4itc,5event6 +

case net4ork_la'er_read': "# &re1ni sloj i&a paket za slanje #"
"# Pri,vatanje0 &e&orisanje i slanje novo( okvira #"
fro&_net4ork_la'er5D%uffer-neLt_fra&e_to_send.6* "# uz&i nov paket #"
n%uffered ? n%uffered @ 1* "# pro3iri prozor po3iljaoca #"
send_data5neLt_fra&e_to_send0 fra&e_eLpected0 %uffer6* "# po3alji okvir #"
inc5neLt_fra&e_to_send6* "# po&eri (ornju (ranicu prozora po3iljaoca #"
%reak*
case fra&e_arrival: "# sti(ao okvir s korisni$ki& ili upravlja$ki& podaci&a #"
fro&_p,'sical_la'er5Dr6* "# uz&i pristi(li okvir iz fizi$ko( sloja #"

if 5rEse) ?? fra&e_eLpected6 + "# Okviri se pri,vataju sa&o ispravni& redosledo& #"
to_net4ork_la'er5DrEinfo6* "# prosledi paket &re1no& sloju #"
inc5fra&e_eLpected6* "# po&eri donju (ranicu prozora pri&aoca #"
/

"# Potvrda n podrazu&eva n M 10 n M 0 itdE #"
4,ile 5%et4een5ack_eLpected0 rEack0 neLt_fra&e_to_send66 +
"# O%radi 3lepovanu potvrduE #"
n%uffered ? n%uffered M 1* "# u %aferu je jedan okvir &anje #"
stop_ti&er5ack_eLpected6* "# okvir je sti(ao ispravan0 zaustavi taj&er #"
inc5ack_eLpected6* "# suzi prozor po3iljaoca #"
/
%reak*


case cksu&_err: %reak* "# zane&ari neispravne okvire#"


case ti&eout: "# po3alji ponovo sve okvire za koje nije sti(la potvrda #"
neLt_fra&e_to_send ? ack_eLpected* "# po$ni sa ponovni& slanje& odavde #"
for 5i ? 1* i ;? n%uffered* i@@6 +
send_data5neLt_fra&e_to_send0 fra&e_eLpected0 %uffer6*
inc5neLt_fra&e_to_send6* "# pripre&i se da po3alje3 slede8i okvir #"
/
/

if 5n%uffered ; MAX_<=>6
ena%le_net4ork_la'er56*
else
disa%le_net4ork_la'er56*
/
/

<lanje okvira i oporavljanje od
(re3aka kod protokola U

<elektivno ponavljanje
A
Pro%le& kod protokola U je tro3enje veliko( dela
propusno( opse(a kada su (re3ke $esteE
A
Ovde pri&alac %aferuje pristi(le podatke koji se
nalaze unutar predvi[eno( prozoraE
A
Po3iljalac pokre8e taj&er za svaki paket i pri
isteku taj&era 3alje sa&o od(ovaraju8i paketE
A
Dozvoljava &o(u8nost da paketi putuju razli$iti&
putanja&a 5ne sti1u poslati& redosledo&60 a da
i, sloj veze isporu$uje &re1no& sloju
ispravani& redosledo&E

#define MAX_<=> V "# tre%a %iti Wn M 1 #"
#define RN_C7\< 55MAX_<=> @ 16"6
t'pedef enu& +fra&e_arrival0 cksu&_err0 ti&eout0 net4ork_la'er_read'0 ack_ti&eout/
event_t'pe*
#include FprotocolE,F
%oolean no_nak ? true* "# nije poslata nijedna ne(ativna potvrda #"
se)_nr oldest_fra&e ? MAX_<=>@1* "# inicijalna vrednost #"
static void send_fra&e5fra&e_kind fk0 se)_nr fra&e_nr0 se)_nr fra&e_eLpected0 packet
%uffer-.6
+
"# Kreira i 3alje okvir sa podaci&a0 pozitivno& ili ne(ativno& potvrdo&E #"
fra&e s*
sEkind ? fk* "# kind ?? data0 ack0 or nak #"
if 5fk ?? data6 sEinfo ? %uffer-fra&e_nr Y RN_C7\<.*
sEse) ? fra&e_nr* "# P&a s&isla sa&o za okvire sa podaci&a#"
sEack ? 5fra&e_eLpected @ MAX_<=>6 Y 5MAX_<=> @ 16*
if 5fk ?? nak6 no_nak ? false*
to_p,'sical_la'er5Ds6* "# po3alji okvir #"
if 5fk ?? data6 start_ti&er5fra&e_nr Y RN_C7\<6*
stop_ack_ti&er56* "# &o(u8e je 3lepovanje potvrde #"
/

void protocolQ5void6
+
se)_nr ack_eLpected* "# donja (ranica prozora po3iljaoca #"
se)_nr neLt_fra&e_to_send* "# (ornja (ranica prozora po3iljaoca @ 1 #"
se)_nr fra&e_eLpected* "# donja (ranica prozora pri&aoca #"
se)_nr too_far* "# (ornja (ranica prozora pri&aoca @ 1 #"
int i*
fra&e r*
packet out_%uf-RN_C7\<.* "# %aferi za podatke koji se 3alju #"
packet in_%uf-RN_C7\<.* "# %aferi za podatke koji sti1u #"
%oolean arrived-RN_C7\<.* "# %it &apa pristi(li, okvira #"
se)_nr n%uffered* "# koliko se odlazni, %afera trenutno koristi #"
event_t'pe event*
ena%le_net4ork_la'er56*
ack_eLpected ? 0*
neLt_fra&e_to_send ? 0*
fra&e_eLpected ? 0*
too_far ? RN_C7\<*
n%uffered ? 0*


for 5i ? 0* i ; RN_C7\<* i@@6 arrived-i. ? false*
4,ile 5true6 +
4ait_for_event5Devent6*
s4itc,5event6 +
case net4ork_la'er_read': "# pri,vati0 s&esti u &e&oriju i po3alji novi okvir #"
n%uffered ? n%uffered @ 1* "# pro3iri prozor #"
fro&_net4ork_la'er5Dout_%uf-neLt_fra&e_to_send Y RN_C7\<.6*
send_fra&e5data0 neLt_fra&e_to_send0 fra&e_eLpected0 out_%uf6*
inc5neLt_fra&e_to_send6* "# po&eri (ornju (ranicu prozora #"
%reak*

case fra&e_arrival: "# sti(ao je okvir sa podaci&a ili upravlja$ki okvir #"
fro&_p,'sical_la'er5Dr6* "# uz&i dolazni okvir iz fizi$ko( sloja #"
if 5rEkind ?? data6 + "# sti(ao je neo3te8en okvir #"
if 55rEse) I? fra&e_eLpected6 DD no_nak6
send_fra&e5nak0 00 fra&e_eLpected0 out_%uf6*
else start_ack_ti&er56* "# $eka&o odre[eno vre&e za 3lepovanje potvrde #"
if 5%et4een5fra&e_eLpected0 rEse)0 too_far6 DD 5arrived-rEse)YRN_C7\<. ?? false66 +
"# Okviri se &o(u pri&ati %ilo koji& redo& #"
arrived-rEse) Y RN_C7\<. ? true* "# ozna$i od(ovaraju8i %afer kao pun #"
in_%uf-rEse) Y RN_C7\<. ? rEinfo* "# unesi podatke u %afer #"
4,ile 5arrived-fra&e_eLpected Y RN_C7\<.6 +
"# Prosledi okvire i po&eri prozor #"
to_net4ork_la'er5Din_%uf-fra&e_eLpected Y RN_C7\<.6*
no_nak ? true*
arrived-fra&e_eLpected Y RN_C7\<. ? false*
inc5fra&e_eLpected6* "# po&eri donju (ranicu prozora pri&aoca #"
inc5too_far6* "# po&eri (ornju (ranicu prozora pri&aoca #"
start_ack_ti&er56* "# $eka&o da 3lepuje&o potvrdu za prosle[eni okvir #"
/
/
/
if55rEkind??nak6 DD %et4een5ack_eLpected05rEack@16Y5MAX_<=>@160neLt_fra&e_to_send66
send_fra&e5data0 5rEack@16 Y 5MAX_<=> @ 160 fra&e_eLpected0 out_%uf6*
4,ile 5%et4een5ack_eLpected0 rEack0 neLt_fra&e_to_send66 +
n%uffered ? n%uffered M 1*
stop_ti&er5ack_eLpected Y RN_C7\<6*
inc5ack_eLpected6* "# po&eri donju (ranicu prozora po3iljaoca #"
/ %reak*

"# okvir je o3te8en0 po3alji RAK poruku #"
case cksu&_err:
if 5no_nak6 send_fra&e5nak0 00 fra&e_eLpected0 out_%uf6* %reak*

"# Ris&o do%ili potvrdu za najstariji okvir0 3alje&o (a ponovo #"
case ti&eout: send_fra&e5data0 oldest_fra&e0 fra&e_eLpected0 out_%uf6* %reak*
"# Mre1ni sloj ve8 du(o ne&a pakete za slanje0 3alje&o potvrdu %ez podataka #"
case ack_ti&eout: send_fra&e5ack000fra&e_eLpected0 out_%uf6*
/
if 5n%uffered ; RN_C7\<6 ena%le_net4ork_la'er56* else disa%le_net4ork_la'er56*
/
/

<elektivno ponavljanje

<elektivno ponavljanje
sa RAK poruko&

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close