Tải bản đầy đủ (.pdf) (43 trang)

Bài giảng mạng máy tính và internet chương 3 trần quang hải bằng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.05 MB, 43 trang )

Chương 3.
Giao thức tầng giao vận (transport layer)
Trần Quang Hải Bằng
Faculty of Information Technology
University of Communication and Transport (Unit 2)
Office location: Administration building, Block D3, Room 6
Office phone: 38962018
Cell phone: N/A
Email:

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

2


Ch3. The Transport Layer
1.

Transport Layer Services & Principles.

2.

Multiplexing/Demultiplexing.

3.

Connectionless Transport (UDP).

4.



Principles of Reliable Data Transfer (RDT).

5.

Connection-oriented Transport (TCP).

6.

Congestion Control.

7.

Sử dụng TCP hay UDP

06/02- 24/03/2012

3

Chương 3. Giao thức tầng giao vận (transport layer)

Transport Layer Services & Principles
application
transport
network
data link
physical

a
ic


nd
le

network
data link
physical

network
data link
physical

rt
po

Chương 3. Giao thức tầng giao vận (transport layer)

network
data link
physical

s
an
tr

Các msg từ tầng application gửi
xuống được chia nhỏ thành các
đoạn (segments).
Transport protocol được thực thi
tại các trạm cuối (end system).


nd
-e

application: messages.
transport: segments (đoạn).

06/02- 24/03/2012

network
data link
physical

network
data link
physical

g
lo

Cung cấp phương tiện truyền
thông logic (logical
communication) giữa các
applications.
PDUs

application
transport
network
data link

physical

4


Transport & Network layers
Network layer:
Truyền thông logic giữa
các trạm làm việc (host).
PDUs = packets (gói).
IP (Internet Protocol) là
giao thức truyền không tin
cậy.

Transport layer:
Tạo phương thức truyền
thông logic giữa các ứng
dụng (application/process).
Nhận các gói tin từ tầng
Network gửi lên.
06/02- 24/03/2012

Household analogy:
12 kids sending letters to 12 kids
processes = kids
app messages = letters in
envelopes
hosts = houses
transport protocol = Ann and
Bill

network-layer protocol =
postal service

Chương 3. Giao thức tầng giao vận (transport layer)

5

Transport Protocols
TCP (Transmission Control Protocol)
Connection-oriented (có liên kết).
Flow control (điều khiển luồng).
Congestion control (điều khiển chống nghẽn mạng).
reliable transport protocol (tin cậy)

UDP (User Datagram Protocol)
Connectionless.
Không có kiểm soát luồng và kiểm soát nghẽn mạng.
unreliable transport protocol.
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

6


Ch3. The Transport Layer
1.

Transport Layer Services & Principles.


2.

Multiplexing/Demultiplexing.

3.

Connectionless Transport (UDP).

4.

Principles of Reliable Data Transfer (RDT).

5.

Connection-oriented Transport (TCP).

6.

Congestion Control.

7.

Sử dụng TCP hay UDP
7

Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

Multiplexing/demultiplexing (mux/demux)

sender

P3

application-layer
data
segment
header
segment

Ht M
Hn segment

receiver
M

M

P4

application
transport
network

P1
M

application
transport
network


sender

M

P2

application
transport
network

Multiplexing (dồn kênh): Các msgs từ các apps (P1, P2) được chia
nhỏ và đóng gói thành các segments (thêm header) dồn kênh diễn
ra ở sending hosts
Demultiplexing (phân kênh): Các segments nhận được được gửi tới
apps tương ứng (P3, P4) phân kênh diễn ra ở receiving hosts

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

8


Dồn và chia kênh thế nào?
source port number: ứng
dụng gửi dữ liệu.
destination port number:
ứng dụng nhận dữ liệu.
Port number:

0-1023: well-known port
number (đã được giữ cho các
apps phổ biến).
1024 – 65535.

32 bits
source port #

dest port #

other header fields

application
data
(message)

TCP/UDP segment format

9

Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

Mux/demux: Ví dụ
host A

source port: x
dest. port: 23


server B

source port:23
dest. port: x

Source IP: C
Dest IP: B
source port: y
dest. port: 80

port use: simple telnet app

Web client
host A

Web client
host C

Source IP: A
Dest IP: B
source port: x
dest. port: 80

Source IP: C
Dest IP: B
source port: x
dest. port: 80

Web
server B

port use: Web server

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

10


Ch3. The Transport Layer
1.

Transport Layer Services & Principles.

2.

Multiplexing/Demultiplexing.

3.

Connectionless Transport (UDP).

4.

Principles of Reliable Data Transfer (RDT).

