You are on page 1of 90

Bộ môn Công nghệ Thông tin

MẠNG MÁY TÍNH

Transport Layer

1
Chương 3: Tầng giao vận

Mục đích:
▪ Hiểu các nguyên tắc bên ▪ Giao thức tầng giao vận
trong dịch vụ của tầng trong Internet:
giao vận: • UDP: hướng không liên
• Ghép/Tách kênh kết
• Truyền dữ liệu tin cậy • TCP: hướng liên kết
• Điều khiển luồng • Điều khiển tắc nghẽn
• Điều khiển tắc nghẽn của TCP

Transport Layer 2
Tầng giao vận làm gì?

▪ Cung cấp dịch vụ vận chuyển gói tin hiệu quả, tin cậy
và tiết kiệm chi phí cho người dùng (các tiến trình
chạy ở tầng ứng dụng).
▪ Tầng giao vận quản lý dữ liệu gửi, xác định trật tự
của dữ liệu và độ ưu tiên của dữ liệu đó.

Transport Layer 3
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 4
Các giao thức và dịch vụ tầng giao vận
application
▪ Cung cấp truyền thông lô-gíc transport
network
mobile network
data link
giữa các tiến trình ứng dụng chạy physical
national or global ISP
trên các host khác nhau
▪ Các giao thức giao vận chạy trên
các hệ thống cuối
• Bên gửi: chia các bản tin ứng
dụng thành các segment, local or
regional ISP
chuyển tới tầng mạng
• Bên nhận: ghép các segment home network content
provider
thành bản tin, chuyển lên tầng network
application
datacenter
network
ứng dụng transport
network
data link
▪ Nhiều hơn một giao thức giao physical

vận cho ứng dụng enterprise


network
• Internet: TCP và UDP
Transport Layer 5
Tầng giao vận và tầng mạng

▪ Tầng mạng: truyền thông Tương tự hộ gia đình:


lô-gíc giữa các host 12 đứa trẻ nhà Ann gửi thư
▪ Tầng giao vận: truyền cho 12 đứa trẻ nhà Bill
thông lô-gíc giữa các tiến ▪ Các tiến trình = các đứa trẻ
trình
▪ Các thông điệp ứng dụng =
• dựa trên dịch vụ của các bức thư
tầng mạng
▪ host = nhà
▪ Giao thức giao vận = Ann và
Bill
▪ Giao thức tầng mạng = dịch
vụ chuyển thư
Transport Layer 6
Các hành động của tầng giao vận

Người gửi:
application ▪ được thông qua một application
app. msg
thông báo lớp ứng dụng
transport ▪ xác định giá trị trường TThhtransport
app. msg
tiêu đề phân đoạn
network (IP) ▪ tạo phân đoạn network (IP)

link ▪ chuyển phân đoạn sang IP link

physical physical

Transport Layer 7
Các hành động của tầng giao vận(tt)

Người nhận:
application ▪ Nhận phân đoạn từ IP application
▪ Kiểm tra giá trị tiêu đề
transport
app. msg ▪ Trích xuất thông báo lớp transport
ứng dụng
network (IP) network (IP)
▪ Phân kênh thông báo đến
link ứng dụng thông qua link
socket physical
physical
Th app. msg

Transport Layer 8
Hai giao thức truyền tải Internet chính
application
transport

▪ TCP: Transmission Control Protocol


network
mobile network
data link
physical
national or global ISP
• Truyền tin cậy, có thứ tự
• Điều khiển tắc nghẽn
• Điều khiển luồng
• Thiết lập kết nối
local or
▪ UDP: User Datagram Protocol regional ISP

• Truyền không có thứ tự, không home network content


tin cậy provider
network datacenter
▪ Các dịch vụ không có: application
transport
network
network
• Đảm bảo độ trễ data link
physical

• Đảm bảo băng thông enterprise


network

Transport Layer 9
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 10
Multiplexing/demultiplexing

Ghép và tách kênh


Ghép ở máy gửi:
thu thập dữ liệu từ nhiều socket, Tách ở máy nhận:
đóng bao dữ liệu với phần header Dùng thông tin của header
của tầng transport (được sử dụng để chuyển các đoạn nhận được
sau này để tách) tới đúng các socket

application

application P1 P2 application socket


P3 transport P4
process
transport network transport
network link network
link physical link
physical physical

Transport Layer 11
Thực hiện tách kênh
▪ Host nhận gói dữ liệu IP
• Mỗi gói dữ liệu có địa chỉ IP 32 bits
nguồn, địa chỉ IP đích source port # dest port #

• Mỗi gói dữ liệu mang một


Các trường header
segment của tầng giao vận
• Mỗi segment có giá trị cổng
Dữ liệu ứng dụng
nguồn và cổng đích (giá trị cổng (bản tin)
cố định cho các kiểu ứng dụng cụ
thể)
Định dạng TCP/UDP segment
▪ Host sử dụng địa chỉ IP và giá trị
cổng để chuyển segment tới socket
thích hợp
Transport Layer 12
Sự tách không kết nối
Gợi nhớ:
▪ tạo socket với các cổng ▪ khi tạo gói thông tin
(datagram) để gửi đến UDP
của máy:
socket, cần xác định
DatagramSocket mySocket1
• Địa chỉ IP đích
= new DatagramSocket(12534);
• Số cổng (port) đích đến

