! "" " #
! "" $ #
%
"
%
'
(
(
)*+,-.
%
! "" / #
!
"
#
0
1
$ $ $ $
*
3
1 2 3 4 5 6 7 8 9 10
while(true) // ulangi selamanya
{
WaitForEvent(); // sleep sampai terjadi event
if(Event(RequestToSend)) // ada paket untuk dikirim {
GetData(); MakeFrame();
SendFrame(); // kirim frame
} }
0
3
1 2 3 4 5 6 7 8 9 10
while(true) // ulangi selamanya
{
WaitForEvent(); // sleep sampai terjadi event
if(Event(ArrivalNotification)) // Frame data diterima {
ReceiveData(); ExtractData();
DeliverData(); // kirim data ke network layer
} }
!
"
%
#
.
.
* 4
0
* 4
& & & &
*
3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18while(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; } }
*
3
1 2 3 4 5 6 7 8 9 10 11while(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
} }
' ' ' '
(
%
7
8
!
"
%
)*
# + "
+ ,*
-)+./
0
9
*+,
:
3
.
0
8
)*
4-&
"
&
* 4 "
&
"
1
* 4 1
.
0
)&
"- 0
+
)&
"-.
1
* 4
.
* 4
)
-:
;
0 0 0 0
! "" < # *+,
*
3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33Sn = 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
1 1 1 1
*
3
1 2 3 4 5 6 7 8 9 10 11 12 13 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
{
ExtractData();
DeliverData(); // kirim data ke network layer
Rn= Rn + 1; }
SendFrame(Rn); // kirim frame ACK
} }
! "" = # *+,
2
#
)+.
%
; *+,
9
* 4 4
* 4
.
*+,
;
0
9
8
* 4
4
3 3 3 3
* 4
8
$ " 8
)
> .
- 9
* 4
1
0
9
8
"
9
?
%
0 0
0
@0
0
0
@1
9
9A0
@0 B" 0
+
1
+
1
+
>
.
*
.
* 4
1
1
* 4
4
:
; *+,
4 4 4 4
! "" "& #
%
; *+,
3
! "" "" # ; *+,
%
!
; *+,
$
5 55 5
! "" "$ # ; *+,
%
* 4
*
3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30Sw = 2m – 1; Sf = 0; Sn = 0;
While(true) // ulangi terus
{
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;
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)
{
31 32 33 34 35 36 37 38 39 40 41 42 43 44 StopTimer(); }
If(event(TimeOut)) // timer expires
{
StartTimer(); Temp = Sf; While(Temp < Sn) {
SendFrame(Sf); Sf = Sf + 1; } } }
0
3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Rn = 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 + "
)+.
0
*+,
; *+,
*+,
0
*+,
; *+,
4
;
*+, 8
$ 1
+
! "" "/ # *+,
! "" "2 # *+,
%
*+,
* 4 );*
4-! "" "5 # *+,
*
3
1 2 3 4 5
Sw = 2m – 1; Sf = 0; Sn = 0;
$ $$ $ 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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); } }
*
3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17Rn = 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) {
& && & 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 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; }
} } } }
! "6 # *+,
.
; *+,
>
&
(
* 4
>
"
(
;*4
' '' '
.
.
$
"
4
/
D
"
" $
/
*
7
6
-7
/
D%@
%
*+,
8
*
9
:
*
;+E
* E
;+E %
;+E
4
0
;+E
! "" "< ;+E
* E %
* E
@
0 00 0
D%@
):
-)0
-
)8
- 0
:
)
- 0
8
:
8
! "" "C # D%@
0
D%@
6
)
0
2
-=
&""""""&
1
1
.
"
0
"$=
)"
- 1
"
"
&
"
&
1
'
"
$
:
.
1 11 1
;
:
%
)
-:
&
:
/
;)0-%
/
&
<
.
"
/
;)+-
* 4
!
0
0
$
"&
0
$
2
0
)++-
&&
)+;+-
"&
)+'1-
&"
)0+'1-
""
5
.
:
/
;F
* 4
;*4
<
8
! "" $& : 0 8
8
4
8
$
$
.
)
G-3 33 3
&& &&"
0;+E
0
"" &""
0;+E'
0
"" "&&
0* E
%E
0
"" ""&
0* E'
0
&& &&&
8:
8:
:
&& ""&
8*
*
&& &"&
%:0
+%
%
(
"& &&&
0:E
+:E
0
(
&& "&&
8.
.
"" &&"
+0'>
+
"" "&"
H:%
H:%
'G
:%
"& &&"
+E+
+E+
#
-
/
E
D%@
.
.
.
)...-0
:
...
%0@
! "" $" # ...
...
3
D%@
...
&""""""&
4
...
D%@
"""""""
4 44 4
(
0 0
D%@
+ $
2
:
4
...
! "" $$ #
%
>
'
4
%
1
)
-*
0
4
1
1
;
0
0
.
I
4
4
5 55 5
! "" $/ # ... 0
E
...
...
@
.
)@
.-:
1
...
@ .
! "" $2 # @ .
.
I
...
).*.-)
D*.-.*.
3
8
! "" $5 # .*.
D*.
.*. >
3
0
8
8
0
%
! "" $6 # D*.
; .
)
-
; .
... 0
:. .
.