5.

Connection-oriented Transport (TCP).


6.

Congestion Control.

7.

Sử dụng TCP hay UDP

06/02- 24/03/2012

11

Chương 3. Giao thức tầng giao vận (transport layer)

Connectionless Transport (UDP).
User Datagram Protocol [RFC 768]
“no frill”, “bare bones” Internet transport protocol.
chỉ cần những thủ tục cơ bản nhất.
thông tin điều khiển cũng chỉ cần cơ bản nhất.

“best effort” service: dữ liệu có thể mất mát, sai sót nhưng
luôn “cố gắng hết sức” để giảm thiểu.
Connectionless:
Không có cơ chế bắt tay (handshaking): thiết lập
liệu kết thúc.
Không nắm giữ trạng thái.
Các segments được xử lý độc lập với nhau.
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)


truyền dữ

12


UDP: Segment structure
source port.
dest port.
length.
application data.
checksum: mã kiểm
tra lỗi (phục vụ cho
cơ chế nhận biết lỗi
– error detection)

06/02- 24/03/2012

32 bits
Length, in
bytes of
UDP
segment,
including
header

source port #

dest port #


length

checksum

Application
data
(message)

UDP segment format

Chương 3. Giao thức tầng giao vận (transport layer)

13

UDP segment - example
Sender’s MAC address
Receiver’s MAC address

06/02- 24/03/2012

Type of upper layer’s protocol
( 0x0800 = IP )

Chương 3. Giao thức tầng giao vận (transport layer)

14


UDP segment – example (cnt.)
IP’s Header


06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

15

UDP segment – example (cnt.)
UDP’s header

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

16


UDP segment – example (cnt.)

Data of applicaton layer

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

17

UDP checksum
Mã kiểm tra phục vụ cho cơ chế nhận biết lỗi.
Sender:

Coi segment như chuỗi các số nguyên 16-bit.
checksum = số bù một (1’s complement) của tổng các
số nguyên đó.

Receiver:
Tính toán checksum của segment nhận được.
So sánh với checksum chứa trong trường checksum của
segment nhận được nếu sai khác tức là có lỗi.
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

18


UDP checksum: example
Phép cộng các số 16-bit liên tiếp là phép cộng có nhớ.
Kiểm tra checksum: Lấy tổng các số 16-bit (có nhớ) cộng
với checksum: Kết quả là 1111 1111 1111 1111 thì không
có lỗi, nếu khác là có lỗi.
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
(bù 1)
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)


19

Ch3. The Transport Layer
1.

Transport Layer Services & Principles.

2.

Multiplexing/Demultiplexing.

3.

Connectionless Transport (UDP).

4.

Principles of Reliable Data Transfer (RDT).

5.

Connection-oriented Transport (TCP).

6.

Congestion Control.

7.

Sử dụng TCP hay UDP


06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

20


Principles of Reliable Data Transfer (RDT)
Truyền dữ liệu tin cậy là vấn đề vô cùng quan trọng (top
10 list of important networking topics).
Cần thiết đối với app, transport, datalink layer.

06/02- 24/03/2012

21

Chương 3. Giao thức tầng giao vận (transport layer)

RDT
rdt_send(): called from above,
(e.g., by app.). Passed data to
deliver to receiver upper layer

deliver_data(): called by
rdt to deliver data to upper

send
side


receive
side

udt_send(): called by rdt,
to transfer packet over
unreliable channel to receiver
06/02- 24/03/2012

rdt_rcv(): called when packet
arrives on rcv-side of channel

Chương 3. Giao thức tầng giao vận (transport layer)

22


Finite State Machine (FSM)

event causing state transition
actions taken on state transition

state: when in this
“state” next state
uniquely determined
by next event

state
1

state

2

event
actions

Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

23

RDT1.0: reliable data transfer over reliable channel

Tầng dưới:
Không có lỗi.
Không mất mát dữ liệu (gói tin).

Sender gửi dữ liệu xuống tầng dưới.
Receiver nhận dữ liệu gửi từ tầng dưới lên.
Wait for
call from
above

rdt_send(data)
packet = make_pkt(data)
udt_send(packet)

sender
06/02- 24/03/2012


Wait for
call from
below

rdt_rcv(packet)
extract (packet,data)
deliver_data(data)

receiver

Chương 3. Giao thức tầng giao vận (transport layer)

24


RDT2.0: channel with bit errors
Tầng dưới có thể có lỗi bit (0 

1)

UDP checksum có khả năng phát hiện lỗi bit.