▪ Khi nhận host nhận được


Gói tin IP với cùng một số
phân đoạn UDP:
cổng, nhưng địa chỉ IP
▪ kiểm tra số cổng đích
nguồn khác nhau hoặc số
trong đoạn dữ liệu
cổng nguồn khác nhau được
▪ chuyển hướng đoạn UDP
chuyển tới cùng một socket
tới socket với số cổng đó
phía máy đích
Transport Layer 13
Sự tách không kết nối

DatagramSocket
serverSocket = new
DatagramSocket
DatagramSocket mySocket2 DatagramSocket mySocket1 =
= new DatagramSocket (6428); new DatagramSocket (5775);
(9157); application
application P1 application
P3 P4
transport
transport transport
network
network link network
link physical link
physical physical

source port: 6428 source port: ?


dest port: 9157 dest port: ?

source port: 9157 source port: ?


dest port: 6428 dest port: ?

Transport Layer 14
Sự tách hướng kết nối

▪ Socket TCP được xác định ▪ Máy chủ có thể hỗ trợ đồng
bởi 4 nhân tố: thời nhiều socket TCP:
• địa chỉ IP nguồn • mỗi socket được định
• số cổng nguồn danh bởi 4 nhân tố của nó
• địa chỉ IP đích ▪ Máy chủ Web có nhiều
• số cổng đích
socket khác nhau cho mỗi
khách kết nối tới
▪ máy nhận dùng cả 4 giá trị
• HTTP không ổn định sẽ có
trên để định hướng đoạn dữ
liệu tới đúng Socket phù hợp socket riêng biệt cho mỗi
người dùng

Transport Layer 15
Sự tách hướng kết nối

application
application P4 P5 P6 application
P1 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B

host: IP source IP,port: B,80 host: IP


address A dest IP,port: A,9157 source IP,port: C,5775 address
dest IP,port: B,80 C
source IP,port: A,9157
dest IP, port: B,80
source IP,port: C,9157
dest IP,port: B,80

3 phân đoạn, tất cả được định sẵn đến địa chỉ IP: B,
cổng đích: 80 là được tách kênh đến các socket khác nhau
Transport Layer 16
Tóm tắt

▪ Ghép kênh, phân kênh dựa trên phân đoạn, giá trị
trường header datagram
▪ UDP: phân kênh chỉ sử dụng số cổng đích
▪ TCP: phân kênh sử dụng 4 nhân tố: địa IP nguồn và
đích, cổng nguồn và đích.
▪ Ghép kênh / phân kênh xảy ra ở tất cả các lớp

Transport Layer 17
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 18
UDP: User Datagram Protocol
▪ Dịch vụ “best effort” (nổ lực ▪ Không thiết lập kết nối
tối đa), UDP segment có thể: (thêm độ trễ RTT)
• mất ▪ Đơn giản: không có trạng
• chuyển không theo thứ tự thái kết nối ở người gửi,
đến ứng dụng người nhận
▪ Hướng không kết nối: ▪ Kích thước header nhỏ

• Không có bắt tay giữa bên ▪ Không kiểm soát tắc nghẽn
gửi và bên nhận ▪ Có thể hoạt động khi đối
• Mỗi UDP segment được mặt với tắc nghẽn
điều khiển độc lập

Transport Layer 19
UDP: User Datagram Protocol(tt)

▪ UDP sử dụng:
• Ứng dụng phát trực tuyến đa phương tiện (khả
năng chịu mất mát, tỉ lệ nhạy cảm).
• DNS, SNMP, HTTP/3
▪ Nếu cần chuyển đáng tin cậy qua UDP (HTTP/3)
• thêm độ tin cậy cần thiết ở lớp ứng dụng
• thêm kiểm soát tắc nghẽn ở lớp ứng dụng

Transport Layer 20
UDP: User Datagram Protocol(tt)
Length tính theo UDP segment header
byte của UDP
segment,
32 bits
bao gồm header
source port # dest port #
length checksum

dữ liệu Dữ liệu đến/đi


của ứng dụng
từ lớp ứng dụng
(trọng tải)

Định dạng của UDP segment


Transport Layer 21
UDP checksum

Mục đích: phát hiện lỗi trong phân đoạn đã truyền

1st number 2nd number sum

Truyền đi: 5 6 11

Nhận: 4 6 11

Người nhận- kiểm tra tính toán Người gửi-kiểm tra tính toán
=

Transport Layer 22
UDP checksum(tt)
Mục đích: phát hiện lỗi trong segment đã truyền

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


