You are on page 1of 38

TCP: Tổng quan RFCs: 793, 1122, 1323, 2018, 2581

 ðiểm nối ñiểm:  Truyền song công:


 Một gửi, Một nhận  Dữ liệu truyền theo cả hai
 Tin cậy, theo ñúng thứ tự: hướng
 Không quan tâm ñến khuôn  MSS: Kích thước tối ña một
dạng thông ñiệp. segment

 ðường ống:  Hướng nối:


 Cửa sổ kiểm soát tắc nghẽn  Bắt tay, chào hỏi trước khi
và ñiều khiển lưu lượng. nói chuyện (trao ñổi thông
tin ñiều khiển). Thiết lập bộ
 Bộ ñệm ở phía Nhận và Gửi ñệm hai ñầu.
 Kiểm soát lưu lượng:
application application
socket
writes data reads data
socket  Nói quá nhanh, nghe quá
door door
TCP
send buffer
TCP
receive buffer
chậm
segment

3: Transport Layer 3b-1


Cấu trúc TCP segment
32 bits
URG: dữ liệu khẩn cấp ðược xác ñịnh
(ít sử dụng) source port # dest port #
theo STT của
sequence number byte trong luồng
ACK: ACK #
Hợp lệ acknowledgement number dữ liệu
head not
PSH: chuyển dữ liệu len used
UAP R S F rcvr window size
ngay (ít sử dụng) Số lượng byte
checksum ptr urgent data
mà bên nhận
RST, SYN, FIN: có khả năng
Options (variable length)
Kiểm soát kết nối nhận
(Lệnh Thiết lập và
ðóng )
Dữ liệu ứng dụng
Internet (kích thước tùy ý)
checksum
(giống UDP)

3: Transport Layer 3b-2


TCP: Số thứ tự và Số biên nhận
Số thứ tự (STT):
Máy A Máy B
 Là Số thứ tự của byte
ñầu tiên trong luồng Người dùng Seq=4
2, ACK
ñánh chữ =79, d
dữ liệu ‘C’
ata = ‘
C’
Số biên nhận: Biên nhận
chữ ‘C’, phản
 Là Số thứ tự của byte ta = ‘
C’ hồi
3 , d a
=4
kế tiếp mà bên nhận 7 9 , ACK lại chữ ‘C’
Seq=
muốn nhận.
 Biên nhận tích lũy Biên nhận
Q? Bên nhận xử lý gói tin lại cho chữ Seq=4
‘C’ phản hồi 3 , AC K
=80
không ñúng thứ tự ntn ?
 A: TCP không quy
ñịnh. Tùy thuộc vào
Thời gian
người cài ñặt.
Ứng dụng telnet ñơn giản

3: Transport Layer 3b-3


TCP: Truyền Tin cậy
Sự kiện: nhận dữ liệu
từ phía bên trên FSM bên Gửi ñơn giản, giả
Tạo và Gửi segment ñịnh rằng:
•Dữ liệu truyền theo một hướng
•Không kiểm soát tắc nghẽn
Sự kiện: timer timeout cho •Không ñiều khiển lưu lượng
wait
wait
segment có STT là y
for
for
Sựkiện
Sự kiện Gửi lại segment

Sự kiện: Nhận biên nhận cho


gói có STT là y
Xử lý ACK

3: Transport Layer 3b-4


Nhanh chóng truyền lại
 Khoảng thời gian Timeout  Nếu phía gửi nhận ñược 3
thường tương ñối dài: ACK trùng lặp, có thể giả
 Chậm trễ trong việc gửi lại thiết gói tin ngay sau gói
gói tin bị mất tin ñược biên nhận 3 lần
liên tiếp bị mất:
 Phát hiện mất gói tin qua  Gửi lại kể cả khi gói này
các ACK trùng lặp chưa timeout
 Phía gửi thường gửi nhiều
gói tin
 Nếu gói tin bị mất, sẽ có
ACK trùng lặp

3: Transport Layer 3b-5


Fast Retransmit:

event: ACK received, with ACK field value of y


