You are on page 1of 110

Chương 3

Tầng Vận chuyển


(Transport layer)

A note on the use of these ppt slides:


Computer
We’re making these slides freely available to all (faculty, students, readers).
They’re in PowerPoint form so you see the animations; and can add, modify,
Networking: A
and delete slides (including this one) and slide content to suit your needs.
They obviously represent a lot of work on our part. In return for use, we only
Top Down
ask the following:
 If you use these slides (e.g., in a class) that you mention their source
Approach
(after all, we’d like people to use our book!) 6th edition
 If you post any slides on a www site, that you note that they are adapted Jim Kurose, Keith
from (or perhaps identical to) our slides, and note our copyright of this
material.
Ross
Addison-Wesley
Thanks and enjoy! JFK/KWR
March 2012
All material copyright 1996-2012
J.F Kurose and K.W. Ross, All Rights Reserved

Tầng Transport 3-1


Chương 3: Tầng Vận chuyển
Mục tiêu:
 Hiểu về các nguyên lý  Tìm hiểu về các giao
đằng sau các dịch vụ thức tầng Vận chuyển
tầng Vận chuyển: trên Internet:
 multiplexing/demultiplexin  UDP: vận chuyển phi kết
g nối
 Truyền dữ liệu tin cậy  TCP: vận chuyển tin cậy
 Điều khiển luồng (flow hướng kết nối
control) (connection-oriented
 Điều khiển tắc nghẽn reliable transport)
(congestion control)  Điều khiển tắc nghẽn
TCP

Tầng Transport 3-2


Chương 3: Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin cậy
3.3 vận chuyển phi kết  Điều khiển luồng (flow
nối: UDP control)
 Quản lý kết nối
3.4 các nguyên lý
truyền dữ liệu tin 3.6 các nguyên lý về điều
cậy khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP

Tầng Transport 3-3


Các giao thức và dịch vụ
tầng Vận chuyển
application
 Cung cấp truyền thông logic giữa transport
network
các tiến trình ứng dụng đang chạy data link
physical
trên các host khác nhau
 Các giao thức (protocol) chạy trên

lo
gi
các hệ thống đầu cuối

ca
le
 Phía gửi: chia nhỏ các thông điệp

nd
en-
(message) ứng dụng thành các

d
tr a
segments, sau đó chuyển các

ns
segments này cho tầng Mạng

po
rt
 Phía nhận: tái kết hợp các
segments thành các thông điệp application
transport
(message), các thông điệp này network
data link
được chuyển lên tầng Ứng dụng physical

 Có nhiều hơn 1 giao thức tầng Vận


chuyển dành cho các ứng dụng
 Internet: TCP và UDP
Tầng Transport 3-4
Quan hệ giữa Tầng Vận chuyển và
tầng Mạng
 Tầng Mạng: truyền Tình huống tương tự:
thông logic giữa các 12 đứa trẻ ở nhà Ann gửi
host những bức thư đến 12
 Tầng Vận chuyển: đứa trẻ ở nhà Bill:
truyền thông logic  hosts = nhà
giữa các tiến trình  Các tiến trình

 Dựa trên dịch vụ (processes) = những


đứa trẻ
tầng Mạng  Thông điệp tầng Ứng
dụng = các bức thư trong
các phong bì
 Giao thức tầng Vận
chuyển = Ann and Bill
 Giao thức tầng Mạng=
dịch vụ bưu điện

Tầng Transport 3-5


Các giao thức tầng Vận chuyển trên
Internet
application
 Tin cậy, truyền theo thứ transport
network

tự (TCP) data link


physical
network
 Điền khiển tắc nghẽn network data link

lo
data link physical

gi
physical
 Điều khiển luồng

ca
network

le
data link

nd
 Thiết lập kết nối physical

-en
network

d
Không tin cậy, truyền

tra
 data link
physical

ns
không theo thứ tự: UDP

po
network

rt
data link
physical
 Không rườm rà, “nỗ lực network
data link application

tốt nhất” (best-effort) physical


network
data link
transport
network
data link
Không có các dịch vụ:
physical
 physical

 Bảo đảm độ trễ


 Bảo đảm băng thông

Tầng Transport 3-6


Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin cậy
3.3 vận chuyển phi kết  Điều khiển luồng (flow
nối: UDP control)
 Quản lý kết nối
3.4 các nguyên lý
truyền dữ liệu tin 3.6 các nguyên lý về điều
cậy khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP

Tầng Transport 3-7


Multiplexing/demultiplexing
Multiplexing tại bên gửi:
xử lý dữ liệu từ nhiều
socket, thêm thông tin demultiplexing tại bên nhận:
header về tầng Vận chuyển
vào segment (được sử sử dụng thông tin trong
dụng sau cho header để chuyển segment
demultiplexing) vừa nhận vào đúng socket
application

application P1 P2 application socket


P3 transport P4
tiến trình
transport network transport
network link network
link physical link
physical physical

Tầng Transport 3-8


demultiplexing làm việc như thế nào
 host nhận các gói dữ liệu 32 bits
(datagram) IP
 Mỗi gói dữ liệu có địa chỉ IP nguồn và Số port nguồn Số port đích
đích
 Mỗi gói dữ liệu mang một segment
tầng Vận chuyển other header fields
 Mỗi segment có số port nguồn và đích
 host dùng các địa chỉ IP và số port
để gởi segment đến socket thích
hợp application
data
(payload)

Định dạng segment TCP/UDP

Tầng Transport 3-9


Demultiplexing không kết nối
 Ôn lại: khi tạo gói dữ liệu (datagram)
 Ôn lại: socket đã tạo có số để gởi vào đến socket UDP socket,