▪ Xủ lý nội dung segment UDP ▪ Tính toán checksum của
(bao gồm các header UDP và segment nhận được
IP) dưới dạng chuỗi các số ▪ Kiểm tra xem checksum đã
nguyên 16 bit tính có bằng giá trị trường
checksum:
▪ checksum: cộng (tổng bù của
• KHÔNG BẰNG– Phát hiện
1) của nội dung segment
có lỗi
▪ Phía gửi đặt giá trị checksum
• BẰNG – không phát hiện
trong trường checksum của ra lỗi. Nhưng có thể có
UDP lỗi? 23
Transport Layer
Ví dụ Checksum
▪ Chú ý
• Khi cộng các số, giá trị bit nhớ cần thêm vào kết quả
▪ Ví dụ: cộng hai số nguyên 16 bít

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

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

Transport Layer 24
Tóm tắt UDP
▪ Giao thức “không rườm rà” :
• các phân đoạn có thể bị mất, phân phối không theo thứ tự
• dịch vụ nỗ lực tốt nhất: “gửi và hi vọng những điều tốt đẹp
nhất.
▪ UDP có những điểm cộng:
• không cần thiết lập/bắt tay (không phát sinh RTT)
• có thể hoạt động khi dịch vụ mạng bị xâm phạm
• giúp với độ tin cậy (checksum)
▪ Xây dựng chức năng bổ sung trên đầu UDP trong tầng ứng dụng
(ví dụ HTTP/3)

Transport Layer 25
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 26
Các yếu tố cấu thành giao thức giao vận

▪ Giao thức vận chuyển phải đối phó với các vấn đề về
• điều khiển lỗi
• đánh số thứ tự gói tin
• điều khiển luồng dữ liệu.
▪ Khi một tiến trình mong muốn thiết lập nối kết với một
tiến trình khác từ xa, nó phải chỉ ra rằng nó muốn kết
nối với tiến trình nào
▪ → thiết lập nối kết

Transport Layer 27
Thiết lập nối kết

▪ Một phiên thiết lập nối kết sẽ diễn ra như sau:


• một bên sẽ gởi yêu cầu nối kết (Connection Request –
CR) đến bên kia
• bên kia sẽ gởi một trả lời chấp nhận nối kết
(Connection Accepted – CA).
▪ Vấn đề phát sinh khi mạng làm mất, tồn trữ quá lâu hay
làm trùng lắp các gói tin do hai thực thể vận chuyển
trao đổi qua lại với nhau!

Transport Layer 28
Thiết lập nối kết (tt)
▪ Giải thuật thiết lập nối kết phổ biến nhất là giải thuật
bắt tay 3 chiều (three-way hand-shake).

Transport Layer 29
Giải phóng nối kết

▪ Hai kiểu giải phóng nối kết:


• dị bộ
• đồng bộ.
▪ Kiểu dị bộ: khi một bên cắt kết nối, kết nối sẽ bị
hủy bỏ (giống như trong hệ thống điện thoại).
▪ Kiểu đồng bộ: khi cả hai đồng ý hủy bỏ nối kết, nối
kết mới thực sự được hủy.

Transport Layer 30
Giải phóng nối kết(tt)
▪ Kiểu dị bộ:
• Giải phóng nối kết kiểu dị bộ có thể dẫn đến mất
dữ liệu.

Transport Layer 31
Giải phóng nối kết(tt)

▪ Cần một giải pháp để tránh mất dữ liệu -> giải phóng
nối kết đồng bộ, trong đó, mỗi host đều có trách
nhiệm trong việc giải phóng nối kết.
▪ Một nút phải tiếp tục nhận dữ liệu sau khi đã gởi đi
yêu cầu giải phóng nối kết (DISCONNECT REQUEST –
DR) đến bên đối tác, cho đến khi nhận được chấp
thuận hủy bỏ nối kết của bên đối tác đó.

Transport Layer 32
Khái niệm về truyền dữ liệu tin cậy

Kênh có lỗi bit, không bị mất thông tin


▪ Phát hiện lỗi -> checksum
▪ Làm thế nào để báo cho bên gửi?
• ACK (acknowledgements): gói tin nhận thành công
• NAK (negative acknowledgements): gói tin bị lỗi
▪ Truyền lại nếu NAK

Transport Layer 33
Khái niệm về truyền dữ liệu tin cậy(tt)
▪ Hoạt động

Transport Layer 34
Khái niệm về truyền dữ liệu tin cậy(tt)
▪ Lỗi ACK/NAK
• Truyền lại
• Xử lý lặp gói tin?
• Thêm seq#

Transport Layer 35
Khái niệm về truyền dữ liệu tin cậy(tt)

Kênh có lỗi bit, bị mất thông tin


▪ Dữ liệu và ACK có thể bị mất
▪ Thời gian chờ?
• Ít nhất là 1 RTT
• Cần 1 timer để gửi mỗi gói tin
▪ Gói tin đến đích và ACK bị mất?
• sử dụng số hiệu gói tin

Transport Layer 36
Khái niệm về truyền dữ liệu tin cậy(tt)
Mất gói tin gửi đi

Transport Layer 37
Khái niệm về truyền dữ liệu tin cậy(tt)
Mất ACK, timeout sớm

