Bài giảng Mạng máy tính - Chương 3: Tầng giao vận

3.1 Các dịch vụ tầng

giao vận

‰ 3.2 Multiplexing và

demultiplexing

‰ 3.3 Dịch vụ không

hướng kết nối: UDP

‰ 3.4 Các nguyên tắc của

truyền dữ liệu tin cậy

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

‰ 3.6 Các nguyên tắc của

điều khiển tắc nghẽn

‰ 3.7 Điều khiển tắc nghẽn

của TC

pdf 104 trang yennguyen 3480
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chương 3: Tầng giao vận", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Mạng máy tính - Chương 3: Tầng giao vận

Bài giảng Mạng máy tính - Chương 3: Tầng giao vận
1-1
Mạng máy tính
Bộ môn Kỹ thuật máy tính và Mạng
Khoa Công nghệ Thông tin
Đại học Sư phạm Hà Nội
1-2
Chương 3: Tầng giao vận
Mục đích:
‰ Hiểu các nguyên tắc
bên trong dịch vụ của
tầng giao vận:
 Multiplexing/Demultiple
xing
 Truyền dữ liệu tin cậy
 Điều khiển luồng
 Điều khiển tắc nghẽn
‰ Học về giao thức tầng giao
vận trong Internet:
 UDP: không hướng kết nối
 TCP: hướng kết nối
 Điều khiển tắc nghẽn của
TCP
1-3
Chương 3: Tầng giao vận
‰ 3.1 Các dịch vụ tầng
giao vận
‰ 3.2 Multiplexing và
demultiplexing
‰ 3.3 Dịch vụ không
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của 
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn 
của TCP
1-4
Các giao thức và dịch vụ tầng giao vận
‰ Cung cấp truyền thông lô-gíc 
giữa các tiến trình ứng dụng 
chạy 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, chuyển tới tầng 
mạng
 Bên nhận: ghép các
segment thành bản tin, 
chuyển lên tầng ứng dụng
‰ Nhiều hơn một giao thức giao 
vận cho ứng dụng
 Internet: TCP và UDP
application
transport
network
data link
physical
application
transport
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physicalnetwork
data link
physical
1-5
Tầng giao vận và tầng mạng
‰ Tầng mạng: truyền thông lô-
gíc giữa các host
‰ Tầng giao vận: truyền thông
lô-gíc giữa các tiến trình
 dựa trên dịch vụ của tầng
mạng
Tương tự hộ gia đình:
12 đứa trẻ gửi thư cho 12 đứa
trẻ
‰ Các tiến trình = các đứa trẻ
‰ Các bản tin ứng dụng = các
bức thư
‰ host = nhà
‰ Giao thức giao vận = Ann 
và Bill
‰ Giao thức tầng mạng = dịch
vụ chuyển thư
1-6
Các giao thức tầng giao vận của Internet 
‰ Truyền tin cậy, có thứ tự
(TCP)
 Điều khiển tắc nghẽn
 Điều khiển luồng
 Thiết lập kết nối
‰ Truyền không có thứ tự, 
không tin cậy: UDP
‰ Các dịch vụ không có: 
 Đảm bảo độ trễ
 Đảm bảo băng thông
application
transport
network
data link
physical
application
transport
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physicalnetwork
data link
physical
1-7
Chương 3: Tầng giao vận
‰ 3.1 Các dịch vụ tầng
giao vận
‰ 3.2 Multiplexing và
demultiplexing
‰ 3.3 Dịch vụ không
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn
của TCP
1-8
Multiplexing/demultiplexing
application
transport
network
link
physical
P1 application
transport
network
link
physical
application
transport
network
link
physical
P2P3 P4P1
host 1 host 2 host 3
= tiến trình= socket
Chuyển các segment đã nhận
tới đúng socket
Demultiplexing tại host nhận:
Thu thập dữ liệu từ các socket,
đóng gói dữ liệu bởi header 
(sau đó sẽ dùng để
demultiplexing)
Multiplexing tại host gửi:
1-9
Thực hiện demultiplexing
‰ Host nhận gói dữ liệu IP 
 Mỗi gói dữ liệu có địa chỉ IP 
nguồn, địa chỉ IP đích
 Mỗi gói dữ liệu mang một
segment của tầng giao vận
 Mỗi segment có giá trị cổng