port của host cục bộ phải xác định
(host-local port #) :  Địa chỉ IP đích
 Số port đích
DatagramSocket mySocket1 =
new DatagramSocket(12534);

 Khi host nhận Các gói dữ liệu IP với


segment UDP : cùng số port đích, nhưng
khác địa chỉ IP nguồn
 Kiểm tra số port đích và/hoặc khác số port
trong segment nguồn sẽ được chuyển
 Đưa segment UDP đến đến cùng socket tại máy
socket có số port đó đích

Tầng Transport 3-10


Demultiplexing không kết nối:
ví dụ
DatagramSocket serverSocket =
new DatagramSocket
DatagramSocket mySocket2 (6428); DatagramSocket mySocket1
= new DatagramSocket = new DatagramSocket
(9157); (5775);

application
application P1 application
P3 P4
transport
transport transport
network
network link network
link physical link
physical physical

Port nguồn: 6428 Port nguồn: ?


Port đích: 9157 Port đích: ?

Port nguồn: 9157 Port nguồn: ?


Port đích: 6428 Port đích: ?
Tầng Transport 3-11
Demux hướng kết nối
 Socket TCP được  host server có thể hỗ
xác định bởi 4 yếu tố: trợ nhiều socket TCP
 Địa chỉ IP nguồn đồng thời:
 Số port nguồn  Mỗi socket được xác
 Địa chỉ IP đích định bởi bộ 4 của nó
 Số port đích  Các web server có các
 demux: nơi nhận socket khác nhau cho
dùng tất cả 4 giá trị mỗi kết nối từ client
 Kết nối HTTP không
trên để điều hướng bền vững sẽ có socket
segment đến socket khác nhau cho mỗi yêu
thích hợp cầu

Tầng Transport 3-12


Demultiplexing hướng kết nối: ví dụ

application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: physical
địa chỉ
IP B

host: Địa chỉ IP nguồn,port: B,80 host:


địa chỉ Địa chỉ IP đích,port: A,9157 IP nguồn,port: C,5775 địa chỉ
IP A IP đích,port: B,80 IP C
IP nguồn,port: A,9157
IP đích, port: B,80
IP nguồn,port: C,9157
IP đích,port: B,80
Ba segment, tất cả được đưa đến địa chỉ IP: B,
Port đích: 80 được demultiplex đến các socket khác nhau Tầng Transport 3-13
Demultiplexing hướng kết nối: ví dụ
threaded server
application
application application
P4
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: physical
địa chỉ
IP B

host: IP nguồn,port: B,80 host:


địa chỉ IP đích,port: A,9157 IP nguồn,port: C,5775 địa chỉ
IP A IP đích,port: B,80 IP C
IP nguồn,port: A,9157
IP đích, port: B,80
IP nguồn,port: C,9157
IP đích,port: B,80

Tầng Transport 3-14


Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-15
UDP: User Datagram Protocol [RFC 768]
 “đơn giản,” “bare bones” là giao  Ứng dụng UDP:
thức thuộc tầng Vận chuyển  Các ứng dụng đa
 Dịch vụ “best effort” (“nỗ lực tốt phương tiện trực tuyến
nhất”), các segment UDP có (chịu mất mát(loss
thể bị: tolerant), (cần tốc độ)
 Mất mát (rate sensitive) )
 Vận chuyển không theo thứ  DNS
tự đến ứng dụng đích  SNMP
 Connectionless (phi kết nối):  Truyền tin cậy trên
 Không bắt tay giữa bên nhận
và gửi UDP UDP:
 Mỗi segment UDP được xử  Thêm độ tin cậy tại
lý độc lập tầng Ứng dụng
 Phục hồi lỗi tại các ứng
dụng cụ thể!
Tầng Transport 3-16
UDP: segment header
Độ dài được tính
32 bits bằng byte của
Số port nguồn Số port đích segment UDP, bao
gồm cả header
length checksum
Tại sao có UDP?
 Không thiết lập kết nối (có
Dữ liệu thể gây ra độ trễ)
ứng dụng  Đơn giản: không trạng thái
(payload) kết nối tại nơi gửi và nhận
 Kích thước header nhỏ
 Không điều khiển tắc nghẽn:
UDP có thể gửi dữ liệu
Định dạng segment UDP
nhanh như mong muốn

Tầng Transport 3-17


UDP checksum
Mục tiêu: dò tìm “các lỗi” (các bit cờ được bật)
trong các segment đã được truyền
bên gửi: bên nhận:
 Xét nội dung của  Tính toán checksum của
segment, bao gồm các segment đã nhận
trường của header, là
chuỗi các số nguyên 16-
 Kiểm tra giá trị trên có bằng với
bit giá trị trong trường checksum
 checksum: tổng bù 1 của hay không:
các chuỗi số 16 bit trong  NO – có lỗi xảy ra
nội dung segment  YES – không có lỗi. Nhưng có
 Bên gửi đặt giá trị thể còn lỗi khác nữa không?
checksum vào trường Xem phần sau….
checksum UDP

Tầng Transport 3-18


Internet checksum: ví dụ
Ví dụ: cộng 2 số nguyên 16 bit
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

bit dư 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

tổng 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

Lưu ý: khi cộng các số, bit nhớ ở phía cao nhất cần
được thêm vào kết quả

Tầng Transport 3-19


Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-20
Các nguyên lý truyền dữ liệu tin cậy
 Quan trọng trong các tầng Ứng dụng, Vận chuyển và Liên kết dữ
liệu
 Top 10 danh sách các chủ đề mạng quan trọng

 Các đặc điểm của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao thức truyền
dữ liệu (data transfer protocol) (rdt)

Tầng Transport 3-21


Các nguyên lý truyền dữ liệu tin cậy
 Quan trọng trong các tầng Ứng dụng, Vận chuyển và Liên kết dữ
liệu
 Top 10 danh sách các chủ đề mạng quan trọng

 Các đặc điểm của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao thức truyền
dữ liệu (data transfer protocol) (rdt)

Tầng Transport 3-22


Các nguyên lý truyền dữ liệu tin cậy
 quan trọng trong các tầng Ứng dụng, Vận chuyển và Liên kết dữ liệu
 Top 10 danh sách các chủ đề mạng quan trọng

 Các đặc điểm của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao thức truyền
dữ liệu (data transfer protocol) (rdt)

Transport Layer 3-23


Truyền dữ liệu tin cậy: bắt đầu

rdt_send(): được gọi bởi tầng trên, deliver_data(): được gọi bởi rdt để
(tầng Ứng dụng). Chuyển dữ liệu cần chuyển dữ liệu đến tầng cao hơn
truyền đến tầng Ứng dụng bên nhận

Bên Bên
gửi nhận

udt_send(): được gọi bởi rdt, để rdt_rcv(): được gọi khi gói dữ liệu
truyền các gói trên kênh không tin đến kênh của bên nhận
cậy đến nơi nhận

Tầng Transport 3-24


Truyền dữ liệu tin cậy: bắt đầu
Chúng ta sẽ:
 Từng bước phát triển truyền dữ liệu tin cậy
(rdt) bên phía người gửi và nhận
 Chỉ xem xét chuyển dữ liệu theo 1 hướng
 Nhưng điều khiển thông tin sẽ theo cả 2 hướng!
 Sử dụng finite state machines (FSM) để xác
định bên gửi và nhận Sự kiện gây chuyển trạng thái
Các hành động được thực hiện khi
chuyển trạng thái
Trạng thái: khi ở “trạng
thái” này thì trạng thái trạng
trạng
kế tiếp được xác định thái Sự kiện thái 2
duy nhất bởi sự kiện 1
Các hành động
kế tiếp

Tầng Transport 3-25


rdt1.0: truyền tin cậy trên 1 kênh tin cậy
 Kênh cơ bản tin cậy hoàn toàn (underlying channel
perfectly reliable)
 không có bit lỗi
 không mất mát gói
 Các FSMs riêng biệt cho bên gửi và nhận:
 Bên gửi gửi dữ liệu vào kênh cơ bản (underlying channel)
 Bên nhận đọc dữ liệu từ kênh cơ bản (underlying channel)

chờ gọi rdt_send(data) chờ gọi rdt_rcv(packet)


từ tầng từ tầng extract (packet,data)
trên packet = make_pkt(data) dưới deliver_data(data)

udt_send(packet)

bên gửi bên nhận

Tầng Transport 3-26


rdt2.0: kênh với các lỗi
 Kênh cơ bản có thể đảo các bit trong packet
 checksum để kiểm tra các lỗi
 Câu hỏi: làm sao khôi phục các lỗi:
 acknowledgements (ACKs): receiver explicitly tells
sender that pkt received OK
 negative acknowledgements (NAKs): receiver
explicitly tells sender that pkt had errors
 sender
Làm retransmits
thế nàopktđểonconreceipt of NAK
người phục hồi
 new mechanisms in rdt2.0 (beyond rdt1.0):
“lỗi” trong cuộc trò chuyện?
 error detection
 receiver feedback: control msgs (ACK,NAK) rcvr-
>sender

Tầng Transport 3-27


rdt2.0: kênh với các lỗi
 Kênh cơ bản có thể đảo các bit trong packet
 checksum để kiểm tra các lỗi
 Câu hỏi: làm sao khôi phục các lỗi:
 acknowledgements (ACKs): bên nhận thông báo cho
bên gửi rằng packet được nhận thành công (OK)
 negative acknowledgements (NAKs): bên nhận
thông báo cho bên gửi rằng packet đã bị lỗi
 Bên gửi truyền lại gói nào được xác nhận là NAK
 Các cơ chế mới trong rdt2.0 (sau rdt1.0):
 Phát hiện lỗi
 Phản hồi: các thông điệp điều khiển (ACK,NAK) từ
bên nhận đến bên gửi

Tầng Transport 3-28


rdt2.0: đặc điểm kỹ thuật FSM
rdt_send(data)
Bên nhận
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)

rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Chờ gọi Chờ ACK rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
từ tầng trên hoặc NAK udt_send(sndpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Chờ gọi
 từ tầng dưới

Bên gửi
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Tầng Transport 3-29


rdt2.0: hoạt động khi không lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)

rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Chờ gọi Chờ ACK rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
từ tầng trên hoặc NAK udt_send(sndpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Chờ gọi
 từ tầng dưới

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

Tầng Transport 3-30


rdt2.0: hoạt động khi có lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)

rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Chờ gọi Chờ ACK rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
từ tầng trên hoặc NAK udt_send(sndpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Chờ gọi
 từ tầng dưới

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

Tầng Transport 3-31


rdt2.0 có lỗ hổng nghiêm trọng!
Điều gì xảy ra nếu Xử lý trùng lặp:
ACK/NAK bị hỏng?  Bên gửi truyền lại packet hiện
 Bên gửi sẽ không biết thời nếu ACK/NAK bị hỏng
điều gì đã xảy ra ở bên  Bên gửi thêm số thứ tự vào
nhận! trong mỗi packet (sequence
number)
 Không thể đơn phương
truyền lại: có thể trùng  Bên nhận hủy packet bị trùng
lặp lặp

Stop and wait


Bên gửi gửi một packet,
sau đó chờ phản hồi từ
bên nhận

Tầng Transport 3-32


rdt2.1: bên gửi, xử lý các ACK/NAK
bị hỏng
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
Wait for call 0 Wait for ACK
from above or NAK 0
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)



Wait for ACK Wait for
or NAK 1 call 1 from
rdt_rcv(rcvpkt) && above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt) udt_send(sndpkt)

Tầng Transport 3-33


rdt2.1: bên nhận, xử lý các ACK/NAK bị
hỏng
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) && rdt_rcv(rcvpkt) &&


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

Wait for Wait for


0 from 1 from
rdt_rcv(rcvpkt) && rdt_rcv(rcvpkt) &&
below below
not corrupt(rcvpkt) && 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)

Tầng Transport 3-34


rdt2.1: thảo luận
Bên gửi: Bên nhận:
 Số thứ tự (seq #) được  Phải kiểm tra gói vừa
thêm vào packet nhận có trùng hay
 2 số thứ tự (0,1) là đủ. không
Tại sao?  Trạng thái chỉ rõ có
 Phải kiểm tra có hay hay không 0 hoặc 1 là
không ACK/NAK vừa số thứ tự của gói được
mong chờ
nhận bị hỏng
 Số trạng thái tăng lên 2
 Chú ý: bên nhận có
lần thể không biết
 Trạng thái phải “nhớ” xem ACK/NAK vừa rồi có
packet “mong đợi” có số được bên gửi nhận
thứ tự là 0 hay 1 tốt hay không

Tầng Transport 3-35


rdt2.2: một giao thức không cần NAK
 Chức năng giống như rdt2.1, chỉ dùng các ACK
 Thay cho NAK, bên nhận gởi ACK cho gói cuối
cùng được nhận thành công
 Bên nhận phải ghi rõ số thứ tự của gói vừa được
ACK
 ACK bị trùng tại bên gửi dẫn tới kết quả giống
như hành động của NAK: truyền lại gói vừa rồi

Tầng Transport 3-36


rdt2.2: các phần bên nhận và gửi
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Wait for call Wait for ACK
0 from above 0
udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)

rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt)) 
Wait for
0 from receiver FSM
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)

Tầng Transport 3-37


rdt3.0: các kênh với lỗi và mất mát
Giả định mới: kênh Cách tiếp cận: bên gửi chờ
truyền cũng có thể ACK trong khoảng thời
làm mất gói (dữ liệu, gian “hợp lý”
các ACK)  Truyền lại nếu không nhận
được ACK trong khoảng thời
 checksum, số thứ tự, gian này
các ACK, việc truyền  Nếu gói (hoặc ACK) chỉ trễ
lại sẽ hỗ trợ… nhưng (không mất):
không đủ  Việc truyền lại sẽ gây trùng,
nhưng số thứ tự đã xử lý
trường hợp này
 Bên nhận phải xác định số
thứ tự của gói vừa gửi ACK
 Yêu cầu bộ định thì đếm lùi

Tầng Transport 3-38


rdt3.0 bên gửi
rdt_send(data) rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
start_timer
rdt_rcv(rcvpkt) 
 Wait for Wait for
call 0from ACK0 timeout
above udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
stop_timer
stop_timer

Wait for Wait for


timeout ACK1 call 1 from
udt_send(sndpkt) 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

Tầng Transport 3-39


Hành động của rdt3.0
bên gửi bên nhận bên gửi bên nhận
Gửi pkt0 pkt0 Gửi pkt0 pkt0
Nhận pkt0 Nhận pkt0
ack0 Gửi ack0 ack0 Gửi ack0
Nhận ack0 Nhận ack0
Gửi pkt1 pkt1 Nhận pkt1 pkt1
Nhận pkt1 X
ack1 Nhận ack1 loss
Nhận ack1
Nhận pkt0 pkt0
Gửi pkt0 timeout
ack0 Nhận ack0 Gửi lại pkt1 pkt1
Nhận pkt1
ack1 Gửi ack1
Nhận ack1
Gửi pkt0 pkt0
(a) Không mất mát Nhận pkt0
ack0 Gửi ack0

(b) Mất gói


Tầng Transport 3-40
Hành động của rdt3.0
bên gửi bên nhận
bên gửi bên nhận Gửi pkt0 pkt0
Gửi pkt0 pkt0 Nhận pkt0
ack0 Gửi ack0
Nhận pkt0
Gửi ack0 Nhận ack0
ack0 Gửi pkt1 pkt1
Nhận ack0 Nhận pkt1
Gửi pkt1 pkt1
Nhận pkt1 Gửi ack1
ack1 ack1
Gửi ack1
X
loss timeout
resend pkt1 pkt1
Nhận pkt1
timeout
Gửi lại pkt1 pkt1 rcv ack1 pkt0 (phát hiện trùng)
Nhận pkt1 send pkt0 Gửi ack1
(phát hiện trùng gói) ack1
ack1 Gửi ack1 rcv ack1 Nhận pkt0
Nhận ack1 ack0 Gửi ack0
pkt0 send pkt0 pkt0
Gửi pkt0 Nhận pkt0
Nhận pkt0 ack0 (phát hiệ trùng)
ack0 Gửi ack0 Gửi ack0

(c) Mất ACK (d) Thời gian chờ quá ngắn / delayed ACK

Tầng Transport 3-41


Hiệu suất của rdt3.0
 rdt3.0 làm việc được, nhưng đánh giá hiệu suất hơi rắc rối
 Ví dụ: đường link 1 Gbps, trễ lan truyền giữa 2 đầu cuối là 15 ms,
gói 8000 bit:

L 8000 bits
Dtruyền = R = = 8 microsecs
109 bits/sec
U sender : utilization – khoảng thời gian mà bên gửi gửi được dữ liệu

U L/R .008
sender = = = 0.00027
RTT + L / R 30.008

 Nếu RTT=30 msec, gói 1KB mỗi 30 msec: thông lượng 33kB/sec trên đường link 1Gbps
 Giao thức mạng hạn chế việc sử dụng các tài nguyên vật lý!

Tầng Transport 3-42


rdt3.0: hoạt động “stop-and-wait”
sender receiver
bit đầu tiên của gói được truyền, t = 0
bit cuối cùng gói được truyền, t = L / R

Bit đầu tiên của gói đến


RTT Bit cuối cùng của gói đến, gửi ACK

ACK đến, gửi gói kế tiếp,


t = RTT + L / R