Transport Layer 38
Các giao thức Pipeline
Pipeline: Bên gửi cho phép nhiều, tới các gói tin được ACK
(acknowledgements)
▪ Dải giá trị liên tục phải tăng
▪ Bộ đệm tại bên gửi và bên nhận

▪ Hai hình thức chung của các giao thức pipeline:


go-Back-N, selective repeat
Transport Layer 39
Go-Back-N
đã gửi,
đang gửi
đã nhận ACK
đã gửi,
chưa gửi
chưa nhận ACK

Sender Receiver
▪ Chỉ gửi các gói tin với số hiệu ▪ Chỉ gửi 1 xác nhận ACK(i) cho gói
trong cửa sổ, “dịch” cửa sổ tin nhận được theo đúng thứ tự.
sang phải (i+1) mỗi khi nhận ▪ Các gói tin không theo thứ tự:
được ACK(i) • Hủy bỏ -> không lưu vào vùng
▪ ACK(n): xác nhận cho các gói đệm
tin với số hiệu cho đến n • Gửi ACK xác nhận lại gói tin
▪ Khi có timeout: truyền lại tất còn đúng thứ tự
cả các gói tin có số hiệu lớn
hơn i trong cửa sổ.
Transport Layer 40
Go–Back-N(tt)

▪ ví dụ: bên nhận phát hiện ra gói số 2 bị lỗi nó bỏ qua các gói sau đó
(3,4,5,6,7,8), chỉ chờ nhận lại gói số 2.
▪ Phía bên gởi chờ báo nhận từ bên nhận cho đến khi quá thời gian, nó
sẽ thực hiện gởi lại các gói 2, 3, 4, 5, 6, ....
Transport Layer 41
Selective Repeat
▪ Bên nhận ACK riêng cho mọi gói tin nhận đúng
• Đưa gói tin vào vùng đệm nếu cần, có thể sắp thứ tự
chuyển lên lớp trên
▪ Bên gửi chỉ gửi lại gói tin khi không nhận ACK
• Bộ đếm thời gian bên gửi cho mỗi gói tin không
được ACK
▪ Cửa sổ bên nhận
• N seq # liên tục
• Giới hạn seq #s gửi, gói tin không ACK

Transport Layer 42
Selective repeat: cửa sổ bên gửi, bên nhận

không theo thứ tự Chấp nhận


(lưu bộ đệm), nhưng (trong window)
đã nhận ACK
Chưa gửi
Chưa nhận

▪ Gửi: chỉ gửi gói tin trong window


▪ Nhận: chỉ nhận gói tin trong cửa số nhận
• Sử dụng bộ đệm để lưu tạm thời các gói tin chưa theo thứ tự
Transport Layer 43
Selective repeat(tt)
Bên gửi Bên nhận
Dữ liệu từ trên: Gói tin i [rcvbase, rcvbase+N-1]
▪ Nếu có seq # tiếp trong cửa ▪ Gửi ACK(i)
sổ, gửi gói tin
▪ Không đúng thứ tự: lưu vào
timeout(n): vùng đệm
▪ Gửi lại gói tin i, khởi tạo lại ▪ Đúng thứ tự: chuyển lên
bộ đếm thời gian (cũng có thể đưa vào vùng
ACK(n) [sendbase,sendbase+i]: đệm, xếp thứ tự), cửa sổ
▪ Đánh dấu gói tin n đã nhận chuyển tiếp tới gói tin đã
▪ Nếu i gói tin chưa nhận được
nhận tiếp
ACK nhỏ nhất, dịch cửa sổ
tới seq # chưa nhận được
ACK tiếp theo
Transport Layer 44
Selective Repeat(tt)

sender window (N=4) sender receiver


012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, buffer,
012345678 rcv ack0, send pkt4 send ack3
012345678 rcv ack1, send pkt5
receive pkt4, buffer,
record ack3 arrived send ack4
receive pkt5, buffer,
pkt 2 timeout send ack5
012345678 send pkt2
012345678 (but not 3,4,5)
012345678 rcv pkt2; deliver pkt2,
012345678 pkt3, pkt4, pkt5; send ack2

Q: what happens when ack2 arrives?

Transport Layer 45
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 46
Dịch vụ hướng kết nối TCP

▪ Cấu trúc TCP segment


▪ Truyền dữ liệu tin cậy
▪ Điều khiển luồng
▪ Quản lý kết nối

Transport Layer 47
TCP: Tổng quan RFC: 793, 1122, 2018, 5681,7323

▪ Point-to-point: ▪ Dữ liệu truyền song công:


• Một bên gửi, một bên Luồng dữ liệu truyền hai chiều

nhận trên cùng một kết nối
▪ Tin cậy, truyền dữ liệu • MSS: maximum segment size
theo dòng byte(byte ▪ Hướng liên kết:
stream) • Bắt tay (trao đổi các bản tin
▪ Pipeline: điều khiển), bên gửi khởi đầu
• Điều khiển tắc nghẽn và ▪ Điều khiển luồng:
điều khiển luồng của TCP • Bên gửi không gửi quá khả
thiết lập giá trị window năng bên nhận
size
▪ Vùng đệm gửi và nhận

