You are on page 1of 35

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


 MSS: Kích thước tối đa một
 Không quan tâm đến khuôn
segment
dạng thông điệp.
 Hướng nối:
 Đường ống:
 Cửa sổ kiểm soát tắc nghẽn
 Bắt tay, chào hỏi trước khi
nói chuyện (trao đổi thông
và điều khiển lưu lượ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:
ap plica tio n ap plication
so ck et
w rites data reads data  Nói quá nhanh, nghe quá
so ck et
door
TCP TCP
do or
chậm
send buffer re ceive b uffe r
s e gm en t

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 dữ Người dùng Seq=4
2 , ACK
đánh chữ =79, d
liệu ‘C’
a ta = ‘C

Số biên nhận: Biên nhận
chữ ‘C’, phản
 Là Số thứ tự của byte ’
, d at a = ‘C hồi
4 3
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=43
‘C’ phản hồi , ACK=
không đúng thứ tự ntn ? 80

 A: TCP không quy


định. Tùy thuộc vào
người cài đặt. Thời gian
Ứ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
wait Sự kiện: timer timeout cho •Không điều khiển lưu lượng
wait
for segment có STT là y
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


00 sendbase = initial_sequence number
01 nextseqnum = initial_sequence number
TCP: 02
03 loop (forever) {

Truyền
04 switch(Sự kiện)
05 Sự kiện: data received from application above
06 create TCP segment with sequence number nextseqnum

tin cậy
07 start timer for segment nextseqnum
08 pass segment to IP
09 nextseqnum = nextseqnum + length(data)
10 Sự kiện: timer timeout for segment with sequence number y
11 retransmit segment with sequence number y
12 compue new timeout interval for segment y
TCP phía Gửi 13 restart timer for sequence number y
14 Sự kiện: ACK received, with ACK field value of y
đơn giản 15 if (y > sendbase) { /* cumulative ACK of all data up to y */
16 cancel all timers for segments with sequence numbers < y
17 sendbase = y
18 }
19 else { /* a 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-5
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-6


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

Seq=9 Seq=9
2, 2, 8 b y te
8 byte s data
s data Seq=

Seq=92 timeout
1 00, 2
0 by t
es da
t

Seq=100 timeout
timeout

a
=100
ACK 0
10
X CK=
A AC K = 120
loss
Seq=9 Seq=9
2, 8 b 2, 8 b
y y t es da
tes da ta
ta

= 120
K
= 10 0 AC
ACK

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-7


Đ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) Trường
RcvWindow trong tiêu đề
RcvBuffer = Kích thước Bộ đệm nhận segment TCP
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
RcvWindow

Bộ đệm phía Nhận


3: Transport Layer 3b-8
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
 Bỏ qua truyền lại
thường xuyên
 Quá bé: timeout ngay  SampleRTT thay đổi thường xuyên.

 Truyền lại không cần


Chúng ta muốn ước lượng RTT “mị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-9


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

Setting the 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-10


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  Cấp phát bộ đệm
Socket("hostname","port  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-11


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

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

client đóng socket: close


FIN
clientSocket.close();

Bước 1: client gửi gói điều khiển ACK


close
FIN tới server
FIN

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


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

closed

3: Transport Layer 3b-12


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

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


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
ACK
closing
Bước 4: server nhận được ACK, FIN
đóng kết nối.

Chú ý: Với vài cải tiến nhỏ, ta có


timed wait
ACK
thể xử lý đồng thời nhiều gói FIN.
closed

closed

3: Transport Layer 3b-13


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-14


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-15


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-16


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-17


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-18


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-19


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-20


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 ATM)
dụng  Thông báo tốc độ gửi tối đa

3: Transport Layer 3b-21


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

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


 Dịch vụ “co giãn” :
 Nếu đường truyền ở phía gửi  Phía Gửi gửi kèm cùng các tế bào dữ

chưa dùng hết: liệu


 ATM switch có thể thiết lập một số bit
 Phía gửi có thể gửi thêm
trong tế bào RM (“có sự trợ giúp từ
 Nếu đường truyền ở phía gửi mạng”)
tắc nghẽn :  NI bit: Không được tăng tốc độ gửi
 Phía gửi có thể được đảm (Tắc nghẽn ít)
bảo một băng thông tối  CI bit: Có tắc nghẽn
thiểu  Tế bào RM được phía Nhận gửi trả cho
phía Gửi

3: Transport Layer 3b-22


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-23


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-24


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
càng tốt)
 Congwin
 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-25


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
ents
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 !)
 Sự kiện loss : timeout (Tahoe time
TCP) hoặc/và ba lần nhận ACK
trùng lặp (Reno TCP)

3: Transport Layer 3b-26


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
1
perform slowstart

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-27
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-28


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-29
TCP : Mô hình tính toán độ trễ
Q: Mất bao lâu từ khi yêu cầu Notation, assumptions:
đến khi nhận được một đối  Giả sử băng thông giữa client
tượng Web ? và server là R
 Thời gian thiết lập kết nối TCP  Cửa sổ tắc nghẽn có độ dài cố
 Độ trễ truyền dữ liệu định W segment
 S: MSS (bits)
 O: kích thước đối tượng (bits)
 Không truyền lại (dữ liệu
không bị mất và lỗi)
Hai trường hợp cần xem xét:
 WS/R > RTT + S/R: ACK for first segment in window
returns before window’s worth of data sent
 WS/R < RTT + S/R: wait for ACK after sending
window’s worth of data sent
3: Transport Layer 3b-30
TCP : Mô hình tính toán độ trễ
K:= O/WS

Trường hợp 1: độ trễ = 2RTT + O/R Trường hợp 2: độ trễ = 2RTT +


O/R
+ (K-1)[S/R + RTT - WS/R]

3: Transport Layer 3b-31


TCP : Mô hình tính toán độ trễ
 Kích thước cửa sổ bắt đầu tăng trong pha khởi đầu chậm.
 Độ trễ của đối tượng có kích thước O là:

O  S S
Latency  2 RTT   P  RTT    ( 2 P  1)
R  R R

where P is the number of times TCP stalls at server:

P  min{Q , K  1}

- where Q is the number of times the server would stall


if the object were of infinite size.

- and K is the number of windows that cover the object.

3: Transport Layer 3b-32


TCP : Mô hình tính toán độ trễ
initiate TC P
connection
Example:
request
O/S = 15 segments object
first w indow
= S /R

K = 4 windows R TT
second window
= 2S /R
Q=2
third w indow
= 4S /R
P = min{K-1,Q} = 2

Server stalls P=2 times.


fourth w indow
= 8S/R

com plete
object transm ission
delivered
tim e at
tim e at server
client

3: Transport Layer 3b-33


TCP : Mô hình tính toán độ trễ
S
 RTT  time from when server starts to send segment
R
until server receives acknowledgement
initiate TC P
connection

S
2k 1  time to transmit the kth window request
R object
first w indow
= S /R


S k 1 S 
R TT
second w indow

 R  RTT  2  stall time after the kth window = 2S /R


R 
third w indow
= 4S /R

P
O
latency   2 RTT   stallTime p
fourth w indow
= 8S /R
R p 1
P
O S S
  2 RTT   [  RTT  2k 1 ]
R k 1 R R object
com plete
transm ission
delivered
O S S
  2 RTT  P[ RTT  ]  ( 2 P  1) tim e at
tim e at
server
R R R client

3: Transport Layer 3b-34


Chương 3: Tổng kết
 Các nguyên tắc cài đặt dịch vụ tầng Chương kế tiếp:
Giao vận:  Rời lớp vỏ của Mạng
 Phân/Dồn kênh (Tầng Ứng dụng và Giao
 Truyền tin cậy
vận)
 Tiến vào lớp “Lõi” của
 Điều khiển lưu lượng
 Kiểm soát tắc nghẽn
mạng

 Cài đặt trên Internet


 UDP
 TCP

3: Transport Layer 3b-35

You might also like