nguồn và cổng đích (giá trị
cổng cố định cho các kiểu
ứng dụng cụ thể)
‰ Host sử dụng địa chỉ IP và giá
trị cổng để chuyển segment tới
socket thích hợp
source port # dest port #
32 bits
Dữ liệu ứng dụng
(bản tin)
Các trường header 
Định dạng TCP/UDP segment
1-10
Chương 3: Tầng giao vận
‰ 3.1 Các dịch vụ tầng
giao vận
‰ 3.2 Multiplexing và
demultiplexing
‰ 3.3 Dịch vụ không
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn
của TCP
1-11
UDP: User Datagram Protocol [RFC 768]
‰ Dịch vụ “best effort”, UDP 
segment có thể:
 mất
 chuyển không theo thứ
tự đến ứng dụng
‰ Không hướng kết nối:
 Không có bắt tay giữa
bên gửi và bên nhận
 Mỗi UDP segment được
điều khiển độc lập
Tại sao có UDP?
‰ Không thiết lập kết nối (thiết
lập có thể tăng độ trễ)
‰ Đơn giản: không có trạng
thái kết nối tại bên gửi, bên
nhận
‰ Header của segment nhỏ
‰ Không điều khiển tắc nghẽn: 
UDP có thể gửi ra với tốc độ
mong muốn
1-12
UDP (tiếp)
‰ Thường sử dụng cho các
ứng dụng đa phương tiện
truyền dòng
 Chấp nhận mất gói
 Nhạy cảm với tốc độ
‰ Ứng dụng khác sử
dụng UDP
 DNS
 SNMP
‰ Truyền tin cậy qua UDP: 
thêm sự tin cậy tại tầng ứng
dụng
 Khôi phục lỗi do ứng
dụng cụ thể
source port # dest port #
32 bits
dữ liệu
của ứng dụng
(bản tin)
Định dạng của UDP segment
length checksum
Length tính
theo byte của
UDP 
segment,
bao gồm
header
1-13
UDP checksum
Bên gửi:
‰ Đối xử với nội dung các
segment như chuỗi các số
nguyên 16 bít
‰ checksum: cộng (tổng bù
của 1) của nội dung 
segment
‰ Phía gửi đặt giá trị
checksum trong trường
checksum của UDP
Bên nhận:
‰ Tính toán checksum của
segment nhận được
‰ Kiểm tra xem checksum đã
tính có bằng giá trị trường
checksum:
 KHÔNG BẰNG– Phát hiện
có lỗi
 BẰNG – không phát hiện ra
lỗi. Nhưng có thể có lỗi?
Mục đích: phát hiện lỗi trong segment đã truyền
1-14
Ví dụ Checksum
‰ Chú ý
 Khi cộng các số, giá trị bít 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
1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
Tổng
checksum
1-15
Chương 3: Tầng giao vận
‰ 3.1 Các dịch vụ tầng
giao vận
‰ 3.2 Multiplexing và
demultiplexing
‰ 3.3 Dịch vụ không
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn
của TCP
1-16
Các nguyên tắc của truyền dữ liệu tin cậy
‰ Tầm quan trọng của tầng liên kết dữ liệu, tầng giao vận, tầng
ứng dụng
‰ Đặc điểm của kênh truyền không tin cậy xác định sự phức tạp
của giao thức truyền dữ liệu tin cậy (rdt)
(a) Dịch vụ cung cấp (b) Cài đặt dịch vụ
1-17
Truyền dữ liệu tin cậy
Bên gửi Bên nhận
rdt_send(): được gọi bởi tầng trên. 
Dữ liệu đã chuyển được chuyển tới
tầng trên của bên nhận
udt_send(): gọi bởi rdt, để
truyền gói tin qua kênh không
tin cậy tới bên nhận
rdt_rcv(): gọi khi gói tin đến phía
bên nhận
deliver_data(): được gọi bởi rdt
để truyền dữ liệu lên tầng trên
1-18
Truyền dữ liệu tin cậy
‰ Sử dụng máy trạng thái hữu hạn (FSM) để xử lý
bên nhận và bên gửi
state
1
state
2
Sự kiện gây ra chuyển trạng thái
Hành động khi chuyển trạng thái
state: khi trong 1 trạng
thái, trạng thái tiếp
theo là duy nhất đối
với 1 sự kiện
sự kiện
hành động
1-19
rdt1.0: Truyền tin cậy qua kênh tin cậy
‰ Tầng dưới là truyền tin cậy
 Không có lỗi bít
 Không mất gói tin
‰ FSM của bên gửi và bên nhận:
 Bên gửi chuyển dữ liệu xuống kênh phía dưới
 Bên nhận đọc dữ liệu từ kênh bên dưới
