The following commands can be used to help verify frame relay configuration
Show interfaces
Show frame-relay lmi
Show frame-relay pvc ###
Show frame-relay map
Use the following command to help troubleshoot a frame relay configuration
Debug frame-relay lmi
110 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 940 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Quản trị mạng - Chương 3: Tầng transport, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ỗi khung dữ liệu có địa
chỉ IP nguồn và đích
Mỗi khung dữ liệu mang
một segment tầng
transport
Mỗi segment có số port
nguồn và đích
host dùng các địa chỉ
IP và số port để gởi
segment đến socket
thích hợp
Số port nguồn Số port đích
32 bits
application
data
(payload)
other header fields
Định dạng segment TCP/UDP
Tầng Transport 3-10
Demultiplexing không kết nối
Ôn lại: socket đã tạo có số
port của host cục bộ
(host-local port #) :
DatagramSocket mySocket1
= new DatagramSocket(12534);
Khi host nhận
segment UDP :
Kiểm tra số port đích
trong segment
Đưa segment UDP đến
socket có số port đó
Ôn lại: khi tạo khung dữ
liệu (datagram) để gởi
vào đến socket UDP
socket, phải xác định
Địa chỉ IP đích
Số port đích
Các khung dữ liệu IP
với số cùng số port
đích, nhưng khác địa
chỉ IP nguồn và/hoặc
khác số port nguồn sẽ
được chuyển đến cùng
socket tại máy đích
Tầng Transport 3-11
Demultiplexing không kết nối:
ví dụ
DatagramSocket
serverSocket = new
DatagramSocket
(6428);
transport
application
physical
link
network
P3
transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket
mySocket1 = new
DatagramSocket
(5775);
DatagramSocket
mySocket2 = new
DatagramSocket
(9157);
Port nguồn: 9157
Port đích: 6428
Port nguồn: 6428
Port đích: 9157
Port nguồn: ?
Port đích: ?
Port nguồn: ?
Port đích: ?
Tầng Transport 3-12
Demux hướng kết nối
Socket TCP được
xác định bởi 4 yếu
tố:
Địa chỉ ip nguồn
Số port nguồn
Địa chỉ IP đích
Số port đích
demux: nơi nhận
dùng tất cả 4 giá trị
trên để điều hướng
segment đến socket
thích hợp
host server có thể hổ
trợ nhiều socket TCP
đồng thời:
Mỗi socket được xác
định bởi bộ 4 của nó
Các web server có
các socket khác nhau
cho mỗi kết nối từ
client
Kết nối HTTP không
bền vững sẽ có socket
khác nhau cho mỗi yêu
cầu
Tầng Transport 3-13
Demultiplexing hướng kết nối: ví dụ
transport
application
physical
link
network
P3
transport
application
physical
link
P4
transport
application
physical
link
network
P2
IP nguồn,port: A,9157
IP đích, port: B,80
Địa chỉ IP nguồn,port: B,80
Địa chỉ IP đích,port: A,9157
host: địa
chỉ IP A
host: địa
chỉ IP C
network
P6P5
P3
IP nguồn,port: C,5775
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
server: địa
chỉ IP B
Tầng Transport 3-14
Demultiplexing hướng kết nối: ví dụ
transport
application
physical
link
network
P3
transport
application
physical
link
transport
application
physical
link
network
P2
IP nguồn,port: A,9157
IP đích, port: B,80
IP nguồn,port: B,80
IP đích,port: A,9157
host: địa
chỉ IP A
host: địa
chỉ IP C
server: địa
chỉ IP B
network
P3
IP nguồn,port: C,5775
IP đích,port: B,80
IP nguồn,port: C,9157
IP đích,port: B,80
P4
threaded server
Tầng Transport 3-15
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-16
UDP: User Datagram Protocol [RFC 768]
“đơn giản,” “bare bones”
Internet transport protocol
Dịch vụ “best effort” (“nổ lực
tốt nhất”), các segment UDP
segments có thể bị:
Mất mát
Vận chuyển không theo thứ
tự đến ứng dụng
Connectionless (phi kết nối):
Không bắt tay giữa bên
nhận và gửi UDP
Mỗi segment UDP được xử
lý độc lập
Ứng dụng UDP:
Các ứng dụng đa
phương tiện trực tuyến
(chịu mất mát(loss
tolerant), (cần tốc độ)
(rate sensitive) )
DNS
SNMP
Truyền tin cậy trên
UDP:
Thêm độ tin cậy tại
tầng application
Phục hồi lỗi tại các ứng
dụng cụ thể!
Tầng Transport 3-17
UDP: segment header
Số port nguồn Số port đích
32 bits
Dữ liệu
ứng dụng
(payload)
Định dạng segment UDP
length checksum
Độ dài được tính
bằng byte của
segment UDP, bao
gồm cả header
Không thiết lập kết nối (cái
mà có thể gây ra độ trễ)
Đơn giản: không trạng thái
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 nhanh
như mong muốn
Tại sao có UDP?
Tầng Transport 3-18
UDP checksum
bên gửi:
Xét nội dung của
segment, bao gồm các
trường của header, là
chuỗi các số nguyên
16-bit
checksum: bổ sung
(tổng bù 1) của các nội
dung segment
Bên gửi đặt giá trị
checksum vào trường
checksum UDP
bên nhận:
Tính toán checksum của
segment đã nhận
Kiểm tra giá trị trên có bằng
với giá trị trong trường
checksum hay không:
NO – có lỗi xãy ra
YES – không có lỗi. Nhưng
có thể còn lỗi khác nữa
không? Xem phần sau.
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
Tầng Transport 3-19
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
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
bit dư
tổng
checksum
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-20
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
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 application,
transport và link
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 đặ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)
Các nguyên lý truyền dữ liệu tin cậy
quan trọng trong các tầng application,
transport và link
Top 10 danh sách các chủ đề mạng quan trọng
Transport Layer 3-23
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)
quan trọng trong các tầng application,
transport và link
Top 10 danh sách các chủ đề mạng quan trọng
Các nguyên lý truyền dữ liệu tin cậy
Tầng Transport 3-24
Truyền dữ liệu tin cậy: bắt đầu
Bên
gửi
Bên
nhận
rdt_send(): được gọi bởi tầng trên,
(tầng applicaiton). Chuyển dữ liệu cần
truyền đến lớp cao hơn ở bên nhận
udt_send(): được gọi bởi rdt,
để truyền các gói trên kênh
không tin cậy đến nơi nhận
rdt_rcv(): được gọi khi gói dữ liệu
đến kênh của bên nhận
deliver_data(): được gọi bởi rdt để
chuyển dữ liệu đến tầng cao hơn
Tầng Transport 3-25
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
trạng
thái
1
trạng
thái 2
Sự kiện gây ra trạng thái truyền
Các hành động được thực hiện trên
chuyển trạng thái
Trạng thái: khi ở “trạng
thái” này thì trạng
thái kế tiếp được xác
định duy nhất bởi sự
kiện kế tiếp
Sự kiện
Các hành động
Truyền dữ liệu tin cậy: bắt đầu
Tầng Transport 3-26
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
từ tầng
trên packet = make_pkt(data)
udt_send(packet)
rdt_send(data)
extract (packet,data)
deliver_data(data)
chờ gọi
từ tầng
dưới
rdt_rcv(packet)
bên gửi bên nhận
Tầng Transport 3-27
Kênh cơ bản có thể đảo các bit trong packet
checksum để kiểm tra các lỗi
Câu hỏi: làm sao khôi phục các lỗi:
acknowledgements (ACKs): receiver explicitly
tells sender that pkt received OK
negative acknowledgements (NAKs): receiver
explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt2.0 (beyond rdt1.0):
error detection
receiver feedback: control msgs (ACK,NAK)
rcvr->sender
rdt2.0: kênh với các lỗi
Làm thế nào để con người phục hồi
“lỗi” trong cuộc trò chuyện?
Tầng Transport 3-28
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 rõ
ràng 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 rõ ràng 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
rdt2.0: kênh với các lỗi
Tầng Transport 3-29
rdt2.0: đặc điểm kỹ thuật FSM
Chờ gọi
từ tầng
trên
sndpkt = 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)
Chờ ACK
hoặc
NAK
Chờ gọi
từ tầng
dướiBên gửi
Bên nhận
rdt_send(data)
L
Tầng Transport 3-30
rdt2.0: hoạt động khi không lỗi
Chờ gọi
từ tầng
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)
Chờ ACK
hoặc
NAK
Chờ gọi
từ tầng
dưới
rdt_send(data)
L
Tầng Transport 3-31
rdt2.0: hoạt động khi có lỗi
Chờ gọi
từ tầng
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)
Chờ ACK
hoặc
NAK
Chờ gọi
từ tầng
dưới
rdt_send(data)
L
Tầng Transport 3-32
rdt2.0 có lỗ hỏng nghiêm trọng!
Điều gì xảy ra nếu
ACK/NAK bị hỏng?
Bên gửi sẽ không biết
điều gì đã xảy ra ở bên
nhận!
Không thể đơn phương
truyền lại: có thể trùng
lặp
Xử lý trùng lặp:
Bên gửi truyền lại packet
hiện thời nếu ACK/NAK bị
hỏng
Bên gửi thêm số thứ tự vào
trong mỗi packet
(sequence number)
Bên nhận hủy packet bị
trùng lặp
dừng và chờ
Bên gửi gửi một
packet, sau đó chờ
phản hồi từ bên nhận
Tầng Transport 3-33
rdt2.1: bên gửi, xử lý các ACK/NAK
bị hỏng
Wait for
call 0 from
above
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
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)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L
L
Tầng Transport 3-34
Wait for
0 from
below
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)
Wait for
1 from
below
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)
rdt2.1: bên nhận, xử lý các ACK/NAK bị
hỏng
Tầng Transport 3-35
rdt2.1: thảo luận
Bên gửi:
Số thứ tự (seq #)
được thêm vào packet
2 số thứ tự (0,1) là
đủ. Tại sao?
Phải kiểm tra có hay
không ACK/NAK vừa
nhận bị hỏng
Số trạng thái tăng lên
2 lần
Trạng thái phải “nhớ”
xem packet “mong đợi”
có số thứ tự là 0 hay 1
Bên nhận:
Phải kiểm tra có hay
không gói vừa nhận
trị trùng
Trạng thái chỉ rõ có
hay không 0 hoặc 1
là số thứ tự của gói
được mong chờ
Chú ý: bên nhận có
thể không biết
ACK/NAK vừa rồi
có được bên gửi
nhận tốt hay không
Tầng Transport 3-36
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 rõ ràng chèn 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-37
rdt2.2: các fragment bên nhận và gửi
Wait for
call 0 from
above
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)
Wait for
ACK
0
sender FSM
fragment
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM
fragment
L
Tầng Transport 3-38
rdt3.0: các kênh với lỗi và mất mát
Giả định mới: kênh ưu
tiên cũng có thể làm
mất gói (dữ liệu, các
ACK)
checksum, số thứ tự,
các ACK, việc truyền
lại sẽ hổ trợnhưng
không đủ
Cách tiếp cận: bên gửi chờ
ACK trong khoảng thời
gian “hợp lý”
Truyền lại nếu không có ACK
được nhận trong khoảng
thời gian này
Nếu gói (hoặc ACK) chỉ trễ
(không mất):
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-39
rdt3.0 bên gửi
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Wait for
call 1 from
above
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)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Tầng Transport 3-40
bên gửi bên nhận
Nhận pkt1
Gửi pkt0
Gửi ack0
Nhận ack1
Nhận ack0
Nhận ack0
Nhận pkt0
Gửi pkt1
Nhận ack1
Gửi pkt0
Nhận pkt0
pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) Không mất mát
bên gửi bên nhận
Nhận pkt1
Nhận pkt0
Gửi ack0
Gửi ack1
Gửi ack0
Nhận ack0
Gửi pkt0
Gửi pkt1
Nhận ack1
Gửi pkt0
Nhận pkt0
pkt0
pkt0
ack1
ack0
ack0
(b) Mất gói
pkt1
X
loss
pkt1
timeout
Gửi lại pkt1
Hành động của rdt3.0
Tầng Transport 3-41
Hành động của rdt3.0
Nhận pkt1
Gửi ack1
(phát hiện trùng gói)
pkt1
bên gửi bên nhận
Nhận pkt1
Nhận pkt0
Gửi ack0
Gửi ack1
Gửi ack0
Nhận ack0
Gửi pkt0
Gửi pkt1
Nhận ack1
Gửi pkt0
Nhận pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) Mất ACK
ack1
X
loss
pkt1
timeout
Gửi lại pkt1
Nhận pkt1
Gửi ack1
(phát hiện trùng)
pkt1
bên gửi bên nhận
Nhận pkt1
Gửi ack0
Nhận ack0
Gửi pkt1
Gửi pkt0
Nhận pkt0
pkt0
ack0
(d) premature timeout/ delayed ACK
pkt1
timeout
resend pkt1
ack1
Gửi ack1
send pkt0
rcv ack1
pkt0
ack1
ack0
send pkt0
rcv ack1 pkt0
Nhận pkt0
Gửi ack0ack0
Nhận pkt0
Gửi ack0
(phát hiệ trùng)
Tầng Transport 3-42
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:
U sender: utilization – fraction of time sender busy sending
U
sender =
.008
30.008
= 0.00027
L / R
RTT + L / R
=
Nếu RTT=30 msec, gói 1KB mỗi 30 msec: thông lượng
33kB/sec trên đường link1 Gbps
Giao thức network hạn chế việc sử dụng các tài
nguyên vật lý!
Dtruyền =
L
R
8000 bits
109 bits/sec
= = 8 microsecs
Tầng Transport 3-43
rdt3.0: hoạt động dừng-và-chờ
bit đầu tiên của gói được truyền, t = 0
sender receiver
RTT
bit cuối cùng gói được truyền, t = L / R
Bit đầu tiên của gói đến
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
sender =
.008
30.008
= 0.00027
L / R
RTT + L / R
=
Tầng Transport 3-44
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 nhận được
Nhóm các số thứ tự phải được tăng dầ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, lặp có lựa chọn
Tầng Transport 3-45
Pipelining: độ khả dụng tăng
bit đầu tiên của gói được truyền, t = 0
bên gửi bên nhận
RTT
bit cuối cùng của gói được truyền,
t = L / R
bit đầu tiên của packet đến
bit cuối cùng của packet đến, gửi ACK
ACK arrives, send next
packet, t = RTT + L / R
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
3-packet pipelining tăng
độ khả dụng lên gấp 3 lần!
U
sender =
.0024
30.008
= 0.00081
3L / R
RTT + L / R
=
Tầng Transport 3-46
Pipelined protocols: tổng quan
Go-back-N:
Bên gửi có thể có đến N
packet không cần ACK trong
đường ống ( pipeline)
Bên nhận chỉ gởi cumulative
ack
Sẽ không thông báo nhận
packet thành công nếu có
một gián đoạn
bên gửi có bộ định thì cho
packet sớm nhất mà không
cần ACK (oldest unacked
packet)
Khi bộ định thì hết, truyền
lại tất cả các packet mà
không được ACK
Lặp có lựa chọn (Selective
Repeat):
Bên gửi có thể có đến N
packet không cần ACK
trong đường ống
(pipeline)
Bên nhận gửi rcvr ack
riêng biệt (individual
ack) cho mỗi packet
Bên nhận duy trì bộ định
thì cho mỗi packet
không được ACK
Khi bộ định thì của
packet nào hết hạn, thì
chỉ truyền lại packet
không được ACK đó
Tầng Transport 3-47
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 packet liên tiếp không cần
ACK được cho phép
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-48
GBN: sender extended FSM
Wait
start_timer
udt_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)
start_timer
nextseqnum++
}
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
&& corrupt(rcvpkt)
L
Tầng Transport 3-49
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 đệm): không bộ nhớ đệm bên nhận!
Gửi lại với số thứ tự xếp hạng cao nhất
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnum,ACK,chksum)
L
GBN: receiver extended FSM
Tầng Transport 3-50
Hoạt động GBN
send pkt0
send pkt1
send pkt2
send pkt3
(wait)
bên gửi bên nhận
receive pkt0, send ack0
receive pkt1, send ack1
receive pkt3, discard,
(re)send ack1rcv ack0, send pkt4
rcv ack1, send pkt5
pkt 2 timeout
send pkt2
send pkt3
send pkt4
send pkt5
Xloss
receive pkt4, discard,
(re)send ack1
receive pkt5, discard,
(re)send ack1
rcv pkt2, deliver, send ack2
rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
Tầng Transport 3-51
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, cho sự vận chuyển
trong thứ tự ngẫu nhiên đến tầng cao hơn
Bên gửi chỉ gửi lại các packet nào mà ACK
không được nhận
Bên gửi định thời cho mỗi packet không có gửi
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 gửi ACK
Tầng Transport 3-52
Lặp có lựa chọn: cửa sổ bên gửi và nhận
Tầng Transport 3-53
Lặp có lựa chọn
Dữ liệu từ tầng trên:
Nếu số thứ tự kế tiếp sẵn sàng
trong cửa sổ, gởi packet
timeout(n):
Gửi lại packet n, khởi độnglại bộ
định thì
ACK(n) trong
[sendbase,sendbase+N]:
Đánh dấu packet n là đã được
nhận
Nếu gói không ACK có n nhỏ
nhất, thì dịch chuyển cửa sổ
base đến số thứ tự không ACK
kế tiếp
Bên gửi
Packet n trong [rcvbase,
rcvbase+N-1]
Gửi ACK(n)
Không thứ tự: đệm
Thứ tự: truyền (cũng truyền
các gói đã đệm, có thứ tự),
dịch chuyển cửa sổ đến gói
chưa nhận kế tiếp
Packet n trong [rcvbase-
N,rcvbase-1]
ACK(n)
Ngược lại:
Bỏ qua
Bên nhận
Tầng Transport 3-54
Hành động của lặp lại có lựa chọn
gửi pkt0
gửi pkt1
gửi pkt2
gửi pkt3
(đợi)
Bên gửi Bên nhận
nhận pkt0, gửi ack0
nhận pkt1, gửi ack1
nhận pkt3, buffer,
gửi ack3nhận ack0, gửi pkt4
nhận ack1, gửi pkt5
pkt 2 timeout
gửi pkt2
Xloss
nhận pkt4, buffer,
gửi ack4
nhận pkt5, buffer,
gửi ack5
nhận pkt2; chuyển pkt2,
pkt3, pkt4, pkt5; gửi ack2
Ghi nhận ack3 đã đến
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
Ghi nhận ack4 đã đến
Ghi nhận ack4 đã đến
Q: việc gì xảy ra khi ack2 đến?
Tầng Transport 3-55
Lặp có lựa chọn:
tình huống
khó giải quyết
Ví dụ:
Số thứ tự: 0, 1, 2, 3
Kích thước cửa sổ=3
receiver window
(sau khi nhận)
sender window
(sau khi nhận)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout
Truyền lại pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2X
X
X
Sẽ chấp nhận packet
với số thứ tự 0
(b) oops!
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
Sẽ chấp nhận packet với
số thứ tự 0
0 1 2 3 0 1 2 pkt3
(a) no problem
Bên nhận không thể thấy phía bên gửi.
Hành vi bên nhận như nhau trong cả
2 trường hợp!
Có điều gì đó (rất) sai lầm!
Bên nhận không thấy
sự khác nhau trong 2
tình huống!
Dữ liệu trùng lặp
được chấp nhận như
dữ liệu mới (b)
Q: quan hệ giữa dãy số
thứ tự và kích thước
cửa sổ để tránh vấn
đề (b)?
Tầng Transport 3-56
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-57
TCP: tổng quan RFCs: 793,1122,1323, 2018, 2581
Dữ liệu full duplex:
Luồng dữ liệu đi 2 chiều
trong cùng 1 kết nối
MSS: kích thước tối đa
của segment (maximum
segment size)
Hướng kết nối:
Bắt tay (trao đổi các
thông điệp điều khiển)
khởi tạo trạng thái bên
gửi và nhận trước khi
trao đổi dữ liệu
Luồng được điều khiển:
Bên gửi sẽ không áp đảo
bên nhận
point-to-point:
Một bên gửi, một bên
nhận
Tin cậy, dòng byte
theo thứ tự (in-order
byte steam):
Không “ranh giới thông
điệp” (“message
boundaries”)
pipelined:
Điều khiển luồng và tắc
nghẽn của TCP thiết lập
kích thước cửa sổ
(window size)
Tầng Transport 3-58
Cấu trúc segment TCP segment
port nguồn port đích
32 bits
Dữ liệu ứng dụng
(độ dài thay đổi)
Số thứ tự
Số ACK
receive window
Urg data pointerchecksum
FSRPAU
head
len
Không
dùng
Tùy chọn (độ dài thay đổi)
URG: dữ liệu khẩn cấp
(thường không dùng)
ACK: ACK #
hợp lệ
PSH: push data now
(thường không dùng)
RST, SYN, FIN:
thiết lập kết nối
(setup, teardown
commands)
Số byte
bên nhận
sẵn sàng
chấp nhận
Đếm bằng
bytes dữ liệu
(không bằng
segment!)
Internet
checksum
(giống như UDP)
Tầng Transport 3-59
Số thứ tự TCP và ACK
Các số thứ tự:
Dòng byte “đánh số”
byte đầu tiên trong dữ
liệu của segment
Các ACK:
số thứ tự của byte kế
tiếp được mong đợi từ
phía bên kia
ACK tích lũy
Hỏi: làm thế nào để bên
nhận xử lý các segment
không theo thứ tự
Trả lời: TCP không đề
cập, tùy thuộc người
thực hiện
port nguồn port đích
số thứ tự
số ACK
checksum
rwnd
urg pointer
Segment vào, đến bên gửi
A
sent
ACKed
sent, not-
yet ACKed
(“in-flight”)
usable
but not
yet sent
not
usable
kích thước cửa sổ
N
sender sequence number space
port nguồn port đích
số thứ tự
số ACK
checksum
rwnd
urg pointer
Segment đi ra từ bên gửi
Tầng Transport 3-60
Số thứ tự TCP và ACK
User
Nhập
‘C’
host báo nhận
thành công “C”
được phản hồi
host báo nhận thành công ‘C’,
phản hồi ngược lại ‘C’
Tình huống telnet đơn giản
Host BHost A
Seq=42, ACK=79, data = ‘C’
Seq=79, ACK=43, data = ‘C’
Seq=43, ACK=80
Tầng Transport 3-61
TCP round trip time và timeout
Hỏi: làm cách nào để
thiết lập giá trị
TCP timeout?
Dài hơn RTT
Nhưng RTT thay đổi
Quá ngắn: timeout
sớm, không cần thiết
truyền lại
Quá dài: phản ứng
chập đối với việc mất
segment
Q: làm cách nào để ước
lượng RTT?
SampleRTT: thời gian
được đo từ khi truyền
segment đến khi báo nhận
ACK
Lờ đi việc truyền lại
SampleRTT sẽ thay đổi,
muốn RTT được ước lượng
“mượt hơn”
Đo lường trung bình của
một số giá trị vừa xảy
ra, không chỉ
SampleRTT hiện tại
Tầng Transport 3-62
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
R
TT
(m
ill
is
ec
on
ds
)
SampleRTT Estimated RTT
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
Đường trung bình dịch chuyển hàm mũ
(exponential weighted moving average)
ảnh hưởng của mẫu đã xảy ra sẽ làm giảm tốc
độ theo cấp số nhân
typical value: = 0.125
TCP round trip time và timeout
R
T
T
(
m
ill
is
e
co
n
d
s)
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
sampleRTT
EstimatedRTT
time (seconds)
Tầng Transport 3-63
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|
TCP round trip time và timeout
(typically, = 0.25)
TimeoutInterval = EstimatedRTT + 4*DevRTT
estimated RTT “biên an toàn”
Tầng Transport 3-64
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-65
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 segment pipelined
Các ack tích lũy
Bộ định thì truyền lại
đơn (single
retransmission timer)
Việc truyền lại được
kích hoạt bởi:
Sự kiện timeout
Các ack bị trùng
Lúc đầu khảo sát TCP
đơn giản ở bên gửi:
Lờ đi các ack bị trùng
Lờ đi điều khiển luồng
và điều khiển tắc
nghẽn
Tầng Transport 3-66
TCP các sự kiện bên gửi:
Dữ liệu được nhận từ ứng
dụng:
Tạo segment với số thứ
tự
Số thứ tự là số byte-
stream của byte dữ
liệu đầu tiên trong
segment
Khởi động bộ định thì
nếu chưa chạy
Xem bộ định thì như là
đối với segment sớm
nhất không được ACK
Khoảng thời gian hết
hạn: TimeOutInterval
timeout:
Gửi lại segment nào gây
ra timeout
Khởi động lại bộ định thì
ack được nhận:
Nếu ack thông báo đã các
segment không được ACK
trước đó
Cập nhật những gì được biết
là đã được nhận thành công
Khởi động lại bộ định thì
nếu có các segment vẫn
chưa được thông báo nhận
thành công
Tầng Transport 3-67
TCP bên gửi (đơn giản)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
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ì
Dữ liệu được nhận từ tầng application trên
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.
Khởi động bộ định thì
timeout
if (y > SendBase) {
SendBase = y
/* SendBase–1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments)
start timer
else stop timer
}
ACK received, with ACK field value y
Tầng Transport 3-68
TCP: tình huống truyền lại
Tình huống mất ACK
Host BHost A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8 bytes of data
Xtim
e
o
u
t
ACK=100
Timeout sớm
Host BHost A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8
bytes of data
ti
m
e
o
u
t
ACK=120
Seq=100, 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Tầng Transport 3-69
TCP: tình huống truyền lại
X
ACK tích lũy
Host BHost A
Seq=92, 8 bytes of data
ACK=100
Seq=120, 15 bytes of data
ti
m
e
o
u
t
Seq=100, 20 bytes of data
ACK=120
Tầng Transport 3-70
Sự phát sinh TCP ACK [RFC 1122, RFC 2581]
Sự kiện tại bên nhận
segment đến theo thứ tự với số
thứ tự được mong đợi. Tất cả
dữ liệu đến đã được ACK
segment đến theo thứ tự với số
thứ tự mong muốn. 1 segment
khác có ACK đang treo
Segment đến không theo thứ tự
với số thứ tự lớn hơn số được
mong đợi. Có khoảng trống
segment đến lắp đầy từng phần
hoặc toàn bộ khoảng trống
Hành động bên nhận TCP
ACK bị trễ. Đợi đến 500ms cho segment
kế tiếp. Nếu không có segment kế tiếp, gửi
ACK
Lập tức gởi lại một ACK tích lũy, thông báo
nhận thành công cho cả segment theo thứ
tự
Lập tức gởi lại ACK trùng, chỉ ra số thứ tự
của byte được mong đợi kế tiếp
Lập tức gửi ACK, với điều kiện là segment
đó bắt đầu ngay điểm có khoảng trống
Tầng Transport 3-71
TCP truyền lại nhanh
Chu kỳ time-out
thường tương đối dài:
Độ trễ dài trước khi
gởi lại packet bị mất
Phát hiện các
segment bị mất thông
qua các ACKs trùng.
Bên gửi thường gửi
nhiều segment song
song
Nếu segment bị mất,
thì sẽ có khả năng có
nhiều ACK trùng.
Nếu bên gửi nhận 3 ACK
của cùng 1 dữ liệu (“3
ACK trùng”), thì gửi lại
segment chưa được ACK
với số thứ tự nhỏ nhất
Có khả năng segment
không được ACK đã
bị mất, vì thế không
đợi đến thời gian
timeout
TCP truyền lại nhanh
Tầng Transport 3-72
X
Truyền lại nhanh sau khi
bên gửi nhận 3 lần ACK bị trùng
Host BHost A
Seq=92, 8 bytes of data
ACK=100
ti
m
e
o
u
t
ACK=100
ACK=100
ACK=100
TCP truyền lại nhanh
Seq=100, 20 bytes of data
Seq=100, 20 bytes of data
Tầng Transport 3-73
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-74
TCP điều khiển luồng
application
process
TCP socket
receiver buffers
TCP
code
IP
code
application
OS
Chồng giao thức bên nhận
application có thể loại bỏ dữ liệu
từ các bộ nhớ đệm socket TCP
.
chậm hơn TCP bên
nhận đang cung cấp
(bên gửi đang gửi)
từ bên gửi
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
truyền quá nhiều và quá nhanh
Điều khiển luồng
Tầng Transport 3-75
TCP điều khiển luồng
buffered data
free buffer spacerwnd
RcvBuffer
TCP segment payloads
to application process
Bên nhận “quảng cáo” không
gian bộ nhớ đệm còn trống
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 gửi
Kích thước của RcvBuffer
được thiết lập thông qua các
tùy chọn của socket (thông
thường mặc định là 4096 byte)
Nhiều hệ điều hành tự động
điều chỉnh RcvBuffer
Bên gửi giới hạn số lượng dữ
liệu không cần ACK tới giá
trị rwnd của bên nhận
Bảo đảm bộ đệm bên nhận sẽ
không bị tràn
Bộ đêm phía bên nhận
Tầng Transport 3-76
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-77
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
connection state: ESTAB
connection variables:
seq # client-to-server
server-to-client
rcvBuffer size
at server,client
application
network
connection state: ESTAB
connection Variables:
seq # client-to-server
server-to-client
rcvBuffer size
at server,client
application
network
Socket clientSocket =
newSocket("hostname","port
number");
Socket connectionSocket =
welcomeSocket.accept();
Tầng Transport 3-78
Hỏi: bắt tay 2-way sẽ luôn
luôn hoạt động trong
mạng hay không?
Độ chậm trễ biến thiên
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
Không thể “thấy” phía bên
kia
Bắt tay 2-way:
Let’s talk
OK
ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB
acc_conn(x)
Đồng ý thiết lập kết nối
Tầng Transport 3-79
Đồng ý thiết lập kết nối
Các tình huống thất bại khi bắt tay 2-way:
retransmit
req_conn(x)
ESTAB
req_conn(x)
Kết nối mở một nữa!
(không có client!)
client
terminates
server
forgets x
connection
x completes
retransmit
req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit
data(x+1)
accept
data(x+1)
choose x
req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client
terminates
ESTAB
choose x
req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept
data(x+1)
connection
x completes server
forgets x
Tầng Transport 3-80
TCP bắt tay 3-way
SYNbit=1, Seq=x
Chọn số thứ tự ban đầu, x
Gửi TCP SYN msg
ESTAB
SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
Chọn số thứ tự ban đầu, y
gửi TCP SYNACK
msg, acking SYN
ACKbit=1, ACKnum=y+1
SYNACK(x) vừa được nhận
cho hay server vẫn còn sống;
send ACK for SYNACK;
this segment may contain
client-to-server data
ACK(y) vừa được nhận
cho hay client vẫn sống
SYNSENT
ESTAB
SYN RCVD
Trạng thái client
LISTEN
Trạng thái server
LISTEN
Tầng Transport 3-81
TCP bắt tay 3-way: FSM
closed
L
listen
SYN
rcvd
SYN
sent
ESTAB
Socket clientSocket =
newSocket("hostname","port
number");
SYN(seq=x)
Socket connectionSocket =
welcomeSocket.accept();
SYN(x)
SYNACK(seq=y,ACKnum=x+1)
Tạo socket mới để giao tiếp
ngược lại với client
SYNACK(seq=y,ACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
Tầng Transport 3-82
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 vận
dụng
Tầng Transport 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1, seq=y
ACKbit=1; ACKnum=y+1
ACKbit=1; ACKnum=x+1
Chờ server
đóng
Vẫn có thể
gửi dữ liệu
Có thể không còn
gửi dữ liệu
LAST_ACK
CLOSED
TIMED_WAIT
timed wait
for 2*max
segment lifetime
CLOSED
TCP: đóng kết nối
FIN_WAIT_1 FINbit=1, seq=xCó thể không
còn gửi nhưng
vẫn còn nhận
dữ liệu
clientSocket.close()
Trạng thái client Trạng thái server
ESTABESTAB
Tầng Transport 3-84
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-85
Tắc nghẽn:
“nguồn gửi quá nhiều dữ liệu với tốc độ quá
nhanh đến mạng để được xử lý”
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!
Các nguyên lý điều khiển tắc nghẽn
(congestion control)
Tầng Transport 3-86
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 1
2 gửi, 2 nhận
1 router, các bộ đệm
không giới hạn
Khả năng của đường
link đầu ra: R
Không truyền lại
Thông lượng lớn nhất
của mỗi kết nối: R/2
Bộ đệm của đường
link đầu ra được chia
sẽ không giới hạn
Host A
dữ liệu gốc: lin
Host B
thông lượng: lout
R/2
R/2
l
o
u
t
lin R/2
d
e
la
y
lin
Độ trễ lớn khi tốc độ đến,
lin, vượt tới capacity
Tầng Transport 3-87
1 router, các bộ đệm có giới hạn
bên gửi truyền lại các packet bị time-out
application-layer input = application-layer output: lin = lout
transport-layer input bao gồm việc truyền lại: lin lin
Bộ đệm đường link
đầu ra được chia sẽ
giới hạn
Host A
lin : data gốc
Host B
loutl'in: data gốc, cộng với
dữ liệu được truyền lại
‘
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 2
Tầng Transport 3-88
Lý tưởng hóa: kiến thức
hoàn hảo
Bên gửi chỉ gửi khi bộ
nhớ đệm của router sẵn
sàng
Bộ nhớ đệm đường
link đầu ra được chia
sẽ giới hạn
lin : data gốc
loutl'in: data gốc, cộng với
dữ liệu được truyền lại
copy
free buffer space!
R/2
R/2
l
o
u
t
lin
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 2
Host B
A
Tầng Transport 3-89
lin : data gốc
loutl'in: data gốc, cộng với
dữ liệu được truyền lại
copy
Không còn bộ nhớ đệm!
Lý tưởng hóa: các packet bị mất
được biết đến 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 packet được
biết đến (known packet) đã bị
mất
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 2
A
Host B
Tầng Transport 3-90
lin : data gốc
loutl'in: data gốc, cộng với
dữ liệu được truyền lại
Không còn bộ nhớ đệm!
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 2
Lý tưởng hóa: các packet bị
mất được biết đến 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 packet
được biết đến (known
packet) đã bị mất
R/2
R/2lin
l
o
u
t
Khi gửi tại R/2, một
số packet được
truyền lại, nhưng
tiệm cận goodput vẫn
là R/2 (tại sao?)
A
Host B
Tầng Transport 3-91
A
lin
loutl'in
copy
Không còn bộ nhớ đệm!
timeout
R/2
R/2lin
l
o
u
t
Khi gửi tại R/2, một
số packet được
truyền lại, bao gồm
packet bị trùng mà
đã được gửi đi!
Host B
Thực tế: trùng lặp
Các packet có thể bị mất , bị bỏ
tại router bởi vì bộ nhớ đệm đầy
Thời gian time out bên gửi hết
sớm, gởi 2 bản giống nhau, cả 2
đều được gửi đi
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 2
Tầng Transport 3-92
R/2
l
o
u
t
Khi gửi tại R/2, một
số packet được
truyền lại, bao gồm
packet bị trùng mà
đã được gửi đi!
“chi phí” của tắc nghẽn:
Nhiều việc (truyền lại) cho “goodput”
Truyền lại không cần thiết: đường link mang nhiều bản
sao của packet
Giảm goodput
R/2lin
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 2
Thực tế: trùng lặp
Các packet có thể bị mất , bị bỏ
tại router bởi vì bộ nhớ đệm đầy
Thời gian time out bên gửi hết
sớm, gởi 2 bản giống nhau, cả 2
đều được gởi đi
Tầng Transport 3-93
4 người gởi
Các đường qua nhều hop
timeout/truyền lại
Hỏi: cái gì xảy ra khi lin và lin
’
tăng?
finite shared output
link buffers
Host A lout
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 3
Host B
Host C
Host D
lin : data gốc
l'in: data gốc, cộng với
dữ liệu được truyền lại
A: khi lin
’ màu đỏ tăng, tất cả packet
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
Tầng Transport 3-94
“Chi phí” khác của tắc nghẽn
Khi packet bị loại bỏ, bất kỳ “khả năng
truyền upstream được sử dụng cho packet
đó đều bị lãng phí!”
Nguyên nhân/Chi phí của tắc nghẽn:
tình huống 3
C/2
C/2
l
o
u
t
lin
’
Tầng Transport 3-95
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 end-end :
Không phản hồi rõ
ràng từ mạng
Tắc nghẽn được suy
ra từ việc quan sát
hệ thống đầu cuối có
mất mát hoặc bị trễ
Tiếp cận được thực
hiện bởi TCP
Điều khiển tắc nghẽn
có sự hỗ trợ của
mạng (network-
assisted) :
Các router cung cấp
phản hồi đến các hệ
thống đầu cuối
Bit đơn chỉ ra tắc
nghẽn (SNA, DECbit,
TCP/IP ECN, ATM)
Tốc độ sẽ gửi của
người gửi được xác
định rõ ràng
Tầng Transport 3-96
Case study: điều khiển tắc nghẽn
ATM ABR
ABR: available bit
rate:
“dịch vụ mềm dẻo”
Nếu đường đi của bên
gửi “chưa hết:
Bên gửi sẽ dùng
băng thông sẵn
sàng
Nếu đường đi của bên
gửi bị tắc nghẽn:
Bên gửi sẽ điều tiết
với tốc độ tối thiểu
được bảo đảm
Các cell RM (resource
management):
Được gởi bởi bên gửi, được
xen kẽ với các cell dữ liệu
Các bit trong RM cell
được thiết lập bởi các by
switche (“network-
assisted”)
NI bit: không tăng tốc
độ (tắc nghẽn nhẹ)
CI bit: tắc nghẽn rõ rệt
Các cell RM được trả về
bên gửi từ bên nhận với
nguyên vẹn các bit
Tầng Transport 3-97
Case study: điều khiển tắc nghẽn
ATM ABR
Trường 2 byte ER (tốc độ tường minh) trong cell RM
Switch bị tắc nghẽn có thể có giá trị ER thấp hơn trong cell
Do đó, tốc độ gửi của bên gửi được hổ trợ tối đa trên đường đi
Bit EFCI bit trong cell dữ liệu: được thiết lặp đến 1 trong
switch bị tắc nghẽn
Nếu cell dữ liệu đứng trước cell RM có thiết lặp EFCI, bên gửi sẽ
cài bit CI trong cell RM trả về
RM cell data cell
Tầng Transport 3-98
Chương 3 Nội dung
3.1 các dịch vụ tầng
Transport
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy
3.5 vận chuyển 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 (flow
control)
Quản lý kết nối
3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-99
TCP điều khiển tắc nghẽn: additive increase,
multiplicative decrease
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
additive increase: tăng cwnd bởi 1 MSS mỗi RTT cho
đến khi mất gói xảy ra
multiplicative decrease: giảm ½ cwnd sau khi mất gói
xảy ra
c
w
n
d
:
T
C
P
s
e
n
d
e
r
c
o
n
g
e
st
io
n
w
in
d
o
w
s
iz
e
AIMD saw tooth
behavior: thăm dò
băng thông
additively increase window size
. Cho đến khi mất gói xảy ra
(thì giảm 1/2 kích thước cửa sổ)
time
Tầng Transport 3-100
TCP điều khiển tắc nghẽn: chi tiết
Bên gửi giới hạn truyền tải:
cwnd thay đổi, chức năng
nhận biết tắc nghẽn trên
mạng
TCP tốc độ gửi:
Ước lượng: gửi các
byte cwnd, đợi ACK
trong khoảng thời
gian RTT, sau đó gởi
thêm các byte
last byte
ACKed sent, not-
yet ACKed
(“in-
flight”)
last byte
sent
cwnd
LastByteSent-
LastByteAcked
< cwnd
sender sequence number space
rate ~~
cwnd
RTT
bytes/sec
Tầng Transport 3-101
TCP Slow Start
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:
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
Host A
R
T
T
Host B
time
Tầng Transport 3-102
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 khả năng truyền của
mạng
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-103
Hỏi: khi nào tăng cấp
số nhân 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
TCP: chuyển từ slow start qua CA
Tầng Transport 3-104
Tóm tắt: TCP điều khiển tắc nghẽn
timeout
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
Truyền lại segmentt thiếu
L
cwnd > ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSS/cwnd)
dupACKcount = 0
Truyền segment(s) mới, khi được phép
new ACK.
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS
Truyền segment(s) mới, khi được phép
duplicate ACK
ssthresh= cwnd/2
cwnd = ssthresh + 3
Truyền lại segmentt thiếu
dupACKcount == 3
timeout
ssthresh = cwnd/2
cwnd = 1
dupACKcount = 0
Truyền lại segmentt thiếu
ssthresh= cwnd/2
cwnd = ssthresh + 3
Truyền lại segmentt thiếu
dupACKcount == 3cwnd = ssthresh
dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
Truyền lại segmentt thiếu
cwnd = cwnd+MSS
dupACKcount = 0
Truyền segment(s) mới, khi được phép
new ACKdupACKcount++
ACK trùng
L
cwnd = 1 MSS
ssthresh = 64 KB
dupACKcount = 0
New
ACK!
New
ACK!
New
ACK!
Tầng Transport 3-105
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
W
W/2
avg TCP thruput =
3
4
W
RTT
bytes/sec
Tầng Transport 3-106
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]:
➜ để đạ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
TCP throughput = 1.22
. MSS
RTT L
Tầng Transport 3-107
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
TCP Công bằng
Kết nối TCP 2
Tầng Transport 3-108
Tại sao TCP là công bằng?
2 session cạnh tranh nhau:
additive increase cho độ dốc tăng 1, khi thông lượng tăng
multiplicative decrease giảm thông lượng tương úng
R
R
Chia sẽ băng thông bằng nhau
Connection 1 throughput
Tránh tắc nghẽn: additive increase
Mất gói: giảm một nữa kích thước cửa sổ
Tránh tắc nghẽn: additive increase
Mất gói: giảm một nữa kích thước cửa sổ
Tầng Transport 3-109
Công bằng (tt)
Công bằng và UDP
Nhiều ứng dụng
thường không dùng
TCP
Không muốn tốc độ
bị điều tiết do điều
khiển tắc nghẽn
Thay bằng dùng
UDP:
Truyền audio/video
với tốc độ ổn định,
chịu được mất gói
Công bằng, các kết nối TCP
song song
ứng dụng có thể mở
nhiều kết nối song song
giữa 2 host
Trình duyệt web làm
điều này
Ví dụ: đường link với tốc
độ R hỗ trợ 9 kết nối:
ứng dụng mới yêu cầu 1 TCP, có
tốc độ R/10
ứng dụng mới yêu cầu 11 TCPs,
có tốc độ R/2
Tầng Transport 3-110
Chương 3: Tóm tắt
Các nguyên lý của các dịch vụ
tầng transport layer :
multiplexing, demultiplexing
Truyền dữ liệu tin cậy
Điều khiển luồng (flow
control)
Điều khiển tắc nghẽn
(congestion control)
Khởi tạo và thực hiện trên
Internet
UDP
TCP
Kế tiếp:
Tìm hiểu xong
các vấn đề mạng
“biên” (các tầng
application,
transport)
Chuẩn bị vào
phần mạng “lõi”
Các file đính kèm theo tài liệu này:
- chapter_3_vietnamese_4047.pdf