Khi đường truyền không dây ở trạng thái xấu, tỉ suất lỗi gói tin rất cao, việc phát gói tin có thể bị thất bại liên tiếp. Mỗi lần thất bại, snoop agent lại rút lui theo hàm mũ theo thuật toán tránh tắc nghẽn, nghĩa là tăng rto lên gấp đôi và sau khoảng thời gian đó sẽ phát lại gói tin. Sau một số lần rút lui, giá trị của rto có thể khá lớn; khi
đó, có thể xảy ra một số vấn đề không mong muốn như sau:
− Rút lui quá lâu, có thể kéo dài hết giai đoạn đường truyền xấu và hết cả giai
đoạn đường truyền tốt xảy ra sau đó, gây lãng phí dải thông.
− Thực tế, ngay trong trạng thái đường truyền xấu, tỉ suất lỗi gói tin cũng không phải là 100% và không theo phân bố đều, mà có phân bố hàm mũ [15]. Nếu
để rto tăng quá lớn, sẽ không tận dụng được dải thông.
Rõ ràng là snoop agent vừa phải “cố gắng” phát lại với một mức độ “kiên trì” nhất định, vừa phải thực hiện chính sách rút lui theo hàm mũ; tuy nhiên, chỉ nên rút lui một số lần, sau đó không tăng rto lên nữa. Nói cách khác, cần phải đặt một cận trên cho rto, nghĩa là giới hạn số lần rút lui.
Để việc phân tích tiếp theo được thuận tiện, chúng tôi đưa ra một số ký hiệu:
− te2e là thời gian trễ của gói tin trên chặng không dây, từ BS đến MH.
− te2e_ack là thời gian trễ của gói tin biên nhận trên chặng không dây.
− rttmin ≈ te2e + te2e_ack là thời gian khứ hồi trên chặng không dây khi đường truyền ở trong trạng thái tốt, với việc bỏ qua thời gian xử lý và thời gian chờ
của các gói tin và biên nhận (rttminởđây tương tự RTT ở (5-1)).
− rto(n) là thời gian hết giờ, khi snoop agent bị hết giờ lần thứ n liên tiếp.
− T(n) là tổng thời gian trễ của một gói tin, nếu phải phát lại đến lần thứ n mới thành công. Áp dụng các lập luận khi xây dựng (5-2), tại mục 5.1, chúng ta có: − rto(n) ≈ rttminx2n; T(n) = n e e i i e e n i t rtt t i rto 2 1 min 2 1 2 . ) ( + =∑ + ∑ = =
Giả sử cho te2e=5ms, rttmin ≈ 2.te2e = 10ms, thì có thể tính được rto(n) và T(n) với các giá trị khác nhau của n như trình bày trên bảng 5.1:
Bảng 5.1 Giá trị của rto(n) và T(n) (đơn vị ms) tính theo n
n 0 1 2 3 4 5 6 7 8 rto(n) = 10 20 40 80 160 320 640 1280 2560
T(n) = 5 15 35 75 155 315 635 1275 2555
− T(n) < RTO để tránh hiện tượng tương tác đồng hồ (đã trình bày tại mục 5.1), với RTO là thời gian hết giờ của bên gửi của kết nối TCP.
− rto(n) < TG để tránh việc rto(n) lớn đến mức, snoop agent chờ phát lại lâu hơn thời gian kéo dài trung bình của trạng thái đường truyền tốt, TG.
Việc sử dụng công cụ toán học, để xác định chính xác giá trị tối ưu của n, làm cho các ràng buộc trên được thoả mãn là một việc khó, vì các lý do sau:
− Về nguyên tắc, snoop agent không có cách nào biết được RTO của thực thể
gửi TCP; hơn nữa, đại lượng này cũng luôn thay đổi.
− TG nêu trên là giá trị trung bình thống kê, nó phụ thuộc vào nhiều yếu tố khác nhau.
Trong thực tế, cũng có nhà nghiên cứu sử dụng công cụ toán học để giải bài toán trên, bằng cách sử dụng một số giả thiết làm đơn giản bài toán, việc kiểm chứng thường được thực hiện bằng phương pháp đo hoặc mô phỏng [34], [45].
Chúng tôi chọn số lần rút lui (backoff) tối đa n như thế nào?
1. Thoả mãn điều kiện thứ nhất T(n)<RTO: dù không thể biết được chính xác giá trị của RTO, nhưng chắc chắn là ít nhất RTO cũng bằng 1 đơn vị thời gian của
đồng hồ phát lại của thực thể gửi (timer granularity), nằm trong khoảng 100ms..500ms (đã trình bày tại 5.1.2). Theo bảng 5.1, chúng ta phải chọn n ≤ 5. 2. Thoả mãn điều kiện thứ hai rto(n)<TG: Nếu lấy độ dài trung bình trạng thái
đường truyền tốt TG = 0.66s (sử dụng kết quả của [15]), thì theo bảng 5.1, chúng ta phải chọn n ≤ 6.
Dựa vào các lập luận nêu trên, trong mô phỏng, chúng tôi chọn số lần rút lui tối
đa n = 5.