Đợi cuộc
gọi từ
phía trên packet = make_pkt(data)
udt_send(packet)
rdt_send(data)
extract (packet,data)
deliver_data(data)
đợi cuộc
gọi từ
phía dưới
rdt_rcv(packet)
Bên gửi Bên nhận
1-20
Rdt2.0: kênh có lỗi bít
‰ Kênh phía dưới có thể có lỗi
 checksum để phát hiện lỗi
‰ Cách khôi phục lỗi
 Báo nhận (ACK): bên nhận chỉ rõ cho bên gửi gói tin nhận
thành công
 Báo lỗi (NAK): bên nhận chỉ rõ cho bên gửi gói tin có lỗi
 Bên nhận truyền lại gói tin nếu nhận NAK
‰ Cơ chế rdt2.0:
 Phát hiện lỗi
 Phản hồi cho bên nhận: bản tin điều khiển (ACK, NAK: bên
nhận -> bên gửi)
1-21
rdt2.0: Máy trạng thái
Đợi cuộc
gọi từ trên
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && 
corrupt(rcvpkt)
Đợi ACK 
hoặc
NAK
Đợi cuộc
gọi từ phía
dướiBên gửi
Bên nhận
rdt_send(data)
1-22
rdt2.0: Trường hợp không lỗi
đợi cuộc
gọi từ phía
trên
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && 
corrupt(rcvpkt)
đợi ACK 
hoặc
NAK
đợi cuộc
gọi từ phía
dưới
rdt_send(data)
Λ
1-23
rdt2.0: Trường hợp có lỗi
đợi cuộc
gọi từ phía
trên
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && 
corrupt(rcvpkt)
đợi ACK 
hoặc
NAK
đợi cuộc
gọi từ phía
dưới
rdt_send(data)
Λ
1-24
rdt2.1: Bên gửi, điều khiển ACK/NAK lỗi
đợi cuộc
gọi 0 từ
trên
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
đợi ACK 
hoặc NAK 
0 udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt) 
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt)
đợi cuộc
gọi 1 từ
trên
đợi ACK 
hoặc NAK 
1
Λ
1-25
rdt2.1: Bên nhận, điều khiển ACK/NAK lỗi
đợi 0 
từ dưới
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
đợi 1 
từ dưới
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)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
not corrupt(rcvpkt) &&
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
1-26
rdt2.1
Bên gửi:
‰ seq # được thêm vào
gói tin
‰ Hai seq. #’s (0,1)
‰ Phải kiểm tra nếu
ACK/NAK đã nhận có
lỗi
‰ Hai lần -> ổn định
Bên nhận:
‰ Phải kiểm tra gói tin đã
nhận có lặp không
 Trạng thái chỉ định pkt
seq # mong đợi là 0 hay 
1
1-27
rdt2.2: Giao thức NAK-free
‰ Tương tự rdt2.1, chỉ sử dụng ACK
‰ Thay vì NAK, bên nhận phải gửi ACK cho pkt cuối đã
nhận OK
‰ ACK lặp tại bên nhận sẽ như xử lý như nhận NAK: 
truyền lại pkt hiện tại
1-28
rdt2.2: Phân mảnh tại bên gửi và bên nhận
đợi cuộc
gọi 0 từ
trên
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,0)
đợi ACK
0
FSM bên gửi
đợi 0 
từ dưới
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq1(rcvpkt) 
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
FSM bên nhận
L
1-29
rdt3.0: kênh có lỗi và mất gói
Giả sử: kênh phía dưới có
thể mất gói (dữ liệu
hoặc ACK)
 checksum, seq. #, ACK, 
truyền lại là không đủ
Cách tiếp cận: bên nhận đợi
ACK một thời gian
‰ Truyền lại nếu không có ACK 
nhận tại thời điểm này
‰ Nếu gói tin (hoặc ACK) trễ
(không mất):
 Truyền lại -> lặp, sử dụng
seq# để giải quyết
 Bên nhận phải gán seq # 
của gói tin được ACK
‰ Đòi hỏi bộ đếm thời gian
ngược
1-30
rdt3.0 Bên gửi
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
đợi
ACK 0
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
đợi cuộc gọi
1 từ trên
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,0)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
đợi cuộc gọi 
0 từ trên
đợi
ACK 1
Λ
rdt_rcv(rcvpkt)
Λ
Λ
Λ
1-31
rdt3.0
(a) Không mất gói (b) Mất gói
1-32
rdt3.0
(c) Mất ACK (c) Timeout
1-33
Hiệu năng của rdt3.0
‰ Hiệu năng của rdt3.0 bị ảnh hưởng
‰ Ví dụ: đường truyền 1 Gbps, lan truyền 15 ms, gói tin 1KB:
T transmit =
8kb/pkt
10**9 b/sec = 8 microsec
 U sender: sự sử dụng – thời gian bên gửi bận gửi
 1KB pkt trong mỗi 30 msec -> 33kB/sec thông lượng qua đường
