Professional Documents
Culture Documents
Chapter - 3 - Vietnamese - 1908
Chapter - 3 - Vietnamese - 1908
Chapter - 3 - Vietnamese - 1908
network
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: địa physical
chỉ IP B
bit dư 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
tổng 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
Lưu ý: khi cộng các số, bit nhớ ở phía cao nhất cần
được thêm vào kết quả
Các đặc điểm của kênh truyền không tin cậy sẽ xác
định sự phức tạp của giao thức truyền dữ liệu (data
transfer protocol) (rdt) Tầng Transport 3-21
Các nguyên lý truyền dữ liệu tin cậy
Quan trọng trong các tầng Ứng dụng, Vận
chuyển và Liên kết dữ liệu
Top 10 danh sách các chủ đề mạng quan trọng
Các đặc điểm của kênh truyền không tin cậy sẽ xác
định sự phức tạp của giao thức truyền dữ liệu (data
transfer protocol) (rdt) Tầng Transport 3-22
Các nguyên lý truyền dữ liệu tin cậy
quan trọng trong các tầng Ứng dụng, Vận
chuyển và Liên kết dữ liệu
Top 10 danh sách các chủ đề mạng quan trọng
Các đặc điểm của kênh truyền không tin cậy sẽ xác
định sự phức tạp của giao thức truyền dữ liệu (data
transfer protocol) (rdt) Transport Layer 3-23
Truyền dữ liệu tin cậy: bắt đầu
rdt_send(): được gọi bởi tầng trên, deliver_data(): được gọi bởi rdt để
(tầng Ứng dụng). Chuyển dữ liệu cần chuyển dữ liệu đến tầng cao hơn
truyền đến tầng Ứng dụng bên nhận
Bên Bên
gửi nhận
udt_send(): được gọi bởi rdt, để rdt_rcv(): được gọi khi gói dữ liệu
truyền các gói trên kênh không tin đến kênh của bên nhận
cậy đến nơi nhận
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
(c) Mất ACK (d) Thời gian chờ quá ngắn / delayed ACK
U L/R .008
sender = = = 0.00027
RTT + L / R 30.008
U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008
ACK(n): thông báo nhận tất cả các packet lên đến n, bao
gồm n số thứ tự - “ACK tích lũy”(“cumulative ACK”)
Có thể nhận ACK trùng (xem bên nhận)
Định thì cho packet sớm nhất đang trong tiến trình xử lý
(oldest in-flight pkt)
timeout(n): truyền lại packet n và tất cả các packet có số
thứ tự cao hơn trong cửa sổ (window)
Tầng Transport 3-47
GBN: trạng thái mở rộng tại bên gửi
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
}
Λ else
refuse_data(data)
base=1
nextseqnum=1
timeout
start_timer
Wait
udt_send(sndpkt[base])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-1])
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
Tầng Transport 3-48
GBN: trạng thái mở rộng tại bên nhận
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
Λ && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
tình huống
(sau khi nhận) (sau khi nhận)
pkt0
khó giải quyết
0123012
0123012 pkt1 0123012
pkt2
Ví dụ:
0123012 0123012
0123012
pkt3
Số thứ tự: 0, 1, 2, 3
0123012
X
0123012
Kích thước cửa sổ=3 pkt0 Sẽ chấp nhận packet với
số thứ tự 0
(a) Không sự cố
Bên nhận không thấy
sự khác nhau trong 2 Bên nhận không thể thấy phía bên gửi.
tình huống! Hành vi bên nhận như nhau trong cả
2 trường hợp!
Dữ liệu trùng lặp Có điều gì đó (rất) sai lầm!
được chấp nhận như 0123012 pkt0
dữ liệu mới (b) 0123012 pkt1 0123012
0123012 pkt2 0123012
X
Q: quan hệ giữa dãy số
0123012
X
thứ tự và kích thước timeout
Truyền lại pkt0 X
cửa sổ để tránh vấn 0123012 pkt0
Sẽ chấp nhận packet
đề (b)? (b) Lỗi!
với số thứ tự 0
thực hiện
checksum urg pointer
User
Nhập
‘C’ Seq=42, ACK=79, data = ‘C’
host báo nhận thành công ‘C’,
phản hồi ngược lại ‘C’
300
250
RTT (milliseconds)
200
sampleRTT
EstimatedRTT
150
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
Tầng Transport 3-62
time (seconds)
SampleRTT Estimated RTT
TCP round trip time và timeout
Khoảng thời gian timeout (timeout interval):
EstimatedRTT cộng với “biên an toàn”
Sự thay đổi lớn trong EstimatedRTT -> an toàn biên lớn hơn
Ước lượng độ lệch SampleRTT từ EstimatedRTT:
DevRTT = (1-β)*DevRTT +
β*|SampleRTT-EstimatedRTT|
(typically, β = 0.25)
if (y > SendBase) {
SendBase = y
/* SendBase–1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments)
start timer
else stop timer
} Tầng Transport 3-67
TCP: tình huống truyền lại
Host A Host B Host A Host B
SendBase=92
Seq=92, 8 bytes of data Seq=92, 8 bytes of data
timeout
ACK=100
X
ACK=100
ACK=120
SendBase=120
ACK=100
X
ACK=120
segment đến theo thứ tự với số Lập tức gởi lại một ACK tích lũy, thông báo
thứ tự mong muốn. 1 segment nhận thành công cho cả segment theo thứ
khác có ACK đang treo tự
Segment đến không theo thứ tự Lập tức gởi lại ACK trùng, chỉ ra số thứ tự
với số thứ tự lớn hơn số được của byte được mong đợi kế tiếp
mong đợi. Có khoảng trống
segment đến lắp đầy từng phần Lập tức gửi ACK, với điều kiện là segment
hoặc toàn bộ khoảng trống đó bắt đầu ngay điểm có khoảng trống
ACK=100
timeout
ACK=100
ACK=100
ACK=100
Seq=100, 20 bytes of data
IP
Điều khiển luồng code
bên nhận kiểm soát bên gửi, để
bên gửi sẽ không làm tràn bộ
nhớ đệm của bên nhận bởi từ bên gửi
truyền quá nhiều và quá nhanh Chồng giao thức bên nhận
application application
network network
choose x choose x
req_conn(x) req_conn(x)
ESTAB ESTAB
retransmit acc_conn(x) retransmit acc_conn(x)
req_conn(x) req_conn(x)
ESTAB ESTAB
data(x+1) accept
req_conn(x)
retransmit data(x+1)
data(x+1)
connection connection
client x completes server x completes server
client
terminates forgets x terminates forgets x
req_conn(x)
ESTAB ESTAB
data(x+1) accept
Kết nối mở một nửa! data(x+1)
(không có client!)
Tầng Transport 3-79
TCP bắt tay 3 lần (3-way handshake)
closed
Socket connectionSocket =
welcomeSocket.accept();
Λ Socket clientSocket =
SYN(x) newSocket("hostname","port
number");
SYNACK(seq=y,ACKnum=x+1)
Tạo socket mới để giao tiếp SYN(seq=x)
ngược lại với client listen
SYN SYN
rcvd sent
SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
Λ
LAST_ACK
FINbit=1, seq=y
TIMED_WAIT Có thể không còn
gửi dữ liệu
ACKbit=1; ACKnum=y+1
Thời gian chờ tối đa
bằng 2 lần thời gian CLOSED
sống của segment
CLOSED
R/2
delay
λout
Host A
λout
Bên gửi chỉ gửi khi bộ
nhớ đệm của router sẵn
sàng λin R/2
Host B
Tầng Transport 3-89
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Lý tưởng hóa: các packet có thể R/2
bị mất hoặc bị loại bỏ tại
router bởi vì bộ nhớ đệm bị Khi gửi tại R/2, một
số packet được
đầy
λout
truyền lại, nhưng
Bên gửi chỉ gởi lại các gói đã tiệm cân goodput vẫn
là R/2 (tại sao?)
bị mất
λin R/2
Host B
Tầng Transport 3-90
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Thực tế: trùng lặp R/2
Các packet có thể bị mất , bị bỏ
Khi gửi tại R/2, một
tại router bởi vì bộ nhớ đệm đầy số packet được
λout
truyền lại, bao gồm
Thời gian time out bên gửi hết
packet bị trùng đã
sớm, gởi 2 bản giống nhau, cả 2 được gửi đi!
đều được gửi đi
λin R/2
λin
timeout
copy λ'in λout
Host B
Tầng Transport 3-91
Nguyên nhân/Hệ quả của tắc nghẽn:
tình huống 2
Thực tế: trùng lặp R/2
Các packet có thể bị mất , bị bỏ
Khi gửi tại R/2, một
tại router bởi vì bộ nhớ đệm đầy số packet được
λout
Thời gian time out bên gửi hết truyền lại, bao gồm
packet bị trùng đã
sớm, gởi 2 bản giống nhau, cả 2 được gửi đi!
đều được gởi đi
λin R/2
Host D
Host C
λin’ C/2
AIMD saw tooth (thì giảm một nữa kích thước cửa sổ)
cwnd: TCP sender
behavior: thăm dò
băng thông
RTT
initially cwnd = 1 MSS
Gấp đôi cwnd mỗi RTT
Được thực hiện bằng
cách tăng cwnd cho mỗi
ACK nhận được
Tóm lại: tốc độ ban đầu
chậm, nhưng nó sẽ tăng
lên theo cấp số nhân time
3 W
avg TCP thruput = bytes/sec
4 RTT
W
W/2
Router cổ chai
Khả năng R
Kết nối TCP 2
Connection 1 throughput R
Tầng Transport 3-108
Công bằng (tt)
Công bằng và UDP Công bằng, các kết nối
Nhiều ứng dụng TCP song song
thường không dùng ứng dụng có thể mở
TCP nhiều kết nối song song
Không muốn tốc độ giữa 2 host
bị điều tiết do điều
khiển tắc nghẽn Trình duyệt web làm điều