Khắc phục lỗi (error recover) thế nào?
acknowledgements (ACKs): receiver thông báo đã nhận gói dữ
liệu tốt (không có lỗi).
negative acknowledgements (NAKs): receiver thông báo gói dữ
liệu nhận được có lỗi.
Nếu nhận được NAK, sender cần gửi lại gói tin bị lỗi.
human scenarios using ACKs, NAKs? (telephone talking!)


rdt2.0 so với rdt1.0:
error detection
receiver feedback: control msgs (ACK,NAK) rcvr->sender.
06/02- 24/03/2012

25

Chương 3. Giao thức tầng giao vận (transport layer)

RDT2.0: FSM specification
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for
Wait for
call from
ACK or
udt_send(sndpkt)
above
NAK

receiver
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)
Λ


Wait for
call from
below

sender

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

26


RDT2.0: operation with no errors
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for
Wait for
call from
ACK or
udt_send(sndpkt)

above
NAK

rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)

Wait for
call from
below

Λ

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
27

Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

RDT2.0: error scenario
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)

rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for
Wait for
call from
ACK or
udt_send(sndpkt)
above
NAK

rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)

Wait for
call from
below

Λ

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)


28


RDT2.0: problems
Nếu ACK, NAK bị lỗi?
Sender không biết kết quả gửi gói tin thế nào.
Cũng chẳng thể gửi lại gói tin vì có thể gây hiện tượng lặp gói
tin.

Giải pháp:
Sender truyền lại nếu như ACK/NAK bị lỗi.
Kiểm soát lặp gói tin (duplicate handling)
Thêm vào gói tin trường số thứ tự (sequence number).

Căn cứ vào số thứ tự gói tin, receiver bỏ qua những gói tin bị lặp.
Sender sẽ không gửi gói tin tiếp theo nếu như chưa chắc chắn
receiver nhận được gói trước đó (stop and wait protocol).
Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

29

RDT2.1: sender, handles garbled ACK/NAKs
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for

call 0 from
above

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)

( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)

Wait for
ACK or
NAK 0

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)

Λ

rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)

06/02- 24/03/2012

Λ
Wait for

ACK or
NAK 1

Wait for
call 1 from
above

rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)

Chương 3. Giao thức tầng giao vận (transport layer)

30


RDT2.1: receiver, handles garbled ACK/NAKs
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)

Wait for
0 from
below

rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq1(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

Wait for
1 from
below

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)

sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)


06/02- 24/03/2012

31

Chương 3. Giao thức tầng giao vận (transport layer)

RDT2.2: a NAK-free protocol
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for
Wait for
isACK(rcvpkt,1) )
ACK
call 0 from
0
udt_send(sndpkt)
above

sender FSM
fragment

rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)

rdt_rcv(rcvpkt)

&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
Λ

Wait for
0 from
below

receiver FSM
fragment

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

32


RDT3.0: channels with errors and loss
Tầng dưới:
Có thể có lỗi.
Có thể gây mất mát gói tin.

Giải pháp:

Sender truyền lại gói tin nếu như chờ ACK một thời
gian nhất định nào đó mà không thấy (cần countdown
timer).
Nếu ACK hay gói tin chỉ bị chậm thôi?
truyền lại sẽ gây ra hiện tượng lặp gói tin.
cần sequence number.
33

Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

RDT3.0 sender
rdt_send(data)

rdt_rcv(rcvpkt)

Λ

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)

rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )

06/02- 24/03/2012

timeout

udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
stop_timer

stop_timer

timeout
udt_send(sndpkt)
start_timer

Λ

Wait
for
ACK0

Wait for
call 0from
above

Λ

rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )

sndpkt = make_pkt(0, data, checksum)

udt_send(sndpkt)
start_timer

Wait
for
ACK1

Wait for
call 1 from
above
rdt_send(data)

rdt_rcv(rcvpkt)

Λ

sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer

Chương 3. Giao thức tầng giao vận (transport layer)

34


RDT3.0 in action

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)


35

RDT3.0 in action (cont)

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

36


Hiệu suất của RDT3.0
Giả sử có đường truyền giữa 2 host với các thông số sau:
Bandwidth: 1 Gbps (109 bits per second)
Propagation delay: 15 ms
Size of packet: 1KB

Ttransmit =

U

L (packet length in bits)
8kb/pkt
=
R (transmission rate, bps)
109 b/sec

sender


L/R

=

RTT + L / R

=

.008

= 8 microsec

= 0.00027

30.008

microsec

U sender: utilization – fraction of time sender busy sending
1KB trong 30msec -> 33KB/sec effective throught put over 1 Gbps link
network protocol limits use of physical resources!

Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

37

RDT3.0 stop-and-wait operation
sender


receiver

first packet bit transmitted, t = 0
last packet bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, send
ACK