truyền 1 Gbps
 Giao thức mạng hạn chế sử dụng tài nguyên vật lý!
U 
sender = 
.008
30.008 
= 0.00027 L / R 
RTT + L / R 
=
L (độ dài gói tin, bit)
R (tốc độ truyền, bps) =
1-34
rdt3.0: Hoạt động stop-and-wait 
gói tin đầu tiên được truyền, t = 0
Bên gửi Bên nhận
RTT
gói tin cuối cùng truyền, t = L / R
bít của gói tin đầu tiên đến
bít của gói tin cuối cùng đến, 
gửi ACK
ACK đến, gửi gói tin tiếp, 
t = RTT + L / R
U 
sender =
.008 
30.008 
= 0.00027 L / R 
RTT + L / R 
=
1-35
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
 Dải giá trị sequence phải tăng
 Vùng đệ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
1-36
Pipelining: Tăng hiệu quả sử dụng
Bít gói tin đầu tiên được truyền, 
t = 0
Bên gửi Bên nhận
RTT 
Bít cuối cùng được truyền
t = L / R
Bít gói tin đầu tiên đến
Bít gói tin cuối cùng đến, gửi ACK
ACK đến, gửi gói tin tiếp theo,
t = RTT + L / R
Bít cuối cùng của gói tin thứ 2 đến, gửi
ACK
Bít cuối cùng của gói tin 3 đến, gửi ACK
U 
sender =
.024
30.008 
= 0.0008 3 * L / R 
RTT + L / R 
=
Tăng hiệu quả sử
dụng lên 3 lần
1-37
Go-Back-N
Bên gửi:
‰ k-bit seq # trong pkt header
‰ “window” N, cho phép các gói tin không ack liên tiếp
‰ ACK(n): ACK mọi gói tin tới seq # n - “ACK tích lũy”
 Có thể nhầm ACK lặp
‰ Thời gian cho mỗi gói tin
‰ timeout(n): truyền lại gói tin n và tất cả gói tin seq# lớn hơn n trong
cửa sổ
‰ Lý do phải giới hạn N: điều khiển luồng, điều khiển tắc nghẽn
1-38
GBN: FSM mở rộng của bên gửi
đợi start_timerudt_send(sndpkt[base])
udt_send(sndpkt[base+1])
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum) /* pkt chưa được ack đầu tiên */
start_timer
nextseqnum++
}
else
refuse_data(data)
base = getacknum(rcvpkt)+ ... 
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn
của TCP
1-65
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();
Bắt tay 3 đường:
Bước 1: Client gửi TCP SYN 
segment tới server
 Chỉ định seq # ban đầu
 Không có dữ liệu
