Bài Tập Lớn Truyền Số Liệu
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO BÀI TẬP LỚN MÔN CƠ SỞ TRUYỀN SỐ LIỆU
ĐỀ BÀI SỐ 1
GIẢNG VIÊN HƯỚNG DẪN: TS PHẠM VĂN TIẾN
NHÓM SINH VIÊN THỰC HIỆN: NHÓM SỐ 8
Nguyễn Hữu Quang ĐT12 - K54 20092085
Trang 2MỤC LỤC
I Đề bài và yêu cầu ……… 3
II Phân tích yêu cầu……… 4
1 Phân tích yêu cầu……… 4
2 Thực hiện yêu cầu……… 4
III Lập kế hoạch và phân công công việc……… 5
1 Lập kế hoạch……… 5
2 Phân công công việc ……… 5
IV Quá trình thực hiện………6
1 Giao thức truyền dẫn UDP……… 6
2 Các phương thức định tuyến………6
3 Theo dõi sự kiện trên hệ thống và công cụ Xgraph………7
4 Thực hiện các yêu cầu……….9
a Tỷ lệ chiếm dụng bộ đệm……… 9
b Phân bố Poisson……… 10
c Giảm gói tin……….10
d Băng thông của từng luồng……… 12
e Trễ mỗi luồng……… 12
5 Thực hiện mô phỏng……… 13
a Kịch bản mô phỏng………13
b Kết quả mô phỏng……… 14
Kết luận……… 21
Tài liệu tham khảo……….22
Trang 3I Đề bài và yêu cầu
Cho mạng thông tin với cấu hình như Hình 1 dưới đây Nút s1 phát ra luồng gói gửi tới đầu cuối d1, trong khi nút s2 tạo ra hai luồng gói gửi tới nút d1 và tới nút d2 Cả 3 luồng thông tin nói trên đều sử dụng giao thức truyền UDP Kích thước gói do s1 và s2 phát ra tương ứng là 1300 byte và 1000 byte; số lượng gói phát ra trên mỗi luồng tuân theo phân bố Poisson, tốc độ lần lượt là 1000 gói/s, 1500 gói/s và 2000 gói/s
1 Dựng kịch bản mô phỏng hệ thống thông tin nói trên với thời gian mô phỏng dài hơn 5 phút
2 Thu thập số liệu mô phỏng và vẽ đồ thị tỷ lệ chiếm dùng các bộ đệm ở tất cả các
bộ định tuyến
3 Trong một phiên chạy mô phỏng, tốc độ phát sinh gói của mỗi luồng giảm đi 50 gói/s sau mỗi khoảng thời gian 30s, thống kê và vẽ đồ thị hiệu suất sử dụng băng thông của các liên kết trong mỗi khoảng thời gian đó
4 Thay đổi tham số chiều dài gói và tốc độ phát sinh gói, vẽ đồ thị biểu diễn độ trễ truyền thông của các luồng Nhận xét kết quả thu được
Trang 4II Phân tích yêu cầu
1 Phân tích yêu cầu
Yêu cầu chung : cài đặt ubuntu , cài đặt ns2 , tìm hiểu các thao tác cơ bản trên hệ điều hành mã nguồn mở, các mô phỏng cơ bản của ns2
Yêu cầu đề bài :
- Tạo được mô hình mạng thông tin trên ns2
- Tìm hiểu về định tuyến
- Thiết lập được số lượng gói phát sinh theo phân bố Poisson
- Tìm hiểu về các giao thức truyền thông UDP
- Các hàm, thủ tục để thay đổi số lượng gói phát sinh
- Tìm hiểu về công cụ xử lý số liệu và vẽ đồ thị trên ns2
2 Thực hiện yêu cầu
a Tỷ lệ chiếm dụng các bộ đệm được tính như sau:
𝑞𝑢𝑒𝑢𝑒𝐿𝑒𝑛𝑔𝑡ℎ
Với queueLength là chiều dài hàng đợi tức thời
Chiều dài hàng đợi tức thời bằng số gói đến trừ số gói đi và số gói bị rớt
b Giảm tốc độ gói và hiệu suất sử dụng băng thông
- Để giảm tốc độ gói : dùng 1 thủ tục và cứ sau 30s thì thủ tục đó được gọi lại 1 lần
- Tính hiệu suất sử dụng băng thông : Tính băng thông của từng luồng bằng cách
sử dụng Agent LossMonitor lưu lại những gói đã truyền, sau khi tính được băng thông trong 1 chu kỳ thì làm sạch Agent và thực hiện lại ở chu kỳ tiếp theo
c Tính độ trễ truyền thông của các luồng
Xây dựng hàm để trích xuất dữ liệu trong trace-file tr Độ trễ được tính bằng thời điểm nhận được gói tin trừ đi thời điểm phát gói tin
Trang 5III Lập kế hoạch và phân công công việc
1 Lập kế hoạch
Bài tập lớn thực hiện trong vòng 7 tuần (bắt đầu từ tuần 5 và kết thúc vào tuần 12)
- Tuần 1: Cài đặt ubuntu và ns2, tìm hiểu các thao tác làm việc đơn giản trên ubuntu, bầu trưởng nhóm, tìm hiểu yêu cầu và xây dựng kế hoạch thực hiện bài tập lớn
- Tuần 2: Tìm hiểu giao thức UDP, phát gói tin theo phân bố Poisson Thực hiện
mô phỏng 1 số hệ thống thông tin đơn giản trên ns2
- Tuần 3: Code mô hình mạng thông tin của bài số 1
- Tuần 4: Tìm cách gắn các nguồn dữ liệu vào các node và truyền như yêu cầu
đề bài
- Tuần 5, 6: Thu thập và tính toán số liệu về hiệu suất sử dụng hàng đời, băng thông, độ trễ truyền thông của mạng và vẽ đồ thị từ số liệu thu thập được
- Tuần 7: Hoàn thiện và kiểm tra lại code, viết báo cáo và chuẩn bị bảo vệ
2 Phân công công việc
Công việc chung: tất cả các thành viên trong nhóm đều phải cài đặt ubuntu và ns2, mô phỏng được các hệ thống mạng đơn giản; tìm hiểu giao thức truyền UDP, báo cáo công việc mình làm được hàng tuần đối với các bạn còn lại trong nhóm, họp nhóm định kỳ 2lần/tuần vào cuối mỗi buổi học và chiều thứ 7
Công việc từng thành viên
1 Nguyễn Hữu Quang
Bùi Xuân Quyết
Giảm tốc độ phát sinh gói của mỗi luồng đi 50 gói/s sau mỗi khoảng thời gian 30s, thống kê và
vẽ đồ thị hiệu suất sử dụng băng
Hoàn thành
Trang 6thông của các liên kết trong mỗi khoảng thời gian đó
3 Trần Ngọc Quân
Phạm Hồng Sơn
Xây dựng tiến trình Poisson, vẽ
đồ thị biểu diễn độ trễ truyền thông của các luồng
Hoàn thành
IV Quá trình thực hiện
1 Giao thức truyền dẫn UDP
Giao thức UDP (User Datagram Protocol) hay còn gọi là giao thức gói người dùng
là một trong hai giao thức cốt lõi của giao thức TCP/IP, cho phép người dùng có thể gửi những dữ liệu ngắn được gọi là datagram từ máy tính này đến máy tính khác UDP không đảm bảo sự tin cậy và thứ tự truyền nhận, các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo Tuy nhiên, UDP nhanh và hiệu quả hơn đối với những mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian, giao thức này hữu dụng đối với việc trả lời các truy vấn với số lượng lớn người yêu cầu
Những ứng dụng phổ biến sử dụng UDP như DNS (Domain Name System), ứng dụng streaming media, Voice over IP, Trivial File Transfer Protocol (TFTP), và game trực tuyến
2 Các phương thức định tuyến
NS2 thực thi ba chính sách định tuyến: static routing (định tuyến tĩnh), session routing (định tuyến phiên), DV routing (định tuyến véc tơ khoảng cách) và Link-state (trạng thái liên kết)
Dùng phương thức rtproto trong lớp Simulator để xác định chính sách định tuyến
được dùng
o $ns rtproto <type>
o type: Static, Session, DV, cost, multicast-path, LS.
Trang 7- Link-state : sử dụng thuật toán SPF (shortest path first) cập nhật các thông tin
về cơ chế định tuyến cho các node trên hệ thống mạng Mỗi node sẽ gửi bảng
mô tả trạng thái của các liên kết riêng của mình lên mạng Chỉ các thay đổi mới được gửi đi Ưu điểm là tốc độ cao, không chiếm dụng băng thông nhiều như thuật toán DV tuy nhiên thực hiện phức tạp Đối với mô hình lớn thuật toán này có thể làm tăng độ trễ truyền gói tin
- Distance vector : (còn gọi là thuật toán Bellman-Ford) gửi bảng định tuyến tới
các node lân cận theo một chu kỳ nhất định Ưu điểm là dễ thực hiện, dễ kiểm tra Tuy nhiên thời gian cập nhật lâu, chiếm dụng băng thông lớn trên mạng
- Static routing : Phương thức tính toán định tuyến Static là phương thức tính
toán đường truyền mặc định trong NS-2 Phương thức này sử dụng thuật toán SPF Thuật toán tính đường truyền chạy chính xác một lần tại lúc khởi động
mô phỏng Khi cấu trúc mạng thay đổi phải cập nhật lại, do đó chỉ thích hợp trong hệ thống đơn giản, có kết nối đơn và đường truyền dữ liệu đã được xác định trước
- Session: Sử dụng thuật toán SPF để tính toán tối ưu đường truyền, bảng định
tuyến sẽ được cập nhật ngay lập tức khi topo mạng có sự thay đổi
3 Theo dõi sự kiện trên hệ thống và công cụ Xgraph
a Các lệnh cơ bản dùng để theo dõi các sự kiện trên hệ thống
- Cân bằng cấp phát bộ đệm cho tất cả các file theo dõi: $ns flush-trace
- Tạo một đối tượng theo dõi:
Cấu trúc: create-trace {type filename scr dst}
Trang 8Mỗi một lệnh theo dõi trong các lệnh trên sẽ có các cấu trúc đầu ra khác nhau Ở đây chúng ta chỉ xét đến cấu trúc file đầu ra của lệnh “trace-all” Với các công cụ phân tích file dữ liệu có sẵn như awk, grep, perl,… Chúng ta có thể có được tất cả các thông tin mong muốn trong quá trình hệ thống mạng được mô phỏng bằng cách phân tích file “trace-all”
File trace được tổ chức trong 12 trường như trong hình dưới
- Trường đầu tiên mô tả loại sự kiện, được cho bởi một trong 4 kí tự r, +, -, d
tương ứng với các trường hợp đã nhận (ở đầu ra của link), đã xếp vào trong hàng đợi (enqueued), rời khỏi hàng đợi (dequeued), đã bị hủy (dropped)
- Trường thứ hai biểu diễn thời gian sự kiện xuất hiện
- Thông báo node input của link nơi sự kiện xảy ra
- Thông báo node ouput của link nơi sự kiện xảy ra
- Loại gói tin ( ví dụ TCP, CBR, tên loại tương ứng với tên của application mà chúng ta đã đặt, ví dụ trong phần trước thì application TCP được gọi là “tcp”)
- Kích cỡ gói tin
- Một vài loại cờ Chúng ta sẽ xét ở phần sau
- Flow id (fid) của Ipv6 mà người dùng thiết lập cho mỗi luồng (flow) tại đầu vào OTcl cript Ta có thể dùng trường này để phân tích kết quả, cũng như để thiết lập màu sắc cho các luồng trong mô phỏng NAM
- Địa chỉ của nguồn, nơi phát gói tin, được cho dưới dạng “node.port”
- Địa chỉ của nguồn đích, nơi nhận gói tin, được cho với cùng dạng như trên
- Số chuỗi các gói tin của một lớp giao thức mạng Mặc dù thành phần UDP trong mạng thực tế không có số các chuỗi nhưng ns vẫn giữ lại các vết (track)
để phân tích kết quả
Trang 9- Trường cuối cùng ghi chỉ số id của gói tin (unique id of packet)
c Xgraph
Xgrap là một công cụ vẽ đồ thị được cung cấp bởi ns Xgraph cho phép chúng
ta tạo ra các file postcript , ảnh , và 1 số định dạng khác bằng cách ấn vào
“Hdcpy” câu lệnh gọi Xgraph có thể được khai báo trong kịch bản TCL do đó có thể xuất ra ngay đồ thị khi kết thúc mô phỏng
Đầu vào của Xgraph là 1 hoặc nhiều file chứa mỗi cặp giá trị x-y trên 1 dòng (mỗi dòng sẽ chứa tọa độ của 1 điểm trên đồ thị ) Ví dụ lệnh : Xgraph f1 f2 sẽ
vẽ ra trên cùng 1 đồ thị của file f1,f2
Một số lựa chọn khi sử dụng Xgraph :
- Title : -t “ten_do_thi”
- Kích thước : -geometry xsize x ysize
- Tiêu đề cho các trục : -x “xtitle” –y “ytitle”
- Màu của chữ và lưới –v
Với queueLength là chiều dài hàng đợi tức thời, được tính bằng số gói đến trừ
số gói đi và số gói bị rớt
Trang 10# thoi gian lay mau la 0.5s set time 0.5
set now [$ns now]
$qfile instvar parrivals_ pdepartures_ pdrops_
# ty le chiem dung bo dem: queueLength/50 *100% = queueLength*2 %
puts $qsize "$now [expr 2.0*[expr
$parrivals_-$pdepartures_-$pdrops_]]"
set bdepartures_ 0
$ns at [expr $now + $time] "QueueLength"
}
Sau khi có file queuesize.tr ta vẽ được đồ thị tỷ lệ theo câu lệnh:
exec xgraph queuesize.tr geometry 800x400 t "Queue occupancy rate"
-x "secs" -y "percentage(%)" &
Hàng đợi của liên kết giữa các node khác được tính tương tự
b Phân bố Poisson
Ta xây dựng tiến trình Poisson qua một đối tượng ExponentialOn/Off với các thành phần tham số:
packetsize_ dung lượng cố định của gói dữ liệu
burst_ time_ thời gian “bật” khởi tạo
idle_ time_ thời gian “tắt” khởi tạo
rate_ tốc độ của gói
Để tạo ra tiến trình Poisson ta cho tham số burst_time_ về 0 và idle_time bằng
1
𝜆 của tiến trình Poisson
c Giảm gói tin
- Nguồn s1 phát các gói tin với tốc độ là 1.3 MBps
- Nguồn s2 phát ra 2 luồng với các gói tin tốc độ là 1.5MBps và 2MBps
- Cứ sau 30s nguồn s1 và s2 giảm tốc độ gói là 50 gói/s nên ta có lượng giảm sau 30s là
Trang 11s1: 50 * 1300 = 65000 bytes s2: 50 * 1000 = 50000 bytes (2 luồng)
- Khi thay đổi số gói (λ) sẽ dẫn đến idle_time_ và rate_ thay đổi Cách tính idle_time_ như sau:
1 𝑖𝑑𝑙𝑒_𝑡𝑖𝑚𝑒_ = λ , vậy sau khi giảm λ thì idle_time_ = 1
𝜆−50
- Rate được tính như sau:
s1: rate_ = rate_ – 65000 (bytes) s2: rate_ = rate_ – 50000 (bytes) Sau khi tính được rate_ và idle_time của 3 luồng ta lưu trong các file
trafficfile1.tr trafficfile2.tr trafficfile3.tr
Code:
set time30 30 proc PackageDecrease {} { global ns traffic1 traffic2 traffic3 time30 TrafficFile1 TrafficFile2 TrafficFile3
set now [$ns now]
set idle1 [$traffic1 set idle_time_]
set idle2 [$traffic2 set idle_time_]
set idle3 [$traffic3 set idle_time_]
set rate1 [$traffic1 set rate_]
set rate2 [$traffic2 set rate_]
set rate3 [$traffic3 set rate_]
$traffic1 set idle_time_ [expr 1.0/[expr 1.0/$idle1 - 50]]
$traffic2 set idle_time_ [expr 1.0/[expr 1.0/$idle2 - 50]]
$traffic3 set idle_time_ [expr 1.0/[expr 1.0/$idle3 - 50]]
$traffic1 set rate_ [expr $rate1 - 65000]
$traffic2 set rate_ [expr $rate2 - 50000]
$traffic3 set rate_ [expr $rate3 - 50000]
# luu cac gia tri rate va idle_time vao file puts $TrafficFile1 "$now [$traffic1 set rate_] [$traffic1 set idle_time_]" puts $TrafficFile2 "$now [$traffic2 set rate_] [$traffic2 set idle_time_]" puts $TrafficFile3 "$now [$traffic3 set rate_] [$traffic3 set idle_time_]"
Trang 12$ns at [expr $now + $time30] "PackageDecrease"
}
d Tính băng thông của từng luồng
Sử dụng Agent LossMonitor lưu lại những gói đã truyền, sau khi tính được băng thông trong 1 chu kỳ thì làm sạch Agent và thực hiện lại ở chu kỳ tiếp theo Code
proc BandWidth {} { global ns sink1 sink2 sink3 BwFile1 BwFile2 BwFile3 set time 3
set bw1 [$sink1 set bytes_]
set bw2 [$sink2 set bytes_]
set bw3 [$sink3 set bytes_]
set now [$ns now]
puts $BwFile1 "$now [expr $bw1/$time*8/1000]"
puts $BwFile2 "$now [expr $bw2/$time*8/1000]"
puts $BwFile3 "$now [expr $bw3/$time*8/1000]"
$sink1 set bytes_ 0 $sink2 set bytes_ 0 $sink3 set bytes_ 0 $ns at [expr $now+$time] "BandWidth"
}
e Tính trễ của mỗi luồng
- Dựa vào định dạng của file trace ta thu thập được số liệu để tính trễ xảy ra trên đường truyền
- Trễ của các gói tin được tính như sau: thời điểm gói tin đến node đích trừ đi thời điểm gói tin ở node gửi
- Việc này được thực hiện bằng hàm viết trong file awk Hàm được viết như sau(với luồng 1 từ node 0 tới node 8)
BEGIN {TimeSend[50000];TimeReceive[50000];Delay[50000]}
{ # doc gia tri trace-file theo cot action = $1;
time = $2;
from = $3;
Trang 13if((action=="r")&&(to == "8")) {
- Để xuất dữ liệu ra file phục vụ việc vẽ đồ thị ta dùng câu lệnh sau
exec awk –f <AWKFileName> <TraceFileName> > <DataFile>
- Luồng 1,2,3 truyền dữ liệu
30.0 Bắt đầu giảm tốc độ gói 50 gói/s sau chu kỳ 30s
Trang 14300.0 Luồng 1,2,3 kết thúc truyền dữ liệu
301.0 Đóng các file trace và data
Vẽ đồ thị tỷ lệ chiếm dụng bộ đệm, hiệu suất sử dụng băng thông và trễ đường truyền
Trang 15Liên kết giữa node 1 và node 3
Liên kết giữa node 2 và node 3
Trang 16Liên kết giữa node 1 và node 4
Liên kết giữa node 2 và node 6
Trang 17Liên kết giữa node 3 và node 4
Liên kết giữa node 4 và node 5
Trang 18Liên kết giữa node 4 và node 6
c Hiệu suất sử dụng băng thông
Đường màu đỏ, xanh dương và xanh lá cây tương ứng với các luồng 1, luồng 2 và luồng 3
Trang 19d Trễ đường truyền
Trễ trên luồng 1
Trễ trên luồng 2
Trang 20Trễ trên luồng 3
Trang 21KẾT LUẬN
Môn cơ sở truyền số liệu là một môn học chuyên ngành quan trọng và hữu ích Nó cung cấp những kiến thức cơ bản nhất cho sinh viên có định hướng theo chuyên ngành Điện tử viễn thông Theo quan điểm học phải đi đôi với hành, em thấy việc nhà trường và các Thầy cô tạo điều kiện để chúng em có cơ hội được làm bài tập lớn là một việc rất có ý nghĩa Đề bài chúng em được giao cũng rất phù hợp với trình độ hiện tại của chúng em Sau khi hoàn thành bài tập này chúng em đã học hỏi và tích lũy được rất nhiều kiến thức Trước tiên phải kể đến đó là kiến thức
về mạng thông tin, các giao thức truyền và gửi gói tin, Thứ hai phải kể đến đó là biết cách sử dụng phần mềm mã nguồn mở và công cụ hỗ trợ thiết kế mạng rất hữu hiệu đó là NS2