Lấy nguồn
Phần mềm mô phỏng OBS4NS xây dựng tương đối đầy đủ các thư viện cần thiết cho việc mô phỏng một mạng quang, chúng ta gọi lại các nguồn cần thiết cho việc mô phỏng bằng cách trỏđường dẫn đến các thư viện như sau:
Source {đường dẫn đến thư mục obs4ns-3.4}/tcl/lib/ns-obs-lib.tcl Source {đường dẫn đến thư mục obs4ns-3.4}/tcl/lib/ns-obs-node.tcl Source {đường dẫn đến thư mục obs4ns-3.4}/tcl/lib/ns-obs-link.tcl Source {đường dẫn đến thư mục obs4ns-3.4}/tcl/lib/ns-obs-stats.tcl Source {đường dẫn đến thư mục obs4ns-3.4}/tcl/lib/ns-obs-defaults.tcl
Khởi tạo các biến
Khai báo các biến đã được định nghĩa bên ngoài kịch bản mô phỏng để đưa tải vào mạng. Biến load thay đổi từ 0,1 (Erlang) đến 1 (Erlang). Đối với mỗi loại lưu lượng thời điểm phát gói đầu tiên phụ thuộc vào hàm ngẫu nhiên. Hàm ngẫu nhiên này tạo ra một số ngẫu nhiên dựa vào biến seed.
Set load [lindex $argv 0] // Đưa tải vào mạng
Set opt(seed) [lindex $argv] // Khởi tạo các số ngẫu nhiên.
Tạo đối tượng mô phỏng mới.
Set ns [new Simulator]
Tạo các node mạng.
Nhưđã đề cập trong chương 2, một mạng OBS gồm có các node biên, node lõi và node kết hợp. Phần mềm OBS4NS-3.4 hỗ trợ việc xây dựng các node mạng như sau:
Set c($i) [$ns ObsCoreNode $ncc $ndc ChannelScheduler/$stype CoS] // Khởi tạo các node lõi
Set e($i) [$ns ObsEdgeNode $ncc $ndc ChannelScheduler/$stype CoS] // Khởi tạo node biên.
Set h($i) [$ns ObsHybridNode $ncc $ndc ChannelScheduler/$stype CoS] // Khởi tạo các node kết hợp
Trong đó:
ChannelScheduler/$stype: loại lập lịch kênh truyền. Ndc: số lượng kênh dữ liệu ở ngõ ra của mỗi node. Ncc: số kênh điều khiển ở ngõ ra của mỗi node. CoS: số mức dịch vụ.
Tạo các liên kết trong mạng.
Sau khi tạo các node mạng bước tiếp theo chúng ta sẽ xây dựng các liên kết trong mạng để tạo nên một topology mạng hoàn chỉnh. Câu lệnh tạo liên kết song hướng giữa hai node mạng có dạng như sau:
$ns duplex-obs-link $c($i) $c($j) $ncc $ndc $d ChannelScheduler/$stype Trong đó:
C($i): node thứ i C($j): node thứ j
d: khoảng cách giữa node thứ i và node thứ j, đơn vị km. duplex-obs-link: liên kết là song hướng.
Dùng lệnh $ns compile-obs để hoàn tất việc liên kết giữa các node mạng.
Thiết lập các thông số mạng.
Để mô phỏng hoạt động của mạng OBS, chúng ta sẽ thiết lập các thông số
mạng theo các giả định ban đầu. Các thông số cần thiết lập là băng thông liên kết, các thông số đóng khối (burst assembly), các thông số bộ kết nối quang chéo OXC, các thông sốđiều khiển chuyển mạch SCU.
Connector/ObsLink dc_bandwidth // thiết lậpbăng thông kênh dữ liệu. Connector/ObsLink cc_bandwidth // thiết lập băng thông kênh điều khiển.
Agent/Burstifier set max_db_size_ [expr 1250*$number] // đóng khối theo kích thước tối đa với number là số lượng gói tin trong một burst.
Agent/Burstifer set timeout_ // đóng khối theo tiêu chuẩn thời gian. Agent/OXC switch_time // thiết lập thời gian chuyển mạch.
Agent/SCU max_bhp_proc_time // thiết lập thời gian xử lý gói điều khiển. Agent/Burstifier set max_segmentations_ // thiết lập số lượng đoạn tối
đa khi phân đoạn một burst.
Agent/Burstifier set min_segmentable_size_ // thiết lập kích thước nhỏ
nhất của mỗi đoạn.
Agent/Burstifier set segmentation_ // thiết lập các thông số cho phép giải quyết xung đột trong bộđóng khối bằng phân đoạn burst.
Agent/SCU set signalling_ // thiết lập kỹ thuật báo hiệu.
Đây là phần quan trọng nhất trong việc mô phỏng, việc xác lập các thông số
của bộ kết nối quang chéo OXC và các thông số điều khiển chuyển mạch SCU quyết định việc thay đổi các thông số QoS trên mạng.
Đưa lưu lượng vào mạng.
Bước tiếp theo là đưa tải vào mạng với lưu lượng đưa vào mạng theo phân bố Poisson:
Set rate [expr $load*$ndc*$n_link*[Connector/ObsLink dc_bandwidth]/$n_app]
// Tốc độ của mỗi luồng lưu lượng được tính ra từ tải đưa vào mạng. Set Poi($i$j) [new Application/Traffic/Poisson]
// Tạo lưu lượng theo phân bố Poisson. $Poi($i$j) set rate_ $rate
// Gán tốc độ cho lưu lượng. $Poi($i$j) set packetSize_ // Gán kích thước gói.
Set udp($i$j) [$c($i) set burstifier_([$c($j) id]:QoS) // Tạo udp gắn lưu lượng với QoS là thứ tự lớp dịch vụ. $Poi($i$j) attach-agent $udp($i$j)
// đặt lưu lượng trên tất cả các cặp node. $udp($i$j) set-traffic-generator $Poi($i$j) $ns at 0.0 “$udp($i$j) start”
// cho phép bắt đầu chạy lưu lượng khi mới bắt đầu chạy mô phỏng.
Kết thúc lưu lượng.
Mô phỏng được giả sử sẽ kết thúc khi số gói phát đi vào mạng đạt đến con số
như mong muốn. Phần mềm OBS4NS chỉ xác định các biến số đầu vào và đầu ra nên trong phần này phải gọi chức năng thống kê để thực hiện việc đếm gói
set sc [$ns get-global-stats-collector k]
// khởi tạo biến sc ghi nhận các sự kiện, k là số thự tự của lớp dịch vụ
$sc set-counter-convergence IP_IND 1000000
// mô phỏng kết thúc khi dữ liệu được đưa vào mạng đạt đến mức 1 triệu gói. Stats stop-command “stop”
// gọi hàm “stop” để kết thúc mô phỏng.
$ns at [RouteLogic/ObsRoute transit_time] “$ns enable-stats”
// cho phép gọi chức năng thống kê trong thời gian thực hiện mô phỏng. Hàm stop được tạo ra như sau:
Proc stop {} { Global ns udp
$ns at-now “$udp($i$j$k) stop” // Kết thúc phát burst
Set now [$ns now]
$ns at [expr $now +0.2] “finish”
// chờ 0.2s sau khi các burst đã đến đích rồi mới kết thúc mô phỏng
Kết thúc mô phỏng và lấy kết quả.
Sau khi kết thúc mô phỏng, sẽ thu thập kết quả và ghi kết quả này vào một file text.
Tạo hàm “finish” như sau: Proc finish {} {
Global ns sc
Set ip_snd [expr [$sc get-counter-value IP_SND]] // lấy số lượng gói được phát đi.
Set ip_rcv [expr [$sc get-counter-value IP_RCV]] // lấy số lượng gói nhận được.
Set ip_drop [expr $ip_snd - $ip_rcv] // tính số lượng gói bị rớt.
Set ip_p [expr 1.0*$ip_p/$ip_snd] // tính xác suất mất gói.
Set file [open “results.txt” “a”] // khởi tạo một file ghi kết quả. Puts $file “$ip_p”
// ghi kết quả xác suất mất gói vào một file Exit 0 } Bắt đầu chạy mô phỏng. Bắt đầu chạy mô phỏng bằng lệnh: $ns 4.7 Kết quả mô phỏng.
Các số liệu từ việc chạy mô phỏng được biểu diễn dưới dạng đồ thị. Những
đồ thị này được vẽ bằng phần mềm matlab 6.5.
TRƯỜNG HỢP 1: QoS dựa trên các thông số ngưỡng đóng khối (burst assembly). Việc mô phỏng lấy 3 mức ngưỡng là 100, 150, 300 trên hai lớp dịch vụ, với hai tốc độ khac nhau. Lớp dịch vụ thứ nhất có độ ưu tiên thấp, lớp dịch vụ thứ
hai có tốc độ gấp đôi lớp thứ nhất và có độưu tiên cao. Tiêu chuẩn giải quyết xung
đột là drop policy (DP) và Phân mảnh để giải quyết xung đột (SDP), giao thức báo hiệu là JET.
Hình 4.13 Kết quả mô phỏng dựa trên các thông sốđóng khối 100, 150, 300 và giải quyết xung đột dựa trên tiêu chuẩn DP.
Hình 4.14 Kết quả mô phỏng dựa trên các thông sốđóng khối 100, 150, 300 và giải quyết xung đột dựa trên tiêu chuẩn SDP.
Những kết quả trên cho thấy rằng trong cả hai trường hợp DP và SDP cho những kết quả sau:
- Thông sốđóng khối càng lớn khả năng mất gói càng cao. - Lưu lượng đưa vào càng cao khả năng mất gói càng lớn.
- Burst có độưu tiên cao ít mất gói hơn so với burst có độưu tiên thấp. Trường hợp đóng khối với tiêu chuẩn SDP cho độ mất gói thấp hơn trong trường hợp đóng khối theo tiêu chuẩn DP.
TRƯỜNG HỢP 2: QoS dựa trên các thông số xếp lịch kênh. Việc mô phỏng thực hiện trên hai lớp dịch vụ với hai mức độưu tiên khác nhau dựa trên tiêu chuẩn lập lịch kênh là FFUC, LAUC, LAUCVF với ngưỡng là 100 gói. Hai tiêu chuẩn giải quyết xung đột là SDP và DP, giao thức báo hiệu là JET.
Hình 4.15 Kết quả mô phỏng dựa trên các thông số xếp lịch kênh FFUC, LAUC, LAUCVF và giải quyết xung đột dựa trên tiêu chuẩn DP.
Hình 4.16 Kết quả mô phỏng dựa trên các thông số xếp lịch kênh FFUC, LAUC, LAUCVF và giải quyết xung đột dựa trên tiêu chuẩn SDP.
Trong các trường hợp trên cho các kết quả sau:
- Tiêu chuẩn lập lịch kênh LAUCVF cho độ mất gói thấp nhất. - Lưu lượng đưa vào càng lớn khả năng mất gói càng lớn.
- Lớp dịch vụ có độ ưu tiên cao cho độ mất gói thấp hơn rất nhiều so với lớp dịch vụ có độưu tiên thấp.
- Tiêu chuẩn giải quyết xung đột SDP cho độ mất gói ít hơn so với DP.
TRƯỜNG HỢP 3: QoS dựa trên việc thay đổi các tiêu chuẩn giải quyết xung
đột. Các tiêu chuẩn giải quyết xung đột lần lượt là: DP, SDP, DDP, SDDP, DSDP. Ngưỡng đóng khối là 100, tiêu chuẩn lập lịch kênh là LAUCVF, giao thức báo hiệu là JET.
Hình 4.17 Kết quả mô phỏng dựa trên các tiêu chuẩn giải quyết xung đột. Các mô phỏng trên cho những kết quả sau:
- Hai tiêu chuẩn giải quyết xung đột DSDP và SDDP cho khả
năng mất gói thấp.
- Tải đưa vào mạng càng cao khả năng mất gói càng cao.
- Lớp dịch vụ có độ ưu tiên cao khả năng mất gói thấp hơn lớp dịch vụ có độưu tiên thấp.
TRƯỜNG HỢP 4: QoS dựa trên các thông số báo hiệu. Mô phỏng sử dụng hai giao thức báo hiệu là JET và JIT với hai lớp dịch vụ khác có mức độ ưu tiên khác nhau, ngưỡng đóng khối là 100, tiêu chuẩn giải quyết xung đột là DP và SDP.
Hình 4.18 Kết quả mô phỏng dựa trên thông số báo hiệu với tiêu chuẩn giải quyết xung đột DP.
Hình 4.19 Kết quả mô phỏng dựa trên các thông số báo hiệu với tiêu chuẩn giải quyết xung đột SDP.
Các mô phỏng trên cho các kết quả:
- JET cho độ mất gói thấp hơn JIT.
- Tải đưa vào mạng càng lớn khả năng mất gói càng thấp.
- Lớp dịch vụ có độ ưu tiên cao ít mất gói hơn lớp dịch vụ có độ ưu tiên thấp.
TRƯỜNG HỢP 5: Xem xét độ trễ trung bình do chuyển mạch quang chùm gây ra.
Hình 4.20 : Delay trên mạng OBS với hai lớp dịch vụ, lập lịch kênh tryền LAUCVF, giải quyết xung đột DP, ngưỡng 100
Hình 4.21: Delay trên mạng OBS với hai lớp dịch vụ, lập lịch kênh tryền LAUCVF, giải quyết xung đột SDP, ngưỡng 100
Hình 4.22: Delay trên mạng OBS với hai lớp dịch vụ, lập lịch kênh tryền LAUCVF, ngưỡng 100, giao thức báo hiệu JET
Nhận xét: Trong cả ba trường hợp trên cho thấy những lớp có độưu tiên cao hơn cho độ trễ trung bình ít hơn. Lưu lượng đưa vào mạng càng cao độ trễ trung bình càng giảm xuống. Kỹ thuật báo hiệu JET và JIT có độ trễ gần giống nhau nhưng JET có độ trễ thấp hơn so với JIT do phương pháp đăng ký trì hoãn, giải phóng băng thông tốt hơn. SDDP cho độ trễ cao hơn so với DP vì cần nhiều thời gian xử lý hơn.
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN. 5.1 Kết luận.
Mạng chuyển mạch quang chùm (OBS) được thiết kế để đạt được cân bằng giữa chuyển mạch quang kênh và chuyển mạch quang gói. Trong một mạng chuyển mạch quang chùm, một burst dữ liệu chứa nhiều gói IP được truyền qua mạng toàn quang. Một gói điều khiển được truyền trước burst dữ liệu để cấu hình các chuyển mạch dọc theo đường đi của burst. Thời gian bù cho phép gói điều khiển được xử lý và chuyển mạch được chuẩn bị trước khi burst đến tại node trung gian. Do đó không cần bộ đệm điện hoặc quang tại các node trung gian trong quá trình xử lý gói điều khiển. Gói điều khiển cũng có thể chỉ ra độ dài của burst dữ liệu để node trung gian biết khi nào cấu hình lại chuyển mạch cho burst đến tiếp theo. Nguyên lý hoạt động của mạng OBS cho phép tốc độ truyền dữ liệu lớn.
Phạm vi đề tài đề cập đến những vấn đề QoS trong mạng OBS, đây cũng là một vấn đề cần được quan tâm nghiên cứu khi xây dựng một mạng OBS. Luận văn tìm hiểu nguyên lý hoạt động, các thuật toán liên quan đến chất lượng dịch vụ trong mạng OBS. Luận văn cũng thực hiện một số mô phỏng relative-QoS trên mạng OBS dựa trên việc thay đổi các thông sốđóng khối, báo hiệu, xếp lịch kênh và giải quyết xung đột kết hợp với việc gán độ ưu tiên cho các lớp dịch vụ khác nhau để đưa ra những so sánh.
Tuy nhiên đề tài cũng chỉ mới dừng lại ở việc nghiên cứu các vấn đề relative- QoS trên mạng OBS, chưa đề cập đến các vấn đề absolute-QoS. Trong phần mô phỏng relative-QoS đề tài này chưa mô phỏng báo hiệu hai chiều, đóng khối dựa trên ngưỡng thời gian, chưa mô phỏng hết các thuật toán xếp lịch kênh và giải quyết xung đột. Ngoài ra để đơn giản cho việc mô phỏng, số lượng bước sóng trên mỗi kênh WDM còn ít chưa sát với thực tế.
Đề tài có thểđược phát triển bằng việc tiếp tục hoàn thiện những hạn chế của relative-QoS và nghiên cứu absolute-QoS. Qua đó, ta có thể kết hợp relative-QoS và absolute-QoS để hoàn thiện hệ thống mạng OBS và tiến đến xây dựng chuyển mạch quang gói.
Ngoài ra hoàn thiện hệ thống chuyển mạch quang chùm OBS mở ra một hướng mới, kết hợp OBS với MPLS xây dựng hệ thống mạng OBS over MPLS làm nền tảng cho hệ thống mạng trong tương lai.
.
PHỤ LỤC A: HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM NS-2
Chuẩn bị [15,16,17, 18]
B1 : Download gói ns-allinone-2.28 từ trang web http://www.isi.edu/nsnam/ns/. Ns-allinone-2.28 bao gồm các gói sau:
cweb gt-itm nam-1.11 ns-2.28 otcl-1.9 sgb tcl8.4 tclcl-1.16 tk8.4 xgraph-1.1 zlib-1.1 install install.win readme install
B2 : Cài đặt ns-2 trên CentOS cần những gói sau : autoconf automake gcc-c++ libx11-devel xorg-x11-proto-devel libxt-devel libxmu-devel
Ngoài ra còn cần một số Development Tools cài đặt bằng lệnh: Yum –y groupinstall ‘Development Tools’
Cài đặt
Trong bài này hướng dẫn cách cài đặt bằng một gói phần mềm duy nhất.Đầu tiên phải login với quyền root, sau đó thực hiện những bước như sau:
Chuyển đến thư mục chứa gói ns-2 thực hiện lệnh giải nén tar -xvzf ns-allinone-2.28.tar.gz Chuyển đến thư mục ns-allinone-2.28 cd /{đường dẫn chứa thư mục ns-allinone-2.28}/ns-allinone-2.28 Chạy lệnh script ./install
Nếu cài đặt thành công sẽ có những vị trí được cài đặt như sau:
Tcl8.4.5 {đường dẫn đến thư mục ns-allinone-2.28}/{bin, include,lib} Tk8.4.5 {đường dẫn đến thư mục ns-allinone-2.28}/{bin, include, lib} Otcl {đường dẫn đến thư mục ns-allinone-2.28}/otcl-1.9
Tclcl {đường dẫn đến thư mục ns-allinone-2.28}/tclcl-1.16 Ns {đường dẫn đến thư mục ns-allinone-2.28}/ns-2.28/ns Nam {đường dẫn đến thư mục ns-allinone-2.28}/nam-1.11/nam Xgraph {đường dẫn đến thư mục ns-allinone-2.28}/xgraph-12.1 Chuyển đến thư mục gốc
cd ~
Thay đổi biến môi trường trong thư mục ~/.bashrc #LD_LIBRARY_PATH
OTCL_LIB={đường dẫn đến thư mục}/ns-allinone-2.28/otcl-1.9 NS2_LIB={đường dẫn đến thư mục}/ns-allinone-2.28/lib X11_LIB=/usr/X11R6/lib
USR_LOCAL_LIB=/usr/local/lib export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$NS2_LIB:$X11_L IB:$USR_LOCAL_LIB
#TCL_LIBRARY
TCL_LIB={đường dẫn đến thư mục} /ns-allinone-2.28/tcl8.4.5/library USR_LIB=/usr/lib
export TCL_LIBRARY=$TCL_LIB:$USR_LIB #PATH
XGRAPH={đường dẫn đến thư mục}/ns-allinone-2.28/bin:{đường dẫn đến thư
mục}/ns-allinone-2.28/tcl8.4.5/unix:{đường dẫn đến thư mục}/ns-allinone- 2.28/tk8.4.5/unix
NS={đường dẫn đến thư mục}/ns-allinone-2.28/ns-2.28/ NAM={đường dẫn đến thư mục}/ns-allinone-2.28/nam-1.11/ PATH=$PATH:$XGRAPH:$NS:$NAM
6. Chuyển đến thư mục cd ns-2.28/
7. Kiểm tra lại việc cài đặt bằng lệnh (khoảng 30 phút) ./validate
8. Cuối cùng thực hiện lệnh sau: để có thể sử dụng lệnh ns ở tất cả các vị trí cp /{đường dẫn đến thư mục ns-allinone-2.28}/ns-allinone-2.31/bin/* /usr/sbin/