if (y > SendBase) {

SendBase = y
if (there are currently not-yet-acknowledged segments)
start timer

}
else {
increment count of dup ACKs received for y
if (count of dup ACKs received for y = 3) {
resend segment with sequence number y

ACK trùng lặp cho gói tin


ðã ñược biên nhận Truyền lại nhanh chóng
3: Transport Layer 3b-6
00 sendbase = initial_sequence number agreed by TWH
01 nextseqnum = initial_sequence number by TWH
02 loop (forever) {
03 switch(event)
04 event: data received from application above
05 if (window allow send)
06 create TCP segment with sequence number nextseqnum
06 if (no timer) start timer
TCP: 07
08
pass segment to IP
nextseqnum = nextseqnum + length(data)
else put packet in buffer
Truyền 09
10
event: timer timeout for sendbase
retransmit segment
11 compute new timeout interval
tin cậy 12
13
restart timer
event: ACK received, with ACK field value of y
14 if (y > sendbase) { /* cumulative ACK of all data up to y */
15 cancel the timer for sendbase
16 sendbase = y
17 if (no timer and packet pending) start timer for new sendbase
TCP phía Gửi 17 while (there are segments and window allow)
18 sent a segment;
ñơn giản 18 }
19 else { /* y==sendbase, duplicate ACK for already ACKed segment */
20 increment number of duplicate ACKs received for y
21 if (number of duplicate ACKS received for y == 3) {
22 /* TCP fast retransmit */
23 resend segment with sequence number y
24 restart timer for segment y
25 }
26 } /* end of loop forever */ 3: Transport Layer 3b-7
TCP: Chính sách ACK [RFC 1122, RFC 2581]

Sự kiện Bên nhận (TCP)


Segment theo ñúng STT ñến, Trì hoãn ACK. ðợi segment kế tiếp
Không thiếu dữ liệu, trong 500ms. Nếu không có segment,
Không có ACK treo gửi ACK

Segment theo ñúng STT ñến, Ngay lập tức gửi một ACK mang giá
Không thiếu dữ liệu, trị tích lũy
Có một ACK bị treo

Segment theo ñúng STT ñến Gửi ACK trùng lặp, chỉ STT của
(STT ñến lớn hơn số mong byte dữ liệu mình muốn nhận
ñợi). Thiếu dữ liệu

Một segment ñến ñiền vào Biên nhận STT bên nhận mong muốn
ñoạn dữ liệu bị khuyết nhận

3: Transport Layer 3b-8


TCP: Ví dụ về Truyền lại
Host A Host B Host A Host B

Seq=9 Seq=9
2 , 8 byt 2 , 8 byt
es da es da
ta

Seq=92 timeout
ta Seq=
1 00, 2
0 byt
es da

Seq=100 timeout
timeout

ta
C K=100
A 0
10
X C K=
K = 120
A AC
loss
Seq=9 Seq=9
2 2 , 8 byt
, 8 byt es da
es da ta
ta

0
=1 2
=100 A CK
A C K

time time Timeout trước khi nhận


Ví dụ mất ACK
ACK, bên gửi biên nhận tích lũy

3: Transport Layer 3b-9


ðiều khiển lưu lượng trong TCP
ðiều khiển Phía Nhận: Thông báo rõ
lưu lượng ràng cho phía Gửi khả
Không cho bên Gửi gửi năng nhận dữ liệu của
quá nhiều, quá nhanh mình (thay ñổi thường
xuyên)

RcvBuffer = Kích thước Bộ ñệm nhận


RcvWindow = Kích thước vùng còn trống trong Bộ ñệm
Phía Gửi: Giữ khối lượng dữ
liệu gửi ñi nhưng chưa
ñược biên nhận nhỏ hơn
lượng bên kia chấp nhận
ñược

Bộ ñệm phía Nhận


3: Transport Layer 3b-10
ðiều khiển lưu lượng trong TCP
source port # dest port #
sequence number
acknowledgement number
head not
len used U A P R S F rcvr window size
checksum ptr urgent data
 Chỗ trống trong Bộ ñệm
= RcvWindow Options (variable length)

application
data
(variable length)

3: Transport Layer 3b-11


TCP Round Trip Time and Timeout
Q: Thiết lập giá trị Q: Làm thế nào ñể ước lược RTT?
timeout ntn ?  SampleRTT: khoảng thời gian từ khi
 Timeout > RTT gửi gói tin cho ñến khi nhận ñược biên
nhận
 Chú ý: RTT thay ñổi
thường xuyên  Bỏ qua truyền lại

 Quá bé: timeout ngay  SampleRTT thay ñổi thường xuyên.


Chúng ta muốn ước lượng RTT “mịn
 Truyền lại không cần
hơn”
thiết
 Sử dụng nhiều giá trị ño ñược
 Quá lớn: xử lý việc mất
trong quá khứ, không phải chỉ có
gói tin bị chậm trễ
một SampleRTT gần nhất

3: Transport Layer 3b-12


TCP Round Trip Time và Timeout
EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT
 Trọng số sẽ thay ñổi giá trị trung bình
 Ảnh hưởng của SampleRTT
 x thường chọn giá trị 0.1

Thiết ñặt giá trị timeout


 EstimtedRTT cộng thêm một “giá trị an toàn”
 Biến thiên EstimatedRTT càng lớn -> tăng “giá trị an toàn”

Timeout = EstimatedRTT + 4*Deviation


Deviation = (1-x)*Deviation +
x*|SampleRTT-EstimatedRTT|

3: Transport Layer 3b-13


TCP : Quản lý Kết nối

Chú ý: Trong TCP, phía Gửi và Bắt tay ba bước:


Nhận thiết lập “kết nối” trước
Bước 1: Phía client gửi gói tin ñiều
khi trao ñổi các segment dữ khiển TCP SYN tới server
liệu.
 Chứa Số thứ tự khởi ñầu
 Khởi tạo các biến TCP:
 Số thứ tự Bước 2: Nhận ñược gói SYN, nếu chấp
nhận kết nối, server gửi trả lời gói tin
 Bộ ñệm, Thông tin về lưu ñiều khiển SYNACK
lượng (RcvWindow)
 Biên nhận cho gói SYN vừa
 client: Khởi tạo kết nối nhận
Socket clientSocket = new
Socket("hostname","port  Cấp phát bộ ñệm
 Thông báo về STT khởi ñầu của
number");
server
 server: ðợi kết nối từ client
Socket connectionSocket =
welcomeSocket.accept();

3: Transport Layer 3b-14


Bắt tay ba bước
 ðể ñảm bảo rằng bên kia thực sự mong muốn thiết lập kết nối
A B A B

SYN(s
eq=x) SYN(s
eq=x)

) Chấp nhận?
( s eq=y eq=y
)
S Y N N ( s
=x), S Y
(s eq eq=x),
AC K AC K
(s
Không có yêu
ACK(s
cầu như vậy
eq=y) ACK(s
eq=z)
D AT A Từ chối
(seq=
x+1)
REJE
CT(se
q=y)

3: Transport Layer 3b-15


TCP: Quản lý Kết nối (tiếp)

ðóng một kết nối: client server

close
client ñóng socket: FIN
clientSocket.close();

Bước 1: client gửi gói ñiều khiển AC K


close
FIN tới server FIN

Bước 2: server nhận ñược gói

timed wait
A CK
FIN, biên nhận cho gói tin này.
ðóng kết nối, gửi gói FIN.

closed

3: Transport Layer 3b-16


TCP: Quản lý Kết nối (tiếp)

Bước 3: client nhận gói FIN, client server


biên nhận lại ACK. closing
FIN
 Bước vào trạng thái “timed
wait” – sẽ biên nhận ACK
cho các gói FIN nhận ñược AC K
closing
FIN
Bước 4: server nhận ñược ACK,
ñóng kết nối.

timed wait
A CK
Chú ý: Với vài cải tiến nhỏ, ta có
closed
thể xử lý ñồng thời nhiều gói
FIN.
closed

3: Transport Layer 3b-17


ðóng kết nối
 Mục tiêu: client server
 Mỗi phía giải phóng
Yêu cầu I am d
tài nguyên và xóa bỏ one. A
re you
ñóng done
trạng thái về kênh too?
truyền Giải phóng
Tài nguyên?
e! ðóng
Goodby
n e too.
md o Giải
Ia
ðóng phóng
Giải phóng Tài
Tài nguyên nguyên

3: Transport Layer 3b-18


Vấn ñề tổng quát: Quân Xanh-Trắng

Hai phía quân xanh cần thống nhất thời ñiểm ñể cùng tấn công quân trắng. Họ thỏa thuận bằng
cách gửi thông ñiệp cho nhau. Nếu cùng ñồng ý : tấn công, còn không sẽ không tấn công. Chú ý
rằng người truyền tin có thể bị bắt ! Nếu cùng tấn công, bên xanh thắng, còn nếu tấn công riêng lẻ,
bên trắng thắng 3: Transport Layer 3b-19
ðóng kết nối trong bốn bước

A B
ðề nghị ñóng ðóng
A->B FIN

A->B ñóng
AC K
ðóng ðề nghị ñóng
A->B ñóng FIN B->A

A CK
timed wait

- Có thể truyển lại ACK


nếu ACK này bị mất ðóng
Xóa bỏ tất
ðóng
cả trạng thái
Xóa bỏ tất
cả trạng thái
3: Transport Layer 3b-20
TCP: Quản lý Kết nối (tiếp)

Vòng ñời TCP


phía Server

Vòng ñời TCP


phía Client

3: Transport Layer 3b-21


CLOSED

%netstat -t -a SYN
SENT SYN
CLOSED
LISTEN

SYN
RCVD

K
/AC
SYN
ESTABLSIHED

ACK

ESTABLSIHED

ESTABLSIHED ESTABLSIHED

FIN
WAIT 1 FIN

CLOSE
WAIT
AC K
LAST

FIN FIN ACK

WAIT 2

TIME
WAIT ACK

3: Transport Layer 3b-22


Nguyên tắc Kiểm soát Tắc nghẽn

Tắc nghẽn:
 Mường tượng: “có quá nhiều nút gửi
quá nhiều dữ liệu với tốc ñộ quá nhanh
mà mạng không chuyển kịp”
 Khác với ðiều khiển lưu lượng!
 Biểu hiện :
 Mất gói tin (Tràn bộ ñệm tại router)
 ðộ trễ lớn (Các gói tin phải “xếp
hàng” tại router)
 Là một trong 10 vấn ñề quan trọng nhất !

3: Transport Layer 3b-23


Nguyên nhân và Giá tắc nghẽn: Ví dụ 1
 2 gửi, 2 nhận
 Router với bộ ñệm
vô hạn
 Không có cơ chế
truyền lại

 ðộ trễ lớn khi tắc


nghẽn
 Thông lượng có
thể ñạt cực ñại

3: Transport Layer 3b-24


Nguyên nhân và Giá tắc nghẽn: Ví dụ 2

 Một router, bộ ñệm hữu hạn


 Gửi lại các packet bị mất

3: Transport Layer 3b-25


Nguyên nhân và Giá tắc nghẽn: Ví dụ 2
 Thông thường: λ = λ (tốt)
in out
 Truyền lại khi mất (lý tưởng): λ > λ
in out
 Truyền lại của các gói tin ñến trễ (không bị mất) khiến λ lớn hơn (so với
in
trường hợp lý tưởng) λout

“Giá” của Tắc nghẽn:


 Phải truyền lại nhiều
 Truyền lại không cần thiết: Nhiều bản sao của cùng 1 gói tin có thể nằm
trên mạng 3: Transport Layer 3b-26
Nguyên nhân và Giá tắc nghẽn: Ví dụ 3
 4 người gửi Q: Chuyện gì xảy ra khi λ
 Nhiều tuyến in
và tăng λin ?
 Timeout => Gửi lại

3: Transport Layer 3b-27


Nguyên nhân và Giá tắc nghẽn: Ví dụ 3

Một vấn ñề khác của tắc nghẽn:


 Khi một packet bị mất, tất cả “công sức” tạo và chuyển gói
tin này của các tầng bên trên ñều bị mất !

3: Transport Layer 3b-28


Giải pháp chống Tắc nghẽn
Có hai lớp giải pháp chính:

Giải pháp ñầu cuối: Có sự hỗ trợ từ mạng:


 Tầng mạng (router) không  routers thông báo cho thiết bị
thông báo cho các nút về Tắc ñầu cuối
nghẽn (nếu có)  Sử dụng một bit thông báo
 Mất gói tin, ðộ trễ lớn: dấu tình trạng tắc nghẽn (SNA,
hiệu của Tắc nghẽn DECbit, TCP/IP ECN,
 Là giải pháp ñược TCP áp dụng ATM)
 Thông báo tốc ñộ gửi tối ña

3: Transport Layer 3b-29


Ví dụ : Chống tắc nghẽn trong ATM

ABR: available bit rate: Tế bào RM (resource


 Dịch vụ “co giãn” management) :
 Nếu ñường truyền ở phía gửi  Phía Gửi gửi kèm cùng các tế bào
chưa dùng hết: dữ liệu
 Phía gửi có thể gửi thêm  ATM switch có thể thiết lập một số
 Nếu ñường truyền ở phía gửi bit trong tế bào RM (“có sự trợ giúp
tắc nghẽn : từ mạng”)
 Phía gửi có thể ñược ñảm  NI bit: Không ñược tăng tốc ñộ
bảo một băng thông tối gửi (Tắc nghẽn ít)
thiểu  CI bit: Có tắc nghẽn
 Tế bào RM ñược phía Nhận gửi trả
cho phía Gửi

3: Transport Layer 3b-30


Ví dụ : Chống tắc nghẽn trong ATM

 Trường ER (explicit rate) 2 byte trong tế bào RM


 switch bị tắc nghẽn có thể giảm ER trong tế bào
 sender’ send rate thus minimum supportable rate on path
 Trường EFCI 1 bit ñược switch tắc nghẽn thiết lập giá trị 1
 Nếu tế bào dữ liệu ñằng trước tế bào RM có giá trị EFCI =1, phía gửi
thiết lập bit CI trong tế bào RM phản hồi

3: Transport Layer 3b-31


Kiểm soát tắc nghẽn trong TCP
 Kiểm soát ðầu cuối (Mạng không hỗ trợ)
 Tốc ñộ truyền bị giới hạn bởi cửa sổ kiểm soát tắc nghẽn,
Congwin, (số lượng segment) :

Congwin

 w segments, kích thước là MSS byte ñược gửi ñi trong 1


RTT: w * MSS
Thông lượng = Bytes/sec
RTT

3: Transport Layer 3b-32


TCP : Kiểm soát tắc nghẽn
 “thăm dò” băng thông của  hai “giai ñoạn”
ñường truyền:  Khởi ñầu chậm
 Lý tưởng: khi không có tắc  Tránh tắc nghẽn
nghẽn, truyền nhanh nhất có  Một số biến quan trọng:
thể (Congwin càng lớn
 Congwin
càng tốt)
 Tăng Congwin cho ñến khi  threshold: xác ñịnh giá
có mất dữ liệu (tắc nghẽn) trị Ngưỡng giữa hai pha
 Mất mát: Giảm Congwin,
và bắt ñầu quá trình thăm dò

3: Transport Layer 3b-33


TCP : Khởi ñầu chậm
Host A Host B
Thuật toán khởi
one segm
ñầu chậm ent

RTT
initialize: Congwin = 1 two segm
en ts
for (each segment ACKed)
Congwin++
until (loss Sự kiện OR four segm
ents
CongWin > threshold)
 Kích thước cửa sổ tăng theo
hàm số mũ (không quá chậm !)
time
 Sự kiện loss : timeout (Tahoe
TCP) hoặc/và ba lần nhận ACK
trùng lặp (Reno TCP)
3: Transport Layer 3b-34
TCP : Tránh tắc nghẽn
Tránh tắc nghẽn
/* slowstart is over */
/* Congwin > threshold */
Until (loss Sự kiện) {
every w segments ACKed:
Congwin++
}
threshold = Congwin/2
Congwin = 1
perform slowstart 1

1: TCP Reno bỏ qua giai ñoạn khởi ñầu chậm (khôi


phục nhanh) sau khi nhận 3 ACK trùng lặp
3: Transport Layer 3b-35
AIMD Tính công bằng
trong TCP
Tránh tắc nghẽn trong
TCP: Công bằng: Nếu N phiên
 AIMD: additive TCP cùng nhau chia sẻ
increase, multiplicative một kênh truyền tắc
decrease nghẽn, mỗi phiên nhận
 Tăng cửa sổ lên 1 khi ñược 1/N băng thông
nhận ñược một gói phản TCP phiên 1
hồi
 Giảm cửa sổ theo số mũ
của 2 khi có sự kiện mất
gói dữ liệu
TCP
Router tắc nghẽn
phiên 2 có băng thông R

3: Transport Layer 3b-36


Tại sao TCP công bằng?
Hai phiên cạnh tranh nhau sử dụng ñường truyền:
 Tăng theo cấp số cộng : băng thông tăng dần dần
 Giảm theo cấp số nhân : giảm ñột ngột băng thông
R Chia sẻ công bằng kênh truyền
Thông lượng kết nối 2

Mất: chia ñôi kích thước cửa sổ


Tránh tắc nghẽn: cộng theo cấp số cộng
Mất: chia ñôi kích thước cửa sổ
Tránh tắc nghẽn: cộng theo cấp số cộng

Thông lượng kết nối 1 R


3: Transport Layer 3b-37
Chapter 3: Tổng kết

 Các dịch vụ của tầng giao


vận:
 Phân kênh/ Dồn kênh Tiếp theo:
 Truyền tin cậy  Rời khỏi lớp “Rìa”
 ðiều khiển lưu lượng của Mạng
 Kiểm soát tắc nghẽn
 Tiến vào lớp “Lõi”
 Cài ñặt trên Internet
 UDP
 TCP

3: Transport Layer 3b-38

You might also like