Chapter - 3 - Vietnamese - 1908

You might also like

Download as pdf or txt
Download as pdf or txt
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:


We’re making these slides freely available to all (faculty, students, readers). Computer
They’re in PowerPoint form so you see the animations; and can add, modify,
and delete slides (including this one) and slide content to suit your needs. Networking: A Top
They obviously represent a lot of work on our part. In return for use, we only
ask the following: Down Approach
 If you use these slides (e.g., in a class) that you mention their source (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 Ross
from (or perhaps identical to) our slides, and note our copyright of this
material.
Addison-Wesley
March 2012
Thanks and enjoy! JFK/KWR

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
các hệ thống đầu cuối
 Phía gửi: chia nhỏ các thông điệp
(message) ứng dụng thành các
segments, sau đó chuyển các
segments này cho tầng Mạng
 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
Tin cậy, truyền theo thứ
application
 transport
network

tự (TCP) data link


physical
network

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


data link
data link
physical
physical
 Điều khiển luồng network
data link

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


physical

network

 Không tin cậy, truyền data link


physical

không theo thứ tự: UDP network


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ữ 32 bits
liệu (datagram) IP Số port nguồn Số port đích
 Mỗi gói dữ liệu có địa chỉ
IP nguồn và đích
other header fields
 Mỗi gói dữ liệu mang một
segment tầng Vận chuyển
 Mỗi segment có số port application
nguồn và đích data
 host dùng các địa chỉ IP (payload)
và số port để gởi
segment đến socket Định dạng segment TCP/UDP
thích hợp

Tầng Transport 3-9


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

 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
 Kiểm tra số port đích nguồn và/hoặc khác số
trong segment port nguồn sẽ được
 Đưa segment UDP đến chuyển đến cùng
socket có số port đó socket tại máy đích
Tầng Transport 3-10
Demultiplexing không kết nối:
ví dụ
DatagramSocket
DatagramSocket serverSocket = new
DatagramSocket DatagramSocket
mySocket2 = new mySocket1 = new
DatagramSocket (6428); DatagramSocket
(9157); application (5775);
application application
P1
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ó
 demux: nơi nhận các socket khác nhau
dùng tất cả 4 giá trị cho mỗi kết nối từ
trên để điều hướng client
segment đến socket  Kết nối HTTP không
thích hợp bền vững sẽ có socket
khác nhau cho mỗi yêu
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: địa physical
chỉ IP B

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


chỉ IP A Địa chỉ IP đích,port: A,9157 IP nguồn,port: C,5775 chỉ IP C
IP đích,port: B,80
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: địa physical
chỉ IP B

host: địa IP nguồn,port: B,80 host: địa


chỉ IP A IP đích,port: A,9157 IP nguồn,port: C,5775 chỉ IP C
IP đích,port: B,80
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 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-15


UDP: User Datagram Protocol [RFC 768]
 “đơn giản,” “bare bones” là  Ứng dụng UDP:
giao thức thuộc tầng Vận  Các ứng dụng đa
chuyển phương tiện trực tuyến
 Dịch vụ “best effort” (“nỗ lực (chịu mất mát(loss
tốt nhất”), các segment UDP tolerant), (cần tốc độ)
có thể bị: (rate sensitive) )
 Mất mát  DNS
 Vận chuyển không theo thứ  SNMP
tự đến ứng dụng đích  Truyền tin cậy trên
 Connectionless (phi kết nối): UDP:
 Không bắt tay giữa bên  Thêm độ tin cậy tại
nhận và gửi UDP tầng Ứng dụng
 Mỗi segment UDP được xử  Phục hồi lỗi tại các ứng
lý độc lập 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à  Kiểm tra giá trị trên có bằng
chuỗi các số nguyên
16-bit với giá trị trong trường
checksum hay không:
 checksum: tổng bù 1
của các chuỗi số 16 bit  NO – có lỗi xảy ra
trong nội dung  YES – không có lỗi. Nhưng
segment có thể còn lỗi khác nữa
 Bên gửi đặt giá trị không? Xem phần sau….
checksum vào trường
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 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-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 trạng
trạng
thái kế tiếp được xác thái Sự kiện thái 2
định duy nhất bởi sự 1
Các hành động
kiện 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
Làm
 sender thế nàopktđểoncon
retransmits người
receipt of NAKphục hồi
new mechanisms in rdt2.0 (beyond rdt1.0):

“lỗi”
 error detection
trong cuộc trò chuyện?
 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)
sndpkt = make_pkt(data, checksum) Bên nhận
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Chờ gọi Chờ ACK rdt_rcv(rcvpkt) &&
từ tầng hoặc udt_send(sndpkt) corrupt(rcvpkt)
trên NAK
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) &&
từ tầng hoặc udt_send(sndpkt) corrupt(rcvpkt)
trên NAK
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) &&
từ tầng hoặc udt_send(sndpkt) corrupt(rcvpkt)
trên NAK
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
 Bên gửi sẽ không biết hiện thời nếu ACK/NAK bị