U L/R .008
sender = = = 0.00027
RTT + L / R 30.008

Tầng Transport 3-43


Các giao thức Pipelined
pipelining: bên gửi cho phép gửi nhiều gói
đồng thời, không cần chờ báo xác nhận
ACK
 Dải số thứ tự phải được tăng lên
 Phải có bộ nhớ đêm tại nơi gửi và/hoặc nhận

 hai dạng phổ biến của các giao thức pipelined :


go-Back-N, selective repeat (lặp có lựa chọn)
Tầng Transport 3-44
Pipelining: độ khả dụng tăng
bên gửi bên nhận
bit đầu tiên của gói được truyền, t = 0
bit cuối cùng của gói được truyền,
t=L/R

bit đầu tiên của packet đến


RTT bit cuối cùng của packet đến, gửi ACK
bit cuối cùng của packet thứ 2 đến, gửi ACK
bit cuối cùng của packet thứ 3 đến, gửi ACK
ACK đến, gửi gói
kế tiếp t = RTT + L / R
3-packet pipelining tăng
độ khả dung lên gấp 3 lần!

U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008

Tầng Transport 3-45


Pipelined protocols: tổng quan
Go-back-N: Lặp có lựa chọn (Selective
 Bên gửi có thể có đến N packet Repeat):
không cần ACK trong đường  Bên gửi có thể có đến N
ống ( pipeline) packet không cần ACK
 Bên nhận chỉ gởi cumulative trong đường ống (pipeline)
ack (xác nhận tích lũy)  Bên nhận gửi rcvr ack
 Sẽ không thông báo nhận riêng biệt (individual ack)
packet thành công nếu có cho mỗi packet
gián đoạn  Bên nhận duy trì bộ định
 bên gửi có bộ định thì cho thì cho mỗi packet không
packet sớm nhất mà không cần được ACK
ACK (oldest unacked packet)  Khi bộ định thì của packet
 Khi bộ định thì hết, truyền lại nào hết hạn, thì chỉ truyền
thất cả các packet mà không lại packet không được
được ACK ACK đó

Tầng Transport 3-46


Go-Back-N: bên gửi
 Số thứ tự k-bit trong header của packet
 “cửa sổ”(“window”) lên đến N gói, cho phép gửi liên tiếp
không cần ACK

 ACK(n): thông báo nhận tất cả các packet lên đến n, bao gồm n số thứ tự - “ACK tích
lũy”(“cumulative ACK”)
 Có thể nhận ACK trùng (xem bên nhận)
 Định thì cho packet sớm nhất đang trong tiến trình xử lý (oldest in-flight pkt)
 timeout(n): truyền lại packet n và tất cả các packet có số thứ tự cao hơn trong cửa sổ (window)

Tầng Transport 3-47


GBN: trạng thái mở rộng tại bên gửi
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
Wait
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])

rdt_rcv(rcvpkt) udt_send(sndpkt[nextseqnum-1])
&& corrupt(rcvpkt)

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)

base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer

Tầng Transport 3-48


GBN: trạng thái mở rộng tại bên nhận
default

udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)

Wait
extract(rcvpkt,data)
expectedseqnum=1 deliver_data(data)
sndpkt = sndpkt = make_pkt(expectedseqnum,ACK,chksum)
make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt)
expectedseqnum++

