Trong bài tiểu luận này chúng tôi sẽ trình bày Flow Random Early Drop (FRED) một biến thể của RED. Mục đích của nó là làm giảm những tác động không công bằng tại hàng đợi RED. Thay vì việc loại bỏ các gói tin một cách ngẫu nhiên trong hàng đợi, FRED tạo ra các phản hồi có chọn lọc để lọc ra những kết nối mà có một số lượng lớn các gói tin đang ở trong hàng đợi. Trong phạm vi của bài tiểu luận, chúng tôi sẽ trình bày lại ý tưởng và giải thuật của hàng đợi RED, những hạn chế của nó và những cải tiến trong hàng đợi FRED. Chúng tôi cũng sẽ sử dụng NS2 để mô phỏng cơ chế của nó.
Trang 1TIỂU LUẬN MÔN HỌC
MẠNG VÀ KỸ THUẬT TRUYỀN DỮ LIỆU
Đề tài:
TÌM HIỂU CƠ CHẾ QUẢN LÝ HÀNG ĐỢI FRED
(FLOW RANDOM EARLY DROP)
Trang 2M C L C Ụ Ụ
MỤC LỤC 2
I.Giới thiệu 3
II.Cơ chế quản lý hàng đợi RED 4
1.Cơ chế quản lý hàng đợi RED 4
2.Những nhược điểm của cơ chế quản lý hàng đợi RED 4
III.Cơ chế quản lý hàng đợi FRED 5
1.Ý tưởng: 5
2.Thuật toán: 5
IV.Mô phỏng 8
1.Mô phỏng 1: Hệ thống có 4 nút gửi theo giao thức TCP hoặc UDP 8
2.Mô phỏng 2: Hệ thống gồm 8 nút gửi theo giao thức TCP, 8 nút gửi theo giao thức UDP 9
V.Kết luận 14
PHỤ LỤC 1 – HƯỚNG DẪN CÀI ĐẶT FRED TRONG NS-2.29 16
Trang 3FLOW RANDOM EARLY DROP (FRED) Tóm tắt
Trong bài tiểu luận này chúng tôi sẽ trình bày Flow Random Early Drop (FRED) - một biến thể của RED Mục đích của nó là làm giảm những tác động không công bằng tại hàng đợi RED Thay vì việc loại bỏ các gói tin một cách ngẫu nhiên trong hàng đợi, FRED tạo ra các phản hồi có chọn lọc để lọc ra những kết nối mà có một số lượng lớn các gói tin đang ở trong hàng đợi
Trong phạm vi của bài tiểu luận, chúng tôi sẽ trình bày lại ý tưởng và giải thuật của hàng đợi RED, những hạn chế của nó và những cải tiến trong hàng đợi FRED Chúng tôi cũng sẽ sử dụng NS2 để mô phỏng cơ chế của nó
I Gi i thi u ớ ệ
Việc truyền dữ liệu trong mạng phụ thuộc nhiều yếu tố, trong đó có chiến lược cấp phát tài nguyên của mạng (đường truyền, bộ nhớ đệm ) Nếu khả năng tài nguyên có hạn và chiến lược cấp phát không thích nghi với trạng thái luôn thay đổi của mạng thì dễ dẫn đến tình trạng, dữ liệu dồn về một trạm nào đó của mạng, gây nên tắc nghẽn do khả năng tài nguyên của trạm không đáp ứng nổi Trong khi đó, tài nguyên của một số trạm nào đó có hiệu suất
sử dụng thấp do rất ít dữ liệu được chuyển qua nó Để tránh các tình trạng trên cần thiết phải
có một cơ chế kiểm soát luồng dữ liệu áp dụng cho toàn mạng, tức là điều khiển lưu thông trên mạng Nếu có tắc nghẽn xảy ra phải tiến hành điều khiển tắc nghẽn (congestion control)
để giải quyết tắc nghẽn đưa mạng về trạng thái bình thường
Để giải quyết tránh tắc nghẽn trong quá trình truyền thông trên mạng, chúng ta cần phải nghiên cứu các biện pháp xử lý tại các nút mạng và tại các trạm đầu cuối Trong đó có cơ chế quản lý hàng đợi
Việc giải quyết bài toán xếp hàng tại bộ đệm của các nút mạng là rất quan trọng trong quá trình điều khiển lưu thông từ đầu cuối đến đầu cuối, chủ yếu các gói tin bị dồn tại các nút mạng trung tâm, nên cần phải có các giải pháp sắp xếp tại hàng đợi để nhanh chóng giải phóng các gói tin một cách cân bằng và hợp lý đối với các dịch vụ khác nhau, đáp ứng tốt yêu cầu của người sử dụng Trong NS2, ở nút mạng có các tổ chức hàng đợi như là: FIFO,
PQ, classe-based, WFQ, RED Và với cơ chế mở, cho phép người sử dụng bổ sung thêm các cơ chế quản lý hàng đợi mới
Ở trong phần tiểu luận này, chúng tôi sẽ tập trung phân tích những nhược điểm của cơ chế quản lý hàng đợi RED được cung cấp bởi NS2 và giới thiệu một cơ chế quản lý hàng đợi được cải tiến từ RED là FRED để khắc phục một số nhược điểm trên
Trang 4II C ch qu n lý hàng đ i RED ơ ế ả ợ
1 C ch qu n lý hàng đ i RED ơ ế ả ợ
Bộ định tuyến cài đặt RED sử dụng hai giá trị là chặn trên và chặn dưới để đánh dấu các vị
định vị trí của mỗi gói tin gửi đến
Xác suất rơi gói tin được xác định theo các cách khác nhau tùy theo kích thước hàng
đợi avg:
<
≤
≤
−
−
<
≤
=
avg
avg avg
avg
th th
p th
th
max ,
max min
, min max
max ) min (
min 0
, 0
th th
tin một cách ngẫu nhiên tùy theo một hàm xác suất p
hủy bỏ là 0
hủy bỏ là 1
2 Nh ng nh ữ ượ c đi m c a c ch qu n lý hàng đ i RED ể ủ ơ ế ả ợ
RED thiên vị với các kết nối không tương thích (các kết nối yêu cầu băng thông rộng, và tốc
độ truyền không phụ thuộc vào việc có bị tắt nghẽn hay không)
Việc làm rơi các gói tin theo xác xuất p hoặc với xác xuất bằng 1 không phụ thuộc vào các luồng mạnh hay yếu
p 1
maxp
Trang 5III C ch qu n lý hàng đ i FRED ơ ế ả ợ
1 Ý t ưở ng:
Ý tưởng của FRED là áp dụng RED trên từng luồng, có luồng có nhiều gói tin lưu trên hàng đợi hơn sẽ có xác xuất rơi cao hơn, các luồng yếu hơn sẽ ít rơi hơn Mục đích là để làm giảm thiểu những tác động không công bằng tại hàng đợi RED
luồng i trên hàng đợi; sử dụng biến avgcq để tính số lượng gói tin trung bình của mỗi luồng
cho phép trên hàng đợi
maxq = 2
- FRED sẽ đánh rơi gói tin ở một trong các trường hợp sau:
hàng đợi lớn hơn 2 lần số gói tin trung bình của luồng đó trên hàng đợi (avg>=maxth) and (qleni>2*avgcq)
o Số gói tin của luồng i trên hàng đợi lớn hơn số gói tin trung bình của chính nó
and (strikei>1)
xem xét việc đánh rơi ngẫu nhiên trên luồng có số lượng gói tin ở hàng đợi lớn hơn (qleni >= MAX(minq, avgcq))
2 Thu t toán: ậ
Các hằng số:
wq = 0.002;
maxth = 2*minth;
Trang 6minq = 2 đối với các hàng đợi có kích cở nhỏ;
4 đối với các hàng đợi có kích cở lớn;
Các biến toàn cục:
q: kích cở hiện tại của hàng đợi;
time: thời gian thực hiện tại;
avg: giá trị kích thước trung bình trong hàng đợi;
count: số gói tin từ khi có gói trước đó bị rơi;
avgcq: giá trị kích thước trung bình của mỗi luồng trên hàng đợi;
Các biến trên mỗi hàng đợi:
for each arriving packet P:
if flow i = conn(P) has no state table
qleni = 0;
strikei = 0;
if queue is empty
calculate average queue length avg maxq = minth;
// define the next three lines as block A
if (avg >= maxth) {
maxq = 2;
}
//identify and manage non-adaptive flows:
if (qleni >= maxq ||
// define the next line as line B (avg >= maxth && qleni > 2*avgcq) ||
(qleni >= avgcq && strikei > 1)) { strikei++;
drop packet P;
return;
}
//operate in random drop mode:
if (minth <= avg < maxth) {
count = count + 1;
//only random drop from robust flows:
if (qleni >= MAX(minq, avgcq)) {
calculate probability pa:
pb = maxp(avg-minth)/(maxth-minth);
pa = pb/(1 - count * pb);
Trang 7//with probability pa:
drop packet P;
count = 0;
return;
} } else if (avg < minth) {
//no drop mode:
count = -1;
}
else {
// define this clause as block C //drop-tail mode:
count = 0;
//drop packet P;
return;
} if(qleni == 0)
Nactive++;
calculate average queue length
accept packet P;
for each departing packet P:
//calculate average queue length
if (qleni == 0) { Nactive ;
delete state table for flow i;
}
//calculate average queue length:
if (q || packet departed)
avg = (1-wq)*avg + wq*q;
else {
m = f(time - q_time);
avg = (1-wq)m * avg;
// original RED missed the following // action
q_time = time;
}
if (Nactive)
avgcq = avg / Nactive;
else
avgcq = avg;
avgcq = MAX(avgcq, 1);
if q == 0 && packet departed
q_time = time;
Trang 8IV Mô ph ng ỏ
1.
Mô ph ng 1 ỏ : H th ng có 4 nút g i theo giao th c TCP ho c UDP ệ ố ử ứ ặ
Thiết lập hệ thống như hình 1, với các thông số như sau:
- Các đường truyền từ nút 1, 2,3,4 đến 5 có băng thông là 100mbps, độ trể là 1ms
- Đường truyền từ 5 đến 6 có băng thông là 2mbps, độ trể là 2ms
-Hình 1 – Hệ thống mạng gồm 4 đường truyền với giao thức TCP
thực hiện việc mô phỏng với hàng đợi RED và FRED, sử dụng giao thức gửi TCP, ta ghi nhận được các thông số như sau:
Kích cở hàng đợi
Số gói tin được gửi
Số gói tin mất
Số gói tin rơi
Tỷ lệ % gói tin rơi
Bảng 1 – Bảng so sánh số gói tin rơi và số gói tin mất của FRED và RED với 4 nút gửi,
giao thức truyền TCP với các kích cở hàng đợi khác nhau
Trang 9Với kết quả mô phỏng trong trường hợp trên, ta nhận thấy với giao thức TCP trong trường hợp chỉ có ít nút gửi, và thay đổi kích thước hàng đợi lên 16/32/64 thì cơ chế quản lý hàng đợi FRED không có cải thiện đáng kể về tỉ lệ rơi gói tin so với cơ chế quản lý hàng đợi RED
rớt nhiều hơn
2.
Mô ph ng 2 ỏ : H th ng g m 8 nút g i theo giao th c TCP, 8 nút g i theo ệ ố ồ ử ứ ử giao th c UDP ứ
Ta thiết lập hệ thống gồm 16 nút gửi, 8 nút gửi theo giao thức TCP, 8 nút gửi theo giao thức UDP Cấu hình được thiết lập như sau:
- Mỗi nút gửi đến nút 17 đề có băng thông là 10mbps, độ trể là 2ms
- Từ nút 17 đến nút 18, ta thiết lập băng thông 8mbps, độ trể 10ms
- Từ nút 18 đến các nút 19.20.21 22 đều được thiết lập với băng thông 10mbps, độ trể 2ms
Hình 2 – Hệ thống gồm 16 nút gửi, kích cở bộ đệm nút 17 là 16 gói tin
Thực hiện mô phỏng trên NS2 và sử dụng Trace Graph để phân tích kết quả, ta thấy tỷ lệ gói tin rơi của cơ chế quản lý hàng đợi RED cao hơn hẳn so với cơ chế quản lý hàng đợi FRED (Bảng 2)
Kích cở
hàng đợi
Số gói tin được gửi
Số gói tin mất
Số gói tin rơi
Tỷ lệ % gói tin rơi
Trang 10RED 16 52045 733 634 1.2182%
Bảng 2 – Bảng so sánh số gói tin rơi và số gói tin mất của FRED và RED với giao thức
truyền TCP, UDP với kích cở hàng đợi là 16 gói tin
Đối với thông lượng chung thì RED có số gói tin truyền lớn hơn (Biểu đồ 1)
Trang 11Chú thích: : RED
Thời gian mô phỏng [Giây]
Trang 12Biểu đồ 1: Biểu đồ so sánh thông lượng chung
Đối với thông lượng gói tin bị rơi của cơ chế FRED thấp và đồng đều hơn so với thông lượng gói tin rơi của cơ chế RED (Biểu đồ 2)
Trang 13Chú thích: : RED
Thời gian mô phỏng [Giây]
Trang 14Biểu đồ 2: Biểu đồ so sánh thông lượng gói tin rơi
Đối với số gói tin bị rơi của các nút gửi, ta nhận thấy bằng cơ chế FRED thì số gói tin rơi ở các nút khá đồng đều nhau và thấp hơn hẳn so với số gói tin rơi ở cơ chế RED (Biểu đồ 3)
Cơ chế hàng đợi RED Cơ chế hàng đợi FRED
Biểu đồ 3: Biểu đồ so sánh số gói tin rơi của các nút gửi
V K t lu n ế ậ
Qua việc thực hiện mô phỏng trên NS2, sử dụng Trace Graph để phân tích kết quả, chúng tôi
đã tìm hiểu được cơ chế của hàng đợi FRED và rút ra một số nhận xét trong một số trường hợp nhất định như sau:
+ FRED thực sự tốt hơn RED đối với các hệ thống có nhiều nút gửi
+ Với mô hình này, sử dụng FRED sẽ giảm được số gói tin rơi và tỷ lệ các gói tin rơi ở các luồng là tương đối đồng đều nhau
Trang 15TÀI LIỆU THAM KHẢO
[1] Dong Lin and Robert Morris - “Dynamics of Random Early Detection”
[3] Floyd, S., Jacobson V - “Random Early Detection for Con-gestion Avoidance”
IEEE/ACM Transactions on Networking August 1993
[4] Slide “Adaptive Adaptive RED”
[5] Slide “Random Early Detection”, Presented by Bob Kinicki
Trang 16PH L C 1 – H Ụ Ụ ƯỚ NG D N CÀI Đ T FRED TRONG NS-2.29 Ẫ Ặ
Download File fred.h và fred.cc từ địa chỉ
http://www.cs.cmu.edu/~istoica/csfq/disciplines-ns2.1b7a.tar.gz và tiến hành theo các
bước sau:
Bước 1: Copy 2 file fred.h và fred.cc vào thư mục \ns-allinone-2.29\ns-2.29\queue
Bước 2: Bổ sung các giá trị mặt định vào file \tcl\lib\ns-default.tcl
# Ion Stoica (06/11/98) FRED/FREDL parameters
#
-Queue/FRED set bytes_ false
Queue/FRED set queue-in-bytes_ false
Queue/FRED set thresh_ 5
Queue/FRED set maxthresh_ 15
Queue/FRED set mean_pktsize_ 500
Queue/FRED set q_weight_ 0.002
Queue/FRED set wait_ true
Queue/FRED set linterm_ 10
Queue/FRED set setbit_ false
Queue/FRED set drop-tail_ false
Queue/FRED set doubleq_ false
Queue/FRED set dqthresh_ 50
# FRED: many-flows_ == 0
# FREDL (FRED version for many flows): many_flows_ == 1
Queue/FRED set many-flows_ 0
Bước 3: Bổ sung đoạn code sau vào file \tcl\lib\ns-lib.tcl
Tìm đến đoạn code sau, trong phần simplex-link:
if {[string first "RED" $qtype] != -1} {
$q link [$link_($sid:$did) set link_]
}
bổ sung đoạn code sau đây sau đọa code ở trên:
# FRED-begin
if {[string first "FRED" $qtype] != -1} {
$q link [$link_($sid:$did) set link_]
}
if {[string first "FREDL" $qtype] != -1} {
$q link [$link_($sid:$did) set link_]
}
# FRED-end
Bước 4: Bổ sung đọan code sau trong file tcl\lib\ns-queue.tcl
Trang 17Tìm đến đoạn code sau (trong phần new-flow)
if { $type == "RED" } {
set bw [$link_ set bandwidth_]
$q set ptc_ [expr $bw / (8 * [$q set mean_pktsize_])]
}
bổ sung đoạn code sau ngay sau phần trên:
# FRED-begin
if { $type == "FRED" } {
set bw [$link_ set bandwidth_]
$q set ptc_ [expr $bw / (8 * [$q set mean_pktsize_])]
}
if { $type == "FREDL" } {
set bw [$link_ set bandwidth_]
$q set ptc_ [expr $bw / (8 * [$q set mean_pktsize_])]
}
# FRED-end
Bước 5: Mở file Makefile.in và Makefile, tìm đến đoạn
queue/red-pd.o queue/pi.o queue/vq.o queue/rem.o \ Xuống dòng và bổ sung dòng code sau và ngay sau đoạn đó:
queue/fred.o \
Bước 6: Biên dịch lại bằng các dòng lệnh sau:
./configure
make clean
make depend
make