điều gì đã xảy ra ở bên hỏng
nhận!
 Bên gửi thêm số thứ tự vào
 Không thể đơn phương trong mỗi packet (sequence
truyền lại: có thể trùng number)
lặp
 Bên nhận hủy packet bị
trùng 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) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Λ
Λ
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)


udt_send(sndpkt)

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) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

Tầng Transport 3-34


rdt2.1: thảo luận
Bên gửi: Bên nhận:
 Số thứ tự (seq #)  Phải kiểm tra gói
được thêm vào packet vừa nhận có trùng
 2 số thứ tự (0,1) là đủ. hay không
Tại sao?  Trạng thái chỉ rõ có
hay không 0 hoặc 1
 Phải kiểm tra có hay
là số thứ tự của gói
không ACK/NAK vừa được mong chờ
nhận bị hỏng  Chú ý: bên nhận có
 Số trạng thái tăng lên thể không biết
2 lần ACK/NAK vừa rồi có
 Trạng thái phải “nhớ” được bên gửi nhận
xem packet “mong đợi” tốt hay không
có số thứ tự là 0 hay 1
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) ||
Wait for Wait for
ACK isACK(rcvpkt,1) )
call 0 from
above 0 udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || Λ
has_seq1(rcvpkt)) Wait for receiver FSM
0 from
udt_send(sndpkt) below fragment
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) 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
 checksum, số thứ tự, được ACK trong khoảng thời
các ACK, việc truyền gian này
lại sẽ hỗ trợ… nhưng  Nếu gói (hoặc ACK) chỉ trễ
(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) )
rdt_rcv(rcvpkt) start_timer Λ
Λ Wait for Wait
for timeout
call 0from
ACK0 udt_send(sndpkt)
above
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
timeout for call 1 from
udt_send(sndpkt) ACK1 above
start_timer rdt_rcv(rcvpkt)
rdt_send(data) Λ
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
Λ

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
Gửi ack0
Nhận pkt0 ack0
Gửi ack0 Nhận ack0
ack0 Gửi pkt1 pkt1
Nhận ack0 Nhận pkt1
Gửi pkt1 pkt1
Gửi ack1
Nhận pkt1 ack1
ack1 Gửi ack1
X
loss timeout
resend pkt1 pkt1
Nhận pkt1
timeout
Gửi lại pkt1 pkt1 rcv ack1 (phát hiện trùng)
Nhận pkt1 send pkt0
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 send pkt0
ack0 Gửi ack0
Gửi pkt0 pkt0 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
10 bits/sec
9

 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 Repeat):
packet không cần ACK trong  Bên gửi có thể có đến N
đường ống ( pipeline) packet không cần ACK
 Bên nhận chỉ gởi cumulative trong đường ống
ack (xác nhận tích lũy) (pipeline)
 Sẽ không thông báo nhận  Bên nhận gửi rcvr ack
packet thành công nếu có riêng biệt (individual ack)
gián đoạn cho mỗi packet
 bên gửi có bộ định thì cho  Bên nhận duy trì bộ định
packet sớm nhất mà không thì cho mỗi packet không
cần ACK (oldest unacked được ACK
packet)  Khi bộ định thì của
 Khi bộ định thì hết, truyền packet nào hết hạn, thì
