Xem mẫu
- 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: tqhbang@utc2.edu.vn
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 Chương 3. Giao th c t ng giao v n (transport layer) 3
Transport Layer Services & Principles
Cung cấp phương tiện truyền
application
thông logic (logical transport
network
communication) giữa các data link
physical
network
data link
network
lo
physical
applications.
g
data link
ic
physical
a le
network
PDUs
nd
data link
-e
physical network
nd
application: messages. data link
physical
tr
an
transport: segments (đoạn). network
s
po
data link
rt
physical
Các msg từ tầng application gửi
application
xuống được chia nhỏ thành các transport
network
đoạn (segments). data link
physical
Transport protocol được thực thi
tại các trạm cuối (end system).
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 4
- Transport & Network layers
Network layer: Household analogy:
Truyền thông logic giữa 12 kids sending letters to 12 kids
các trạm làm việc (host).
processes = kids
PDUs = packets (gói).
app messages = letters in
IP (Internet Protocol) là
giao thức truyền không tin envelopes
cậy. hosts = houses
Transport layer: transport protocol = Ann and
Tạo phương thức truyền Bill
thông logic giữa các ứng network-layer protocol =
dụng (application/process). postal service
Nhận các gói tin từ tầng
Network gửi lên.
06/02- 24/03/2012 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
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 7
Multiplexing/demultiplexing (mux/demux)
sender receiver sender
P3 P4
application-layer M M
data
application
segment P1 transport P2
header M
M network
application application
segment Ht M transport transport
network
Hn segment 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 32 bits
dụng gửi dữ liệu. source port # dest port #
destination port number: other header fields
ứng dụng nhận dữ liệu.
Port number: application
0-1023: well-known port data
(message)
number (đã được giữ cho các
apps phổ biến).
TCP/UDP segment format
1024 – 65535.
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 9
Mux/demux: Ví dụ
source port: x Web client
host A dest. port: 23 server B host C
source port:23
dest. port: x
Source IP: C Source IP: C
Dest IP: B Dest IP: B
source port: y source port: x
port use: simple telnet app dest. port: 80 dest. port: 80
Source IP: A
Dest IP: B Web
Web client source port: x server B
host A dest. port: 80
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 Chương 3. Giao th c t ng giao v n (transport layer) 11
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 truyền dữ
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) 12
- UDP: Segment structure
source port. 32 bits
dest port. Length, in source port # dest port #
bytes of length checksum
length. UDP
segment,
application data. including
header
checksum: mã kiểm Application
data
tra lỗi (phục vụ cho (message)
cơ chế nhận biết lỗi
– error detection) UDP segment format
06/02- 24/03/2012 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
Type of upper layer’s protocol
( 0x0800 = IP )
06/02- 24/03/2012 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 Chương 3. Giao th c t ng giao v n (transport layer) 21
RDT
rdt_send(): called from above, deliver_data(): called by
(e.g., by app.). Passed data to rdt to deliver data to upper
deliver to receiver upper layer
send receive
side side
udt_send(): called by rdt, rdt_rcv(): called when packet
to transfer packet over arrives on rcv-side of channel
unreliable channel to receiver
06/02- 24/03/2012 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 state
“state” next state event
1 2
uniquely determined actions
by next event
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 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 rdt_send(data) Wait for rdt_rcv(packet)
call from call from extract (packet,data)
above packet = make_pkt(data) below deliver_data(data)
udt_send(packet)
sender receiver
06/02- 24/03/2012 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 Chương 3. Giao th c t ng giao v n (transport layer) 25
RDT2.0: FSM specification
rdt_send(data)
snkpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
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 rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
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) 27
RDT2.0: error scenario
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
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).
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 29
RDT2.1: sender, handles garbled ACK/NAKs
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Λ
Λ
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
06/02- 24/03/2012 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)
sndpkt = make_pkt(NAK, chksum)
Wait for Wait for udt_send(sndpkt)
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 31
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
ACK isACK(rcvpkt,1) )
call 0 from
above 0 udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || Λ
has_seq1(rcvpkt)) Wait for receiver FSM
0 from
udt_send(sndpkt) below 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.
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 33
RDT3.0 sender
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer Λ
Λ Wait for Wait
for timeout
call 0from
ACK0 udt_send(sndpkt)
above
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
timeout for call 1 from
udt_send(sndpkt) ACK1 above
start_timer rdt_rcv(rcvpkt)
rdt_send(data) Λ
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
Λ
06/02- 24/03/2012 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 = L (packet length in bits) 8kb/pkt
= = 8 microsec
R (transmission rate, bps) 109 b/sec
L/R .008
U = = = 0.00027
sender 30.008
RTT + L / R 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!
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 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
RTT last packet bit arrives, send
ACK
ACK arrives, send next
packet, t = RTT + L / R
L/R .008
U = = = 0.00027
sender 30.008
RTT + L / R microsec
06/02- 24/03/2012 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
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 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
RTT last packet bit arrives, send ACK
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
Increase utilization
by a factor of 3!
3*L/R .024
U = = = 0.0008
sender 30.008
RTT + L / R microsecon
06/02- 24/03/2012 Chương 3. Giao th c t ng giao v n (transport layer) 40
nguon tai.lieu . vn