Bước 2: Server 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
1-66
Quản lý kết nối của TCP
Thiết lập kết nối:
client
Connection request (SYN=1, seq=client_isn)
server
C o n n e
c t i o n g
r a n t e d
 ( S Y N
= 1 , s e
q = s e r
v e r _ i s
n , 
a c k = c
l i e n t _ i
s n + 1
ack (SYN=0, seq=client_isn+1, 
ack=server_isn+1
1-67
Quản lý kết nối của TCP
Đóng kết nối:
client đóng socket:
clientSocket.close();
Bước 1: client gửi TCP FIN 
tới server
Bước 2: server nhận FIN, trả
lời bằng ACK. Đóng kết nối, 
gửi FIN 
client
FIN
server
A C K
ACK
F I N
đóng
đóng
đóng
t
h
ờ
i
g
i
a
n
đ
ơ
ị
1-68
Quản lý kết nối của TCP
Bước 3: client nhận FIN, trả
lời bằng ACK. 
 Thời gian đợi: trả lời
bằng ACK báo đã nhận
FIN
Bước 4: server, nhận ACK. 
Kết nối đóng. 
client
FIN
server
A C K
ACK
F I N
đang
đóng
đang
đóng
đóng
t
h
ờ
i
g
i
a
n
đ
ợ
i
đã đóng
1-69
Quản lý kết nối của TCP
Chu kỳ hoạt động
TCP client
Chu kỳ hoạt động
TCP server
1-70
Chương 3: Tầng giao vận
‰ 3.1 Các dịch vụ tầng
giao vận
‰ 3.2 Multiplexing và
demultiplexing
‰ 3.3 Dịch vụ không
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn
của TCP
1-71
Nguyên tắc điều khiển tắc nghẽn
Tắc nghẽn:
‰ 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
‰ Đặ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)
1-72
Nguyên nhân, tác hại của tắc nghẽn: 
Kịch bản 1
‰ Hai đối tượng gửi, 
hai đối tượng nhận
‰ Một router, vùng
đệm không giới
hạn
‰ Không truyền lại
‰ Độ trễ lớn khi
xảy ra tắc nghẽn
‰ Tối đa thông
lượng có thể đạt
được
unlimited shared 
output link buffers
Host A
lin : original data
Host B
lout
1-73
Nguyên nhân, tác hại 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 gói tin mất
vùng đệm của đường
truyền đầu ra dùng
chung và có giới hạn
Host A lin : dữ liệu ban đầu
Host B
lout
l'in : dữ liệu ban đầu, dữ liệu
truyền lại
1-74
Nguyên nhân, tác hại của tắc nghẽn: 
Kịch bản 2
‰ Luôn luôn: (tốt)
‰ Truyền lại “hoàn hảo”: truyền lại chỉ khi mất
‰ Sự truyền lại của gói tin bị trễ (không mất) làm lớn hơn (trường
hợp hoàn hảo) so với
λ
in
λout= λ
in
λout>λ
inλout
“Tác hại” của tắc nghẽn:
‰ Xử lý nhiều hơn (truyền lại)
‰ Truyền lại không cần thiết: đường truyền mang nhiều bản sao chép
của gói tin
R/2
R/2λin
λ
o
u
t
b.
R/2
R/2λin
λ
o
u
t
a.
R/2
R/2λin
λ
o
u
t
c.
R/4
R/3
1-75
Nguyên nhân, tác hại của tắc nghẽn: 
Kịch bản 3
‰ Bốn đối tượng gửi
‰ Nhiều đường
‰ timeout/truyền lại
λ
in
Q: Điều gì xảy ra khi
và tăng?λ
in
vùng đệm của đường
truyền ra dùng chung
và có giới hạn
Host A
λin : dữ liệu ban đầu
Host B
λoutλ'in : dữ liệu ban đầu, và
dữ liệu truyền lại
1-76
Nguyên nhân, tác hại của tắc nghẽn: 
Kịch bản 3
Tác hại khác của tắc nghẽn:
‰ Khi gói tin bị loại bỏ, khả năng truyền đường lên sử
dụng cho gói tin đó đã lãng phí
H
o
s
t 
A
H
o
s
t 
B
λ
o
u
t
1-77
Các cách tiếp cận
để điều khiển tắc nghẽn
Điều khiển tắc nghẽn
cuối-cuối:
‰ Không có phản hồi chính
thức từ mạng
‰ Tắc nghẽn suy ra từ hệ
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
Đ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
hệ thống cuối
 Một bít chỉ ra tắc nghẽn
(SNA, DECbit, TCP/IP, 
ECN, ATM)
 Chỉ rõ tốc độ bên gửi nên
gửi
Hai cách tiếp cận chính để điều khiển tắc nghẽn:
1-78
Trường hợp nghiên cứu: 
Điều khiển tắc nghẽn ATM ABR 
ABR: Available Bit Rate:
‰ “Dịch vụ co dãn”
‰ Nếu đường đi của bên gửi
chưa đến giới hạn tải: 
 Bên gửi nên sử dụng
băng thông khả dụng
‰ Nếu đường đi của bên gửi
bị tắc nghẽn: 
 Bên gửi điều chỉnh tốc
độ đảm bảo tối thiểu
RM cell (Resource 
Management):
‰ Được gửi bởi bên gửi, rải rác
cùng với cell dữ liệu
‰ Các bít trong RM cell do switch 
thiết lập (có sự tham gia của
mạng)
 NI bit: không tăng tốc độ (tắc
nghẽn nhẹ)
 CI bit: tắc nghẽn
‰ 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
1-79
Trường hợp nghiên cứu: 
Điều khiển tắc nghẽn ATM ABR 
‰ 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ề
1-80
Chương 3: Tầng giao vận
‰ 3.1 Các dịch vụ tầng
giao vận
‰ 3.2 Multiplexing và
demultiplexing
‰ 3.3 Dịch vụ không
hướng kết nối: UDP
‰ 3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
‰ 3.5 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
‰ 3.6 Các nguyên tắc của
điều khiển tắc nghẽn
‰ 3.7 Điều khiển tắc nghẽn
của TCP
1-81
Điều khiển tắc nghẽn của TCP 
‰ Điều khiển end-end (không có hỗ trợ
của mạng)
‰ Bên gửi giới hạn truyền:
LastByteSent-LastByteAcked
≤ CongWin
LastByteSent - LastByteAcked <= min{CongWin, 
RcvWin}
‰ Gần đúng,
‰ CongWin thay đổi động, chức năng
nhận biết sự tắc nghẽn của mạng
Cách bên gửi nhận biết sự tắc
nghẽn?
‰ Sự kiện mất gói = timeout 
hoặc lặp lại 3 ack
‰ Bên gửi TCP giảm tốc độ
(CongWin) sau sự kiện mất
gói
Ba cơ chế:
 AIMD
 slow start
 Không thay đổi sau sự kiện
timeout
rate = CongWin
RTT Bytes/sec
1-82
TCP AIMD
8 Kbytes
16 Kbytes
24 Kbytes
time
congestion
window
Giảm cấp số nhân: Giảm
CongWin một nửa sau
sự kiện mất gói
Tăng cấp số cộng: Tăng
CongWin 1 MSS mỗi
RTT khi không có sự
kiện mất gói
Kết nối TCP trong thời gian dài
1-83
TCP Slow Start
‰ Khi kết nối bắt đầu, 
CongWin = 1 MSS
 Ví dụ: MSS = 500 byte & 
RTT = 200 msec
 Tốc độ ban đầu = 20 kbps
‰ Băng thông khả dụng có
thể >> MSS/RTT
 Mong muốn nhanh tới tốc
độ đáng kể
‰ Khi kết nối bắt đầu, tăng
tốc độ nhanh theo hàm
mũ cho đến khi có sự
kiện mất gói đầu tiên
1-84
TCP Slow Start (tiếp)
‰ Khi kết nối bắt đầu, 
tăng tốc độ hàm mũ tới
khi có sự kiện mất gói
đầu tiên:
 Gấp đôi CongWin mỗi
RTT
 Thự hiện bằng cách tăng
CongWin cho mọi ACK 
nhận được
‰ Tóm lại: tốc độ ban đầu
là chậm nhưng nhanh
chóng tăng theo hàm
mũ
Host A
1 segment
R
T
T
Host B
time
2 segments
4 segments
1-85
Quá trình tinh chỉnh
‰ Sau 3 ACK lặp lại:
 CongWin giảm một nửa
 window tăng tuyến tính
‰ Nhưng sau sự kiện timeout:
 CongWin thay vì thiết
lập 1 MSS; 
 window tăng hàm mũ
 Tới ngưỡng thì giảm
tuyến tính
• 3 ACK lặp chỉ rằng khả
năng của mạng chuyển
một số segment
• timeout trước 3 ACK lặp
là đáng chú ý hơn
Triết lý:
1-86
Quá trình tinh chỉnh (tiếp)
Q: Khi nào tăng theo
số mũ chuyển thành
theo tuyến tính? 
A: Khi CongWin có giá
trị bằng 1/2 giá trị
của nó trước khi
timeout.
Thực hiện:
‰ Variable Threshold 
‰ Tại sự kiện mất gói, 
Threshold đặt bằng ½
CongWin ngay trước sự kiện
mất gói
1-87
Tổng kết: Điều khiển tắc nghẽn của TCP 
‰ Khi CongWin nhỏ hơn Threshold, bên gửi trong
pha slow-start, window lớn theo hàm mũ.
‰ Khi CongWin lớn hơn Threshold, bên gửi trong
pha congestion-avoidance, window lớn theo hàm
tuyến tính.
‰ Khi xảy ra lặp 3 ACK, Threshold đặt bằng
CongWin/2 và CongWin đặt bằng Threshold.
‰ Khi timeout xảy ra, Threshold đặt bằng
CongWin/2 và CongWin đặt bằng 1 MSS.
1-88
Điều khiển tắc nghẽn bên gửi của TCP
Sự kiện Trạng thái Hành động bên gửi TCP Giải thích
Nhận ACK 
cho dữ liệu
không được
ack trước đó
Slow Start 
(SS)
CongWin = CongWin + MSS, 
If (CongWin > Threshold)
Đặt trạng thái thành
“Congestion Avoidance”
Kết quả bởi gấp đôi CongWin
mỗi RTT
Nhận ACK 
cho dữ liệu
không được
ack trước đó
Congestion
Avoidance 
(CA) 
CongWin = CongWin+MSS * 
(MSS/CongWin)
Tăng theo cấp số cộng, tăng
CongWin lên 1 MSS mỗi RTT
Sự kiện mất
gói phát hiện
bởi 3 ACK lặp
SS hoặc CA Threshold = CongWin/2, 
CongWin = Threshold,
Đặt trạng thái thành “Congestion 
Avoidance”
Nhanh chóng phục hồi, thực
hiện tăng cấp số nhân. 
CongWin sẽ không giảm dưới
1 MSS.
Timeout SS hoặc CA Threshold = CongWin/2, 
CongWin = 1 MSS,
Đặt trạng thái thành “Slow Start”
Vào slow start
ACK lặp SS hoặc CA Tăng bộ đếm ACK lặp cho
segment được ack
CongWin và Threshold không
thay đổi
1-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
1-90
Tương lai của TCP
‰ Ví dụ: 1500 byte segment, 100ms RTT, muốn 10 
Gbps thông lượng
‰ Đòi hỏi window size W = 83,333 segment
‰ Thông lượng theo tốc độ mất gói:
‰ ➜ L = 2·10-10 
‰ Phiên bản mới của TCP cho tốc độ cao là cần thiết!
LRTT
MSS⋅22.1
1-91
‰ Mục đích của sự công bằng: Nếu K phiên TCP dùng 
chung đường truyền thắt nút băng thông R, mỗi 
đường nên có tốc độ trung bình là R/K
Kết nối TCP 1
điểm thắt nút
khả năng RKếtnối TCP 2
Sự công bằng của TCP
1-92
Lý do TCP công bằng
Hai phiên cạnh tranh:
R
R
Chia sẻ băng thông bằng nhau
Thông lượng của kết nối 1
T h
ô n
g
l ư
ợ
n g
c ủ
a
k ế
t n
ố i
2
tránh tắc nghẽn: tăng cộng
mất gói: giảm window hệ số 2
1-93
Sự công bằng (tiếp)
Sự công bằng và UDP
‰ Các ứng dụng đa
phương tiện thường
không sử dụng TCP
 Không muốn tốc độ giảm
bởi điều khiển tắc nghẽn
‰ Ứng dụng sử dụng
UDP:
 Đẩy dữ liệu audio/video 
ở tốc độ hằng số, chấp
nhận mất gói
Sự công bằng và các kết nối
TCP song song
‰ Không ngăn chặn ứng dụng
mở song song các kết nối
giữa 2 host
‰ Trình duyệt Web thực hiện
như trên
1-94
Mô hình độ trễ
Q: Thời gian để nhận một đối
tượng từWeb server sau
khi gửi một yêu cầu? 
Bỏ qua tắc nghẽn, độ trễ ảnh
hưởng bởi:
‰ Thiết lập kết nối TCP
‰ Độ trễ truyền dữ liệu
Giả sử một đường truyền giữa
client và server có tốc độ R
‰ S: MSS (bits)
‰ O: kích thước đối tượng (bit)
‰ Không truyền lại (không mất
gói, không lỗi)
Kích thước cửa sổ:
‰ Cửa sổ tắc nghẽn cố định, 
W segment
‰ Cửa số động, mô hình slow 
start
1-95
Cửa sổ tắc nghẽn cố định
Trường hợp 1:
WS/R > RTT + S/R: ACK 
cho segment đầu tiên
trong cửa sổ
Độ trễ = 2RTT + O/R
1-96
Cửa sổ tắc nghẽn cố định
Trường hợp 2:
‰ WS/R < RTT + S/R: đợi
ACK sau khi gửi lượng dữ
liệu của cửa sổ
Độ trễ = 2RTT + O/R
+ (K-1)[S/R + RTT - WS/R]
1-97
Mô hình độ trễ TCP: Slow Start (1)
Giả sử cửa sổ lớn theo slow start
Độ trễ cho một đối tượng là:
R
S
R
SRTTP
R
ORTTLatency P )12(2 −−⎥⎦
⎤⎢⎣
⎡ +++=
Trong đó, P là lượng thời gian TCP rỗi tại server
}1,{min −= KQP
- Trong đó, Q là lượng thời gian server rỗi nếu đối tượng kích thước
không giới hạn.
- Và K là số cửa sổ trùm qua đối tượng
1-98
Mô hình độ trễ TCP: Slow Start (2)
RTT
initiate TCP
connection
request
object
first window
= S/R
second window
= 2S/R
third window
= 4S/R
fourth window
= 8S/R
complete
transmissionobject
delivered
time at
client
time at
server
Ví dụ:
• O/S = 15 segment
• K = 4 windows
• Q = 2
• P = min{K-1,Q} = 2
Thời gian rỗi của server 
P=2 times
Các thành phần trễ:
• 2 RTT để thiết lập kết
nối và yêu cầu
• O/R để truyền đối
tượng
• thời gian server rỗi vì
slow start
Server rỗi: 
P = min{K-1,Q} times
1-99
Mô hình độ trễ TCP (3)
R
S
R
SRTTPRTT
R
O
R
SRTT
R
SRTT
R
O
idleTimeRTT
R
O
P
k
P
k
P
p
p
)12(][2
]2[2
2delay
1
1
1
−−+++=
−+++=
++=
−
=
=
∑
∑
 2 1
R
SRTT
R
S k =⎥⎦
⎤⎢⎣
⎡ −+
+
−
=+ RTT
R
S
2 1 =−
R
Sk
RTT
initiate TCP
connection
request
object
first window
= S/R
second window
= 2S/R
third window
= 4S/R
fourth window
= 8S/R
complete
transmissionobject
delivered
time at
client
time at
server
thời gian khi server bắt đầu
gửi segment tới khi server 
nhận ack segment
thời gian để truyền cửa sổ
thứ k
thời gian rỗi sau
cửa sổ thứ k
1-
100
Mô hình độ trễ TCP (4)
⎥⎥
⎤⎢⎢
⎡ +=
+≥=
≥−=
≥+++=
≥+++=
−
−
)1(log
)}1(log:{min
}12:{min
}/222:{min
}222:{min
2
2
110
110
S
O
S
Okk
S
Ok
SOk
OSSSkK
k
k
k
L
L
Tính Q, giá trị rỗi cho đối tượng có kích thước không giới hạn tương tự.
K = số cửa sổ bao đối tượng
Cách tính K?
1-
101
Mô hình hóa HTTP
‰ Giả sử trang Web chứa:
 1 trang HTML cơ sở (kích thước O bít)
 M ảnh (mỗi ảnh kích thước O bít)
‰ Non-persistent HTTP: 
 M+1 kết nối TCP
 Response time = (M+1)O/R + (M+1)2RTT + tổng thời gian rỗi
‰ Persistent HTTP:
 2 RTT để yêu cầu và nhận file HTML cơ sở
 1 RTT để yêu cầu và nhận M ảnh
 Response time = (M+1)O/R + 3RTT + tổng thời gian rỗi
‰ Non-persistent HTTP với X kết nối song song
 Giả sử M/X nguyên
 1 kết nối TCP cho file cơ sở
 M/X tập của các kết nối song song cho ảnh
 Response time = (M+1)O/R + (M/X + 1)2RTT + tổng thời gian rỗi
1-
102
0
2
4
6
8
10
12
14
16
18
20
28
Kbps
100
Kbps
1 Mbps 10
Mbps
non-persistent
persistent
parallel non-
persistent
Thời gian trả lời HTTP (giây)
RTT = 100 msec, O = 5 Kbytes M=10 và X=5
Đối với băng thông thấp, thời gian kết nối và thời gian phản hồi chi phối bởi
thời gian truyền
Persistent connection chỉ mang lại cải tiến thêm qua các kết nối song song
1-
103
0
10
20
30
40
50
60
70
28
Kbps
100
Kbps
1 Mbps 10
Mbps
non-persistent
persistent
parallel non-
persistent
Thời gian phản hồi (giây)
RTT =1 sec, O = 5 Kbyte, M=10 and X=5
Đối với RTT lớn, thời gian phản hồi chi phối bởi thiết lập kết nối TCP và độ trễ
slow start. Persistent connection đem lại cải tiến quan trọng: đặc biệt trong mạng
delay, bandwidth cao.
1-
104
Chương 3: Tổng kết
‰ Các nguyên tắc bên trong
các dịch vụ tầng giao vận:
multiplexing, 
demultiplexing
 Truyền dữ liệu tin cậy
 Điều khiển luồng
 Điều khiển tắc nghẽn
‰ Sự thực hiện trong Internet
 UDP
 TCP
Tiếp theo:
‰ Dừng tìm hiểu phần bên
ngoài của mạng (tầng
ứng dụng, tầng giao
vận)
‰ Tìm hiểu vào trong lõi
của mạng

File đính kèm:

  • pdfbai_giang_mang_may_tinh_chuong_3_tang_giao_van.pdf