ACK-duy nhất: luôn luôn gửi ACK cho gói đã nhận chính
xác, với số thứ tự xếp hạng cao nhất (highest in-order
seq #)
 Có thể sinh ra các ACK trùng nhau
 Chỉ cần nhớ expectedseqnum
 Packet không theo thứ tự(out-of-order pkt):
 hủy (discard): không giữ trong bộ đệm bên nhận!
 Gửi lại ACK với số thứ tự xếp hạng cao nhất
Tầng Transport 3-49
Hoạt động GBN
sender window (N=4) bên gửi bên nhận
012345678 send pkt0
012345678 send pkt1
send pkt2 receive pkt0, send ack0
012345678
send pkt3 Xloss receive pkt1, send ack1
012345678
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ACK receive pkt5, discard,
(re)send ack1
pkt 2 timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5

Tầng Transport 3-50


Lặp có lựa chọn (Selective repeat)
 Bên nhận thông báo đã nhận đúng tất cả
từng gói một
 Đệm các gói, khi cần thiết
 Bên gửi chỉ gửi lại các gói nào không nhận
được ACK
 Bên gửi đếm thời gian cho mỗi gói không có ACK
 Cửa sổ bên gửi (sender window)
 N số thứ tự liên tục
 Hạn chế số thứ tự các gói không có phản hồi
ACK

Tầng Transport 3-51


Lặp có lựa chọn: cửa sổ bên gửi và
nhận

Tầng Transport 3-52


Lặp có lựa chọn
Bên gửi Bên nhận
Dữ liệu từ tầng trên: Gói n trong [rcvbase, rcvbase+N-1]
 Nếu số thứ tự kế tiếp sẵn  Gửi ACK(n)
sàng trong cửa sổ, gửi gói  Không thứ tự: đệm
timeout(n):  Đúng thứ tự: chuyển dữ liệu lên
 Gửi lại packet n, khởi động lại tầng trên (cả các gói đã đệm, có
bộ đếm thời gian thứ tự), dịch chuyển cửa sổ đến
ACK(n) trong ô nhớ chờ gói chưa nhận kế tiếp
[sendbase,sendbase+N]: Packet n trong [rcvbase-
 Đánh dấu packet n là đã được N,rcvbase-1]
nhận  ACK(n)

 Nếu gói chưa ACK có n nhỏ Ngược lại:


nhất, thì dịch chuyển cửa sổ  Bỏ qua
base đến số thứ tự chưa
ACK kế tiếp

Tầng Transport 3-53


Hành động của lặp lại có lựa chọn
sender window (N=4) Bên gửi Bên nhận
012345678 gửi pkt0
012345678 gửi pkt1
gửi pkt2 nhận pkt0, gửi ack0
012345678
gửi pkt3 Xloss nhận pkt1, gửi ack1
012345678
(đợi)
nhận pkt3, buffer,
012345678 nhận ack0, gửi pkt4 gửi ack3
012345678 nhận ack1, gửi pkt5 nhận pkt4, buffer,
gửi ack4
Ghi nhận ack3 đã đến nhận pkt5, buffer,
gửi ack5
pkt 2 timeout
012345678 gửi pkt2
012345678 Ghi nhận ack4 đã đến
012345678 nhận pkt2; chuyển pkt2,
Ghi nhận ack5 đã đến
012345678 pkt3, pkt4, pkt5; gửi ack2

Q: việc gì xảy ra khi ack2 đến?

Tầng Transport 3-54


Lặp có lựa chọn: sender window
(sau khi nhận)
receiver window
(sau khi nhận)
tình huống pkt0
khó giải quyết
0123012
0123012 pkt1 0123012
0123012 pkt2 0123012
Ví dụ: 0123012
0123012 pkt3
 Số thứ tự: 0, 1, 2, 3 0123012
X
 Kích thước cửa sổ=3 pkt0 Sẽ chấp nhận packet với
số thứ tự 0
 Bên nhận không thấy sự khác nhau (a) Không sự cố
trong 2 tình huống!
 Dữ liệu trùng lặp được chấp nhận Bên nhận không thể thấy phía bên gửi.
như dữ liệu mới (b) Hành vi bên nhận như nhau trong cả
2 trường hợp!
Q: quan hệ giữa dãy số thứ tự và kích Có điều gì đó (rất) sai lầm!
thước cửa sổ để tránh vấn đề (b)? pkt0
0123012
0123012 pkt1 0123012
0123012 pkt2 0123012
X 0123012

timeout
X
Truyền lại pkt0 X
0123012 pkt0
Sẽ chấp nhận packet
với số thứ tự 0
(b) Lỗi!
Tầng Transport 3-55
Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-56
TCP: tổng quan RFCs: 793,1122,1323, 2018, 2581
 point-to-point:  Dữ liệu full duplex:
 Một bên gửi, một bên nhận  Luồng dữ liệu đi 2 chiều
 Tin cậy, luồng byte theo trong cùng 1 kết nối
thứ tự (in-order byte  MSS: kích thước tối đa của
gói tin (maximum segment
steam): size)
 Không “ranh giới thông
điệp” (“message
 Hướng kết nối:
boundaries”)  Bắt tay (trao đổi các thông
điệp điều khiển) khởi tạo
 pipelined: trạng thái bên gửi và nhận
 Điều khiển luồng và tắc trước khi trao đổi dữ liệu
nghẽn của TCP thông qua
việc thiết lập kích thước
 Điều khiển luồng:
cửa sổ (window size)  Bên gửi sẽ không làm tràn
bộ đệm bên nhận

Tầng Transport 3-57


Cấu trúc segment TCP
32 bits
URG: dữ liệu khẩn cấp Đếm bằng
(thường không dùng) port nguồn port đích
bytes dữ liệu
Số thứ tự (không bằng
ACK: ACK #
hợp lệ Số ACK segment!)
head Không
PSH: push data now len dùng UAP R S F receive window
(thường không dùng) Số byte
checksum Urg data pointer
bên nhận
RST, SYN, FIN: sẵn sàng
Tùy chọn (độ dài thay đổi)
thiết lập kết nối chấp nhận
(setup, teardown
commands)
Dữ liệu ứng dụng
Internet (độ dài thay đổi)
checksum
(giống như UDP)

Tầng Transport 3-58


Số thứ tự TCP và ACK
Segment đi ra từ bên gửi
Các số thứ tự: port nguồn port đích
số thứ tự
 Dòng byte “đánh số” byte số ACK
đầu tiên trong dữ liệu của rwnd
segment checksum urg pointer

Các ACK: kích thước cửa sổ


N
 số thứ tự của byte kế tiếp
được mong đợi từ phía
bên kia sender sequence number space
 ACK tích lũy
sent sent, not- usable not
Hỏi: làm thế nào để bên nhận ACKed yet ACKed but not usable
xử lý các segment không (“in-flight”) yet sent
theo thứ tự
Segment vào, đến bên gửi
 Trả lời: TCP không đề cập, port nguồn port đích
tùy thuộc người thực hiện số thứ tự
số ACK
A rwnd
checksum urg pointer

Tầng Transport 3-59


Số thứ tự TCP và ACK
Host A Host B

User
Nhập
‘C’
Seq=42, ACK=79, data = ‘C’
host báo nhận thành công ‘C’,
phản hồi ngược lại ‘C’

Seq=79, ACK=43, data = ‘C’


host báo nhận
thành công “C”
được phản hồi
Seq=43, ACK=80

Tình huống telnet đơn giản

Tầng Transport 3-60


TCP round trip time và timeout
Hỏi: làm cách nào để Q: làm cách nào để ước
thiết lập giá trị TCP lượng RTT?
timeout?  SampleRTT: thời gian được
đo từ khi truyền segment
 Dài hơn RTT đến khi báo nhận ACK
 Nhưng RTT thay đổi  Lờ đi việc truyền lại
 Quá ngắn: timeout  SampleRTT sẽ thay đổi,
muốn RTT được ước lượng
sớm, truyền lại không “mượt hơn”
cần thiết  Đo lường trung bình của
 Quá dài: phản ứng một số giá trị vừa xảy ra,
chậm đối với việc mất không chỉ SampleRTT
hiện tại
mát gói
Tầng Transport 3-61
TCP round trip time và timeout
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
 Đường trung bình dịch chuyển hàm mũ (exponential weighted
moving average)
 ảnh hưởng của mẫu đã xảy ra sẽ làm giảm tốc độ theo cấp số
nhân
 typical value:  = 0.125
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

350

RTT: gaia.cs.umass.edu to fantasia.eurecom.fr


RTT (milliseconds)

300

250
RTT (milliseconds)

200

sampleRTT
150
EstimatedRTT

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
Tầng Transport 3-62
time (seconds)
SampleRTT Estimated RTT
TCP round trip time và timeout
 Khoảng thời gian timeout (timeout interval):
EstimatedRTT cộng với “biên an toàn”
 Sự thay đổi lớn trong EstimatedRTT -> an toàn biên lớn hơn
 Ước lượng độ lệch SampleRTT từ EstimatedRTT:

DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|
(typically,  = 0.25)

TimeoutInterval = EstimatedRTT + 4*DevRTT

estimated RTT “biên an toàn”

Tầng Transport 3-63


Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-64
TCP truyền dữ liệu tin cậy
 TCP tạo dịch vụ rdt
trên dịch vụ không tin
cậy của IP
 các đoạn (segment)
được truyền thông qua Lúc đầu khảo sát TCP
kiến trúc đường ống đơn giản ở bên gửi:
 Các ack tích lũy  Bỏ qua các ack bị trùng
 TCP dùng một bộ đếm  Bỏ qua điều khiển luồng
thời gian truyền lại và điều khiển tắc nghẽn
 Việc truyền lại được
kích hoạt bởi:
 Sự kiện timeout
 Các ack bị trùng

Tầng Transport 3-65


TCP các sự kiện bên gửi:
Dữ liệu được nhận từ ứng timeout:
dụng:  Gửi lại segment nào gây ra
 Tạo segment với số thứ tự
timeout
 Số thứ tự là số thứ tự của  Khởi động lại bộ đếm thời gian
byte dữ liệu đầu tiên trong nhận ack:
segment  Nếu xác nhận cho các
 Khởi động bộ đếm thời
segment không được xác
gian nếu chưa chạy nhận trước đó
 Xem bộ định thì như là đối  Cập nhật những gì được biết là
với segment sớm nhất đã được nhận thành công
không được ACK  Khởi động lại bộ định thì nếu có
 Khoảng thời gian hết hạn: các segment vẫn chưa được
TimeOutInterval thông báo nhận thành công

Tầng Transport 3-66


TCP bên gửi (đơn giản)
Dữ liệu được nhận từ tầng Ứng dụng trên
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., “send”)
NextSeqNum = NextSeqNum + length(data)
if (bộ định thì hiện thời không chạy)
 khởi động bộ định thì
NextSeqNum = InitialSeqNum wait
SendBase = InitialSeqNum for
event timeout
Truyền lại segment nào chưa
được báo đã nhận thành công với
số thứ tự nhỏ nhất.
ACK received, with ACK field value y Khởi động bộ định thì

