ns2 report
TRANSCRIPT
BÁO CÁO CÁ NHÂN
BÀI 4
Số thứ tự:
Họ và tên: Lương Ngọc Sơn
Lớp : ĐTVT – 08
MSSV: 20102094
GVHD: TS. Phạm Văn Tiến
Nội dung đóng góp:
- Tìm hiểu và viết code tính toán tỷ lệ mất gói trên từng luồng.
Công việc thực hiện được:
- Tìm hiểu về công cụ NS-2 và 1 số công cụ hỗ trợ việc mô phỏng và phân tích
mạng (NAM, xgraph, awk,…)
- Thực hiện xây dựng topology theo yêu cầu của bài tập và chạy mô phỏng trên
NAM.
- Tìm hiểu cấu trúc file bám vết (*.tr), từ đó viết code thực hiện việc tính toán và vẽ
đồ thị tỷ lệ mất gói trên từng luồng.
1. Cấu trúc file trace:
Khi bám vết trong 1 file ACSII đầu ra, trace được tổ chức thành 12 trường (hình vẽ)
Event: Sự kiện xảy ra
+ : 1 gói được xếp vào hàng đợi.
- : 1 gói đi ra khỏi hàng đợi.
r : 1 gói được nhận toàn bộ ở nút đích
d : 1 gói bị drop tại hang đợi.
Time: Thời điểm xảy ra sự kiện
From node: Nút gửi gói.
To node: Nút nhận gói.
Pkt type: Loại gói được truyền.
Pkt size: Kích thước gói được truyền.
Flags: Cờ.
Fid: (flow id): Mã của luồng (được định nghĩa trong file *.tcl)
Src addr: Địa chỉ nguồn dưới dạng “node.port”
Dst addr: Địa chỉ đích dưới dạng “node.port”
Seq num: Số thứ tự gói tin của giao thức lớp mạng
Pkt id: Mã của gói tin. (Mỗi gói tin được đánh 1 mã duy nhất)
Để ghi dữ liệu bám vết vào file trace ta cần khai báo dòng lệnh sau trong file *.tcl
set tracefile [open out.tr w]
$ns trace-all $tracefile
2. Ngôn ngữ AWK:
- AWK là ngôn ngữ lập trình giúp xử lý dữ liệu dạng chữ trong text file theo nguyên
lý khớp mẫu. Khi phân tích 1 file bám vết (*.tr), các cột dữ liệu trong file được
xem như là 1 trường và được đặt tên $1 cho cột 1, $2 cho cột 2, …. Như vậy trong
file trace: $1 ứng với trường event, $2 ứng với trường time,….
- Để vẽ được đồ thị biễu diễn 1 thông số mạng nào đó, trước hết ta cần trích xuất dữ
liệu từ file bám vết, từ đó tính toán thông số cần vẽ đồ thị và đưa giá trị của thông
số đó vào 1 file dữ liệu khác rồi thực hiên vẽ đồ thị bằng công cụ XGRAPH. Cụ
thể ta cần chèn những dòng lệnh sau trong file *.tcl:
#Tạo file dữ liệu để lưu trữ giá trị của thông số cần vẽ đồ thị
set losts1 [open lost_s_1.tr w]
proc finish {} {
…
#Trích xuất dữ liệu từ file bám vết out.tr
exec awk -f lost_s1.awk out.tr
#Vẽ đồ thị từ file dữ liệu lost_s_1.tr
exec xgraph lost_s_1.tr -bg white -geometry 800x400 -t
"Lost S1" -x "s" -y "%" &
...
}
- Câu lệnh: print $2 " " rate >> "lost_s_1.tr" trong file *.awk giúp ghi
giá trị của thông số cần vẽ đồ thị vào file dữ liệu.
3. Tính toán tỷ lệ mất gói tại từng luồng:
Tỷ lệ mất gói được xác định là tỷ lệ giữa số gói bị drop với tổng số gói truyền
lost= số góibị droptổng số gói truyền
∗100
Code file lost_s1.awk tính toán tỷ lệ mất gói trên luồng s1-d:
BEGIN{ npacket=0;dpacket=0;time=0;}
{
if (($1=="+")&&($3=="0")&&($8=="1"))
{npacket=npacket+1;}
if (($1=="d")&&($8=="1"))
{dpacket=dpacket+1;}
if($2>time+1.0)
{
rate= 100*dpacket/npacket;
dpacket=0;
npacket=0;
time=$2;
print $2 " " rate >> "lost_s_1.tr";
}
}
END{}
Code file lost_s2.awk; lost_s3.awk tính toán tỷ lệ mất gói trên luồng s2-d & s3-d3 tương
tự như trên.
4. Kết quả & nhận xét:
Đồ thị tỉ lệ mất gói của luồng từ s1-d với Queue=50 và sau 20s tăng 20%
Đồ thị tỉ lệ mất gói của luồng từ S2-d với Queue=50 và sau 20s tăng 20%
Đồ thị tỉ lệ mất gói của luồng s3-d3 với Queue=50 và sau 20s tăng 20%
Nhận xét:
Tỉ lệ mất gói của nguồn S1 và S2 là thấp vì mỗi khi có mất gói thì lập tức nó sẽ
giảm tốc độ phát xuống để tránh mất gói, cụ thể sẽ giảm 1 nửa nếu như phát hiện mất gói
và sẽ tăng tuyến tuyến tính đến khi mất gói, quá trình đó lặp đi lặp lại. Mất gói của 2
nguồn S1 và S2 là như nhau bởi vì 2 nguồn đều có cơ chế điều khiển luồng chống tắc
nghẽn, và cùng chia sẻ băng thông đường truyền node 4-node 5 nên tỉ lệ mất gói của
chúng là như nhau.
Mô hình hàng đợi SFQ là mô hình không thức tế.
Tỉ lệ mất gói trước và sau tăng hàng đợi 20% sau mỗi chu kỳ là không đổi. Do
hàng đợi SFQ không có định nghĩa hàng đợi. SFQ chỉ hữu ích trong trường hợp giao
diện mạng thực tế của bạn là thực sự đầy đủ! Nếu không thì sẽ không có hàng đợi trên
máy tính Linux của bạn và do đó không có hiệu lực.