Flow dan Error Control
! "" " # ! "" $ # % " % & " &
' ( ( )*+,-
.
% ! "" / # ! " #
1
- 3
1
! " % # .
10 while(true) // ulangi selamanya { WaitForEvent(); // sleep sampai terjadi event if(Event(ArrivalNotification)) // Frame data diterima { ReceiveData(); ExtractData(); DeliverData(); // kirim data ke network layer } }
9
8
7
6
5
4
3
2
3
10 while(true) // ulangi selamanya { WaitForEvent(); // sleep sampai terjadi event if(Event(RequestToSend)) // ada paket untuk dikirim { GetData(); MakeFrame(); SendFrame(); // kirim frame } }
9
8
7
6
5
4
3
2
1
.
- 4
* 4
- 3
16
11 while(true) // ulangi selamanya { WaitForEvent(); // sleep sampai terjadi event if(Event(ArrivalNotification)) // Frame data diterima { ReceiveData(); ExtractData(); DeliverData(); // kirim data ke network layer SendFrame(); // kirim frame ACK } }
10
9
8
7
6
5
4
3
2
1
18 while(true) // ulangi selamanya canSend = true // ijinkan frame pertama dikirim { WaitForEvent(); // sleep sampai terjadi event if(Event(RequestToSend) AND canSend) { GetData(); MakeFrame(); SendFrame(); // kirim frame canSend = false; // tidak bisa kirim sampai ACK } WaitForEvent() // sleep sampai terjadi event if(Event(ArrivalNotification)) // ACK diterima { ReceiveFrame(); // frame ACK diterima canSend = true; } }
17
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
- 3
! "" 6 # *
( %
7
8 ! " % )* # + " + ,* -)+./ 9 *+, :
3 .
)* 4-
8 & " & * 4 " & "
1
- 4 1 .
- )& "- 0 )& "- 1 * 4 .
- 4 ) .
: ;
- 4
- 3
! "" < # *+,
18
32
31
30
29
28
27
26
25
24
23
22
21
20
19
17
1
8
2
3
4
5
6
7
9
16
10
11
12
13
14
15
33 Sn = 0; // frame 0 hrs dikirim dulu canSend = true; // ijinkan request pertama dikirim while(true) // ulangi selamanya { WaitForEvent(); // sleep sampai terjadi event if(Event(RequestToSend) AND canSend) { GetData(); MakeFrame(Sn); // nomor urut Sn StoreFrame(Sn); // simpan salinannya SendFrame(Sn); // kirim frame StartTimer(); Sn = Sn + 1; canSend = false; } WaitForEvent() // sleep sampai terjadi event if(Event(ArrivalNotification)) // ACK diterima { ReceiveFrame(ackNo); // frame ACK diterima if(Not corrupted AND ackNo == Sn) // ACK valid { StopTimer(); PurgeFrame(Sn-1); // frame tidak perlu lagi canSend = true; } } If(Event(TimeOut)) // timer expired { StartTimer(); ResendFrame(Sn-1); // kirim ulang salinan } }
3 *
1 Rn = 0; // frame 0 diharapkan dtg dulu 2 while(true) // ulangi selamanya 3 {
4 WaitForEvent(); // sleep sampai terjadi event 5 if(Event(ArrivalNotification)) // Frame data diterima 6 {
7 ReceiveFrame();
8 If(corrupted(frame));
9 Sleep();
10 If(seqNo == Rn) // no frame valid 11 {
12 ExtractData();
13 DeliverData(); // kirim data ke network layer
14 Rn= Rn + 1; 15 }
16 SendFrame(Rn); // kirim frame ACK 17 } 18 }
! "" = # *+, 2 # )+.
% ; *+,
9
- 4 4 * 4 .
- , ;
9
8
- 4
4
- 4 8 $ " 8 ) > . - 9
- 4
1
9
8 " 9 % 0 0
? @ @
1
9
9A0 @
- 0 B" 0
1
- 1
- .
>
- . * 4
1
1
- 4
4 : ; *+,
! "" "& # % ; *+,
3
! "" "" # ; *+, % ! ; *+,$ "
- 4
3
- – 1; Sf = 0; Sn = 0; While(true) // ulangi terus { WaitForEvent();
17
m
30 Sw = 2
29
28
27
26
25
24
23
22
21
20
19
18
16
! "" "$ # ; *+, %
7
1
2
3
4
5
6
8
15
9
10
11
12
13
14
If(Event(RequestToSend)) // jika paket hendak dikirim { If(Sn-Sf >= Sw) // jika window penuh Sleep(); GetData(); MakeFrame(Sn); StoreFrame(Sn); SendFrame(sn); Sn = Sn + 1; If(timer not running) StartTimer(); } If(event(ArrivalNotification)) // ACK dtg { Receive(ACK); If(corrupted(ACK)) Sleep(); If((ackNo>Sf)&&(ackNo<=<=Sn)) // jika ACK valid While(Sf <= ackNo) { PurgeFrame(Sf); Sf = Sf + 1; }
@
12
6
7
8
9
10
11
13
4
14
15
16
17
18 Rn = 0; // frame 0 diharapkan dtg dulu while(true) // ulangi selamanya { WaitForEvent(); // sleep sampai terjadi event if(Event(ArrivalNotification)) // Frame data diterima { ReceiveFrame(); If(corrupted(frame)); Sleep(); If(seqNo == Rn) // no frame valid { DeliverData(); // kirim data ke network layer Rn= Rn + 1; SendACK(Rn); } } } ! # 6 + " )+.
4 ;
5
3
31
38
32
33
34
35
36
37
39
2
40
41
42
43
44 StopTimer(); } If(event(TimeOut)) // timer expires { StartTimer(); Temp = Sf; While(Temp < Sn) { SendFrame(Sf); Sf = Sf + 1; } } }
3
1
- , ; *+, <
- , ; *+,
- , 8 $ 1
! "" "/ # *+, ! "" "2 # *+,
% *+, * 4 );* 4-
! "" "5 # *+,- 3
m
1 Sw = 2 – 1;
2 Sf = 0;
3 Sn = 0;
4
16 Rn = 0; Naksent = false; Ackneeded = false; Repeat(for all slots) Marked(slot) = false; while(true) // ulangi selamanya { WaitForEvent(); // sleep sampai terjadi event if(Event(ArrivalNotification)) // Frame data diterima { ReceiveFrame(); If(corrupted(frame) && (NOT naksent) { sendNAK(Rn); NAKsent = true;
2
37
38
39
40
41
42
43
44
45
46
47 { WaitForEvent(); If(Event(RequestToSend)) // jika paket hendak dikirim { If(Sn-Sf >= Sw) // jika window penuh Sleep(); GetData(); MakeFrame(Sn); StoreFrame(Sn); SendFrame(sn); Sn = Sn + 1; StartTimer(Sn); } If(event(ArrivalNotification)) // ACK dtg { Receive(frame); // terima ACK atau NAK If(corrupted(frame)) Sleep(); If(FrameType == NAK) If(nakNo betweeen Sf and Sn) { Resend(nakNo); StartTimer(nakNo); } If(FrameType == ACK) If(nakNo between Sf and Sn) { While(Sf<ackNo) { Purge(Sf); StopTimer(Sf); Sf = Sf +1; } } } If(event(TimeOut(t))) // timer expires { StartTimer(t); SendFrame(t); } }
1
3
35
4
5
6
7
8
9
10
11
12
13
14
15
36
34
6
19
7
8
9
10
11
12
13
14
15
16
17
18
20
33
21
22
23
24
25
26
27
28
29
30
31
32
3
; *+, > & ( * 4
> " ( ;*4
32
! "6 # *+, .
43 } If(seqNo <> Rn) && (NOT naksent) { sendNAK(Rn); naksent = true; if((seqNo in window) && (!marked(seqno)) { Storeframe(seqno) Marked(seqno) = true; While(marked(Rn)) { DeliverData(Rn); Purge(Rn); Rn = Rn + 1; Ackneeded = true; } If(ackneeded) { Sendack(Rn); Ackneeded = false; Naksent = false; } } } } }
42
41
40
39
38
37
36
35
34
33
31
18
30
29
28
27
26
25
24
23
22
21
20
19
- 4 %
.
. $
"
4 / D" " $ /
- 7
6 -7 / D%@ % *+,
- 8
9 : ;+E * E * ;+E % ;+E
4 ;+E ! "" "< ;+E
- E % * E @
! "= * E
): - D%@
- )0 )8 - 0 : ) - 0
8 :
8 ! "" "C # D%@
D%@ 6 )
- 2 = &""""""&
1
1 . " "$= )" - 1 " " &
" &
1 ' " $ :
.
(
;
: %
- ) : & : / ;)0- % / & < . " / ;)+- * 4
!
$ "& $ 2 )++- && )+;+- "&
)+'1- &" )0+'1- "" 5 . : / ;F * 4 ;*4
<
8 ! "" $& :
8
8 4
8 $ $ . )
G- . ) G-
&& &&" 0;+E "" &"" 0;+E' "" "&& 0* E %E "" ""& 0* E' && &&& 8: 8: :
- && ""& 8* && &"& %:0 +% % ( "& &&& 0:E +:E
( && "&& 8. .
- "" &&" +0'> "" "&" H:% H:% 'G :% "& &&" +E+ +E+
- # /
E D%@ . . . )...- : ...
%0@ ! "" $" # ...
...
3 D%@ ... &""""""& 4 ...
D%@ """""""
8 D%@ ; ""&&&&&&
( 0 0 D%@ + $
2 : 4 ...
! "" $$ # %
> ' 4 %
1
- ) 4 *
1 1 ;
.
I
4
4 >
4
! "" $/ # ... 0 E ... ...
@ . )@ .-
:
1 ... @ .! "" $2 # @ .
.
I ...
).*.- ) D*.- .*.
3
8
! "" $5 # .*.
D*. .*. >
3
8
8 % D
1
! "" $6 # D*.
) ; . - ; . ... 0 :. .
.
! "" $< # :. .