lại tất cả các packet mà chỉ truyền lại packet
không được ACK không được 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])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-1])
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)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = 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
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(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
012345678 gửi pkt2 nhận pkt0, gửi ack0
012345678 gửi pkt3 Xloss nhận pkt1, gửi ack1
(đợ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 receiver window

tình huống
(sau khi nhận) (sau khi nhận)

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

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 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-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  Luồng dữ liệu đi 2 chiều
nhận trong cùng 1 kết nối
 Tin cậy, luồng byte theo  MSS: kích thước tối đa
thứ tự (in-order byte của gói tin (maximum
steam): segment size)
 Không “ranh giới thông  Hướng kết nối:
điệp” (“message  Bắt tay (trao đổi các
boundaries”) thông điệp điều khiển)
 pipelined: khởi tạo trạng thái bên
gửi và nhận trước khi trao
 Điều khiển luồng và tắc đổi dữ liệu
nghẽn của TCP thông
qua việc thiết lập kích  Điều khiển luồng:
thước cửa sổ (window  Bên gửi sẽ không làm
size) 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
sẵn sàng
RST, SYN, FIN: 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ố” số ACK

byte đầu tiên trong dữ rwnd

liệu của segment


checksum urg pointer

kích thước cửa sổ


Các ACK: N

 số thứ tự của byte kế


tiếp được mong đợi từ sender sequence number space
phía bên kia
ACK tích lũy sent
ACKed
sent, not- usable not
yet ACKed but not usable
Hỏi: làm thế nào để bên (“in-
flight”)
yet sent

nhận xử lý các segment Segment vào, đến bên gửi


không theo thứ tự port nguồn port đích
số thứ tự
Trả lời: TCP không đề số ACK
cập, tùy thuộc người A rwnd

thực hiện
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
 Dài hơn RTT segment đến khi báo nhận
 Nhưng RTT thay đổi ACK
 Quá ngắn: timeout  Lờ đi việc truyền lại
sớm, truyền lại không  SampleRTT sẽ thay đổi,
muốn RTT được ước
cần thiết lượng “mượt hơn”
 Quá dài: phản ứng  Đo lường trung bình của
chậm đối với việc mất một số giá trị vừa xảy
mát gói ra, không chỉ
SampleRTT hiện tạ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
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
 typical value: α = 0.125 350

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


RTT (milliseconds)

300

250
RTT (milliseconds)

200

sampleRTT
EstimatedRTT
150

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 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-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ị
 TCP dùng một bộ đếm trùng
thời gian truyền lại  Bỏ qua điều khiển
 Việc truyền lại được luồng và điều khiển
kích hoạt bởi: tắc nghẽn
 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ứ timeout
tự  Khởi động lại bộ đếm thời gian

 Số thứ tự là số thứ tự nhận ack:


của byte dữ liệu đầu  Nếu xác nhận cho các
tiên trong segment segment không được xác
nhận trước đó
 Khởi động bộ đếm thời
 Cập nhật những gì được
gian nếu chưa chạy biết là đã được nhận thành
 Xem bộ định thì như là công
đối với segment sớm  Khởi động lại bộ định thì
nhất không được ACK nếu có các segment vẫn
 Khoảng thời gian hết chưa được thông báo nhận
hạn: TimeOutInterval 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


timeout

ACK=100
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 ACK
lại gói bị mất của cùng 1 dữ liệu (“3
ACK trùng”), thì gửi lại
 Phát hiện các segment chưa được
segment bị mất thông ACK với số thứ tự nhỏ
qua các 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ế không đợi đến
thì 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 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-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
to application process
bằng cách thêm giá trị rwnd
trong TCP header của các
segment từ bên nhận đến bên RcvBuffer buffered data
gửi
 Kích thước của RcvBuffer được
thiết đặt thông qua các tùy chọn của
rwnd free buffer space
socket (thông thường mặc định là
4096 byte)
 Nhiều hệ điều hành tự động điều TCP segment payloads
chỉnh RcvBuffer
 Bên gửi giới hạn khối lượng dữ Bộ đêm phía bên nhận
liệu gửi mà không cần ACK
bằng 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 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-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
Let’s talk
mạng hay không?
ESTAB  Độ chậm trễ biến thiên
OK
ESTAB  Các thông điệp được truyền
lại (như req_conn(x)) vì mất
thông điệp
 Sắp xếp lại thông điệp
choose x
req_conn(x)
 Không thể “thấy” phía bên
ESTAB kia
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 SYN(seq=x)
ngược lại với client listen

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 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-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
không giới hạn link đầu ra đượ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,
của mỗi kết nối: R/2 lin, 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: l‘in 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


Host B
đầu 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


Host B
link đầu 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
truyền lại, bao gồm
 Thời gian time out bên gửi hết
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
λin R/2

λin
timeout
copy λ'in λout

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ỏ
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
λ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
 timeout/truyền lại màu 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 nghẽn
Điều khiển tắc
có sự hỗ trợ của
nghẽn end-end :
mạng (network-
 Không có phản hồi rõ assisted) :
ràng từ mạng
 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 thống đầu cuối
hệ 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,
 Nếu đường gửi “dưới được xen kẽ với các gói
tải”: dữ liệu
 Bên gửi sẽ dùng  Các bit trong RM cell được
băng thông trống thiết lập bởi các switch
 Nếu đường gửi bị tắc  NI bit: không tăng tốc độ
nghẽn: (tắc nghẽn nhẹ)
 Bên gửi sẽ điều tiết  CI bit: tắc nghẽn rõ rệt
với tốc độ tối thiểu  Các RM cell được trả về
được bảo đảm bên gửi từ bên nhận với
nguyên vẹn các bit trên

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 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-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
đầu tiên xảy ra:

RTT
 initially cwnd = 1 MSS
 Gấp đôi cwnd mỗi RTT
 Được thực hiện bằng
cách tăng cwnd cho mỗi
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! new ACK
ACK trùng
dupACKcount++ 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
New
ACK!
timeout
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
 Nhiều ứng dụng TCP song song
thường không dùng  ứng dụng có thể mở
TCP nhiều kết nối song song
 Không muốn tốc độ giữa 2 host
bị điều tiết do điều
khiển tắc nghẽn  Trình duyệt web làm điều

 Thay bằng dùng này


UDP:  Ví dụ: đường link với tốc
 Truyền audio/video độ R đang có 9 kết nối:
với tốc độ ổn định,  ứng dụng mới yêu cầu mở 1 kết
chịu được mất gói nối TCP, có tốc độ R/10
 ứ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
Kế tiếp:
 Truyền dữ liệu tin cậy
 Tìm hiểu xong
 Điều khiển luồng (flow control) các vấn đề mạng
 Điều khiển tắc nghẽn “biên” (các tầng
(congestion control) Ứng dụng, tầng
 Khởi tạo và thực hiện trên Vận chuyển)
Internet  Chuẩn bị vào
 UDP phần mạng “lõi”
 TCP

Tầng Transport 3-110

You might also like