if (y > SendBase) {
SendBase = y
/* SendBase–1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments)
start timer
else stop timer
} Tầng Transport 3-67
TCP: tình huống truyền lại
Host A Host B Host A Host B

SendBase=92
Seq=92, 8 bytes of data Seq=92, 8 bytes of data

Seq=100, 20 bytes of data


timeout

timeout
ACK=100
X
ACK=100
ACK=120

Seq=92, 8 bytes of data Seq=92, 8


SendBase=100 bytes of data
SendBase=120
ACK=100
ACK=120

SendBase=120

Tình huống mất ACK Timeout sớm


Tầng Transport 3-68
TCP: tình huống truyền lại
Host A Host B

Seq=92, 8 bytes of data

Seq=100, 20 bytes of data


ACK=100
timeout

X
ACK=120

Seq=120, 15 bytes of data

ACK tích lũy


Tầng Transport 3-69
Sự phát sinh TCP ACK [RFC 1122, RFC 2581]

Sự kiện tại bên nhận Hành động bên nhận TCP


segment đến theo thứ tự với số Hoãn gửi ACK. Đợi đến 500ms cho segment
thứ tự được mong đợi. Tất cả kế tiếp. Nếu không có segment kế tiếp, gửi
dữ liệu đến đã được ACK ACK

segment đến theo thứ tự với số Lập tức gởi lại một ACK tích lũy, thông báo
thứ tự mong muốn. 1 segment nhận thành công cho cả segment theo thứ
khác có ACK đang treo tự

Segment đến không theo thứ tự Lập tức gởi lại ACK trùng, chỉ ra số thứ tự
với số thứ tự lớn hơn số được của byte được mong đợi kế tiếp
mong đợi. Có khoảng trống

segment đến lắp đầy từng phần Lập tức gửi ACK, với điều kiện là segment
hoặc toàn bộ khoảng trống đó bắt đầu ngay điểm có khoảng trống

Tầng Transport 3-70


TCP truyền lại nhanh
 Chu kỳ time-out
thường tương đối dài: TCP truyền lại nhanh
 Độ trễ dài trước khi gởi Nếu bên gửi nhận 3
lại gói bị mất ACK của cùng 1 dữ liệu
(“3 ACK trùng”), thì gửi
 Phát hiện các segment lại segment chưa được
bị mất thông qua các ACK với số thứ tự nhỏ
ACKs trùng. nhất
 Bên gửi thường gửi  Có khả năng
nhiều segment song segment không được
song ACK đã bị mất, vì
 Nếu segment bị mất, thì thế không đợi đến
sẽ có khả năng có thời gian timeout
nhiều ACK trùng.

Tầng Transport 3-71


TCP truyền lại nhanh
Host A Host B

Seq=92, 8 bytes of data


Seq=100, 20 bytes of data
X

ACK=100
timeout

ACK=100
ACK=100
ACK=100
Seq=100, 20 bytes of data

Truyền lại nhanh sau khi


bên gửi nhận 3 lần ACK bị trùng Tầng Transport 3-72
Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-73
TCP điều khiển luồng
application
Ứng dụng có thể loại bỏ dữ liệu process
từ các bộ nhớ đệm socket TCP application
….
TCP socket OS
receiver buffers
… chậm hơn TCP bên
nhận đang cung cấp
(bên gửi đang gửi) TCP
code

IP
Điều khiển luồng code
bên nhận kiểm soát bên gửi, để
bên gửi sẽ không làm tràn bộ
nhớ đệm của bên nhận bởi từ bên gửi
truyền quá nhiều và quá nhanh Chồng giao thức bên nhận

Tầng Transport 3-74


TCP điều khiển luồng
 Bên nhận “thông báo” không gian
bộ nhớ đệm còn trống bằng cách
to application process
thêm giá trị rwnd trong TCP
header của các segment từ bên
nhận đến bên gửi RcvBuffer buffered data
 Kích thước của RcvBuffer được
thiết đặt thông qua các tùy chọn của
socket (thông thường mặc định là rwnd free buffer space
4096 byte)
 Nhiều hệ điều hành tự động điều
chỉnh RcvBuffer
TCP segment payloads
 Bên gửi giới hạn khối lượng dữ
liệu gửi mà không cần ACK bằng
Bộ đêm phía bên nhận
giá trị rwnd của bên nhận
 Bảo đảm bộ đệm bên nhận sẽ
không bị tràn
Tầng Transport 3-75
Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-76
Quản lý kết nối
(Connection Management)
Trước khi trao đổi dữ liệu, bên gửi và nhận “bắt tay nhau” :
 Đồng ý thiết lập kết nối (mỗi bên biết bên kia sẵn sàng để
thiết lập kết nối)
 Đồng ý các thông số kết nối

application application

connection state: ESTAB connection state: ESTAB


connection variables: connection Variables:
seq # client-to-server seq # client-to-server
server-to-client server-to-client
rcvBuffer size rcvBuffer size
at server,client at server,client

network network

Socket clientSocket = Socket connectionSocket =


newSocket("hostname","port welcomeSocket.accept();
number");
Tầng Transport 3-77
Đồng ý thiết lập kết nối
Bắt tay 2 lần (2-way handshake):
Hỏi: bắt tay 2 lần sẽ luôn luôn
hoạt động trong mạng hay
không?
Let’s talk  Độ chậm trễ biến thiên
ESTAB  Các thông điệp được truyền lại (như
OK req_conn(x)) vì mất thông điệp
ESTAB
 Sắp xếp lại thông điệp
 Không thể “thấy” phía bên kia

choose x
req_conn(x)
ESTAB
acc_conn(x)
ESTAB

Tầng Transport 3-78


Đồng ý thiết lặp kết nối
Các tình huống thất bại khi bắt tay 2 lần:

choose x choose x
req_conn(x) req_conn(x)
ESTAB ESTAB
retransmit acc_conn(x) retransmit acc_conn(x)
req_conn(x) req_conn(x)

ESTAB ESTAB
data(x+1) accept
req_conn(x)
retransmit data(x+1)
data(x+1)
connection connection
client x completes server x completes server
client
terminates forgets x terminates forgets x
req_conn(x)

ESTAB ESTAB
data(x+1) accept
Kết nối mở một nửa! data(x+1)
(không có client!)
Tầng Transport 3-79
TCP bắt tay 3 lần (3-way handshake)

Trạng thái client Trạng thái server


LISTEN LISTEN
Chọn số thứ tự ban đầu, x
Gửi TCP SYN msg
SYNSENT SYNbit=1, Seq=x
Chọn số thứ tự ban đầu, y
gửi TCP SYNACK
msg, xáx nhận cho SYN SYN RCVD
SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
SYNACK(x) vừa được nhận
ESTABcho hay server vẫn còn sống;
send ACK for SYNACK;
Gói tin này có thể chứa ACKbit=1, ACKnum=y+1
dữ liệu lient gửi server
ACK(y) vừa được nhận
cho hay client vẫn sống
ESTAB

Tầng Transport 3-80


TCP bắt tay 3 lần: FSM

closed

Socket connectionSocket =
welcomeSocket.accept();

 Socket clientSocket =
SYN(x) newSocket("hostname","port
number");
SYNACK(seq=y,ACKnum=x+1)
Tạo socket mới để giao tiếp listen SYN(seq=x)
ngược lại với client

SYN SYN
rcvd sent

SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)

Tầng Transport 3-81


TCP: đóng kết nối
 Mỗi bên client và server sẽ đóng kết nối bên
phía của nó
 Gởi TCP segment với FIN bit = 1
 Phản hồi bằng ACK cho FIN vừa được nhận
 Khi nhận FIN, ACK có thể được kết hợp với FIN
của nó
 Các trao đổi FIN đồng thời có thể được sử
dụng

Tầng Transport 3-82


TCP: đóng kết nối
Trạng thái client Trạng thái server
ESTAB ESTAB
clientSocket.close()
FIN_WAIT_1 Có thể không FINbit=1, seq=x
còn gửi nhưng
vẫn còn nhận CLOSE_WAIT
dữ liệu ACKbit=1; ACKnum=x+1
Vẫn có thể
FIN_WAIT_2 Chờ server gửi dữ liệu
đóng

LAST_ACK
FINbit=1, seq=y
TIMED_WAIT Có thể không còn
gửi dữ liệu
ACKbit=1; ACKnum=y+1
Thời gian chờ tối đa
bằng 2 lần thời gian CLOSED
sống của segment

CLOSED

Tầng Transport 3-83


Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-84
Các nguyên lý điều khiển tắc
nghẽn (congestion control)
Tắc nghẽn:
 “quá nhiều nguồn gửi quá nhiều dữ liệu với
tốc độ quá nhanh vượt quá khả năng xử lý
của mạng”
 Khác với điều khiển luồng (flow control)!
 Các biểu hiện:
 Mất gói (tràn bộ đệm tại các router)
 Độ trễ lớn (xếp hàng trong các bộ đệm của
router)
 1 trong 10 vấn đề khó khăn!

Tầng Transport 3-85


Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 1
dữ liệu gốc: in
thông lượng:out
 2 gửi, 2 nhận
 1 router, các bộ đệm Host A
Bộ đệm của đường link đầu ra
không giới hạn được chia sẽ không giới hạn

 Khả năng của đường


link đầu ra: R
 Không truyền lại
Host B

R/2

delay
out

in R/2 in R/2


 Thông lượng lớn nhất  Độ trễ lớn khi tốc độ đến, lin,
của mỗi kết nối: R/2 tiếp cận khả năng đáp ứng của
mạng
Tầng Transport 3-86
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
 1 router, các bộ đệm có giới hạn
 bên gửi truyền lại các packet bị hết thời gian chờ
 input tầng Ứng dụng = output tầng Ứng dụng: lin = lout
 input tầng Vận chuyển bao gồm việc truyền lại: lin‘ lin

in : data gốc


'in: data gốc, cộng với out
dữ liệu được truyền lại

Host A

Bộ đệm đường link đầu


Host B ra được chia sẽ giới hạn
Tầng Transport 3-87
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
R/2
Lý tưởng hóa: kiến thức hoàn
hảo

out
 Bên gửi chỉ gửi khi bộ nhớ
đệm của router sẵn sàng
in R/2

in : data gốc


copy 'in: data gốc, cộng với out
dữ liệu được truyền lại

A
free buffer space!

Bộ nhớ đệm đường link đầu


Host B ra được chia sẽ giới hạn

Tầng Transport 3-88


Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Lý tưởng hóa: các packet có thể bị
mất hoặc bị loại bỏ tại router bởi
vì bộ nhớ đệm bị đầy
 Bên gửi chỉ gởi lại các gói đã bị
mất

in : data gốc


copy 'in: data gốc, cộng với out
dữ liệu được truyền lại

A
Không còn bộ nhớ đệm!

Host B
Tầng Transport 3-89
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Lý tưởng hóa: các packet có thể R/2
bị mất hoặc bị loại bỏ tại
router bởi vì bộ nhớ đệm bị Khi gửi tại R/2, một
số packet được
đầy

out
truyền lại, nhưng
 Bên gửi chỉ gởi lại các gói đã tiệm cân goodput
vẫn là R/2 (tại sao?)
bị mất
in R/2

in : data gốc


'in: data gốc, cộng với out
dữ liệu được truyền lại

A
Không còn bộ nhớ đệm!

Host B
Tầng Transport 3-90
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Thực tế: trùng lặp R/2
 Các packet có thể bị mất , bị bỏ
Khi gửi tại R/2, một
tại router bởi vì bộ nhớ đệm đầy số packet được

out
 Thời gian time out bên gửi hết truyền lại, bao gồm
packet bị trùng đã
sớm, gởi 2 bản giống nhau, cả 2 được gửi đi!
đều được gửi đi R/2
in

in
timeout
copy out
'in

A
Không còn bộ nhớ đệm!

Host B
Tầng Transport 3-91
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Thực tế: trùng lặp R/2
 Các packet có thể bị mất , bị bỏ
tại router bởi vì bộ nhớ đệm đầy Khi gửi tại R/2, một
số packet được

out
 Thời gian time out bên gửi hết truyền lại, bao gồm
sớm, gởi 2 bản giống nhau, cả 2 packet bị trùng đã
được gửi đi!
đều được gởi đi
in R/2

“chi phí” của tắc nghẽn:


 Nhiều việc hơn (truyền lại) cho “goodput”
 Truyền lại không cần thiết: đường truyền mang nhiều bản sao của gói
 Giảm goodput

Tầng Transport 3-92


Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 3
 4 người gởi Hỏi: cái gì xảy ra khi lin và lin’
tăng?
 Các đường qua nhều hop
TL: khi lin’ màu đỏ tăng, tất cả packet màu
 timeout/truyền lại xanh đến tại hàng đợi phía trên bị loại
bỏ, thông lượng màu xanh -> 0
Host A
in : data gốc out
Host B

'in: data gốc, cộng với


dữ liệu được truyền lại
finite shared output link buffers

Host D

Host C

Tầng Transport 3-93


Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 3
C/2
out

in’ C/2

“Chi phí” khác của tắc nghẽn


 Khi gói bị loại bỏ, bất kỳ “lưu lượng tải lên (upstream) dùng
cho gói đó sẽ bị lãng phí!”

Tầng Transport 3-94


Các phương pháp tiếp cận đối với
điều khiển tắc nghẽn
2 phương pháp tiếp cận:
Điều khiển tắc
Điều khiển tắc nghẽn
nghẽn end-end : có sự hỗ trợ của
mạng (network-
 Không có phản hồi rõ
ràng từ mạng assisted) :
 Các router cung cấp
 Tắc nghẽn được suy phản hồi đến các hệ
ra từ việc quan sát hệ thống đầu cuối
thống đầu cuối có
 Bit đơn chỉ ra tắc
mất mát hoặc bị trễ nghẽn (SNA, DECbit,
 TCP được giao TCP/IP ECN, ATM)
nhiệm vụ xử lý tắc  Tốc độ sẽ gửi của
nghẽn người gửi được xác
định rõ ràng
Tầng Transport 3-95
Ví dụ: điều khiển tắc nghẽn ATM ABR
ABR: available bit Các gói RM (resource
rate: management cell):
 “dịch vụ mềm dẻo”  Được gửi bởi bên gửi, được
 Nếu đường gửi “dưới xen kẽ với các gói dữ liệu
tải”:  Các bit trong RM cell được
 Bên gửi sẽ dùng thiết lập bởi các switch
băng thông trống  NI bit: không tăng tốc độ
(tắc nghẽn nhẹ)
 Nếu đường gửi bị tắc
nghẽn:  CI bit: tắc nghẽn rõ rệt
 Bên gửi sẽ điều tiết
 Các RM cell được trả về
bên gửi từ bên nhận với
với tốc độ tối thiểu nguyên vẹn các bit trên
được bảo đảm

Tầng Transport 3-96


Ví dụ: điều khiển tắc nghẽn ATM ABR

RM cell data cell

 Trường 2 byte ER (tốc độ tường minh) trong cell RM


 Switch bị tắc nghẽn có thể giảm giá trị ER trong gói
 tốc độ gửi do đó có thể được điều tiết cho phù hợp với tốc độ tối đa mà
đường truyền hỗ trợ
 Bit EFCI bit trong cell dữ liệu: được thiết lặp là 1 tại switch bị tắc
nghẽn
 Nếu gói dữ liệu đứng trước RM cell có bit EFCI bật lên, bên gửi sẽ bật bit CI
trong RM cell trả về

Tầng Transport 3-97


Chương 3 Nội dung
3.1 các dịch vụ tầng 3.5 vận chuyển hướng
Vận chuyển kết nối: TCP
3.2 multiplexing và  Cấu trúc segment
demultiplexing  Truyền dữ liệu tin
cậ y
3.3 vận chuyển phi
 Điều khiển luồng
kết nối: UDP (flow control)
3.4 các nguyên lý  Quản lý kết nối
truyền dữ liệu tin
3.6 các nguyên lý về
cậy
điều khiển tắc nghẽn
3.7 điều khiển tắc
nghẽn TCP
Tầng Transport 3-98
TCP điều khiển tắc nghẽn: tăng theo cấp số
cộng, giảm theo cấp số nhân
 Hướng tiếp cận: bên gửi tăng tốc độ truyền (kích thước cửa sổ), thăm dò băng thông
có thể sử dụng, cho đến khi mất mát gói xảy ra
 tăng theo cấp số cộng (additive increase): tăng cwnd (congestion window) lên 1
MSS sau mỗi RTT cho đến khi mất gói xảy ra
 giảm theo cấp số nhân (multiplicative decrease): giảm một nửa cwnd sau khi mất gói
xảy ra

additively increase window size …


…. Cho đến khi mất gói xảy ra
congestion window size

AIMD saw tooth (thì giảm một nữa kích thước cửa sổ)
cwnd: TCP sender

behavior: thăm dò
băng thông

Tầng Transport 3-99


time
TCP điều khiển tắc nghẽn: chi tiết
sender sequence number space TCP tốc độ gửi:
cwnd
 Ước lượng: khối
lượng byte gửi (cwnd)
đợi ACK trong khoảng
last byte
ACKed
last byte
sent, not- sent thời gian RTT
yet ACKed
(“in-flight
”)
 Bên gửi giới hạn truyền tải:
cwnd
rate ~
~
RTT
bytes/sec
LastByteSent- LastByteAcked < cwnd
 cwnd thay đổi, chức năng nhận biết
tắc nghẽn trên mạng

Tầng Transport 3-100


TCP Slow Start
Host A Host B
 Khi kết nối bắt đầu, tăng
tốc độ theo cấp số nhân
cho đến sự kiện mất gói one segm
ent

RTT
đầu tiên xảy ra:
 initially cwnd = 1 MSS two segm
ents
 Gấp đôi cwnd mỗi RTT
 Được thực hiện bằng
cách tăng cwnd cho mỗi four segm
ents
ACK nhận được
 Tóm lại: tốc độ ban đầu
chậm, nhưng nó sẽ tăng
lên theo cấp số nhân time

Tầng Transport 3-101


TCP: phát hiện, phản ứng khi mất gói
 Mất gói được chỉ ra bởi timeout:
 cwnd được thiết lặp 1 MSS;
 Sau đó kích thước cửa sổ sẽ tăng theo cấp số nhân (như trong slow start)
đến ngưỡng, sau đó sẽ tăng tuyến tính
 Mất gói được xác định bởi 3 ACK trùng nhau: TCP RENO
 Các ACK trùng lặp chỉ ra mạng vẫn có khả năng truyền
 cwnd bị cắt một nửa sau đó tăng theo tuyến tính
 TCP TAHOE luôn luôn thiết lặp cwnd bằng 1 (timeout hoặc 3 ack trùng nhau)

Tầng Transport 3-102


TCP: chuyển từ slow start qua CA
Hỏi: khi nào tăng cấp lũy
thừa nên chuyển qua
tuyến tính?
Trả lời: khi cwnd được
1/2 giá trị của nó trước
thời gian timeout.

Thực hiện:
 ssthresh thay đổi
 Khi mất gói, ssthresh được
thiết lặp về chỉ 1/2 của
cwnd trước khi mất gói

Tầng Transport 3-103


Tóm tắt: TCP điều khiển tắc nghẽn
New
New ACK!
ACK!
ACK trùng
dupACKcount++ new ACK
new ACK
.
cwnd = cwnd + MSS (MSS/cwnd)
dupACKcount = 0
cwnd = cwnd+MSS Truyền segment(s) mới, khi được phép
dupACKcount = 0
 Truyền segment(s) mới, khi được phép
cwnd = 1 MSS
ssthresh = 64 KB cwnd > ssthresh
dupACKcount = 0
slow  congestion
start timeout avoidance
ssthresh = cwnd/2
cwnd = 1 MSS duplicate ACK
timeout dupACKcount = 0 dupACKcount++
Truyền lại segmentt thiếu
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
Truyền lại segmentt thiếu
timeout
New
ACK!
ssthresh = cwnd/2
cwnd = 1 New ACK
dupACKcount = 0
Truyền lại segmentt thiếu cwnd = ssthresh dupACKcount == 3
dupACKcount == 3 dupACKcount = 0
ssthresh= cwnd/2 ssthresh= cwnd/2
cwnd = ssthresh + 3 cwnd = ssthresh + 3
Truyền lại segmentt thiếu Truyền lại segmentt thiếu
fast
recovery
duplicate ACK
cwnd = cwnd + MSS
Truyền segment(s) mới, khi được phép

Tầng Transport 3-104


TCP thông lượng (throughtput)
 Thông lượng trung bình của TCP như là chức năng
của kích thước cửa sổ và RTT?
 Bỏ qua slow start, giả sử dữ liệu luôn luôn được gởi
 W: kích thước cửa sổ (được đo bằng byte) khi mất gói xảy ra
 Kích thước cửa sổ trung bình (# in-flight bytes) là ¾ W
 Thông lượng trung bình là 3/4W mỗi RTT

3 W
avg TCP thruput = bytes/sec
4 RTT
W

W/2

Tầng Transport 3-105


TCP tương lai: TCP qua “ống lớn và dài”
 Ví dụ: segment 1500 byte, 100ms RTT, muốn
thông lượng 10 Gbps
 Kích thước cửa sổ yêu cầu W = 83,333
segment trên đường truyền
 Thông lượng trong các trường hợp mất gói, L
[Mathis 1997]:
1.22 . MSS
TCP throughput =
RTT L

➜ để đạt thông lượng 10 Gbps, cần thì lệ mất gói là


L = 2·10-10 – một tỷ lệ mất gói rất nhỏ!
 Phiên bản mới của TCP cho tốc độ cao

Tầng Transport 3-106


TCP Công bằng
Mục tiêu công bằng: nếu có K session TCP
chia sẽ cùng đường link bị bóp cổ chai của
băng thông R, thì mỗi phiên nên có tốc độ
trung bình là R/K
Kết nối TCP 1

Router cổ chai
Khả năng R
Kết nối TCP 2

Tầng Transport 3-107


Tại sao TCP là công bằng?
2 session cạnh tranh nhau:
 Tăng theo cấp số cộng 1, khi thông lượng tăng
 Giảm lưu lượng theo cấp số nhân tương úng

R Chia sẻ băng thông bằng nhau


Connection 2 throughput

Mất gói: giảm một nữa kích thước cửa sổ


Tránh tắc nghẽn: tăng theo cấp số cộng
Mất gói: giảm một nữa kích thước cửa sổ
Tránh tắc nghẽn: tăng theo cấp số cộng

Connection 1 throughput R
Tầng Transport 3-108
Công bằng (tt)
Công bằng và UDP Công bằng, các kết nối TCP
 Nhiều ứng dụng song song
thường không dùng  ứng dụng có thể mở nhiều

TCP kết nối song song giữa 2


 Không muốn tốc độ host
bị điều tiết do điều  Trình duyệt web làm điều
khiển tắc nghẽn này
 Thay bằng dùng  Ví dụ: đường link với tốc độ
UDP: R đang có 9 kết nối:
 Truyền audio/video  ứng dụng mới yêu cầu mở 1 kết nối
với tốc độ ổn định, TCP, có tốc độ R/10
chịu được mất gói  ứng dụng mới yêu cầu mở 11 kết
nối TCP, có tốc độ R/2

Tầng Transport 3-109


Chương 3: Tóm tắt
 Các nguyên lý của các dịch vụ tầng
Vận chuyển:
 multiplexing, demultiplexing
 Truyền dữ liệu tin cậy Kế tiếp:
 Tìm hiểu xong các
 Điều khiển luồng (flow control) vấn đề mạng “biên”
 Điều khiển tắc nghẽn (các tầng Ứng dụng,
(congestion control) tầng Vận chuyển)
 Khởi tạo và thực hiện trên Internet  Chuẩn bị vào phần

 UDP mạng “lõi”


 TCP

Tầng Transport 3-110

You might also like