Transport Layer 48
Cấu trúc của TCP

32 bits

source port # dest port # đếm số byte của dữ liệu


ACK: seq # dự kiến tiếp theo sequence number vào luồng byte
(byte)
acknowledgement number
head not
length (of TCP header) len used C E U A P R S F receive window Kiểm soát luồng:
Kiểm tra Internet checksum Urg data pointer nhận byte sẵn sàng
options (chiều dài thay đổi)
chấp nhận
C, E: thông báo tắc nghẽn
TCP options
application dữ liệu được gửi
RST, SYN, FIN: quản lý kết nối data bởi ứng dụng vào
(chiều dài thay đổi)) TCP socket

Transport Layer 49
TCP sequence numbers, ACK

outgoing segment from sender


Sequence numbers: source port # dest port #

• Luồng byte “số” của byte sequence


number
acknowledgement

đầu tiên trong dữ liệu của checksum


numberrwnd
urg pointer

segments window size


N

Acknowledgements:
• seq # của byte tiếp theo sender sequence number space

mong nhận sent sent, not- usable not


ACKed yet ACKed but not usable
• ACK tích lũy (“in-flight”) yet sent

outgoing segment from receiver


source port # dest port #
Q: bên nhận xử lý các phân đoạn sequence
number
không theo thứ tự acknowledgement
Anumber rwnd

• A: tùy thuộc vào cài đặt checksum urg pointer

Transport Layer 50
TCP sequence numbers, ACK

Host A Host B

User types‘C’
Seq=42, ACK=79, data = ‘C’
host ACKs đã nhận ‘C’
báo lại
Seq=79, ACK=43, data = ‘C’
host ACKs đã
nhận ‘C’ báo lại
Seq=43, ACK=80

Transport Layer 51
RTT và Timeout trong TCP

Q: Thiết lập giá trị timeout Q: Ước lượng RTT?


của TCP? ▪ SampleRTT: đo thời gian từ
▪ Lớn hơn RTT, RTT thay đổi truyền segment tới khi ACK
▪ Quá nhỏ: timeout sớm, được nhận
Không cần thiết truyền lại • Bỏ qua truyền lại
▪ Quá lớn: xử lý chậm các ▪ SampleRTT thay đổi, ước
segment bị mất lượng RTT chính xác hơn
• Giá trị trung bình của
nhiều giá trị đo gần đó

Transport Layer 52
RTT và timeout trong TCP
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 làm giảm tốc độ theo cấp số nhân
• Giá trị thường dùng:  = 0.125 RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

350
RTT (milliseconds)

300

250
RTT (milliseconds)

200

150
sampleRTT
EstimatedRTT
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds) Transport Layer 53
time (seconds)
SampleRTT Estimated RTT
RTT và timeout của TCP(tt)
Thiết lập timeout
Khoảng thời gian timeout (time interval)
▪ EstimatedRTT cộng biên an toàn
•Sự thay đổi lớn của EstimatedRTT -> giá trị biên an toàn lớn
▪ Ước lượng độ lệch SampleRTT kế thừa từ EstimatedRTT:
DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT|

(thường,  = 0.25)

Transport Layer 54
Dịch vụ hướng kết nối TCP

▪ Cấu trúc TCP segment


▪ Truyền dữ liệu tin cậy
▪ Điều khiển luồng
▪ Quản lý kết nối

Transport Layer 55
Truyền dữ liệu tin cậy của TCP
▪ TCP tạo dịch vụ rdt ▪ Truyền lại khi:
trên dịch vụ không tin • Có sự kiện timeout
cậy của IP • Lặp ack
▪ Pipelined segment
▪ Xét trường hợp bên gửi:
▪ ACK tích lũy
• Bỏ qua điều khiển
luồng, điều khiển tắc
nghẽn

Transport Layer 56
Các sự kiện của bên gửi TCP
Nhận dữ liệu từ ứng dụng: Timeout:
▪ Tạo segment với seq # ▪ Truyền lại segment bị quá hạn
▪ seq # là giá trị luồng ▪ Tính timeout interval cho
byte của byte đầu tiên segment truyền lại
trong segment ▪ Khởi tạo lại bộ đếm thời gian
▪ Khởi tạo bộ đếm thời Nhận Ack:
gian ▪ Nếu segment trước đó chưa
▪ Chuyển segment tới IP được ACK
▪ Tính NextSeqNum • Cập nhật để biết đã có ack
▪ Nếu segment trước đó có ACK
▪ Tăng bộ đếm ACK lặp, lặp 3
lần thì truyền lại

Transport Layer 57
TCP: kịch bản 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
Gửi ACK tích lũy
SendBase=120 cho 120
ACK=100
ACK=120

SendBase=120

Kịch bản bị mất ACK Hết thời gian sớm