RTT

ACK arrives, send next
packet, t = RTT + L / R

U

06/02- 24/03/2012

sender

=

L/R
RTT + L / R

=

.008
30.008


= 0.00027
microsec

Chương 3. Giao thức tầng giao vận (transport layer)

38


Tăng hiệu suất đường truyền - Pipelined protocols
Pipelining: Gửi liên tục nhiều packets rồi đợi ACK
Số thứ tự gói tin (sequence numbers) tăng đều và duy nhất
Sử dụng bộ nhớ đệm tại Sender và Receiver

Có 2 phương án xử lý khi gặp lỗi:
go-Back-N
Selective repeat
Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

39

Tăng hiệu suất đường truyền - Pipelined protocols
sender

receiver

first packet bit transmitted, t = 0
last bit transmitted, t = L / R
first packet bit arrives

last packet bit arrives, send ACK
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK

RTT

ACK arrives, send next
packet, t = RTT + L / R

Increase utilization
by a factor of 3!

U

06/02- 24/03/2012

sender

=

3*L/R
RTT + L / R

=

.024
30.008

= 0.0008
microsecon


Chương 3. Giao thức tầng giao vận (transport layer)

40


Go-Back-N
Sender:
Sử dụng k-bit ở header để lưu sequence number
Cửa sổ trượt cho phép chứa N packets chưa được báo ACK.

Nếu nhận ACK(n): Mọi packet có số hiệu tới n-1 đã gửi thành công
Cần giám sát thời gian timeout cho mỗi packet đang gửi đi (in-flight packet)
timeout(n): Gửi lại packet n và các packet có seq # lớn hơn trong window

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

41

Chương 3. Giao thức tầng giao vận (transport layer)

42

GBN in action

06/02- 24/03/2012



GBN: sender extended FSM
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
}
else
refuse_data(data)

Λ
base=1
nextseqnum=1

timeout
start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])

Wait
rdt_rcv(rcvpkt)
&& corrupt(rcvpkt)

udt_send(sndpkt[nextseqnum-1])
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)

stop_timer
else start_timer
Chương 3. Giao thức tầng giao vận (transport layer)

06/02- 24/03/2012

43

GBN: receiver extended FSM
default
udt_send(sndpkt)

Λ
Wait
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnum,ACK,chksum)

rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

ACK-only: always send ACK for correctly-received pkt with highest
in-order seq #
may generate duplicate ACKs

need only remember expectedseqnum

out-of-order pkt:
discard (don’t buffer) -> no receiver buffering!
Re-ACK pkt with highest in-order seq #
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

44


Selective Repeat (SR)
Receiver gửi ACK cho từng packet tới đích
Lưu trữ packets vào buffers (nếu cần thiết) để chuyển
lên layer phía trên

Sender gửi lại những packet không nhận được
ACK sau khoảng timeout
Cần cơ chế định thời timeout cho từng packet (chưa
được ACK)

Sender window
N consecutive seq #’s
again limits seq #s of sent, unACKed pkts
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

45


Selective repeat: sender, receiver windows

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

46


Selective repeat
receiver
pkt n in [rcvbase, rcvbase+N-1]

sender

data from above :
if next available seq # in
window, send pkt

timeout(n):
resend pkt n, restart timer

ACK(n) in

pkt n in [rcvbase-N,rcvbase-1]

[sendbase,sendbase+N]:

mark pkt n as received

if n smallest unACKed pkt,
advance window base to
next unACKed seq #

06/02- 24/03/2012

send ACK(n)
out-of-order: buffer
in-order: deliver (also deliver
buffered, in-order pkts), advance
window to next not-yet-received
pkt
ACK(n)

otherwise:
ignore

Chương 3. Giao thức tầng giao vận (transport layer)

47

Selective repeat in action

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

48



Selective repeat: rắc rối khi window size quá lớn
Example:
seq #’s: 0, 1, 2, 3
window size=3
receiver sees no difference in
two scenarios!
incorrectly passes duplicate
data as new in (a)
Q: what relationship between seq
# size and window size?
Yes, windows size= (total number /2)
0,1,2,3 => widwowsize=4/2=2
06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer) Transport Layer

3-49 49

Ch3. The Transport Layer
1.

Transport Layer Services & Principles.

2.

Multiplexing/Demultiplexing.

3.

Connectionless Transport (UDP).


4.

Principles of Reliable Data Transfer (RDT).

5.

Connection-oriented Transport (TCP).

6.

Congestion Control.

7.

Sử dụng TCP hay UDP

06/02- 24/03/2012

Chương 3. Giao thức tầng giao vận (transport layer)

50


×