Báo cáo thực tập chuyên ngành
OMNet++ Báo cáo th c tập chuyên ngành PH N I - T NG QUAN V OMNET++ .5 GI I THI U 1.1 OMNeT++ gì? 1.2 Các thành ph n c a OMNeT++ 1.3 ng d ng 1.4 Mơ hình OMNeT++ T NG QUAN 2.1 Khái ni m mơ hình hố 2.1.1 C u trúc phân c p c a module 2.1.2 Kiểu module 2.1.3 Message, c ng, liên k t 2.1.4 Mơ hình truy n gói tin .9 2.1.5 Tham s 10 2.1.6 Ph ng pháp mô t topology 10 2.2 Lập trình thuật toán .10 2.3 S d ng OMNeT++ 11 2.3.1 Xây d ng ch y th mơ hình mơ ph ng 11 2.3.2 H th ng file 12 NGÔN NG NED .14 3.1 T ng quan v NED 14 3.1.1 Các thành ph n c a ngôn ng mô t NED 14 3.1.2 Các từ khoá 14 3.1.3 Đặt tên 14 3.1.4 Chú thích 15 3.2 Các dẫn import 15 3.3 Khai báo kênh .15 3.4 Khai báo module đ n gi n 16 3.4.1 Các tham s c a module đ n gi n 16 3.4.2 Các c ng c a module đ n gi n 17 3.5 Khai báo module k t h p 18 3.5.1 Các tham s c ng c a module k t h p 19 3.5.2 Các module 19 3.5.3 Tham s tên kiểu module 20 3.5.4 Gán giá trị cho tham s c a module 22 3.5.5 Khai báo kích th c c a vector c ng c a module 23 3.5.6 Khai báo gatesizes tham s có u ki n 23 3.5.7 K t n i 24 3.6 Khai báo m ng 27 3.7 Các biểu th c 27 3.7.1 Hằng s 28 3.7.2 Tham chi u 28 3.7.3 Các toán t .29 3.7.4 Toán t sizeof() index .30 3.7.5 Toán t xmldoc() 30 3.7.6 XML XPath .31 3.7.7 Hàm 31 3.7.8 Giá trị ngẫu nhiên 32 3.7.9 Khai báo m t hàm m i 33 GI I THI U GNED 35 4.1 Giao di n .35 Trang OMNet++ Báo cáo th c tập chuyên ngành 4.2 M t s thao tác c b n 38 4.3 Làm vi c v i nhi u file NED - Các ch c chỉnh s a nâng cao .43 MODULE Đ N GI N 50 5.1 Module đ n gi n OMNeT++ 50 5.2 Các s ki n OMNeT++ 50 5.3 Mô hình hố ho t đ ng truy n gói tin 50 5.4 Khai báo kiểu module đ n gi n .51 5.4.1 T ng quan .51 5.4.2 Đăng ký kiểu module 52 5.5 Xây d ng hàm cho Module 52 5.5.1 Hàm handleMessage() 52 5.5.2 Hàm activity() 53 5.5.3 Hàm initialize() finish() 54 5.6 G i nhận message .54 5.6.1 G i message .54 5.6.2 Broadcasts .54 5.6.3 G i có đ tr (Delayed sending) .55 5.6.4 G i tr c ti p message .55 5.6.5 G i định kỳ .55 5.7 Truy nhập c ng k t n i .55 5.7.1 Đ i t ng c ng (gate object) 55 5.7.2 Các tham s k t n i .56 5.8 T đ ng t o module .56 MESSAGE 58 6.1 Message Packet 58 6.1.1 L p cMessage 58 6.1.2 Self-Message 59 6.1.3 Mơ hình hố gói tin 60 6.1.4 Đóng gói (Encapsulation) 62 6.1.5 Thêm đ i t ng tham s 63 6.2 Định nghĩa message 64 6.2.1 Gi i thi u .64 6.2.2 S d ng enum 66 6.2.3 Kh i t o cho m t message .66 6.2.4 Quan h k thừa h p thành .69 6.2.5 S d ng kiểu có sẵn c a C++ 71 6.2.6 Thay đ i file C++ 72 6.2.7 S d ng STL l p message .75 CH Y CÁC NG D NG OMNeT++ .78 7.1 S d ng gcc 79 7.2 S d ng Microsoft Visual C++ 79 MƠ HÌNH Đ N GI N - TICTOC 80 Ph n II – T NG QUAN V WLAN 86 GI I THI U 86 1.1 u điểm c a m ng LAN không dây 86 1.2 M t s ng d ng th c t c a WLAN t i Vi t Nam .88 1.2.1 ng d ng Wireless LAN Telemedicine 88 1.2.2 H th ng WiFi VNN .90 CÁC MƠ HÌNH M NG C B N 91 2.1 Mơ hình c s (Infrastructure network) .91 Trang OMNet++ Báo cáo th c tập chuyên ngành 2.1.1 Tập h p dịch v c b n (BSS - Basic Service Set) .92 2.1.2 Tập h p dịch v m r ng (ESS Extended Service Set) 92 2.2 Mô hình Adhoc đ c lập (Independent network) 96 HO T Đ NG C A CÁC CHU N LIÊN QUAN .97 3.1 Các băng t n ISM 97 3.1.1 Băng t n ISM (ISM bands) .97 3.1.2 Băng t n UNII (UNII bands) 98 3.2 Các chu n 802.11 (IEEE 802.11 family) .99 3.2.1 IEEE 802.11 99 3.2.2 IEEE 802.11b 99 3.2.3 IEEE 802.11a 99 3.2.4 IEEE 802.11g 99 3.2.5 M t s chu n khác h IEEE 802.11 100 MƠ HÌNH C U TRÚC C A M NG WLAN 103 4.1 T ng vật lý (PHY layer) .103 4.1.1 Các kỹ thuật tr i ph .104 4.1.2 C u trúc khung PLCP (General PLCP Frame Format) .108 4.1.3 PLCP d i ph dịch t n FHSS 109 4.1.4 PLCP cho DSSS HR/DSSS 109 4.1.5 PLCP OFDM .110 4.1.6 Th t c truy n PLCP 110 4.1.7 Th t c nhận PLCP .111 4.1.8 T ng PMD ( PMD sublayer) 112 4.2 T ng kiểm soát truy nhập đ ng truy n – MAC 113 4.2.1 DCF - Distributed Coordination Function 113 4.2.2 PCF – Point Coordination Function 116 4.2.3 Phân tích ho t đ ng c b n 116 4.3 T ng m ng giao th c dẫn đ ng WLAN 121 4.3.1 Các giao th c tìm đ ng m ng Ad-hoc 122 4.3.2 Các giao th c m r ng cho MANET 123 4.3.3 Mô t chi ti t giao th c AODV 125 PH N III – PHÂN TÍCH THI T K NG D NG MƠ PH NG M NG ADHOC 130 MƠ HÌNH CHUNG 130 C U TRÚC H TH NG 131 2.1 T ng vật lý (Physical model) .131 2.2 T ng u khiển truy nhập (Mac Layer) 131 2.3 T ng m ng (Routing model) 133 2.4 Mobility models 136 2.5 T ng ng d ng .137 2.6 Liên k t gi a t ng 138 2.7 Thi t lập thông s cho h mô ph ng 138 2.7.1 Thông s c a Map Hosts 138 2.7.2 Physical Layer .139 2.7.3 Mac Layer .139 2.7.4 Routing 139 2.7.5 Application 140 K T QU TH C HI N 141 3.1 Topo .141 3.2 G i gói tin Hello 142 Trang OMNet++ Báo cáo th c tập chuyên ngành 3.3 G i gói tin RREQ 142 Ph n IV - PH L C 143 SO SÁNH OMNET++ VÀ NS/2 .143 2.TÀI LI U THAM KH O 145 Trang OMNet++ Báo cáo th c tập chuyên ngành PH N I - T NG QUAN V OMNET++ GI I THI U 1.1 OMNeT++ gì? OMNeT++ vi t tắt c a c m từ Objective Modular Network Testbed in C++ OMNeT++ m t ng d ng cung c p cho ng i s d ng môi tr ng để ti n hành mô ph ng ho t đ ng c a m ng M c đích c a ng d ng mô ph ng ho t đ ng m ng thơng tin, nhiên tính ph cập linh ho t c a nó, OMNeT++ cịn đ c s d ng nhi u lĩnh v c khác nh mô ph ng h th ng thông tin ph c t p, m ng kiểu hàng đ i (queueing networks) hay ki n trúc ph n c ng OMNeT++ cung c p sẵn thành ph n t ng ng v i mơ hình th c t Các thành ph n (còn đ c g i module) đ c lập trình theo ngơn ng C++, sau đ c tập h p l i thành nh ng thành ph n hay nh ng mơ hình l n h n m t ngôn ng bậc cao (NED) OMNeT++ h tr giao di n đ ho , t ng ng v i mơ hình c u trúc c a đ ng th i ph n nhân mô ph ng (simulation kernel) module c a OMNeT++ r t d dàng nhúng vào ng d ng khác 1.2 Các thành ph n c a OMNeT++ • • • • • • • • • • 1.3 Th vi n ph n nhân mô ph ng (simulation kernel) Trình biên dịch cho ngơn ng mơ t hình tr ng (topology description language) - NED (nedc) Trình biên tập đ ho (graphical network editor) cho file NED (GNED) Giao di n đ ho th c hi n mô ph ng, liên k t bên file th c hi n mô ph ng (Tkenv) Giao di n dịng l nh th c hi n mơ ph ng (Cmdenv) Công c (giao di n đ ho ) v đ thị k t qu vector đ u (Plove) Công c (giao di n đ ho ) mô t k t qu vô h đ u (Scalars) ng Cơng c tài li u hố mơ hình Các ti n ích khác Các tài li u h ng dẫn, ví d mơ ph ng ng d ng OMNeT++ m t công c mô ph ng ho t đ ng m ng module đ c thi t k h ng đ i t ng OMNeT++ th ng đ c s d ng ng d ng ch y u nh : • Mơ hình ho t đ ng c a m ng thơng tin Trang OMNet++ • • • • • Báo cáo th c tập chuyên ngành Mơ hình giao th c Mơ hình hố m ng kiểu hàng đ i Mơ hình hố h th ng đa b vi x lý (multiprocesser) h th ng ph n c ng theo mơ hình phân tán khác (distributed hardware systems) Đánh giá ki n trúc ph n c ng Đánh giá hi u qu ho t đ ng c a h th ng ph c t p 1.4 Mơ hình OMNeT++ M t mơ hình OMNeT++ bao g m module l ng có c u trúc phân c p Đ sâu c a c a module l ng không gi i h n, u cho phép ng i s d ng biểu di n c u trúc logic c a h th ng th c t c u trúc mơ hình Các module trao đ i thông tin v i thông qua vi c g i message (message) Các message có c u trúc ph c t p tuỳ ý Các module g i message theo hai cách, m t g i tr c ti p t i địa nhận, hai g i theo m t đ ng dẫn đ c định sẵn, thông qua c ng k t n i Các module có tham s c a riêng Các tham s đ c s d ng để chỉnh s a thu c tính c a module để biểu di n cho topology c a mơ hình Các module m c th p nh t c u trúc phân c p đóng gói thu c tính Các module đ c coi module đ n gi n, chúng đ c lập trình ngơn ng C++ cách s d ng th vi n mô ph ng Trang OMNet++ Báo cáo th c tập chuyên ngành T NG QUAN 2.1 Khái ni m mơ hình hố OMNeT++ cung c p cho ng c a h th ng th c t i s d ng nh ng công c hi u qu để mô t c u trúc Các module l ng có c u trúc phân c p Các module đ i t ng c thể c a kiểu module Các module trao đ i thông tin message qua kênh Các tham s c a module linh ho t Ngôn ng mô t topology 2.1.1 Cấu trúc phân cấp c a module M t mơ hình OMNeT++ ch a module l ng có c u trúc phân c p, trao đ i thông tin v i cách g i message M i mơ hình th ng biểu di n cho m t h th ng m ng Module m c cao nh t c u trúc phân c p đ c g i module h th ng Module ch a module con, module ch a module c a riêng Đ sâu phân c p đ i v i module không gi i h n, u cho phép ng i s d ng d dàng biểu di n m t c u trúc logic c a m t h th ng th c t c u trúc phân c p c a OMNeT++ C u trúc c a mơ hình đ module h th ng c mô t ngôn ng NED c a OMNeT++ module đ n gi n module k t h p Hình I-2.1 - Các module đơn giản kết hợp Các module ch a nhi u module đ c g i module k t h p Các module đ n gi n module có c p th p nh t c u trúc phân c p Các module đ n gi n ch a thuật tốn c a mơ hình Ng i s d ng triển khai module đ n gi n ngôn ng C++, s d ng th vi n mô ph ng c a OMNeT++ 2.1.2 Kiểu module T t c module dù đ n gi n hay ph c t p đ u đ i t ng c thể c a kiểu module Trong mô t mơ hình, ng i s d ng định nghĩa kiểu Trang OMNet++ Báo cáo th c tập chuyên ngành module; đ i t ng c thể c a kiểu module đ c s d ng nh thành ph n c a kiểu module ph c t p h n Cu i cùng, ng i s d ng t o module h th ng nh m t đ i t ng c thể c a kiểu module đ c định nghĩa tr c đó, t t c module c a m ng đ u module (hoặc c a module con) c a module h th ng Khi m t kiểu module đ c s d ng nh m t kh i d ng sẵn (building block), s khơng thể phân bi t m t module đ n gi n hay ph c t p Đi u cho phép ng i s d ng tách module đ n gi n thành nhi u module đ n gi n đ c nhúng m t module k t h p, ng c l i tập h p ch c c a m t module k t h p m t module đ n gi n mà khơng nh h ng đ n kiểu module đ c ng i s d ng định nghĩa Kiểu module đ c l u tr m t file riêng r Đi u cho phép ng d ng nhóm kiểu module l i t o m t th vi n thành ph n is 2.1.3 Message, cổng, liên kết Các module trao đ i thông tin vi c g i message Trong th c t , message có d ng khung (frame) gói tin (packet) đ c truy n m ng Các message có c u trúc ph c t p tuỳ ý Các module đ n gi n g i message m t cách tr c ti p đ n vị trí nhận g i theo m t đ ng dẫn định sẵn thông qua c ng liên k t “Th i gian mô ph ng địa ph ng” (local simulation time) c a m t module tăng lên module nhận đ c m t message Message đ n từ m t module khác đ n từ m t module (message c a b n thân module - self-message đ c dùng để th c hi n b định th i) C ng (gate) giao ti p vào c a module Message đ đ c nhận vào thông qua c ng vào c g i qua c ng M i k t n i (connection) hay g i liên k t (link) đ c t o bên m t m c đ n c u trúc phân c p c a module: bên m t module k t h p, m t k t n i đ c t o gi a c ng t ng ng c a hai module con, gi a c ng c a module v i c ng c a module k t h p module cha S1 module cha S2 module k t n i v i S1 S2 module k t n i v i module cha Hình I-2.2 - Các kết nối T ng ng v i c u trúc phân c p c a m t mơ hình, message th ng di chuyển qua m t lo t k t n i v i điểm bắt đ u k t thúc module đ n gi n Tập k t n i từ m t module đ n gi n đ n m t module đ n gi n đ c g i route Các module k t h p ho t đ ng gi ng nh “cardboard box” mơ hình, “trong su t” vi c chuyển ti p message gi a thành ph n bên th gi i bên Trang OMNet++ Báo cáo th c tập chun ngành 2.1.4 Mơ hình truyền gói tin M t k t n i có ba tham s đặc tr ng Nh ng tham s r t thuận ti n cho mơ hình mơ ph ng m ng thông tin nh ng không h u d ng cho kiểu mơ hình khác Ba tham s bao g m: • • • Đ tr đ ng truy n (propagation delay) tính s - giây Tỉ s l i bit, đ c tính s l i/bit Tỉ s d li u, đ c tính s bit/s Các tham s tuỳ ch n Giá trị c a tham s khác k t n i, ph thu c vào kiểu c a liên k t (hay g i kiểu c a kênh truy n - channel type) Đ tr đ ng truy n t ng th i gian đ n c a message bị tr truy n qua kênh Tỉ s l i bit nh h ng đ n trình truy n message qua kênh Tỉ s xác su t bit bị truy n sai Do xác su t để m t message đ dài n bit truy n xác là: P(message g i đ c nhận xác) = (1 - ber)n ber tỉ s l i bit n s bit c a message Các message truy n đ u có m t c l i, c s đ message có l i c thi t lập vi c truy n Tỉ s d li u đ c tính theo đ n vị bit/s, đ c s d ng để tính th i gian để truy n m t gói tin Khi tỉ s đ c s d ng, q trình g i message mơ hình s t ng ng v i vi c truy n bit đ u tiên message đ c tính đ n n i sau bên nhận nhận đ c bit cu i A tA B tB Message g i truy n bị tr Đ tr đ ng truy n Message nhận đ c Hình I-2.3 - Truyền message Trang OMNet++ Báo cáo th c tập chuyên ngành 2.1.5 Tham số Các module tham s Các tham s đ NED file c u hình ompnetpp.ini c đặt giá trị file Các tham s đ c dùng để thay đ i thu c tính c a module đ n gi n dùng để biểu di n cho topology c a mô hình Các tham s có kiểu chu i, s h c, giá trị logic ch a d li u XML (XML data tree) Các bi n kiểu s biểu th c nhận giá trị từ tham s khác, g i hàm, s d ng bi n ngẫu nhiên từ ngu n phân tán nhận giá trị tr c ti p đ c nhập vào b i ng i s d ng Các tham s có kiểu s đ c dùng để c u hình topology r t d dàng Nằm module k t h p, tham s đ c dùng để s module con, s c ng giao ti p cách k t n i n i b đ c t o 2.1.6 Phương pháp mô tả topology Ng i s d ng dùng ngôn ng NED (Network Description) để mô t c u trúc c a mơ hình 2.2 Lập trình thuật tốn Các module đ n gi n ch a thuật tốn nh hàm c a C++ S linh ho t s c m nh c a C++, k t h p v i th vi n mô ph ng c a OMNeT++ t o u ki n d dàng cho ng i s d ng Các lập trình viên mơ ph ng ch n l a vi c mô t theo s ki n hay theo ti n trình, d dàng s d ng nh ng khái ni m c a lập trình h ng đ i t ng (nh đa hình, k thừa) thi t k mẫu th (pattern) để m r ng ch c c a q trình mơ ph ng Các đ i t ng mô ph ng (message, module, queue ) đ c thể hi n qua l p c a C++ M t s l p c b n th vi n mô ph ng c a OMNeT++: • • • • • Module, c ng, liên k t Các tham s Message Các l p Container (m ng, hàng đ i ) Các l p Data Collection Các l p đ c s d ng nh nh ng công c cho phép ng i s d ng t qua t t c đ i t ng ch y th mơ hình đ ng th i hiển thị thông tin v chúng nh tên c a đ i t ng, tên l p, bi n tr ng thái n i dung bên Đặc điểm cho phép t o mơ hình mơ ph ng có giao di n đ ho (GUI) v i ph n c u trúc bên đ c che Trang 10 OMNet++ Báo cáo th c tập chuyên ngành C U TRÚC H TH NG 2.1 T ng vật lý (Physical model) Để th c hi n ch c c a t ng vật lý m i nút m ng, ta ch y u quan tâm đ n vi c t o c ng phép trao đ i gói tin gi a nút m ng M i nút m ng di chuyển ti n l i đ g n (tùy thu c vào l ng truy n dẫn – transmission power) t i m t nút m ng lân cận, s x y ho t đ ng sau: T o m t c ng m i cho module k t h p - compound module (bao g m nút m ng) S d ng hàm: int Physic::addNewGate(cModule *mod, char* gname, char type) T o c ng m i physic module ch a mobile host module T o liên k t gi a c ng m i c a module đ n gi n (simple module) vừa đ t o c ng m i c a module k t h p c void Physic::setUpConn(char kind,int& a,int& b) T o liên k t gi a module c a nút m ng Đây lo i liên k t s d ng kênh “etere” Kênh đ c định nghĩa để mô ph ng môi tr ng truy n vô n, v i đ tr , tỉ l l i … Chi ti t tham s c ng c a m t module kiểu Physic nh sau: Mô ph ng ho t đ ng c a PHY hàm sau: • • • • void Physic::initialize() void Physic::handleMessage(cMessage* msg) void Physic::detectNeighbours() void Physic::updateConnections() 2.2 T ng u khiển truy nhập (Mac Layer) AdhocSim triển khai t ng MAC nh sau: Trang 131 OMNet++ Báo cáo th c tập chuyên ngành Giao th c đ c mơ ph ng CSMA/CA T ng u n truy nhập cho phép message g i nh ng đ i v i message nhận vào s kiểm tra tr ng thái c a t ng N u t ng bận message s đ c đặt b đ m Trong tr ng h p b đ m đ y message s bị h y b if(!buffer->empty()) { cMessage* m = buffer->pop(); send(m, "toRoute"); scheduleAt(elabTime() ,endService); } else { d("no messages waiting"); routerBusy = false; } else { if(buffer->canStore(msg->length())) { d("host busy, will put the msg in the buffer!"); buffer->insert(msg); } else { d("input buffer full!!! discarding pkts"); bufferFullDiscard++; delete msg; } } T ng MAC s kiểm tra địa MAC c a gói tin đ n Và cho qua gói tin địa MAC phù h p gói tin d ng broadcast if( ( (int)msg->par("mac") != parentModule()->id() ) && ( (int)msg->par("mac") != BROADCAST ) && ( ! promisqueMode) ) { d("message not for this node, discarding"); Trang 132 OMNet++ Báo cáo th c tập chuyên ngành delete msg; } else { //this node can handle the message d("got message from "empty()) ) { routerBusy = true; //this->takeOwnership(false) send(msg,"toRoute"); //this->takeOwnership(true); scheduleAt( elabTime(), endService); } 2.3 T ng m ng (Routing model) Mơ hình dẫn đ ng coi ph n tr ng tâm nh t mơ hình Adhoc kèm theo báo cáo H mô ph ng kèm báo cáo th c hi n đ c ch c sau t ng m ng • • • • Trao đ i gói tin HELLO gi a nút m ng lân cận Tìm ki m theo vòng m r ng (expanding ring search) Truy n t i gói tin báo nhận (ACK message) T o m t “black list” để tránh nút m ng không đáng tin cậy T c gi s m t nút X đ a nút lân cận Y black list, có nghĩa X g i gói tin RREQ m y l n t i Y, nh ng X không nhận đ c b t kỳ tín hi u ACK từ Y Khi đó, X s khơng ti p nhận b t kỳ gói tin RREQ từ Y n a Tuy nhiên x lý gói tin Hello từ Y T t c gói tin u khiển (Control message) c a AODV ng d ng đ u có đ dài 512 byte Trong gói tin d li u (Data message) có kích th c tùy theo tham s thi t lập t ng ng d ng D i danh sách tên lo i message đ c s d ng mơ hình minh h a HELLO Hello message RREQ Route Request message (gói tin u c u tìm đ ng) RREP Route Reply message (gói tin ph n h i tìm đ ng) RERR Route Error, ch a danh sách nút đích khơng t i đ c Trang 133 OMNet++ Báo cáo th c tập chuyên ngành DATA Data message RREP ACK RREP acknowledgment message (gói tin báo nhận RREP) DELETE Gói tin c a b n thân nút m ng (self message) để kích ho t trigger s ki n m t đ ng h t h n s d ng FLUSH Gói tin th c hi n RREP time out SEND HELLO Gói tin c a b n thân nút m ng (self message) để kích ho t nút m ng g i gói tin Hello BLK LIST Gói tin c a b n thân nút m ng (self message) để kích ho t s ki n rút m t nút m ng lân cận kh i “black list” M i lo i message đ u có tham s để trao đ i thông tin u khiển gi a nút m ng Ch ng trình mơ ph ng AdhocSim ch a h u h t tham s gói tin c a m t m ng Adhoc chu n Nh là: dest, seqNumS, seqNumD, Source, mac, ttl, hopNum … Mô t topo t ng m ng Q trình x lý lo i gói tin b ng switch(msg->kind()) { case SEND_HELLO: d("sendHello"); reply = generateHELLOmsg(); broadcast(reply); break; case DELETE: d("delete"); reply = handleDelete(msg); broadcast(reply); Trang 134 OMNet++ Báo cáo th c tập chuyên ngành break; case HELLO: d("hello"); handleHELLO(msg); delete msg; break; case FLUSH: d("flush"); reply = handleFlush(msg); broadcast(reply); break; case RREQ: d("rreq "