Transport Layer 58
TCP: kịch bản truyền lại(tt)

Host A Host B

Seq=92, 8 bytes of data

Seq=100, 20 bytes of data


ACK=100
X
ACK=120

Seq=120, 15 bytes of data

ACK tích lũy

Transport Layer 59
Dịch vụ hướng kết nối TCP

▪ Cấu trúc segment


▪ Truyền dữ liệu tin cậy
▪ Điều khiển luồng
▪ Quản lý kết nối

Transport Layer 60
Điều khiển luồng TCP

Điều khiển luồng


▪ Bên nhận của kết nối
Bên gửi không gửi làm tràn
TCP có buffer nhận: vùng đệm bên nhận: truyền
quá nhiều, quá nhanh

▪ Dịch vụ tương ứng tốc


độ: tương ứng tốc độ
gửi với tốc độ bên nhận

Transport Layer 61
Điều khiển luồng TCP

▪ Bên nhận thông tin về


không gian còn thừa
trong giá trị của
RcvWindow trong
segment
(Giả sử bên nhận bỏ segment ▪ Bên gửi hạn chế dữ liệu
không đúng thứ tự) chưa ACK theo
▪ Không gian còn thừa trong RcvWindow
buffer • Đảm bảo buffer nhận
RcvWindow
không bị tràn
= RcvBuffer-(LastByteRcvd – LastByteRead)
▪ RcvWindow = 0 ? LastByteSent - LastByteAcked
<= RcvWindow

Transport Layer 62
Dịch vụ hướng kết nối TCP

▪ Cấu trúc segment


▪ Truyền dữ liệu tin cậy
▪ Điều khiển luồng
▪ Quản lý kết nối

Transport Layer 63
Quản lý kết nối của TCP
Thiết lập kết nối:
Nhắc lại: Bên gửi, bên nhận của TCP thiết lập kết nối trước khi trao
đổi dữ liệu
▪ Khởi tạo giá trị:
• seq. #
• buffer, thông tin điều khiển luồng (ví dụ: RcvWindow)
▪ Client: khởi tạo kết nối
Socket clientSocket = new Socket("hostname","port number");
▪ Server: liên lạc bởi client
Socket connectionSocket = welcomeSocket.accept();

Transport Layer 64
Quản lý kết nối của TCP(tt)
Bắt tay 3 đường:
Bước 1: Client A gửi TCP SYN
segment tới server
• Chỉ định seq # ban đầu
• Không có dữ liệu
Bước 2: Server B nhận SYN,
trả lời với SYNACK segment
• Server cấp phát buffer
• Server khởi tạo seq. #
Bước 3: Client nhận SYNACK,
trả lời bằng ACK segment,
có thể chứa dữ liệu
Transport Layer 65
Quản lý kết nối của TCP(tt)
Đóng kết nối:
Bước 3: client nhận FIN, trả
client đóng socket: lời bằng ACK.
clientSocket.close();
▪ Thời gian đợi: trả lời
Bước 1: client gửi TCP FIN bằng ACK báo đã nhận
tới server FIN
Bước 2: server nhận FIN, Bước 4: server, nhận ACK.
trả lời bằng ACK. Đóng Kết nối đóng.
kết nối, gửi FIN

Transport Layer 66
Quản lý kết nối của TCP(tt)

Transport Layer 67
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 68
Nguyên tắc điều khiển tắc nghẽn
Tắc nghẽn (congestion):
▪ Quá nhiều nguồn gửi quá nhiều dữ liệu nhanh quá khả
năng điều khiển của mạng
▪ Khác điều khiển luồng (flow)
▪ Đặc điểm:
• Mất gói tin (tràn buffer tại router)
• Độ trễ tăng (xếp hàng tại buffer của router)
Kiểm soát tắc nghẽn:
quá nhiều người gửi, gửi
quá nhanh

Điều khiển luồng: gửi


quá nhanh so với người nhân

Transport Layer 69
Nguyên nhân, chi phí của tắc nghẽn: Kịch bản 1

▪ Hai đối tượng gửi, original data: lin throughput: lout


hai đối tượng Host A
nhận
infinite shared
▪ Một router, vùng output link buffers

đệm không giới R


R
hạn
▪ Không truyền lại
Host B

R/2
lout

delay
throughput:

lin R/2
lin R/2
• Tối đa thông lượng có thể đạt được • Độ trễ lớn khi xảy ra tắc nghẽn

Transport Layer 70
Nguyên nhân, chi phí của tắc nghẽn: Kịch bản 2
▪ Một router, vùng đệm giới hạn
▪ Bên gửi truyền lại các packet bị hết time 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

Host A lin : dữ liệu gốc


lout
l'in: dữ liệu gốc, cộng
với dữ liệu truyền lại

R R

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


ra được chia sẻ giới hạn
Transport Layer 71
Nguyên nhân, chi phí của tắc nghẽn: Kịch bản 2
▪ Các packet có thể bị mất (bỏ) tại router do tràn bộ nhớ đệm
▪ Bên gửi chỉ gửi lại các gói đã mất

