MMT_Chuong03
9/30/2011
Chương 3.
Giao thức tầng giao vận (transport layer)
Mạng Máy Tính
Nguyễn Duy
Khoa Mạng Máy Tính và Truyền Thông
Trường ĐH Công Nghệ Thông Tin
9/30/2011
2 of 44
1
MMT_Chuong03
9/30/2011
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
9/30/2011
3 of 44
Transport Layer Services & Principles
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
application:
messages.
transport: segments (đoạn).
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).
9/30/2011
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
application
transport
network
data link
physical
4 of 44
2
MMT_Chuong03
9/30/2011
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.
9/30/2011
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
5 of 44
Transport Protocols
TCP (Transmission Control Protocol)
(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)
Connection-oriented
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.
9/30/2011
6 of 44
3
MMT_Chuong03
9/30/2011
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 of 44
9/30/2011
Multiplexing/demultiplexing (mux/demux)
sender
application-layer
data
segment
header
segment
M
receiver
M
M
application
transport
network
application
transport
network
P4
sender
M
P2
application
transport
network
Multiplexing (chia kênh): Các msgs từ các apps (P1,P2)
được chia nhỏ và đóng thành các segments.
Demultiplexing (dồn kênh): Các segments nhận được được
gửi tới apps tương ứng (P3, P4).
9/30/2011
Ht M
Hn segment
P1
P3
8 of 44
4
MMT_Chuong03
9/30/2011
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 of 44
9/30/2011
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
9/30/2011
10 of 44
5
MMT_Chuong03
9/30/2011
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
9/30/2011
11 of 44
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:
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.
Không
9/30/2011
12 of 44
6
MMT_Chuong03
9/30/2011
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)
9/30/2011
32 bits
Length, in
bytes of
UDP
segment,
including
source port #
dest port #
length
checksum
header
Application
data
(message)
UDP segment format
13 of 44
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.
9/30/2011
14 of 44
7
MMT_Chuong03
9/30/2011
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)
9/30/2011
15 of 44
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
9/30/2011
16 of 44
8
MMT_Chuong03
9/30/2011
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.
17 of 44
9/30/2011
RDT
rdt_send(): called from above,
(e.g., by app.). Passed data to
deliver_data(): called by
rdt to deliver data to upper
deliver to receiver upper layer
send
side
udt_send(): called by rdt,
to transfer packet over
unreliable channel to receiver
9/30/2011
receive
side
rdt_rcv(): called when packet
arrives on rcv-side of channel
18 of 44
9
MMT_Chuong03
9/30/2011
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
19 of 44
9/30/2011
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)
Wait for
call from
below
sender
9/30/2011
rdt_rcv(packet)
extract (packet,data)
deliver_data(data)
receiver
20 of 44
10
MMT_Chuong03
9/30/2011
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?
(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!)
acknowledgements
rdt2.0 so với rdt1.0:
error detection
receiver
feedback: control msgs (ACK,NAK) rcvr->sender.
21 of 44
9/30/2011
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
rdt_rcv(rcvpkt) && isACK(rcvpkt)
receiver
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
sender
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
9/30/2011
22 of 44
11
MMT_Chuong03
9/30/2011
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) && isACK(rcvpkt)
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
23 of 44
9/30/2011
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) && isACK(rcvpkt)
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
9/30/2011
24 of 44
12
MMT_Chuong03
9/30/2011
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).
25 of 44
9/30/2011
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
isNAK(rcvpkt) )
ACK
or
call 0 from
udt_send(sndpkt)
NAK 0
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
9/30/2011
Wait for
ACK or
NAK 1
Wait for
call 1 from
above
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
26 of 44
13
MMT_Chuong03
9/30/2011
RDT2.1: receiver, handles garbled ACK/NAKs
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
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)
27 of 44
9/30/2011
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)
Wait for
0 from
below
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
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)
9/30/2011
28 of 44
14
MMT_Chuong03
9/30/2011
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.
29 of 44
9/30/2011
RDT3.0 sender
rdt_send(data)
rdt_rcv(rcvpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
Wait
for
ACK0
Wait for
call 0from
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)
timeout
udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
stop_timer
stop_timer
timeout
udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
9/30/2011
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
30 of 44
15
MMT_Chuong03
9/30/2011
RDT3.0 in action
9/30/2011
31 of 44
RDT3.0 in action (cont)
9/30/2011
32 of 44
16
MMT_Chuong03
9/30/2011
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
9/30/2011
33 of 44
TCP Overview
Transmission Control Protocol [RFCs: 793,1122,
1323, 2018, 2581]
Point-to-point: 1 sender, 1 receiver.
Giao thức tin cậy (reliable).
Kiểm soát luồng (flow control).
Kiểm soát nghẽn mạng (congestion control).
full duplex: truyền nhận trên cùng một liên kết.
send/receive buffers
socket
door
application
writes data
application
reads data
TCP
send buffer
TCP
receive buffer
socket
door
segment
9/30/2011
34 of 44
17
MMT_Chuong03
9/30/2011
TCP segment structure
URG: urgent data
(generally not used)
ACK: ACK #
valid
Header length
(by 32-bit word)
PSH: push data to
app immediately
(generally not used)
32 bits
source port #
dest port #
sequence number
acknowledgement number
head not
UA P R S F
len used
rcvr window size
checksum
ptr urgent data
Options (variable length)
RST, SYN, FIN:
connection estab
(setup, teardown
commands)
counting
by bytes
of data
(not segments!)
# bytes
rcvr willing
to accept
application
data
(variable length)
Internet
checksum
(as in UDP)
35 of 44
9/30/2011
TCP: Reliable Data Transfer (retransmission)
timeout
Host A
Host B
X
loss
time
9/30/2011
lost ACK scenario
36 of 44
18
MMT_Chuong03
9/30/2011
TCP flow control
Các apps có thể xử lý dữ liệu chậm, các gói tin nhận về được đưa
vào bộ đệm (receiver buffer).
Flow control: kiểm soát không để cho receiver buffer bị tràn vì
sender gửi nhiều gói tin quá.
Receiver: Thông báo cho sender biết kích thước của RcvWidow
(free buffer): trường rcv window size trong TCP segment headers.
Sender: Luôn nắm được kích thước tối đa của gói tin có thể truyền
tiếp.
9/30/2011
37 of 44
TCP Connection management
TCP: Connection-oriented.
Khởi tạo các giá trị:
sequence
number.
buffers, flow control
information.
Client:Connection initiator
(khởi tạo liên kết: socket).
Server: Chấp nhận kết nối.
9/30/2011
Three way handshaking:
Bước 1: client gửi TCP
SYN control segment tới
server.
Bước 2: server nhận SYN
segment rồi trả lời bằng
SYNACK segment.
Bước 3: client nhận
SYNACK segment và trả
lời bằng ACK segment (có
thể có dữ liệu đi kèm).
38 of 44
19
MMT_Chuong03
9/30/2011
TCP Connection management: ngắt liên kết
Bước 1: client (phía muốn
ngắt liên kết) gửi TCP FIN
segment.
Bước 2: server (phía còn
lại) nhận được FIN, gửi
ACK, ngắt liên kết, gửi
tiếp FIN segment.
Bước 3: client nhận FIN,
trả lời bằng ACK. timed
wait (chờ một lúc nữa cho
tới khi liên kết đóng hẳn).
Bước 4: server nhận ACK,
đóng liên kết.
9/30/2011
client
server
closing
closing
timed wait
closed
closed
39 of 44
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
9/30/2011
40 of 44
20
MMT_Chuong03
9/30/2011
Congestion control
Nghẽn mạng là điều khó tránh khỏi!!!
Khi mạng bị nghẽn, các gói tin có thể bị trễ hay bị mất.
Hai hướng tiếp cận:
congestion control: Thông tin về mức độ nghẽn mạng
được suy ra từ lượng tin bị mất mát trong quá trình truyền.
Network-assited congestion control: Routers cung cấp các thông
tin phản hồi về tình trạng nghẽn mạng tới end systems.
End-end
Bit thông báo nghẽn mạng đừng gửi nữa hoăc xin chờ một lát.
Tốc độ tối đa cho phép gửi (maximum rate allowed).
TCP sử dụng phương pháp end-end congestion control.
9/30/2011
41 of 44
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
9/30/2011
42 of 44
21
MMT_Chuong03
9/30/2011
Một số so sánh TCP/UDP
Có liên kết, lưu trữ trạng
thái liên kết (quản lý liên
kết).
Điểm-điểm
Có độ trễ (delay): thiết lập,
quản lý liên kết, luồng,
nghẽn…
Segment header lớn (20
bytes)
Bị giới hạn tốc độ truyền
(congestion control)
9/30/2011
Không liên kết, không lưu
trữ trạng thái.
Điểm-điểm, quảng bá.
Độ trễ thấp.
Segment header nhỏ (8
bytes)
Không giới hạn tốc độ
truyền.
43 of 44
Các app thực tế
Application
Transport protocol
Electronic mail
SMTP
TCP
Remote terminal access
Telnet
TCP
Web
HTTP
TCP
File transfer
FTP
TCP
Remote file server
NFS
typically UDP
Streaming multimedia
proprietary
typically UDP
Internet telephony
proprietary
typically UDP
SNMP
typically UDP
Routing protocol
RIP
typically UDP
Name translation
DNS
typically UDP
Network management
9/30/2011
App protocol
44 of 44
22