Host A lin : dữ liệu gốc


copy l'in: dữ liệu gốc, cộng
với dữ liệu truyền lại

no buffer space!

R R

Host B finite shared output


link buffers

Transport Layer 72
Nguyên nhân, chi phí của tắc nghẽn: Kịch bản 2(tt)

Thực tế: trùng lặp không cần thiết


▪ packet có thể bị mất, bị rơi tại
router do bộ đệm đầy - yêu cầu
truyền lại
▪ thời gian của người gửi có thể
hết sớm, gửi hai giống nhau, cả
hai đều được gửi
Host A lin : dữ liệu gốc
timeou
copy
t l'in: dữ liệu gốc, cộng
với dữ liệu truyền lại

free buffer space!


R R

Host B finite shared output


link buffers

Transport Layer 73
Nguyên nhân, chi phí của tắc nghẽn: Kịch bản 2(tt)

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


▪ Nhiều việc hơn (do truyền lại) cho goodput
▪ Truyền lại không cần thiết: nhiều bản sao của packet
-> giảm goodput

Transport Layer 74
Các cách tiếp cận để điều khiển tắc nghẽn

Hai cách tiếp cận chính để điều khiển tắc nghẽn

Điều khiển tắc nghẽn end-end

▪ Không có phản hồi chính


thức từ mạng
▪ Tắc nghẽn suy ra từ hệ ACKs
data data
ACKs
thống cuối theo dõi mất gói
và độ trễ
▪ Cách tiếp cận sử dụng bởi
TCP

Transport Layer 75
Các cách tiếp cận để điều khiển tắc nghẽn(tt)

Hai cách tiếp cận chính để điều khiển tắc nghẽn

Điều khiển tắc nghẽn với sự giúp đỡ của mạng

▪ Router cung cấp phản hồi tới


Thông tin tắc nghẽn rõ ràng
hệ thống cuối
• Một bít chỉ ra tắc nghẽn
(SNA, DECbit, TCP/IP, ECN, data data
ACKs
ATM) ACKs

• Chỉ rõ tốc độ bên gửi nên gửi

Transport Layer 76
Trường hợp nghiên cứu: Điều khiển tắc nghẽn ATM ABR

ABR: Available Bit Rate: RM cell (Resource Management):


▪ “Dịch vụ mềm dẻo” ▪ Được gửi bởi bên gửi, rải rác
▪ Nếu đường đi của bên cùng với cell dữ liệu
gửi chưa đến giới hạn tải: ▪ Các bít trong RM cell do switch
• Bên gửi nên sử dụng thiết lập (có sự tham gia của
băng thông khả dụng mạng)
▪ Nếu đường đi của bên • NI bit: không tăng tốc độ (tắc
gửi bị tắc nghẽn: nghẽn nhẹ)
• Bên gửi điều chỉnh tốc • CI bit: tắc nghẽn
độ đảm bảo tối thiểu ▪ RM cell trả về cho bên gửi bởi
bên nhận với các bít không
thay đổi

Transport Layer 77
Trường hợp nghiên cứu: Điều khiển tắc nghẽn ATM ABR(tt)

▪ Hai byte ER (Explicit Rate) trong RM cell


• Switch tắc nghẽn có thể giảm giá trị ER trong cell
• Vì vậy, tốc độ gửi của bên gửi tối thiểu tốc độ hỗ trợ trên
đường
▪ Bít EFCI trong cell dữ liệu: đặt bằng 1 trong switch bị tắc nghẽn
• Nếu cell dữ liệu, trước cell RM, có EFCI thiết lập, bên gửi thiết
lập bít CI trong cell RM trả về
Transport Layer 78
Chương 3: Tầng giao vận

▪ Các dịch vụ tầng giao vận


▪ Ghép và tách kênh
▪ Giao vận không kết nối: UDP
▪ Các nguyên tắc của truyền dữ liệu tin cậy
▪ Dịch vụ hướng kết nối: TCP
▪ Các nguyên tắc của điều khiển tắc nghẽn
▪ Điều khiển tắc nghẽn của TCP

Transport Layer 79
TCP điều khiển tắc nghẽn: AIMD
AIMD (Additive Increase Multiplicative Decrease): 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 có thể tằng tốc độ gửi cho đến khi xảy
ra mất packet (tắc nghẽn), sau đó giảm tốc độ gửi khi xảy ra sự
kiện mất
Additive Increase
Multiplicative Decrease
Tăng tốc độ gửi lên 1 MSS
(maximum segment size) mỗi Giảm một nữa tốc độ gửi ở mỗi
RTT cho đến khi phát hiện thấy sự kiện mất
mất mát.

AIMD sawtooth
TCP sender Sending

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

time
Transport Layer: 80
TCP điều khiển tắc nghẽn: AIMD(tt)
Multiplicative decrease: tốc độ gửi là
▪ Giảm một nửa khi phát hiện mất bằng ba phần ACK trùng lặp
(TCP Reno)
▪ Giảm xuống 1 MSS khi phát hiện mất mát do timeout (TCP Tahoe)

Tại sao AIMD?


▪ AIMD: là một thuật toán phân tán không đồng bộ- đã được
chứng minh:
• Tối ưu hóa tốc độ luồng tắc nghẽn trên toàn mạng,
• có đặc tính ổn định mong muốn

Transport Layer 81
TCP điều khiển tắc nghẽn: chi tiết

sender sequence number space TCP hành vi gửi:


cwnd
▪ Ước lượng: gửi cwnd bytes,
đợi RTT cho ACKS, sau đó
gửi thêm bytes
last byte
available but
ACKed sent, but not-
~
cwnd
yet ACKed not used TCP rate ~ bytes/sec
(“in-flight”) last byte sent RTT

▪ TCP bên gửi giới hạn truyền tải: LastByteSent- LastByteAcked < cwnd

▪ Cwnd là được điều chỉnh động để đáp ứng với tình trạng tắc
nghẽn mạng được quan sát (thực hiện kiểm soát tắc nghẽn TCP)

Transport Layer 82
TCP slow start
▪ Khi kết nối bắt đầu, tang tốc
dộ theo cấp số nhân cho đến Host A Host B

khi sự kiện mất packet xảy ra:


• initially cwnd = 1 MSS

RTT
• gấp đôi cwnd mỗi RTT
• được thực hiện bằng cách
tang cwnd cho mỗi ACK
nhận được

▪ Tóm lại: tốc độ ban đầu time


chậm, nhưng sẽ tăng dần
theo cấp số nhân

Transport Layer 83
TCP: phát hiện, phản ứng khi mất gói
▪ Mất gói được khi timeout:
• Thiết lập cwnd = 1 MSS
• Sau đó kích thước cửa số tăng theo cấp số nhân đến
ngưỡng, sau đó sẽ tăng theo tuyến tính
▪ Mất gói được xác định khi 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ị giảm một nửa sau đó tăng theo tuyến tích
▪ TCP Tahoe luôn thiết lập cwnd bằng 1 (timeout hoặc 3 ACK trùng
nhau)

Transport Layer 84
Chuyển từ slow start sang CA
Congestion Avoidance (CA): Tránh tắc nghẽn
Q: Khi nào tăng theo số mũ Thực hiện:
chuyển thành theo tuyến tính? ▪ Thay đổi ssthresh
A: Khi cwnd có giá trị bằng 1/2 ▪ Tại sự kiện mất gói, ssthresh
giá trị của nó trước khi đặt bằng ½ cwnd ngay trước
timeout. sự kiện mất gói

Transport Layer 85
Tránh tắc nghẽn CA

▪ Tăng cwnd theo cấp số cộng


sau khi đạt tới ssthresh
▪ Khi bên nhận được ACK, tăng
cwnd them 1 MSS

Transport Layer 86
Hồi phục nhanh – Fast recovery

▪ Nút nhận: nhấn được 1 gói tin không đúng thứ tự thì gửi liên tiếp
3 ACK giống nhau
▪ Nút gửi: nhận được 3 ACK giống nhau
• TCP thiết lập ssthresh xuống còn 1/2 giá trị hiện tại của cwnd
• TCP đặt cwnd về giá trị hiện tại của ngưỡng mới
• TCP chuyển trạng thái CA

Transport Layer 87
Hồi phục nhanh – Fast recovery(tt)

Transport Layer 88
Tóm tắt: TCP điều khiển tắc nghẽn
New
New ACK!
ACK! new ACK
duplicate ACK
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
L Truyền segment(s) mới, khi được phép
cwnd = 1 MSS
ssthresh = 64 KB cwnd > ssthresh
dupACKcount = 0
slow L congestion
start timeout avoidance
ssthresh = cwnd/2
cwnd = 1 MSS duplicate ACK
timeout dupACKcount = 0 dupACKcount++
ssthresh = cwnd/2 Truyền lại segment thiếu
cwnd = 1 MSS
dupACKcount = 0
Truyền lại segment thiếu New
timeout
ACK!
ssthresh = cwnd/2
cwnd = 1 New ACK
dupACKcount = 0
cwnd = ssthresh dupACKcount == 3
dupACKcount == 3 Truyền lại segment thiếu dupACKcount = 0
ssthresh= cwnd/2 ssthresh= cwnd/2
cwnd = ssthresh + 3 cwnd = ssthresh + 3
Truyền lại segment thiếu Truyền lại segment thiếu
fast
recovery
duplicate ACK
cwnd = cwnd + MSS
Truyền segment(s) mới, khi được phép

Transport Layer 89
Thông lượng của TCP
▪ Thông lượng trung bình của TCP từ chức năng của window
size và RTT?
• Bỏ qua slow start
▪ Cho W là window size khi xảy ra mất gói.
▪ Khi window là W, thông lượng là W/RTT
▪ Ngay sau mất gói, window giảm tới W/2, thông lượng
W/2RTT.
▪ Thông lượng trung bình: .75 W/RTT

Transport Layer 90

You might also like