Upload
oc-dien
View
32
Download
5
Embed Size (px)
DESCRIPTION
NS2
Citation preview
Nhận xét của giáo viên hướng dẫn
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
Nhận xét của giáo viên phản biện
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
LỜI CẢM ƠN
Chúng con xin tỏ lòng biết ơn sâu sắc đến ba mẹ và gia đình đã nuôi dưỡng, giáo
dục và tạo điều kiện tốt nhất cho chúng con thực hiện đề tài này.
Chúng em xin chân thành cảm ơn khoa Công nghệ thông tin và quý Thầy, Cô
trong khoa, trường Đại học Khoa học Tự nhiên TpHCM đã tạo điều kiện cho chúng
em học tập và thực hiện luận văn tốt nghiệp này.
Đặc biệt, chúng em xin chân thành cảm ơn Thầy Phan Xuân Huy đã tận tình
hướng dẫn, chỉ bảo chúng em trong quá trình thực hiện đề tài.
Mặc dù chúng em đã cố gắng hoàn thành luận văn với tất cả sự nỗ lực của bản
thân, nhưng luận văn chắc chắn không tránh khỏi những thiếu sót nhất định, kính
mong sự cảm thông và tận tình chỉ bảo của quý Thầy, Cô và các bạn.
Phú Quý&Quang Hiếu
Tháng 7/2005
4
MỤC LỤC
Trang
Danh sách các bảng................................................................................................ 12
Danh sách các hình ................................................................................................ 14
Danh sách các từ viết tắt ........................................................................................ 18
Tóm tắt luận văn .................................................................................................... 22
Chương mở đầu ..................................................................................................... 24
1. Dẫn nhập................................................................................................. 24
2. Mục đích và ý nghĩa đề tài....................................................................... 25
3. Đối tượng và phạm vi nghiên cứu............................................................ 25
A. Ngôn ngữ mô hình hóa mạng và các môi trường giả lập mạng .......................... 27
Phần 1 SSFNet Models và Domain Modeling Language......................... 27
Chương 1 SSF và SSFNet Models .................................................... 28
1.1 SSF Model............................................................................. 28
1.1.1 Giới thiệu.................................................................... 28
1.1.2 Các đặc tính của SSF .................................................. 28
1.1.3 Các phiên bản cài đặt của SSF .................................... 28
1.1.4 Giới thiệu các lớp cơ sở của SSF................................. 29
1.1.5 Trình tự quá trình giả lập............................................. 34
1.2 SSFNet Model ....................................................................... 36
1.2.1 Giới thiệu.................................................................... 36
1.2.2 Tổ chức thư mục SSFNet ............................................ 38
1.2.3 Các giao thức hổ trợ trong SSFNet.............................. 38
1.2.4 Các gói thư viện trong SSFNet.................................... 39
1.2.4.1 SSF.OS................................................................. 39
1.2.4.2 SSF.Net ................................................................ 40
Chương 2 Domain Modeling Language ............................................ 42
2.1 Giới thiệu ngôn ngữ DML ..................................................... 42
5
2.1.1 DML là gì?.................................................................. 42
2.1.2 Cấu trúc ngữ pháp của DML....................................... 42
2.1.3 Quá trình biên dịch DML............................................ 44
2.2 Các bước cài đặt và biên dịch chương trình............................ 45
2.2.1 Môi trường Windows .................................................. 45
2.2.2 Môi trường Unix ......................................................... 48
2.3 Các đối tượng và thuộc tính của DML .................................. 48
2.3.1 Đối tượng Net ............................................................. 50
2.3.1.1 Định nghĩa và khai báo ......................................... 50
2.3.1.2 Các thuộc tính của Net.......................................... 52
2.3.2 Đối tượng Host ........................................................... 54
2.3.2.1 Định nghĩa và khai báo ......................................... 54
2.3.2.2 Các thuộc tính của Host ........................................ 54
2.3.3 Đối tượng Router ........................................................ 56
2.3.3.1 Định nghĩa và khai báo ......................................... 56
2.3.3.2 Các thuộc tính của Router ..................................... 57
2.3.4 Link ............................................................................ 58
2.3.4.1 Định nghĩa và khai báo ......................................... 58
2.3.4.2 Các thuộc tính của Link ........................................ 59
2.3.5 Traffic......................................................................... 60
2.3.5.1 Định nghĩa và khai báo ......................................... 60
2.3.5.2 Các thuộc tính của Traffic..................................... 60
2.3.6 Protocol ...................................................................... 60
2.3.6.1 Định nghĩa và khai báo ......................................... 60
2.3.6.2 Các thuộc tính của Protocol .................................. 61
2.3.6.3 Cấu hình một Host là FTP Client ......................... 65
2.3.6.4 Cấu hình một Host là FTP Server.......................... 66
2.4 Ciao thức BGP và SSFNet ................................................... 67
2.4.1 Giới thiêu về giao thức BGP ....................................... 67
6
2.4.2 Các yếu tố đánh giá BGP ............................................ 69
2.4.3 BGP trong SSFNet...................................................... 71
2.4.3.1 Các mô hình tùy chọn cấu hình BGP .................... 71
2.4.3.2 Tạo các sub-network và các AS ............................ 71
2.4.3.3 Chồng giao thức cấu hình cho Boundary Router ... 72
2.4.3.4 Các thuộc tính của BGP........................................ 73
2.5 Các từ khóa hổ trợ trong DML............................................... 75
2.5.1 Từ khóa _extend ......................................................... 75
2.5.2 Từ khóa _find ............................................................. 75
2.5.3 Từ khóa _dictionary .................................................... 76
2.5.4 Ví dụ minh họa ........................................................... 76
Phần 2 Công cụ giả lập mạng NS-2 và Ngôn ngữ TCL ........................... 78
Chương 3 Công cụ giả lập mạng NS-2 ............................................. 78
3.1 Tổng quan về NS-2 ............................................................. 78
3.2 Kiến trúc của NS-2 .............................................................. 78
3.3 Các thành phần cấu hình mạng trong NS-2 .......................... 81
3.3.1 Lớp Simulator ............................................................... 78
3.3.1.1 Khởi tạo đối tượng Simulator................................ 78
3.3.1.2 Các bộ lập lịch và các sự kiện .............................. 78
3.3.1.3 Các phương thức khác ......................................... 83
3.3.1.4 Tóm tắt ................................................................ 83
3.3.2 Cấu hình Node ............................................................. 84
3.3.2.1 Tạo Node ............................................................. 84
3.3.2.2 Cấu hình cho MobileNode ................................... 84
3.3.2.3 Cấu hình cho Base-Station Node .......................... 85
3.3.2.4 Bảng tóm tắt các tham số cấu hình cho Node ....... 85
3.3.3 Tạo liên kết cho các Node ............................................ 87
3.4 Các Agent trong NS-2 .......................................................... 88
3.4.1 Giới thiệu ..................................................................... 88
7
3.4.2 UDP Agent .................................................................. 89
3.4.3 TCP Agent ................................................................... 91
3.4.3.1 Một số TCP agent bên gởi ................................... 92
3.4.3.1.1 TCP Tahoe .................................................. 92
3.4.3.1.2 TCP Reno .................................................... 93
3.4.3.1.3 TCP Newreno .............................................. 94
3.4.3.2 Một số TCP agent bên nhận ................................. 94
3.4.3.3 TCP agent hai chiều ............................................. 95
3.4.4 Các ví dụ minh họa ...................................................... 96
3.5 Ứng dụng trong NS-2 ........................................................... 97
3.5.1 Lớp Application ........................................................... 97
3.5.2 Phân loại ứng dụng ...................................................... 97
3.5.2.1 Ứng dụng phát sinh lưu lượng mạng .................... 98
3.5.2.2 Ứng dụng giả lập mạng ........................................ 99
3.5.3 Các ví dụ minh họa .................................................... 100
3.6 Mạng không dây trong NS-2 .............................................. 101
3.6.1 Các thành phần cấu hình của một MobileNode .......... 101
3.6.2 Tạo mô hình mạng không dây trong NS-2 .................. 101
3.6.3 Tạo kịch bản chuyển động cho các Node .................... 103
3.6.4 Giao thức định tuyến cho mạng không dây ................. 104
3.6.4.1 Giới thiệu tổng quan .......................................... 104
3.6.4.2 Giao thức định tuyến TORA .............................. 106
3.6.4.3 Giao thức định tuyến DSDV .............................. 108
3.6.4.4 Giao thức định tuyến DSR ................................. 110
3.6.4.5 Giao thức định tuyến AODV ............................. 112
Chương 4 Ngôn ngữ TCL ................................................................ 117
4.1 Tổng quan và một số đặc điểm của ngôn ngữ TCL ............. 117
4.2 Cú pháp của TCL ............................................................... 118
4.2.1 Khai báo biến và mảng ............................................... 118
8
4.2.2 Các biểu thức toán học trong TCL .............................. 119
4.2.3 Thay thế và lập nhóm ................................................. 120
4.2.3.1 Thay thế ............................................................. 120
4.2.3.2 Lập nhóm ........................................................... 121
4.2.4 Cấu trúc điều khiển .................................................... 121
4.2.4.1 Điều kiện if ........................................................ 121
4.2.4.2 Vòng lặp for ....................................................... 121
4.2.4.3 Vòng lặp while .................................................. 122
4.2.4.4 Thủ tục .............................................................. 122
4.2.4.5 Tập lệnh của TCL .............................................. 124
4.2.4.5.1 Nhóm lệnh điều khiển ................................ 124
4.2.4.5.2 Nhóm lệnh sự kiện ..................................... 125
4.2.4.5.3 Nhóm lệnh về file ...................................... 125
4.2.4.5.4 Nhóm lệnh trên danh sách ......................... 126
4.2.4.5.5 Nhóm lệnh trên xử lý chuỗi ....................... 127
4.2.4.5.6 Nhóm lệnh trên xử lý biến ......................... 127
4.2.4.5.7 Nhóm lệnh về thời gian ............................. 128
Chương 5 Ngôn ngữ hướng đối tượng Otcl ...................................... 133
5.1 Otcl là ngôn ngữ hướng đối tượng của TCL ....................... 133
5.2 Lớp và đối tượng trong Otcl ............................................... 133
5.3 Phương thức khởi tạo và hủy cho lớp ................................. 133
5.4 Khai báo các phương thức cho lớp ..................................... 134
5.5 Khai báo các thành phần dữ liệu ......................................... 135
B. Giới thiệu các công cụ phát sinh Topology mạng ............................................ 137
Phần 3 Các công cụ hổ trợ ngôn ngữ DML ........................................... 137
Chương 6 DMLEditor..................................................................... 138
6.1 Giới thiệu............................................................................. 138
6.2 Các tính năng nổi bật của DMLEditor.................................. 138
6.3 Các bước cài đặt DMLEditor ............................................... 138
9
6.4 Quá trình thiết kế trên DMLEditor....................................... 139
Chương 7 RacewayViewer ............................................................. 143
7.1 Giới thiệu............................................................................. 143
7.2 Các tính năng nổi bật của RacewayViewer .......................... 143
7.3 Các bước cài đặt RacewayViewer........................................ 143
7.4 Quá trình thiết kế trên RacewayViewer................................ 144
Chương 8 NetViewer ...................................................................... 148
8.1 Giới thiệu............................................................................. 148
8.2 Các tính năng nổi bật của NetViewer ................................... 148
8.3 Các bước cài đặt NetViewer ................................................ 148
8.4 Quá trình thiết kế trên NetViewer ........................................ 149
Phần 4 Các công cụ hổ trợ ngôn ngữ TCL ............................................ 155
Chương 9 BRITE............................................................................ 155
9.1 Thiết kế và cài đặt BRITE .................................................. 155
9.1.1 Download và cài đặt BRITE........................................ 156
9.1.2 Giao diện bằng GUI .................................................... 158
9.1.3 Giao diện bằng dòng lệnh............................................ 158
9.1.4 Các file cấu hình ......................................................... 159
9.1.5 Định dạng output của BRITE ...................................... 160
9.2 Kiến trúc của BRITE .......................................................... 162
9.2.1 Qui trình làm viêc của BRITE .................................... 162
9.2.2 Kiến trúc của BRITE .................................................. 162
9.2.2.1 Lớp Model ......................................................... 163
9.2.2.1.1 Mô hình đẳng cấp Router-level .................. 164
9.2.2.1.2 Mô hình đẳng cấp AS-level ....................... 166
9.2.2.1.3 Mô hình phân cấp top-down ...................... 166
9.2.2.1.4 Mô hình phân cấp botton-up ...................... 167
9.2.2.1.5 Mô hình Imported File ............................... 167
9.3 Các tham số trong giao diện BRITE ................................... 168
10
9.4 Hạn chế của BRITE ............................................................ 170
Chương 10 NS-2 và NAM ................................................................ 171
10.1 Cài đặt NS-2 và NAM trên Window.................................. 171
10.1.1 Download NS-2 và NAM ......................................... 171
10.1.2 Cài đặt NS-2 ............................................................ 171
10.1.3 Chạy NS-2 và NAM ................................................. 172
10.2 Cài đặt NS-2 và NAM trên Linx ....................................... 173
10.2.1 Download NS-2 và NAM ......................................... 173
10.2 .2 Cài đặt ..................................................................... 174
10.2.3 Chạy NS-2 và NAM ................................................. 175
Phần 5 Các công cụ khác ...................................................................... 176
Chương 11 Otter ............................................................................... 176
11.1 Giới thiệu .......................................................................... 176
11.2 Các tính năng nổi bật của Otter.......................................... 176
11.3 Các bước cài đặt Otter ....................................................... 177
11.4 Quá trình thiết kế trên Otter............................................... 178
C. Xây dựng chương trình ứng dụng BRITE........................................................ 182
Phần 6 Cơ sở lý thuyết .......................................................................... 182
Chương 12 Lý thuyết cơ bản về mạng không dây ............................. 183
12.1 Giới thiệu ......................................................................... 183
12.1.1 Mạng không dây cố định .......................................... 184
12.2.2 Mạng không dây di động .......................................... 185
12.2 Mạng MANET ................................................................. 185
12.2.1 Tổng quan về mạng MANET ................................... 185
12.2.2 Phân loại mạng MANET theo cách thức định tuyến . 186
12.2.2.1 Mạng MANET định tuyến Single-hop ............ 186
12.2.2.2 Mạng MANET định tuyến Multi-hop ............... 186
12.2.2.3 Mô hình MANET định tuyến MobileMulti-hop 187
12.2.3 Phân loại mạng MANET theo chức năng của Node .. 187
11
12.2.3.1 Mạng MANET đẳng cấp .................................. 187
12.2.3.2 Mạng MANET phân cấp .................................. 187
12.2.3.3 Mạng MANET kết hợp .................................... 188
Phần 7 Xây dựng ứng dụng................................................................... 190
Chương 13 Giới thiệu ứng dụng ........................................................ 190
13.1 Giới thiệu ......................................................................... 190
13.2 Ngôn ngữ cài đặt và tính tương thích ................................ 190
13.3 Các mô hình mạng trong ứng dụng ................................... 191
13.3.1 Mạng MANET ......................................................... 191
13.3.2 Wired-cum-Wireless ................................................ 191
Chương 14 Các chức năng chính của ứng dụng................................. 192
14.1 Giới thiệu các lớp trong module wireless .......................... 192
14.2 Giao diện chính module Wireless ..................................... 193
14.3 Cấu hình các wireless node ............................................... 196
14.4 Tạo kịch bản chuyển động ................................................ 199
14.4.1 Tạo bằng tay ....................................................... 201
14.4.2 Tạo ngẫu nhiên ................................................... 202
14.4.3 Ý nghĩa của tạo bằng tay và ngẫu nhiên ............... 202
14.5 Tạo kịch bản ứng dụng ..................................................... 202
14.6 Giải thuật phát sinh số Domain và Cluster ......................... 204
14.7 Tiến hành giả lập ............................................................... 206
14.7.1 Các bước xây dựng kịch bản và biên dịch ................. 206
14.7.2 Các ví dụ minh họa .................................................. 206
14.7.2.1 Mạng MANET.................................................. 206
14.7.2.2 Mạng Wired-cum-Wireless ............................... 208
Tổng kết............................................................................................................... 210
Phụ lục Các ví dụ minh họa ngôn ngữ DML và TCL ......................................... 212
Tài liệu tham khảo ............................................................................................... 224
12
DANH SÁCH CÁC BẢNG
Bảng 1.1 Phiên bản hiện tại của SSF
Bảng 1.2 Cài đặt các lớp Event trong C++ và Java
Bảng 1.3 Cài đặt các lớp Entity trong C++ và Java
Bảng 1.4 Cài đặt các lớp inChannel, outChannel trong C++ và Java
Bảng 1.5 Cài đặt các lớp process trong C++ và Java
Bảng 1.6 Đoạn chương trình nguồn của ví dụ về SSF
Bảng 1.7 Các giao thức trong SSFNet
Bảng 1.8 Các gói thư viện hỗ trợ trong SSFNet
Bảng 1.9 Các lớp chính của gói SSF.Net
Bảng 2.1 Các đối tượng và thuộc tính của DML
Bảng 3.1 Các tham số cấu hình cho MobileNode
Bảng 3.2 Các Agent hổ trợ trong NS-2
Bảng 3.3 Các phương thức của lớp Application
Bảng 3.4 Các phương thức của lớp TrafficGenerator
Bảng 4.1 Các toán tử trong TCL
Bảng 4.2 Nhóm lệnh điều khiển
Bảng 4.3 Nhóm lệnh sự kiện
Bảng 4.4 Nhóm lệnh file
Bảng 4.5 Nhóm lệnh xử lý trên danh sách
Bảng 4.6 Nhóm lệnh xử lý trên chuỗi
Bảng 4.7 Nhóm lệnh xử lý biến
Bảng 4.8 Nhóm lệnh xử lý thời gian
Bảng 4.9 Các tham số tùy chọn trên I/O
Bảng 4.10 Các tham số tùy chọn xử lý trên file
Bảng 4.11 Các cờ xử lý tác vụ mở file
Bảng 4.12 cú pháp exec để định hướng I/O
Bảng 4.13 Cú pháp các thao tác trên file
13
Bảng 9.1 Các tham số thiết lập cho Node
Bảng 9.2 Các tham số thiết lập cho cạnh
Bảng 9.3 Các tham số của mô hình đẳng cấp
Bảng 9.4 Các tham số của mô hình phân cấp top-down
Bảng 9.5 Các tham số của mô hình phân cấp botton-up
Bảng 9.6 Các tham số của mô hình Imported File
Bảng 10.1 Cách thức cài đặt NS-2 trong Window
Bảng 14.1 Các lớp trong module wireless
Bảng 14.2 Các agent được cài đặt trong module Wireless
Bảng 14.3 Các ứng dụng được cài đặt trong module Wireless
14
DANH SÁCH CÁC HÌNH
Hình 1.1 Sơ đồ mô hình SSFNet
Hình 1.2 Ví dụ HelloWorld trong SSF
Hình 1.3 Sơ đồ của qui trình giả lập
Hình 1.4 Mô hình SSNet
Hình 1.5 Các tầng xử lý của SSFNet
Hình 1.6 Mô hình ProtocolGraph
Hình 1.7 Peer-to-Peer Network
Hình 2.1 Các thành phần mạng được sử dung trong DML
Hình 2.2 Cấu trúc ngữ pháp của DML
Hình 2.3 Quá trình khởi tạo các đối tượng giả lập
Hình 2.4 Trình tự biên dịch file DML
Hình 2.5 Hộp thoại cấu hình biến CLASSPATH
Hình 2.6 Hộp thoại tạo biến CLASSPATH
Hình 2.7 Kết quả biên dịch file DML
Hình 2.8 Minh họa định nghĩa đối tượng Net
Hình 2.9 Ví dụ khai báo chồng giao thức định tuyến cho Router
Hình 2.10 Ví dụ thuộc tính Link
Hình 2.11 ProtocolSession
Hình 2.12 Chồng giao thức của một FTP Client
Hình 2.13 Chồng giao thức của một FTP Server
Hình 2.14 Sơ đồ kiến trúc của quá trình định tuyến động
Hình 2.15 EBGP và IBGP
Hình 2.16 Quá trình xử lý định tuyến của BGP
Hình 2.17 Thuộc tính AS_PATH
Hình 2.18 Thuộc tính NEXT_HOP
Hình 2.19 Chồng giao thức cho một Boundary Router
Hình 3.1 Kiến trúc tổng quan của NS
15
Hình 3.2 Mô hình đơn giản của NS
Hình 3.3 Mô hình hoạt động của NS-2
Hình 3.4 Cấu trúc Heap giảm
Hình 3.5 Hai loại ứng dụng trong NS-2
Hình 3.6 Các giao thức định tuyến trong mạng MANET
Hình 3.7 Mô hình nước chảy trong mạng với giao thức TORA
Hình 3.8 Các giá trị hop-count trong TORA
Hình 6.1 Giao diện chính của DMLEditor
Hình 6.2 Tạo id cho mạng
Hình 6.3 Giao diện cấu hình cho Host, Router
Hình 6.4 Giao diện tạo liên kết giữa các Host,Router
Hình 6.5 Giao diện thiết lập thông số cho Host, Router
Hình 6.6 Giao diện cấu hình card mạng
Hình 6.7 Giao diện thiết lập bảng định tuyến
Hình 6.8 Danh sách bảng định tuyến
Hình 7.1 Giao diện chính của RacewayViewer
Hình 7.2 Minh họa chức năng zoom toàn bộ network
Hình 7.3 Minh họa chức năng scale một sub-network
Hình 8.1 Giao diện chính của NetViewer
Hình 8.2 Giao diện của NetViewer khi mở một file DML
Hình 8.3 Giao diện tìm kiếm node
Hình 8.4 Giao diện chỉnh sửa các thuộc tính
Hình 8.5 Giao diện thêm Node vào trong mạng
Hình 8.6 Mô hình mạng sau khi cấu hình
Hình 8.7 Các thành phần mạng dưới dạng TreePopUp
Hình 9.1 Cấu trúc tổng quát của BRITE
Hình 9.2 Cấu trúc thư mục của phiên bản Java
Hình 9.3 Cấu trúc thư mục phiên bản C++
Hình 9.4 sự tương tác giữa phần giao diện GUI với phần phát sinh topo
16
Hình 9.5 File cấu hình của mô hình AS Waxman
Hình 9.6 File cấu hình của mô hình phát sinh NLANR
Hình 9.7 Ví dụ file output của mô hình Flat-RouterWaxman
Hình 9.8 Cấu trúc của một Topology trong BRITE
Hình 9.9 Mô hình của lớp Mode
Hình 9.10 Hai mô hình phân bố node randomly và Heavy-Tailed
Hình 9.11 Mô hình phân cấp top-down
Hình 9.12 Mô hình ImportedFile
Hình 10.1 Cấu trúc thư mục của NS-2 cài đặt trên Window
Hình 10.2 Cấu trúc thư mục của NS-2 trên Linux
Hình 11.1 Giao diện chính của Otter
Hình 11.2 Giao diên load file
Hình 11.3 Giao diên thiết kế trên Otter
Hình 11.4 Mô hình kết xuất theo trạng thái Tunnel
Hình 11.5 Mô hình kết xuất theo Domain Name
Hình 11.6 Mô hình kết xuất theo cấu trúc cây thư mục của một Website
Hình 12.1 Mô hình mạng không dây cố định
Hình 12.2 Mô hình mạng không dây di động (AdHoc)
Hình 12.3 Định tuyến Single-hop
Hình 12.4 Định tuyến multi-hop
Hình 12.5 Mô hình mạng phân cấp
Hình 12.6 Mô hình mạng Aggregate Ad hoc
Hình 14.1 Giao diện chính module Wireless của BRITE
Hình 14.2 Cửa sổ thông báo trạng thái phát sinh topo
Hình 14.3 Giao diện lưu file
Hình 14.4 Giao diện cấu hình chung cho các MobileNode
Hình 14.5 Giao diện cấu hình cho từng MobileNode
Hình 14.6 Giao diện tao kịch bản chuyển động cho các MobileNode
Hình 14.7 Giao diện thiết lập ứng dụng cho mạng
17
Hình 14.8 Mô hình mạng wire-cum-wireless
Hình 14.9 Mô hình mạng MANET trong NAM ( cảnh 1 )
Hình 14.10 Mô hình mạng MANET trong NAM ( cảnh 2 )
Hình 14.11 Mô hình mạngWired-cum-Wireless trong NAM
18
DANH SÁCH CÁC TỪ VIẾT TẮT
1. ABR: Associa tivity-Based Routing - Định tuyến dựa trên tính liên kết.
2. ACK: Acknowledgment - Tin báo nhận.
3. AdvertisedWnd: Advertised Receive Window Size – Kích thước cửa sổ nhận
quảng bá.
4. AODV: Ad hoc On-Demand Distance Vector – Giao thức định tuyến vector
khoảng cách theo yêu cầu dùng cho mạng Ad hoc.
5. AP: Access Point - Điểm truy cập.
6. API: application program interface - Hệ giao tiếp lập trình ứng dụng.
7. ARP: Address Resolution Protocol - Giao thức phân giải địa chỉ.
8. AS: Autonomous System - Vùng tự trị.
9. BGP: Border Gateway Protocol - giao thức trao đổi các thông tin định tuyến giữa
các inter-Autonomous System (AS).
10. BRITE: Boston university Representative Internet Topology gEnerator - Công
cụ phát sinh topo theo chuẩn Internet của đại học Boston.
11. BS: Base-Station - Trạm chuyển tiếp giữa wired và wireless network.
12. BSD: Berkeley’s Software Distribution - Nhà phân phối phần mềm của
Berkeley.
13. CBR: constant Bit Rate - Tốc độ bit không đổi.
14. CBRP: Cluster Based Routing Protocol - giao thức định tuyến dựa trên nhóm
15. ConThresh: Threshhold of the Control Window Size - ngưỡng kích thước cửa sổ
điều khiển.
16. D-ACK: Delayed-ACK – Tin báo nhận trễ.
17. DAG: Directed Acyclic Graph - đồ thị không vòng có hướng.
18. DDR: Distributed Dynamic Routing - Định tuyến phân phối động.
19. DML: Domain Modeling Language - Ngôn ngữ mô hình hóa domain mạng.
20. DOS: Disk Operating System - Hệ điều hành đĩa.
19
21. DSDV: Destination-Sequenced Distance Vector – vector khoảng cách tuần tự
đến địa chỉ đích.
22. DSR: Dynamic Source Routing - Định tuyến source route động.
23. DV: Distance-Vector - vector khoảng cách.
24. EBGP: External Border Gateway Protocol – Giao thức định tuyến liên AS.
25. FTP: File Tranfer Protocol – Giao thức truyền file.
26. GNU
27. GSR: Global State Routing - Định tuyến trạng thái toàn cục.
28. GUI: Graphical User Interface - Giao diện người dùng bằng đồ họa.
29. HTTP: Hypertext Transfer Protocol – Giao thức truyền siêu văn bản.
30. IBGP: Internal Border Gateway Protocol – Giao thức định tuyến nội bộ AS.
31. ICMP: Internet Control Message Protocol – Giao thức điều khiển các thông điệp
Internet.
32. IETF: Internet Engineering Task Force - Tổ chức nghiên cứu Internet.
33. IP: Internet Protocol – Giao thức Internet.
34. ISS: Initial Sequence Number – Giá tri khởi tạo tuần tự.
35. JDK: Java Development Kit - Bộ công cụ phát triển Java.
36. LAN: Local Area Network - Mạng cục bộ.
37. LAR: Location Aided Routing - Định tuyến dựa vào vị trí.
38. MAC: Media Access Control - Kiểm soát truy cập môi trường truyền thông.
39. MANET: Mobile Ad hoc Network - Mạng di động không kiểm soát.
40. MaxConWnd: Maximum Congestion Control Window Size – Kích thước tối đa
khung nghẽn mạch.
41. MaxIdleTime: Maximum Idle Time - Thời gian nhàn rỗi tối đa.
42. MaxRexmitTimes: Maximum Retransmission Times - Số lần tối đa được phép
truyền lại.
43. MPLS: Multiprotocol Label Switching - Chuyển mạch nhãn đa giao thức.
44. MSL: Maximum Segment Lifetime - Thời gian sống tối đa của một phân đoạn
dữ liệu.
20
45. MSS: Maximum Segment Size – Kích thước tối đa của một phân đoạn.
46. NAM: Network Animator - Bộ mô phỏng mạng.
47. NHI: Network Host Interface - Địa chỉ giao tiếp của các thành phần mạng trong
ngôn ngữ DML.
48. NIC: Network Interface Card – Card giao tiếp mạng.
49. NS: Network Simulator - Bộ giả lập mạng.
50. OSPF: Open Shortest Path First Protocol – Giao thức định tuyến đường đi ngắn
nhất.
51. OTcl: Object Tool Command Language – Ngôn ngữ lệnh hướng đối tượng.
52. PDA : Personal Digital Assistant - Thiết bị hổ trợ cá nhân.
53. RBP: Rate Based Pacing - tạm dịch Nhịp dựa trên tốc độ.
54. RcvWndSize: Receive Window Size – Kích thước vùng cửa sổ bên nhận.
55. RMSS: Receiver Maximum Segment Size – Kích thước tối đa phân đoạn bên
nhận.
56. RREP: Route Reply - Phản hồi thông tin định tuyến.
57. RREQ: Route Request – Yêu cầu thông tin định tuyến.
58. RRER: Route Error – Thông báo lỗi thông tin định tuyến.
59. RTP: Real-time Transport Protocol - Giao thức truyền tải thời gian thực.
60. RTT: Round Trip Time - Thời gian một quá trình gởi và nhận.
61. SendWndSize: Send Window Size – Kích thước vùng cửa sổ gởi.
62. SMSS: Sender Maximum Segment Size – Kích thước tối đa phân đoạn bên gởi.
63. SSF: Scalable Simulation Framework – tạm dịch là Khung giả lập mạng gốc.
64. SSFNet: Scalable Simulation Framework Network Model – Mô hình mạng dựa
trên nền SSF.
65. SYN: Synchronization - sự đồng bộ hoá.
66. TCL: Tool Command Language – Ngôn ngữ lệnh.
67. TCP: Transmission Control Protocol – Giao thức kiểm soát sự truyền.
68. TORA: Temporally Ordered Routing Algorithm - thuật toán định tuyến trình tự
tạm thời.
21
69. TTL: Time To Live - Thời gian sống.
70. UDP: User Datagram Protocol – tạm dịch là Giao thức dữ liệu người dùng.
71. VINT: Virtual Internet Testbed - Thử nghiệm mạng Internet ảo.
72. WRP: Wireless Routing Protocol - Giao thức định tuyến mạng không dây.
73. ZHLS: Zone-based Hierarchical Link State routing protocol - giao thức định
tuyến trạng thái liên kết phân cấp dựa trên vùng.
74. ZRP: Zone Routing protocol - Giao thức định tuyến dựa theo vùng.
22
TÓM TẮT LUẬN VĂN
Thông tin chung về đề tài: Tên đề tài:
Tìm hiểu ngôn ngữ mô hình hóa mạng và xây dựng bộ công cụ phát sinh
Topology cho mạng GVHD: Thạc sĩ Phan Xuân Huy
Sinh viên thực hiện:
1. MSSV: 0112067 Họ và tên: Huỳnh Phú Quý
2. MSSV: 0112218 Họ và tên: Nguyễn Trần Quang Hiếu
Tóm tắt nội dung luận văn:
Luận văn tập trung vào việc tìm hiểu cơ sở lý thuyết về mạng không dây và một
số ngôn ngữ mô hình hóa mạng như DML, TCL từ đó xây dựng một ứng dụng dùng
để phát sinh topology, kịch bản chuyển động và các ứng dụng cho mạng không dây
mà chủ yếu là mạng MANET cho bộ công cụ giả lập mạng NS-2.
Một số từ khóa chính liên quan đến nội dung đề tài: - BRITE: Boston university Representative Intenet Topology gEnerator
- DML: Domain Modeling Language
- MANET: Mobile Ad Hoc Network
- NAM: Network Animator
- NS-2: Network Simulator version 2
- OTCL: Object Tool Command Language
- SSF: Scalable Simulation Framework
- SSFNet: Scalable Simulation Framework Network Model
- TCL: Tool Command Language
23
Lĩnh vực áp dụng: Luận văn được ứng dụng cho việc tìm hiểu, nghiên cứu các thành phần mạng, các
mô hình mạng không dây trong môi trường giả lập.
Các thuật toán, phương pháp, quy trình chính được nghiên cứu, ứng dụng trong đề tài: - Giải thuật phát sinh số Domain và số Cluster cho mô hình mạng không dây và có
dây trong ngôn ngữ TCL.
- Giải thuật tạo địa chỉ cho các node (wired, wireless và BS node) trong mô hình
mạng.
Các công cụ, công nghệ chính được nghiên cứu, ứng dụng trong đề tài: - Môi trường lập trình Java sử dụng bộ JDK 1.4, công cụ thiết kế JBuilder 9.0 trên
window và Linux.
- Trong đề tài này, chúng tôi tập trung vào các ngôn ngữ mô hình hóa mạng DML,
TCL và công cụ phát sinh topology mạng BRITE và công cụ giả lập mạng NS-2.
Xác nhận của GVHD
24
CHƯƠNG MỞ ĐẦU
1. Dẫn nhập: Ngày nay, mạng máy tính toàn cầu hay còn gọi là mạng Internet đang phát
triển một cách mạnh mẽ và rộng lớn, trở thành nơi trao đổi thông tin và lưu trử dữ
liệu với khối lượng khổng lồ. Các công nghệ mới, các giao thức mới nhanh chóng
được ra đời và triển khai trên thực tế nhằm đáp ứng cho sự phát triển như vũ bão,
cũng như các đòi hỏi ngày càng khắc khe của mạng máy tính tương lai.
Internet giờ đây đã trở nên quá đồ sộ và phức tạp đến nỗi chúng ta khó có thể
hiểu được cách thức hoạt động và nguyên tắc vận hành của nó trong thời kỳ mới.
Do đó, đối với các nhà nghiên cứu và phát triển, việc kiểm tra sự hoạt động của
các tính năng mới, các giao thức mới (như các giao thức truyền dữ liệu, các giao
thức định tuyến,…) trước khi triển khai trên thực tế là rất quan trọng và cần thiết.
Công việc này không những giúp giảm rủi ro và chi phí mà còn đảm bảo sự chắc
chắn và tính ổn định của việc triển khai các công nghệ mới. Chính vì thế mà một
môi trường giả lập mạng hoàn chỉnh là công cụ thiết yếu cho việc kiểm tra, thử
nghiệm các công nghệ mới trên các mạng lớn có cấu trúc phức tạp.
Ngoài mục đích kinh tế thương mại, các công cụ giả lập mạng còn góp phần
rất lớn trong việc hổ trợ cho các mục đích học tập và nghiên cứu của sinh viên,
giảng viên chuyên ngành mạng máy tính ở các trường Đại học-Cao đẳng, cũng
như các cá nhân, tổ chức đang làm việc trong lỉnh vực mạng.
Hiện nay, các công cụ và môi trường giả lập mạng xuất hiện chưa nhiều trong
khi nhu cầu của thị trường là rất lớn, nhất là khi mạng không dây ra đời và ngày
càng trở nên phổ biến thì nhu cầu này càng trở nên cấp thiết. Trong phạm vi của
đề tài luận văn tốt nghiệp – “tìm hiểu ngôn ngữ mô hình hóa mạng và xây
dựng bộ công cụ phát sinh Topology cho mạng”, chúng tôi sẽ nghiên cứu,
tìm hiểu các ngôn ngữ mô hình hóa mạng đang được sử dụng thông dụng, đồng
thời giới thiệu các bộ công cụ phát sinh Topology cho mạng, và cuối cùng là xây
25
dựng chương trình ứng dụng phát sinh Topology cho mạng không dây có kết hợp
với mạng có dây.
2. Mục đích và ý nghĩa đề tài: Trong khi mạng máy tính đang ngày càng phát triển không ngừng và trở nên
quá tiện dụng kèm theo đó là tính phức tạp và cồng kềnh không kém, thì các dự
án nghiên cứu, xây dựng , phát triển các môi trường giả lập mạng chỉ mới được
đề cập và quan tâm đúng mức trong khoảng thời gian gần đây (khoảng từ năm
1995). Điều này cũng hoàn toàn dễ hiểu bởi chỉ khi mạng máy tính thực sự phát
triển và trở nên phức tạp thì người ta mới nghỉ đến việc xây dựng nên các môi
trường giả lập mạng hổ trợ cho các mục đích học tập, nghiên cứu, thử nghiệm và
triển khai các công nghệ mới trong thực tế. Hơn nữa muốn xây dựng nên các
công cụ mạnh đáp ứng được nhu cầu phát triển của mạng thì phải cần có các công
cụ hổ trợ mạnh mẽ (như các công cụ hổ trợ thiết kế, các ngôn ngữ lập trình cấp
cao như C++, Java, …). Đặt biệt đối với ngành mạng máy tính ở nước ta thì đây
là một lĩnh vực còn khá mới mẽ.
Để không nằm ngoài xu hướng phát triển chung trên, đề tài tập trung nghiên
cứu các môi trường giả lập mạng mạnh, thông dụng, có khả năng được tiếp tục
phát triển và hoàn thiện trong tương lai. Và đây cũng chính là mục đích của đề
tài mà chúng tôi tìm hiểu.
Đề tài còn có ý nghĩa thiết thực trong việc nghiên cứu và phát triển các môi
trường giả lập mạng, đồng thời xây dựng nên một cơ sở nền tảng lý thuyết về xây
dựng môi trường và các công cụ giả lập mạng.
3. Đối tượng và phạm vi nghiên cứu: Đề tài tập trung nghiên cứu chính về các ngôn ngữ mô hình hóa mạng thông
dụng là DML (sử dụng cho bộ giả lập SSFNet) và TCL (sử dụng cho bộ giả lập
NS-2 và NAM), giới thiệu được một số công cụ giả lập mạng khá mạnh đã được
phát triển trên hai ngôn ngữ này.
26
Trong đề tài có trình bày một số lý thuyết cơ bản về các giao thức thông dụng
như BGP, các giải thuật của TCP như TCP Tahoe, TCP Reno, các cơ sở lý thuyết
về mạng không dây hổ trợ cho phần xây dựng ứng dụng.
Sử dụng ngôn ngữ TCL phát triển phần ứng dung BRITE thêm chức năng tạo
kịch bản giả lập trong mô hình mạng không dây có kết hợp với mạng có dây, mà
tập trung là mạng MANET.
27
A. NGÔN NGỮ MÔ HÌNH HÓA MẠNG VÀ
CÁC MÔI TRƯỜNG GIẢ LẬP MẠNG
PHẦN 1
SSFNET MODELS VÀ DOMAIN MODELING
LANGUAGE
28
Chương 1
SSF và SSFNet Models
1.1 SSF Model:
1.1.1 Giới thiệu SSF-Scalable Simulation Framework API là một kiến trúc phần mềm cốt lõi
dùng cho việc lên mô hình, tiến hành giả lập và phân tích cấu trúc của các mạng
lớn, phức tạp.
1.1.2 Các đặc tính của SSF: Độc lập và thống nhất:
SSF cung cấp một giao diện độc lập và thống nhất cho tất cả các cài đặt trên
các sự kiện giả lập khác nhau. Các mô hình hướng đối tượng đã tận dụng tính
năng này để xây dựng nên các môi trường giả lập khác nhau nhằm phục vụ cho
những mục đích nhất định.
Kế thừa và tái sử dụng:
Tính năng kế thừa, sử dụng lại mã nguồn là một trong những ưu điểm lớn
của SSF, điều này góp phần làm hạn chế sự phụ thuộc của các phiên bản cải
tiến vào lõi cài đặt (Kernel Simulator) và giúp cho các nhà phát triển có thể
xây dựng nên các ngôn ngữ mô hình hóa cấp cao hay các môi trường giả lập có
hổ trợ giao diện đồ họa.
Mã nguồn mở và đa ngôn ngữ:
SSF được cài đặt trên 2 ngôn ngữ hướng đối tượng mạnh là Java và C++, và
được công bố rộng rãi mã nguồn cho tất cả mọi cá nhân, tổ chức trên thế giới.
Mạnh mẽ:
SSF có khả năng xây dựng nên những mô hình có hiệu quả cao, tính năng
xử lý song song và đa nhiệm các nguồn tài nguyên, có khả năng quản lý cùng
lúc nhiều thực thể mạng giả lập.
1.1.3 Các phiên bản cài đặt của SSF
29
Các phiên bản cài đặt hiện tại của SSF:
Tên phiên bản Mô tả
Raceway
Là phiên bản cải tiến trên nền Java SSF API, do Tổ chức
Renesys phát triển và giới thiệu vào năm 1999 với nhiều cài
đặt tốt, mang tính thương mại cao
JSSF Java SSF API, là phiên bản cải tiến của Tổ chức Cooperating
Systems trên nền Java, được giới thiệu vào tháng 4/2000
CSSF
C++SSF API, là một phiên bản cải tiến khác của Tổ chức
Cooperating Systems trên nền C++, được giới thiệu vào tháng
5/2000
DaSSF
Dartmouth Scalable Simulation Framework, là phiên bản cải
tiến trên nền C++ SSF API của trường đại học Dartmouth có
hổ trợ thêm chức năng Wireless Simulation, được giới thiệu
vào tháng 1/2001
Bảng 1.1 Phiên bản hiện tại của SSF
Hình 1.1 Sơ đồ mô hình SSFNet
1.1.4 Giới thiệu các lớp cơ sở của SSF Lớp Event:
Lớp Event quản lý việc lưu trử và phát sinh các sự kiện cho các thực thể
mạng (protocol packet và timer).
Cài đặt:
C++ Java
30
class Event {
public:
Event* save();
void release();
boolean aliased();
};
public interface Event {
public Event save();
public void release();
public boolean aliased();
}
Bảng 1.2 Cài đặt các lớp Event trong C++ và Java
Lớp Entity:
Lớp Entity là lớp đại diện cho tất cả các thực thể mạng như Host, Router,
Link, TCP Sessions, Protocol, ...
Cài đặt:
C++ Java
class Entity {
public:
virtual void init() =0;
ltime_t now();
void startAll(ltime_t t1);
void startAll(ltime_t t0, ltime_t t1);
ltime_t pauseAll();
void resumeAll();
void joinAll();
Object* alignment();
ltime_t alignto(Entity* s);
// null-terminated
Entity** coalignedEntities();
// null-terminated
process** processes();
// null-terminated
public interface Entity {
public ltime_t now();
public void startAll(ltime_t t1);
public void startAll(ltime_t t0, ltime_t t1);
public ltime_t pauseAll();
public void resumeAll();
public void joinAll();
public ltime_t alignto(Entity s);
public Object alignment();
public java.util.Vector
coalignedEntities();
public void init();
public java.util.Vector processes();
public java.util.Vector inChannels();
public java.util.Vector outChannels();
}
31
inChannel** inChannels();
// null-terminated
outChannel** outChannels();
};
Bảng 1.3 Cài đặt các lớp Entity trong C++ và Java
Lớp inChannel, outChannel:
Lớp inChannel, outChannel quản lý việc truyền thông các sự kiện cho
mạng (protocol interaction, …).
Cài đặt:
C++ Java
class inChannel {
public:
Entity* owner();
// null-terminated
Event** activeEvents();
// null-terminated
outChannel** mappedto();
};
public interface inChannel {
public Entity owner();
public Event[ ] activeEvents();
public outChannel[ ] mappedto();
}
class outChannel {
public:
Entity* owner();
// null-terminated
inChannel** mappedto();
void write(Event* evt, ltime_t
delay =0);
ltime_t mapto(inChannel* tgt,
ltime_t mapping_delay =0);
ltime_t unmap(inChannel*
public interface outChannel {
public Entity owner();
public inChannel[] mappedto();
public void write(Event evt, ltime_t delay);
public void write(Event evt);
public ltime_t mapto(inChannel tgt);
public ltime_t mapto(inChannel tgt, ltime_t
mapping_delay);
public ltime_t unmap(inChannel tgt);
}
32
tgt);
};
Bảng 1.4 Cài đặt các lớp inChannel, outChannel trong C++ và Java
Lớp process:
Lớp process quản lý việc xử lý các đối tượng và các sự kiện phát sinh cho
các thực thể mạng (định tuyến, truyền dữ liệu, …).
Cài đặt:
C++ Java
class process {
public:
process(Entity* theowner, int
simple=0);
process(Entity* theowner,
void(Entity::*body)(process*),
int simple=0);
virtual void action();
virtual void init();
virtual boolean isSimple();
Entity* owner();
void waitOn(inChannel**
waitchannels);
void waitOn(inChannel*
waitchannel);
void waitForever();
}
public interface process {
public Entity owner();
public void action();
public void init();
public void waitOn(inChannel[]
waitchannels);
public void waitOn(inChannel
waitchannel);
public void waitForever();
public void waitFor(ltime_t waitinterval);
public boolean waitOnFor(inChannel[]
waitchannels, ltime_t timeout);
public boolean isSimple();
}
Bảng 1.5 Cài đặt các lớp process trong C++ và Java
Ví dụ về SSF:
33
Hình 1.2 Ví dụ HelloWorld trong SSF
Đoạn chương trình nguồn:
import com.renesys.raceway.SSF.*;
public class HelloWorld extends Entity {
public long delay = 20;
public int rcvd;
public inChannel IN;
public outChannel OUT;
public HelloWorld {
rcvd = 0;
IN = new inChannel (this);
OUT = new outChannel (this, DELAY);
OUT.mapto (IN);
new process (this) {
public void action() {
OUT.write(new Event());
waitFor(DELAY);
}
}
new process (this) {
public void action() {
waitOn(IN);
34
rcvd++;
}
}
}
public static void main(String [] argv) {
HelloWorld hello = new HelloWorld();
hello.startAll(200);
hello.joinAll();
system.out.println(“Total received events = ” + hello.rcvd);
}
}
Bảng 1.6 Đoạn chương trình nguồn của ví dụ về SSF
1.1.5 Trình tự quá trình giả lập Quá trình giả lập được thực hiện theo trình tự các bước sau:
Starting Simulation:
Quá trình giả lập bắt đầu khi bất kỳ một phương thức startAll() của một
thực thể (Entity) nào được gọi, thông thường xuất phát từ phương thức
main(). Kết quả của phương thức startAll() phụ thuộc vào các phiên bản cài
đặt khác nhau.
Các Entity gọi phương thức startAll() phải được chỉ định 2 tham số về
thời gian: thời gian bắt đầu (start time), với giá trị mặc định là 0 và thời gian
kết thúc (end time) của quá trình giả lập. Tất cả các sự kiện giả lập sẽ được
diễn ra trong khoảng thời gian chỉ định này.
Initialization:
Sau khi startAll() được gọi, phương thức init() sẽ khởi tạo tất cả các
Entity và Process của quá trình giả lập. Cách thức triệu gọi chính xác của
quá trình Initialization phụ thuộc vào các phiên bản cài đặt khác nhau và có
thể xảy ra các trường hợp ngoại lệ (exception) như không có một process
35
hay Entity nào được khởi tạo. Khi đó, phương thức now() của Entity sẽ trả
về thời gian start time của quá trình giả lập và bắt đầu lại quá trình khởi tạo.
Process Execution:
Sau khi khởi tạo xong, các process có thể được thực thi ngay tại thời
điểm start time thông qua các phương thức action(). Mỗi khi phương thức
action() được thực hiện xong, trình framework sẽ triệu gọi lại phương thức
này liền sau đó và cứ như vậy cho đến khi kết thúc quá trình giả lập (end
time) cho process đó.
Quá trình xử lý cụ thể của phương thức action() phụ thuộc vào các
phiên bản cài đặt khác nhau.
Framework Inner Loop:
SSF cung cấp tính năng xử lý bình đẳng cho tất cả các process trong quá
trình giả lập. Trong quá trình thực thi, các process có thể được gián đoạn
tạm dừng bằng cách gọi các phương thức waitOn() và waitFor(), sau đó sẽ
quay trở lại quá trình xử lý với cùng tham số thời gian của quá trình giả lập.
Start, Pause, Resume, and Join:
Trong nhiều trường hợp, các phương thức startAll(), pauseAll(),
resumeAll() và joinAll() có thể được sử dụng đến.
Phương thức pauseAll() cho phép quá trình giả lập tạm dừng trong một
khoảng thời gian nhất định, sau đó sẽ trở về thời gian hiện tại bằng cách gọi
phương thức resumeAll(), trình giả lập sẽ phục hồi lại trạng thái trước đó và
tiếp tục quá trình giả lập.
Phương thức startAll() khởi tạo lại quá trình giả lập.
Phương thức joinAll() không cho phép thực thi các phương thức
pauseAll() và resumeAll()., quá trình giả lập sẽ được diễn ra cho đến khi kết
thúc.
Sơ đồ diễn giải:
36
Hình 1.3 Sơ đồ của qui trình giả lập
1.2 SSFNet Model: 1.2.1 Giới thiệu
SSFNet-Scalable Simulation Framework Network Model , là một môi trường
thiết kế các mô hình giả lập mạng hoàn chỉnh với đầy đủ các giao thức hổ trợ
(như IP, TCP, UDP, BGP4, OSPF, …), các thành phần mạng cơ bản (như Router,
Host, Link, LAN, …), và các hổ trợ cấp cao (như multi-protocol, multi-domain
Internet, …).
Đây là một phiên bản cải tiến của SSF, được bắt đầu nghiên cứu và phát triển
vào năm 1999 dựa trên bản cài đặt Raceway.
37
Hình 1.4 Mô hình SSNet
Hình 1.5 Các tầng xử lý của SSFNet
SSFNet Network models là bộ phần mềm nguồn mở viết trên nền Java SSF
API được quản lý và phân phối bởi tổ chức GNU.
Đội ngũ sáng lập và phát triển SSFNet bao gồm: Andy Ogielski, David Nicol
và Jim Cowie, đây được xem là những người đã đặt nền móng cơ sở cho SSFNet.
Sau này các phiên bản cải tiến và các gói hổ trợ cho SSFNet không ngừng được
nghiên cứu và phát triển, như: BGP4 do BJ Premore phát triển, OSPF do Philip
Kwok, TCP-UDP-Sockets-client/server do Hongbo Liu, …
Các tổ chức bảo hộ của SSFNet bao gồm: DARPA, Institute for Security
Technology Studies at Dartmouth và Renesys Corporation.
38
1.2.2 Tổ chức thư mục SSFNet SSFNet phiên bản 2.0 (mới nhất) sau khi cài đặt trên đĩa sẽ được tổ chức theo
cây thư mục sau:
Ssfnet | --- doc // Các tài liệu, hướng dẫn | --- lib // Thư viện cài đặt | --- examples // Các mô hình kham thảo
| --- animation // Các mô hình linh hoạt | --- src // Source code của ssfnet | --- ssf | --- Util | | --- random // Bộ phát sinh số ngẫu nhiên | | --- Streams // Quản lý tải dữ liệu lưu thông trên mạng | | --- Plot // Ghi nhận các sự kiện trên mạng | --- Net // Source code của gói SSF.Net, IP, TCPdump | --- Util // Quản lí đánh nhãn IP | --- OS // Source code của gói SSF.OS, IP, TCPdump | | --- UDP // Các gói protocol được phát triển | | --- TCP // … | | --- Socket | | --- BGP4 | | --- OSPFv2 | | --- WWW | | --- Netflow | | --- | --- App // Các phiên bản phân phối ứng dụng. | --- DDoS | --- | --- cern | --- edu | --- com
1.2.3 Các giao thức hổ trợ trong SSFNet SSFNet cung cấp cho người sử dụng rất nhiều cài đặt của các giao thức thông
dụng.
Protocol Status Packet
IP Là giao thức cốt lõi của SSFNet, phiên SSF.OS.IP
39
bản IPv4,hổ trợ cấu hinh cho các packet
và flow monitoring trong DML
NIC
Network Interface driver-protocol, hổ trợ
cấu hinh cho các packet queue, queue
monitoring và tcpdump trong DML
SSF.Net.NIC
ICMP Xác minh sự tồn tại của các thực thể
mạng SSF.OS.ICMP
TCP
Sử dung các giải thuật TCPTahoe và
TCPReno, có tùy chọn tham số ACK, hổ
trợ truyền nhận dữ liệu giữa client và
server trong DML
SSF.OS.TCP
UDP Hổ trợ truyền nhận dữ liệu giữa
client/server trong DML SSF.OS.UDP
Sockets Sử dụng trong các giao thức TCP và
UDP SSF.OS.Socket
OSPF&OSPFv2 Giao thức định tuyến OSPF, phân phối từ
phiên bản SSFNet 1.4
SSF.OS.OSPF
SSF.OS.OSPFv2
BGP4 Hổ trợ định tuyến giữa các AS trong
DML SSF.OS.BGP4
FTP Hổ trợ việc truyền nhận file trong DML
HTTP Giao thức truyền tin WWW, phiên bản
hiện tại 1.0 và 1.1 SSF.OS.WWW
NetFlow IP flow và flow filter, được cấu hình bởi
nhiều router SSF.OS.NetFlow
Bảng 1.7 Các giao thức trong SSFNet
1.2.4 Các gói thư viện hổ trợ trong SSFNet 1.2.4.1 SSF.OS
40
Các lớp chính:
Tên lớp Chức năng
ProtocolGraph ProtocolGraph là một đối tượng Entity với các thuộc tính
in-outChannel dùng cho việc trao đổi các PacketEvent
ProtocolSession Định nghĩa các giao thức mới
ProtocolMessage ProtocolMessage đại diện cho các header và tải trọng
(payload) của các gói tin
PacketEvent
PacketEvent là lớp bao bên ngoài, lớp này sẽ chuyển một
ProtocolMessage thành một Event và có thể được gởi đi trên
các in-outChannel
Bảng 1.8 Các gói thư viện hỗ trợ trong SSFNet
Hình 1.6 Mô hình ProtocolGraph
Kiến trúc này làm đơn giản hóa việc cài đặt các giao thức mới, tất cả các cài
đặt về protocol đều được kế thừa từ lớp ProtocolSession mà không làm thay
đổi kiến trúc tầng framework.
Các mô hình giao thức trên Internet được xây dưng trên các gói con của gói
SSF.OS, bao gồm: SSF.OS.IP, SSF.OS.TCP, SSF.OS.OSPF, …
1.2.4.2 SSF.Net
Các lớp chính:
Tên lớp Chức năng
41
Net
Đối tượng Net nạp các fie cấu hình DML và định nghĩa các
thực thể mạng như Host, Router kèm theo chồng giao thức
tương ứng, các Link giữa Host và Router, các traffic và bộ
phát sinh ngẫu nhiên RandomNumberStream
Host Được kế thừa từ lớp ProtocolGraph, tối thiểu phải được cài
đặt giao thức IP và một NIC-Network Interface Card
Router
Thực hiện việc định tuyến các gói tin lưu thông trên mạng,
cài đặt giống như Host với nhiều NIC và có ProtocolGraph
riêng biệt
NIC Được kế thừa từ lớp ProtocolSession, dùng để kết nối các
thực thể mạng (Link) thông qua in-outChannel
Link Dùng để kết nối các NIC của các thực thể mạng với nhau
Bảng 1.9 Các lớp chính của gói SSF.Net
Hình 1.7 Peer-to-Peer Network
42
Chương 2
Domain Modeling Language
2.1 Giới thiệu ngôn ngữ DML:
2.1.1 DML là gì? DML-Domain Modeling Language, là một ngôn ngữ đơn giản dùng để mô tả
các mô hình mạng trong môi trường giả lập SSFNet.
Các file DML được viết với một cấu trúc rõ ràng và xác định, diễn tả mô hình
mạng và các thành phần cấu hình nên mạng như Topology, Router, Host, Link,
Routing Protocol, Traffic Pattern, …
Hình 2.1 Các thành phần mạng được sử dung trong DML
Các thành phần mạng được định nghĩa trong một file text đơn thuần có phần
mở rộng là dml. Chúng cũng có thể được định nghĩa trong nhiều file dml khác
nhau với điều kiện là các file đó phải được khai báo với trình giả lập trong quá
trình biên dịch.
Một cách đơn giản ta có thể hiểu ngôn ngữ DML như là một ngôn ngữ đại diện
cho các thực thể của mạng với cấu trúc ngữ pháp được định dạng xác định.
2.1.2 Cấu trúc ngữ pháp của DML
43
Mỗi file DML bao gồm nhiều dòng lệnh khai báo, mỗi dòng khai báo sẽ tương
ứng với một cặp đối số: từ khóa (keyword) hoặc thuộc tính (attribute) và giá trị
(value), được phân cách nhau bởi khoảng trắng.
Từ khóa là một chuỗi ký tự dùng để xác định ý nghĩa của giá trị. Giá trị là một
chuỗi ký tự liên tục không có khoảng trắng, hoặc là một khai báo con bao gồm
nhiều dòng khai báo khác được chứa trong cặp dấu ngoặc [ ].
Cấu trúc ngữ pháp của DML:
Hình 2.2 Cấu trúc ngữ pháp của DML
Thuật ngữ SSF DML dùng để chỉ các tham số khác nhau của các thành phần
mạng được thiết lập như là các thuộc tính của DML. Các thuộc tính có thể có
kiểu dử liệu là các kiểu dữ liệu cơ bản (float, long, integer, string), có thể là một
thể hiện của đối tượng, hoặc cũng có thể được theo sau là các thuộc tính con
(sub-attribute) của nó.
Ví dụ:
Khi định nghĩa một Host với một giao tiếp Interface, SSFNet sẽ thể hiện như
là một đối tượng Host kèm theo một thể hiên của đối tượng Interface là thuộc
tính con của Host, và trong đối tượng Interface lại có các thuộc tính riêng của
nó (như id, buffer, latency, …).
Chú ý: với những thuộc tính có các thuộc tính con, tên khai báo phải được theo
sau bởi cặp dấu ngoặc [ ].
Ngôn ngữ DML không phân biệt chử hoa hay thường.
44
DML cũng cung cấp các câu lệnh chú thích nhằm hổ trợ cho người sử dụng
thêm các ghi chú, hướng dẫn vào file DML, các ghi chú này được bắt đầu với ký
tự “#” và kết thúc là một dòng mới. Các sơ đồ mô hình mạng thường được dùng
để hổ trợ cho việc thể hiện topology của mạng đó ở đầu mỗi file DML, và được
viết sau dấu “#”. Trình biên dịch SSFNet sẽ bỏ qua các dòng khai báo này khi
thực thi chương trình.
Ví dụ:
Chú thích sau diễn tả mô hình mạng có topology gồm 3 Client (C100 đến
C102) kết nối đến Server (S201) thông qua Router (R1).
# C100 ---------|
# C101 ---------|------------R1------------S201
# C102 ---------|
2.1.3 Quá trình biên dịch DML Khi biên dịch, bộ giả lập SSFNet sẽ phân tích cấu trúc file DML và xây dựng
nên các thực thể đối tượng đại diện cho các thành phần mạng tương ứng. Tại thời
điểm này, tất cả các thành phần mạng sẽ có một giá trị khởi tạo xác định được
khai báo trong file DML bởi người sử dụng, hoặc chúng sẽ được gán giá trị mặc
định mà SSFNet đã định nghĩa sắn nếu như chưa được khởi tạo.
Hình 2.3 Quá trình khởi tạo các đối tượng giả lập
Sau quá trình khởi tạo trên, file DML sẽ được đóng gói trong một thể hiện của
đối tượng DML. Một thể hiện của đối tượng DML được xem như một mạng hoàn
chỉnh, bao gồm tất cả các thành phần mạng được khai báo trong nó và cả các khai
báo của các mạng con (sub-network).
45
Hình 2.4 Trình tự biên dịch file DML
2.2 Các bước cài đặt và biên dịch chương trình: 2.2.1 Môi trường Windows
Các file DML được biên dịch bởi trình giả lập SSFNet qua cài đặt Raceway
viết bằng ngôn ngữ Java.
Các bước cài đặt cụ thể như sau:
1. Tải về bộ giả lập SSFNet từ trang chủ của SSFNet : www.ssfnet.org và
cài vào máy (giả sử cài vào ổ đĩa D:\ssfnet).
2. Tải bản jdk phiên bản 1.2 hay mới hơn từ trang Web của Sun :
http://java.sun.com/products/jdk/1.2/docs/tooldocs/tools.html (giả sữ cài vào ổ
đĩa C:\jdk1.2).
3. Thiết lập các tham số cho biến môi trường CLASSPATH:
Vào Control Panel/ System/ System Properties/ Advanced/ chọn
Environment Variables.
46
Hình 2.5 Hộp thoại cấu hình biến CLASSPATH
Trong biến CLASSPATH khai báo thêm đường dẫn đến các file thư viện
trong thư mục ssfnet\lib, nếu chưa có biến CLASSPATH thì nhấn vào New
để tạo mới.
Hình 2.6 Hộp thoại tạo biến CLASSPATH
Chú ý là bạn cũng phải thêm tham số đường dẫn đến trình biên dịch java,
trong cài đặt này là C:\jdk1.2\bin.
47
Ta cũng có thể thêm các tham số cho biến CLASSPATH bằng cách gõ
các dòng lệnh sau trong cửa sổ DOS:
set CLASSPATH=D:\ssfnet\lib\raceway.jar;D:\ssfnet\lib\ssfnet.jar
set CLASSPATH=%CLASSPATH%;D:\ssfnet\lib\cernlite.jar
set CLASSPATH=%CLASSPATH%;D:\ssfnet\lib\raceway.jar
set CLASSPATH=%CLASSPATH%;D:\ssfnet\lib\regexp.jar
set CLASSPATH=%CLASSPATH%;D:\ssfnet\src\
4. Biên dịch file DML từ dòng lệnh:
Giã sữ file DML cần biên dịch được lưu tại thư mục
f:\vidu\SimpleLan.dml. Từ cửa sổ dòng lênh DOS bạn vào thư mục gốc
f:\vidu\ và gõ lệnh sau:
java SSF.Net.Net 1000 SimpleLan.dml D:\ssfnet\examples\net.dml
5. Kết quả hiển thị:
Hình 2.7 Kết quả biên dịch file DML
Diễn giải kết quả quá trình biên dịch:
48
Ở dòng lệnh trên, giá trị 1000 là tham số truyền cho trình biên dịch biết thời
gian kết thúc quá trình giả lập. Tham số D:\ssfnet\examples\net.dml là file
_schema DML SSFNet được sử dụng cho việc tự động làm hợp lệ hóa file
DML SimpleLan.dml nếu như có các khai báo không hợp lệ.
Tại thời điểm bắt đầu quá trình giả lập, đối tượng SSF.Net.Net sẽ sử dụng
các dịch vụ hổ trợ của bộ thư viện DML nạp nội dung các file SimpleLan.dml
và net.dml vào đối tượng cơ sở dữ liệu Configuration, sau đó SSF.Net.Net sẽ
thể hiện và cấu hình một cách tuần tự có hệ thống từ trên xuống tất cả các đối
tượng là các thành phần mạng khai báo trong quá trình giả lập (như các Host,
Router, Protocol, Link, …). Khi tất cả các đối tượng này được thể hiện hoàn
chỉnh, quá trình khởi tạo giá trị cho các thuộc tính bắt đầu (qua trình này được
thực hiện bởi phương thức init() của các thực thể lớp con).
Cuối cùng, đối tượng SSF.Net.Net sẽ gọi phương thức startAll() của nó và
bắt đầu quá trình giả lập với thời gian mốc ban đầu được tính là 0 giây.
Kết quả hiển thị gồm rất nhiều câu thông báo như các sự kiện, các quá trình
trao đổi dữ liệu, quá trình định tuyến, và cả việc tự động phát sinh nhiều block
địa chỉ IP cho các Host và Router, …
2.2.2 Môi trường Unix Trong môi trường Unix-Linux, cách cài đặt cũng tương tự như trong môi
trường Windows, sử dụng biến môi trường –PATH thiết lập các tham số với cấu
hình tương tự như trên.
2.3 Các đối tượng và thuộc tính của DML: DML cung cấp cho người sử dụng gần như tất cả các thành phần mạng với đầy
đủ các thuộc tính cần thiết cho việc mô hình hóa các mạng với cấu trúc lớn và
phức tạp.
Sau đây là bảng mô tả sơ lược các đối tượng và thuộc tính hổ trợ trong DML:
Tên thuộc tính Đối tượng thuộc về Chức năng
49
id <int> Net, Host, Router,
Interface
Phân biệt các thành phần
mạng với nhau
idrange [from
<int1> to <int2>]
Net, Host, Router,
Interface
Khai báo mãng các đối tượng
có giá trị id từ <int1> đến
<int2>
Net Net, không có Khai báo một Net là một
Network chính hay một sub-
network
Host Net Khai báo một Host trong Net
Router Net Khai báo một Router trong
Net
Interface Host, Router Khai báo một giao tiếp cho
Host hoặc Router
Link [attach <NHI1> … <NHIn>]
Net Tạo một liên kết kết nối giữa
2 giao tiếp của 2 thành phần
mạng (Host và Router) theo
địa chỉ NHI
Graph Host, Router Khai báo chồng giao thức
chạy trên Host và Router
ProtocolSession [ name <str> use <str> … ]
Graph Khai báo protocol cho chồng
giao thức
bitrate <int> Interface Khai báo tốc độ truyền dữ
liệu cho giao tiếp (bits/s)
latency <float> Interface Độ trì hoãn trên giao tiếp (s)
buffer Interface Xác định kích thước vùng
đệm lưu dữ liệu trên giao tiếp
(bytes)
50
delay <float> Link Độ trể cho mỗi liên kết (s)
nhi_route [dest
default … ]
Host Khai báo default route cho
Host
route [dest default
… ]
Router Khai báo default route cho
Router
interface <int> route, nhi_route Tham số interface cho
default route
next_hop <NHI> route, nhi_route Giao tiếp của next_hop trong
default route
Traffic Net chính (outermost Net) Định nghĩa các tải trên mạng
Pattern Traffic Xác đình các traffic pattern
Client <NHI> Pattern Xác định đối tượng client
trong traffic
Servers Pattern Xác định servers mà client
kết nối đến trong traffic
nhi <NHI> Servers Địa chỉ của servers mà client
kết nối trong traffic
nhi_range [from <NHI1> to <NHI2>]
Servers Địa chỉ của các servers mà
client kết nối trong traffic
Port <int> Servers Số hiệu cổng port ứng dụng
trên server mà client kết nối
Frequency <int> Net chính (outermost Net) Tần số ghi nhận các sự kiện
xảy ra trên mạng
Randomstream [ ] Net chính (outermost Net) Khai báo bộ phát sinh số
ngẫu nhiên sử dụng
Bảng 2.1 Các đối tượng và thuộc tính của DML
2.3.1 Đối tượng Net 2.3.1.1 Định nghĩa và khai báo
51
Đối tượng Net định nghĩa một thực thể mạng bao gồm các Host, Router,
Link, Traffic và các Network khác (sub-network).
Mỗi mô hình DML đều phải có một đối tượng Net đóng vai trò là đối tượng
chính chứa tất cả các định nghĩa của các thành phần mạng khác.
Cú pháp khai báo:
Net [
id <uniqueID> OR idrange [ from <start range> to <end range>]
frequency <frequencyValue>
randomstream [...]
router [...]
host [...]
link [...]
traffic [
pattern [...]
…
]
Net […]
]
Chú ý: đối với đối tượng Net khai báo đầu file DML thì không có thuộc
tính id hay idrange, còn tất cả các đối tượng Net còn lại (đóng vai trò là các
sub-network) đều phải có một id để phân biệt với các sub-network khác trong
mạng.
52
Hình 2.8 Minh họa định nghĩa đối tượng Net
2.3.1.2 Các thuộc tính của Net
Frequency và Randomstream được xem là 2 thuộc tính đặc biệt và quan
trọng của SSFNet, chúng được sử dụng là tham số cho việc thiết lập các thuộc
tính khác cho quá trình giả lập. Các thuộc tính khác như Host, Router, Link,
Protocol, traffic pattern, … sẽ được trình bày ở những phần sau.
Frequency:
Thuộc tính frequency dùng để thiết lập tốc độ thời gian các sự kiện giả
lập được ghi nhận lại, nó được định nghĩa duy nhất một lần trong mỗi file
DML và được dùng chung cho tất cả các sub-network khác trong mô hinh
giả lập.
frequency thiết lập một giá trị vật lý cho việc phân giải thời gian giả lập
như là một số nguyên không thứ nguyên “clock ticks” tính trên mỗi giây giả
lập. Đơn vị này phải nhỏ hơn thời gian xảy ra các sự kiện trong quá trình giả
lập để có thể ghi nhận lại các sự kiện đang xảy ra (như các sự kiện truyền
gói tin trên mạng, trao đổi bảng thông tin định tuyến, …).
Ví du:
53
Trong mạng LAN thông thường, tốc độ truyền dữ liệu là 100Mbps,
nghĩa là cứ sau mỗi 1/(100.10e6) giây (10 nanogiây) thì một bit được
truyền trên mạng, do đó tần suất phải được thiết lập nhỏ hơn hoặc bằng
10 nanogiây, giả sử ta thiết lập là 1nanogiây thì thuộc tính frequency sẽ
là 1.000.000.000 (“clock ticks”/second). Ta khai báo như sau:
frequency 1000000000
Điều này có nghĩa là mỗi đơn vị thời gian ghi nhận các sự kiện trong
mạng là 1 nanogiây.
Randomstream:
Thuộc tính randomstream dùng để phát sinh các số ngẫu nhiên dùng
trong mô hình mạng. Cũng giống như frequency, thuộc tính randomstream
cũng chỉ được khai báo duy nhất một lần trong mỗi file DML.
Cú pháp khai báo:
randomstream [
generator MersenneTwister
stream “stream generator”
reproducibility_level timeline
]
Thuộc tính generator chỉ ra khai báo sử dụng bộ phát sinh số ngẫu nhiên
nào. SSF cung cấp 2 bộ phát sinh số ngẫu nhiên khá mạnh là:
“MerseMerrcenneTwister” và “Ranlux”.
Giá trị của thuộc tính stream là một chuỗi được sử dụng để gọi quá trình
generator.
Thuộc tính reproducibility_level điều khiển việc chia sẽ bộ phát sinh
randomstream giữa các thành phần của mạng, và cách thức mà các bộ phát
sinh này được tạo ra.
reproducibility_level có các cấp điều khiển sau:
.timeline: cho biết bộ phát sinh số ngẫu nhiên được chia sẽ với tất cả
các host và router trong mạng.
54
.host: cho biết mỗi host trong mạng, bao gồm cả các host trong các
mạng con (sub-network) sở hữu một bộ phát sinh số ngẫu nhiên của riêng
nó nhưng được chia sẽ với tất cả các giao thức chạy trên host đó.
.distribution: không được chia sẽ với bất kỳ thành phần mạng nào, chỉ
được sử dụng khi có khai báo.
2.3.2 Đối tượng Host 2.3.2.1 Định nghĩa và khai báo
Một đối tượng Host có thể đóng vai trò là một Client hoặc một Server hoặc
vừa là Client vừa là Server.
Host là một thuộc tính của đối tượng Net.
Cú pháp khai báo:
host [
id <uniqueID> OR idrange [ from <start range> to <end range>]
interface [ … ]
graph [ … ]
nhi_route […]
]
Mỗi Host có một id duy nhất dùng để phân biệt với tất cả các Host khác
trong mạng mà nó được khai báo, id có giá trị là một con số nguyên, kiểu
Integer.
Trường hợp có nhiều Host với cấu hình giống nhau (chẳng hạn như các
Client trong một mạng LAN) ta có thể khai báo một mãng các Host với khai
báo phần id như sau:
idrange [ from <star ranget> to < end range> ]
2.3.2.2 Các thuộc tính của Host
Interface:
Mỗi Host có thể có một hay nhiều cổng giao tiếp, mỗi giao tiếp được
định nghĩa bên trong thuộc tính interface của Host đó, có bao nhiêu khai
báo interface thì sẽ có bấy nhiêu giao tiếp trên Host đó.
55
Cú pháp khai báo:
interface [
id <interfaceID> OR idrange [ from <start range> to <end
range>]
bitrate <transmissionrate>
latency <queuedelay>
buffer <buffersize>
]
Mỗi giao tiếp phải có một id để phân biệt với các giao tiếp khác của Host
và một giá trị bitrate để thiết lập tốc độ truyền-nhận dữ liệu trên giao tiếp
đó. Thuộc tính id còn được dùng như là một tham chiếu khi thực hiện kết
nối đến các thành phần mạng khác. Kiểu dữ liệu của id và bitrate là kiểu
Integer.
Thuộc tính latency là độ trễ thời gian của việc xử lý các gói dữ liệu trên
giao tiếp đó, giá trị mặc định là 0.0 giây. Kiểu dữ liệu là kiểu float.
Thuộc tính buffer xác định giá trị kích thước (bytes) của vùng đệm lưu
dữ liệu trên NIC. Mặc định giá trị là không giới hạn, nghĩa là dữ liệu đến
bao nhiêu cũng được ghi nhận và lưu vào buffer.
Graph:
Thuộc tính graph định nghĩa các giao thức chạy trên Host (TCP, UDP,
IP, …). Một cách dễ hiểu, ta có thể coi quá trình định nghĩa thuộc tính
graph là quá trình khai báo chồng giao thức mà Host đó sẽ sử dụng.
Cú pháp khai báo:
graph [
ProtocolSession [
name <protocolname> use <classpath>
<more attributes>
]
<more protocol sessions>
56
ProtocolSession [ … ]
]
Thuộc tính ProtocolSession của graph sẽ được trình bày chi tiết ở phần
sau.
Nhi_route:
Thuộc tính nhi_route cấu hình mặc định việc định tuyến các gói dữ liệu
cho Host trong một mạng LAN đến Gateway Router đóng vai trò là Default
Gateway của mạng LAN đó. Khi định nghĩa bất kỳ một Host nào cũng đều
phải kèm theo thuộc tính nhi_route để Host đó có thể liên lạc được với các
Host khác bên ngoài mạng.
Cú pháp khai báo:
nhi_route [
des default interface <idInterfaceHost>
next_hop <idRouter> (<idInterfaceRouter>)
]
Với cách khai báo này, tất cả các gói dữ liệu có địa chỉ đích không cùng
địa chỉ mạng của Host sẽ được mặc định chuyển đến hop kế tiếp là Router
có id chỉ định là <idRouter> với giao tiếp là <idInterfaceRouter>.
2.3.3 Đối tượng Router 2.3.3.1 Định nghĩa và khai báo
Router là một thuộc tính của đối tượng Net. Việc định nghĩa một thành
phần mạng có chứ năng là Router cũng gần giống như định nghĩa một Host
nhưng cách khai báo đơn giản hơn.
Chức năng chính của Router là đinh tuyến các gói dữ liệu lưu thông trên
mạng và liên mạng. Các giao thức định tuyến được cài đặt trong SSFNet sẽ
được trình bày chi tiết trong các phần sau.
Cú pháp khai báo:
router [
id <uniqueID> OR idrange [ from <start range> to <end range>]
57
interface [ … ]
graph [ … ]
route […]
]
2.3.3.2 Các thuộc tính của Router
Interface:
Cách cấu hình thuộc tính Interface cũng tương tự như cấu hình cho Host.
Cú pháp khai báo:
interface [
id <interfaceID> OR idrange [ from <start range> to <end
range>]
bitrate <transmissionrate>
latency <queuedelay>
buffer <buffersize>
]
Graph:
Trong Router ta có thể sử dụng các giao thức định tuyến khác nhau như
IP, BGP, OSPF, … cho việc định tuyến các gói dữ liệu, các giao thức này
được khai báo trong thuộc tính graph. Cách khai báo tương tự như khai báo
cho Host.
Cú pháp khai báo:
graph [
ProtocolSession [ name ip use SSF.OS.IP ]
ProtocolSession [ name bgp use SSF.OS.BGP4.BGPSession ]
…
]
58
Hình 2.9 Ví dụ khai báo chồng giao thức định tuyến cho Router
Route:
Thuộc tính route của Router cũng có chức năng giống như thuộc tính
nhi_route của Host.
Cú pháp khai báo:
route [
dest default interface <idInterfaceRouter>
]
Với khai báo này, tất cả các gói dữ liệu đến Router từ mọi giao tiếp, trừ
giao tiếp có id là <idInterfaceRouter> đều được chuyển qua cổng giao tiếp
có id là <idInterfaceRouter>.
2.3.4 Link 2.3.4.1 Định nghĩa và khai báo
Link là một thuộc tính của đối tượng Net, thuộc tính này thiết lập các liên
kết vật lý theo hướng điểm-điểm (point-to-point) giữa các giao tiếp của các
thành phần mạng (Host và Router).
Chú ý: mỗi giao tiếp chỉ được phép có tối đa một Link.
Cú pháp khai báo:
59
link [
attach <id>(<interface>) attach <id>(<interface>) delay
<dalay>
]
Hình 2.10 Ví dụ thuộc tính Link
2.3.4.2 Các thuộc tính của Link
Thuộc tính delay là tham số tùy chọn, có thể có hoặc không, giá trị mặc
định là 0.0 giây, kiểu float.
Ta cũng có thể định nghĩa nhiều Link cùng lúc đến một giao tiếp, chẳng
hạn nhiều Client trong một mạng LAN kết nối đến Router đóng vai trò là
Default Gateway của mạng LAN đó. Chú ý rằng liên kết ở đây chỉ có nghĩa về
mặc logic chứ không phải là một liên kết vật lý thực sự, ta nên hiểu rằng các
kết nối này được thông qua một thiết bị tập trung như Hub hay Switch.
Cú pháp khai báo:
link [
attach <RouterID>(<router interface>) #default gateway
attach <Host1ID>(<interface>)
attach <host2ID>(<interface>)
...
60
attach <hostNID>(<interface>)
]
2.3.5 Traffic 2.3.5.1 Định nghĩa và khai báo
DML cho phép tạo các sự kiện trong quá trình giả lập thông qua thuộc tính
traffic của đối tượng Net, các sự kiện này là các dòng dữ liệu lưu thông trên
mạng.
Cú pháp khai báo:
traffic [
pattern [
client <ClientID>
servers [ nhi <ServerID>(<interface>) OR
nhi_range [ from <ServerID>(<interface>) to
<ServerID>(<interface>) ]
port <portnumber>
]
]
…
pattern [… ]
]
2.3.5.2 Các thuộc tính của Traffic
Mỗi kết nối giữa một Client và một Server (nhi) hoặc nhiều Server
(nhi_range) được định nghĩa thông qua thuộc tính pattern. Traffic có thể có
một hoặc nhiều pattern.
Thuộc tính servers phải luôn khai báo thuộc tính port đi kèm, đây là số hiệu
cổng ứng dụng mà Server và Client dùng để liên lạc với nhau.
2.3.6 Protocol 2.3.6.1 Định nghĩa và khai báo
61
Việc định nghĩa các Protocol chạy trên các thành phần mạng (như Host và
Router) là rất quan trọng, vì nó quyết định cách thức mà các thành phần mạng
trao đổi dữ liệu với nhau, các giao thức định tuyến đang được sử dụng (IP,
TCP, UDP hay BGP, OSPF, …), trong mạng đang chạy những ứng dụng gì
(FTP,HTTP hay Web, ...), vai trò của một Host là Server hay là Client, …
Mỗi Protocol được khai báo thông qua thuộc tính ProtocolSession., là một
thuộc tính con của thuộc tính Graph.
Hình 2.11 ProtocolSession
Cú pháp khai báo:
ProtocolSession [
name <protocolname> use <classpath>
<more attributes>
<attribute> [ … ]
]
Chú ý:
Khi khai báo các Protocol chạy trên các đối tượng Host hoặc Router, ta
phải luôn khai báo giao thức IP cho đối tương đó. Nghĩa là trong phần định
nghĩa thuộc tính Graph, phải luôn có dòng khai báo sau:
ProtocolSession [ name ip use SSF.OS.IP ]
2.3.6.2 Các thuộc tính của Protocol
62
Các Protocol khác nhau có thể có hoặc không có các thuộc tính riêng của
nó.
Các thuộc tính quan trọng của ProtocolSession:
.name <protocolname> use <classpath>: khai báo tên của Protocol
tương ứng với lớp thư viện được sử dụng, name và use thuộc kiểu String.
.port: số hiệu Port ứng dụng, kiểu Integer.
.client_limit: số lượng các Client tối đa được phép kết nối đến Server, giá
trị mặc định là MAXINT, kiểu Integer.
.queue_limit: số lượng tối đa các yêu cầu đang chờ đợi để được kết nối
đến Server, giá trị mặc định là 5, kiểu Integer.
.request_size: kích thước (bytes) của các datagram request, giá trị này
phải như nhau giữa bên gởi và bên nhận, kiểu Integer.
.show_report: cho biết có hiển thị các thông tin ghi nhận được trong các
phiên làm việc (session) hay không, giá trị mặc định là true, kiểu boolean.
.debug: cho biết có hiển thị các thông tin chuẩn đoán của Client/Server
trong quá trình giả lập hay không, giá trị mặc định là false, kiểu boolean.
.tcpinit: TCP là giao thức truyền dữ liệu thông dụng do tính đáng tin cậy
của nó, thuộc tính này dùng để thiết lập cấu hình giao thức TCP cho các
Host, điều này cho phép quá trình giả lập định nghĩa nhiều Host và Router
có thể chạy giao thức TCP chung với các giao thức khác.
Các thuộc tính của tcpinit:
.ISS: Initial Sequence Number, thuộc tính này thiết lập chỉ số tuần
tự khởi tạo các gói dữ liệu của bên gởi và bên nhận, giá trị mặc định là
0, kiểu Integer.
.MSS: Maximum Segment Size, là kích thước (bytes) lớn nhất của
một segment, giá trị mặc định là 1024, kiểu Integer. SSFNet không
cho phép người sử dụng tự thiết lập các thông số RMSS (Receiver
MSS) và SMSS (Sender MSS) mà 2 thông số này được lấy từ giá trị
63
của thuộc tính MSS nhằm tránh việc sai lệch về MSS giữa bên gởi và
bên nhận.
.RcvWndSize và SendWndSize: Receive Window Size và Send
Window Size, kích thước khung cửa sổ trượt của bên gởi và bên nhận
dữ liệu, tính theo đơn vị MSS, giá trị mặc định là 16, kiểu Integer.
.SendBufferSize: Send Buffer Size, kích thước vùng đệm gởi dữ
liệu, tính theo đơn vị MSS, giá trị mặc định là 16, kiểu Integer.
.MaxConWnd: Maximum Congestion Control Window Size, giá trị
mặc định là MAX_INT/65535, kiểu Integer.
.MaxRexmitTimes: Maximum Retransmission Times, số lần tối đa
được phép truyền lại, giá trị mặc định là 12, kiểu Integer.
.AdvertisedWnd: Advertised Receive Window Size, kiểu Integer.
.conThresh: Threshhold of the Control Window Size ( called
ssthresh in BSD).
.fast_recovery: SSFNet cài đặt 2 phiên bản TCP, TCPReno và
TCPTahoe. Nếu fast_recovery có giá trị là true thì TCP sử dụng là
TCPReno, còn nếu là fasle thì TCP sử dụng là TCPTahoe.
.TCP_SLOW_INTERVAL: bộ định thời gian chuẩn, đơn vị tính là
giây, kiểu float.
.TCP_FAST_INTERVAL: thời gian (s) chờ các gói tin ACK, kiểu
float.
.MSL: Maximum Segment Lifetime, thời gian (s) sống của các
segment, kiểu long.
.MaxIdleTime: Maximum Idle Time, đơn vị tính là giây, kiểu long.
.delayed_ack: các báo nhận được trùy hoãn, tùy chọn này cho phép
thêm các thuật toán xử lý các báo nhận ACK vào giao thức TCP, kiểu
boolean.
.start_time: thời gian (s) bắt đầu gởi các request đến Server, giá trị
mặc định là 1, kiểu long.
64
.start_window: Start Time Window (s), giá trị mặc định là 0, kiểu
long. Thuộc tính này dùng làm tham số thời gian để gởi request đến
Server theo giá trị thời gian được chọn ngẫu nhiên nằm trong khoảng
[start_time, start_time + start_window], nếu start_window=0 thì thời
gian bắt đầu gởi đến server đúng bằng start_time.
.file_size: kích thước file (bytes) được yêu cầu, giá trị mặc định là
1000, kiểu Integer.
.random_file_size: FTP Client hổ trợ các request với kích file được
tạo ngẫu nhiên. Thuộc tính này cho phép Client phát sinh các request
đến Server yêu cầu một file với kích thước được tạo ngẫu nhiên dựa
trên các tham số khai báo của nó.
Chú ý là chỉ được khai báo một trong hai thuộc tính file_size
hoặc random_file_size.
Cú pháp khai báo:
random_file_size [
distribution [
#distribution-dependent parameters.
name “<distribution class name>”
lambda “<floating point value>”# =1/(distribution
mean)
]
]
Các tham số của thuộc tính name gồm 21 tham số: Beta,
Binomial, BreitWigner, BreitWignerMeanSquare, ChiSquare,
Exponential, Gamma, HyperGeometric, Hyperbolic, Logarithmic,
NegativeBinomial, Normal, Pareto, ParetoII,Poisson, PoissonSlow,
Uniform, VonMises, Weibull, Wald, Zeta.
Các tham số này được định nghĩa trong lớp
SSF.Util.Random.RandomStream
65
.off_time: việc dùng thuộc tính random_file_size khiến cho mỗi
request FTP Client tự động phát sinh một file với kích thước ngẫu
nhiên và được gởi đến Server. Để cho phép gởi nhiều request một cách
ngẫu nhiên, ta có thể khai báo thêm thuộc tính off_time hoặc
random_off_time.
.random_off_time: với thuộc tính này, FTP Client có thể gởi một
request với một file ngẫu nhiên nào đó.
Cú pháp khai báo:
random_off_time [
distribution [
#distribution-dependent parameters.
name “<distribution class name>”
lambda “<floating point value>”# =1/(distribution
mean)
]
]
Tất cả các thuộc tính trên đều được cài đặt cho 2 phiên bản TCPReno và
TCPTahoe. Lý thuyết về 2 giải thuật trên sẽ được trình bày ở phần sau.
2.3.6.3 Cấu hình một Host là FTP Client
Chồng giao thức cấu hình cho một Host có vai trò là một FTP Client:
Hình 2.12 Chồng giao thức của một FTP Client
Định nghĩa chồng giao thức trong DML:
66
graph [
ProtocolSession [ name client use SSF.OS.TCP.test.tcpClient
start_time <value>
start_window <value>
file_size <value>
request_size <value>
show_report <true/false>
debug <true/false>
]
ProtocolSession [ name socket use SSF.OS.Socket.socketMaster]
ProtocolSession [ name tcp use SSF.OS.TCP.tcpsessionMaster
tcpinit [
<TCP attributes>
…
]
]
ProtocolSession [ name ip use SSF.OS.IP ]
]
2.3.6.4 Cấu hình một Host là FTP Server
Chồng giao thức cấu hình cho một Host có vai trò là một FTP Server:
Hình 2.13 Chồng giao thức của một FTP Server
Định nghĩa chồng giao thức trong DML:
67
graph [
ProtocolSession [ name server use SSF.OS.TCP.test.tcpServer
port <value>
client_limit <value>
request_size <value>
show_report <true/false>
debug <true/false>
]
ProtocolSession [ name socket use SSF.OS.Socket.socketMaster]
ProtocolSession [ name tcp use SSF.OS.TCP.tcpsessionMaster
tcpinit [
<TCP attributes>
…
]
]
ProtocolSession [ name ip use SSF.OS.IP ]
]
2.4 Giao thức BGP và SSFNet: 2.4.1 Giới thiệu về giao thức BGP
BGP-Boder Gateway Protocol là một giao thức được sử dụng cho việc trao đổi
các thông tin định tuyến giữa các inter-Autonomous System (AS).
Một AS là một Network hay một nhóm các Network chịu sự quản lý tập trung
bởi một tổ chức xác định, và có các chính sách định tuyến riêng cho AS đó.
68
Hình 2.14 Sơ đồ kiến trúc của quá trình định tuyến động
Các AS kết nối thông qua các Boundary Router, mỗi Boundary Router biết
được thông tin về khoảng cách từ nó đến các AS khác, thông tin này được phân
bố cho tất cả các Backbone Router dùng cho việc định tuyến đến một Network
đích trong một AS khác.
BGP được sử dụng thường xuyên trong việc trao đổi các thông tin định tuyến
giữa các ISPs–Internet Service Providers trên mạng Internet. Nếu BGP được sử
dụng trong việc định tuyến giữa nhiều AS khác nhau, nó được xem là một giao
thức EBGP – External BGP. Nếu BGP được dùng để định tuyến trong cùng một
AS, nó là giao thức IBGP – Internal BGP.
69
Hình 2.15 EBGP và IBGP
BGP chạy trên giao thức TCP và được kết nối thông qua cổng 179. Hai hệ
thống AS thường xuyên mở kết nối và trao đổi các thông tin về khả năng “đến
được” (reachability) với các AS khác của chúng.
Hình 2.16 Quá trình xử lý định tuyến của BGP
2.4.2 Các yếu tố đánh giá BGP Các tham số đánh giá tính hiệu quả của giao thức BGP:
.AS_PATH
.NEXT_HOP
70
.ORIGIN
.MULTI_EXIT_DISC (Multi_exit discriminator)
.LOCAL_PREF (local preference)
Minh họa thuộc tính AS_PATH:
Hình 2.17 Thuộc tính AS_PATH
Minh họa thuộc tính NEXT_HOP:
71
Hình 2.18 Thuộc tính NEXT_HOP
2.4.3 BGP trong SSFNet 2.4.3.1 Các mô hình tùy chọn cấu hình BGP
SSFNet cung cấp cho chúng ta một cài đặt rất tốt về giao thức BGP. Giao
thức này được SSFNet cài đặt chi tiết trong gói SSF.OS.BGP4. BGP-4 là
phiên bản version 4.0 được phát triển từ phiên bản BGP củ và được công bố
vào tháng 3.1995.
SSFNet cung cấp cho người sử dụng 2 tùy chọn cấu hình BGP:
.Cấu hình tự động (autoconfig = true) bởi SSFNet.
.Do người sử dụng tự cấu hình riêng (autoconfig = false).
Với mô hình cấu hình tự động, trình giả lập sẽ tự động cấu hình cho giao
thức BGP trong khi biên dịch. Ưu điểm của cách cấu hình này thể hiện ở tính
đơn giản và ổn định, đảm bảo không có lỗi xảy ra lúc thực thi chương trình,
đặc biệt là khi tiến hành giả lập trên những mạng có cấu trúc lớn, phức tạp.
Trong trường hợp cấu hình BGP là autoconfig, tất cả các Router đang chạy
giao thức BGP đều được kết nối theo kiểu point-to-point đến một Router đã
được SSFNet cấu hình mặc định sẳn. Điều trở ngại trong mô hình này là
SSFNet không cho phép người sử dụng thay đổi bất kỳ một thuộc tính nào của
giao thức BGP. Đây được xem là một hạn chế của việc cài đặt nhưng cũng
được chấp nhận vì nó đảm bảo tính an toàn khi viết mã lệnh cho người sử
dụng.
Với cách cấu hình thứ hai, giá trị của thuộc tính autoconfig=false, lúc này
người sử dụng phải tự cấu hình cho các thuộc tính của BGP nhằm phụ hợp cho
các yêu cầu và mục đích riêng. Tùy chọn này được dùng khi người sử dụng
muốn xem các kết quả khác nhau khi thay đổi giá trị của các thuộc tính trong
giao thức BGP.
2.4.3.2 Tạo các sub-network và các AS
Sub-network:
72
Cú pháp khai báo:
Net [ #start definition of the DML network
Net [ #start definition of the sub-network
Define a gateway router in the sub-network
Define hosts in the sub-network.
Connect the gateway to the hosts with a point-to-point link.
] #end the definition of the sub-network
define others components in the DML network.
Etc..
] #end the definition of the DML network
Việc tạo các sub-network đơn thuần mà không có chỉ định cụ thể gì thêm
thì các network này chỉ được xem như là các network “con” của network
“cha” mà nó được khai báo chứ chưa trở thành một AS thực sự.
Autonomuos System:
Để phân biệt một sub-network và một AS, SSF cung cấp cho ta thuộc
tính AS_Status của đối tượng Net để giải quyết điều này.
Nếu AS_Status = “boundary” thì sub-network là một AS riêng biệt, còn
nếu không thì nó chỉ là một sub-network bình thường.
Cú pháp khai báo:
Net [
id 0
AS_Status boundary
]
2.4.3.3 Chồng giao thức cấu hình cho Boundary Router
Như đã nói ở trên, các AS trao đổi thông tin định tuyến cho nhau thông qua
các Boundary Router.
73
Hình 2.19 Chồng giao thức cho một Boundary Router
SSFNet cấu hình chồng giao thức tương ứng cho các Router này như sau:
graph [
ProtocolSession[ name bgp use SSF.OS.BGP4.BGPSession ]
ProtocolSession[ name socket use SSF.OS.Socket.socketMaster]
ProtocolSession[ name tcp use SSF.OS.TCP.tcpSessionMaster]
ProtocolSession[ name ip use SSF.OS.IP]
]
2.4.3.4 Các thuộc tính của BGP
Cấu hình cho các thuộc tính của BGP:
.autoconfig: tham số tùy chọn mô hình cấu hình BGP, kiểu boolean, giá
trị mặc định là true.
.connretry_time: Connect Retry Timer Interval, là khoảng thời gian (s)
được trùy hoãn cho một kết nối hỏng, kiểu Integer, giá trị mặc định trong
mô hình autoconfig là 120.
.min_as_orig_time: Minimum AS Origination Interval, là khoảng thời
gian (s) tối thiểu giữa 2 lần cập nhật các thông tin được gởi từ BGP speaker
đến AS cục bộ, giá trị mặc định trong mô hình autoconfig là 15, kiểu
Integer.
.reflector: thuộc tính này cho biết router BGP có phải là một route
reflector hay không, giá trị mặc định trong mô hình autoconfig là false, kiểu
boolean.
74
.neighbor: thuộc tính này sẽ xác định các BGP ngang hàng sẽ được trao
đổi các thông tin định tuyến với router BGP hiện tại.
Cú pháp khai báo như sau:
neighbor [
as <Net ID> address <destination router ID>(<interface>)
use_return_address <this Router's ID>(<interface>)
hold_time <value>
keep_alive_time <value>
mrai <value>
infilter [… ]
outfilter [… ]
]
Các thuộc tính của neighbor:
.hold_time: Hold Time Interval, là khoảng thời gian (s) duy trì
liên lạc với các AS láng giềng nhằm giữ cho kết nối không bị
mất, giá trị mặc định trong mô hình autoconfig là 90, kiểu
Integer.
.keep_alive_time: Keep Alive Time Interval, là khoảng thời
gian (s) tối đa được trì hoản để hủy một kết nối với 1 AS, giá trị
mặc định trong mô hình autoconfig là 30, kiểu Integer.
.mrai: Mnimum Route Advertisement Interval, kiểu Integer,
đơn vị tính bằng giây.
.infilter, outfilter: vẩn còn trong giai đoạn phát triển, 2 thuộc
tính này đóng gói các chính sách định tuyến bên trong và bên
ngoài AS.
Các tùy chọn debug của BGP:
bgpoptions [
show_id_data < true/false>
show_rcv_update < true/false>
75
show_snd_update < true/false>
]
2.5 Các từ khóa hổ trợ trong DML: Khi tính phức tạp và cồng kềnh của file DML tăng lên do sự gia tăng của các
thành phần mạng và mật độ tải của mạng, chúng ta bắt đầu nghỉ đến việc sử dụng
các hổ trợ của DML.
DML cung cấp cho chúng ta một vài từ khóa hổ trợ cho công việc thiết kế trở
nên dễ dàng và mau lẹ hơn. Các từ khóa chính: _extends, _find, _dictionary.
2.5.1 Từ khóa _extend Đây là một từ khóa đặc biệt của DML, nó giúp ta có thể sử dụng lại các đoạn
khai báo trước đó có tính chất được lặp đi lặp lại nhiều lần.
Cú pháp khai báo:
_extend <AttrributeName>
Chú ý: khi sử dụng từ khóa _extend, phải lưu ý trường hợp xoay vòng các sự
kiện tham chiếu.
Ví dụ :
AttributeA [
_extends AttributeB ]
AttributeB [
_extends AttributeA ]
Đây là lỗi mà SSFNet không thể phát hiện được, mặc dù quá trình giả lập vẫn
được thực thi nhưng không cho kết quả như mong muốn.
2.5.2 Từ khóa _find Cú pháp khai báo:
_find <keypath>
Từ khóa _find được sử dụng cho việc thay thế các thuộc tính và giá trị bên
trong của nó dựa vào tham số đường dẫn đầy đủ <keypath>.
_extend và _find có chức năng tương tự nhau.
76
2.5.3 Từ khóa _dictionary Cú pháp khai báo:
dictionary [
<your definitions here>
]
Từ khóa dictionary được dùng để định nghĩa các thuộc tính hay các giá trị
thường xuyên được sử dụng trong quá trình viết script giả lập.
Chú ý rằng đây không phải là từ khóa do SSFNet qui định mà do người sử
dụng tự đặt, do đó ta có thể đặt với một tên khác nào đó cũng được.
2.5.4 Ví dụ minh họa Định nghĩa khóa dictionary:
dictionary [
1Gbps [ bitrate 1000000000
latency 0.00001 ]
tcpinit [
ISS 0
MSS 1460
…
TCP_FAST_INTERVAL 0.500
show_report true
]
]
Khai báo Interface và Protocol có sử dụng định nghĩa trong dictionary:
interface [ id 0
buffer 192000
_extend .dictionary.1Gbps ]
ProtocolSession [
name tcp use SSF.OS.TCP.tcpSessionMaster
_find .dictionary.tcpinit
77
]
Kết quả của thuộc tính interface và ProtocolSession sẽ là:
interface [ id 0
buffer 192000
bitrate 1000000000 # bits/s
latency 0.00001
]
ProtocolSession [
name tcp use SSF.OS.TCP.tcpSessionMaster
tcpinit [
ISS 0
MSS 1460
…
TCP_FAST_INTERVAL 0.500
sh ow_report true
]
]
78
PHẦN 2
CÔNG CỤ GIẢ LẬP MẠNG NS-2 VÀ NGÔN NGỮ
TCL
Chương 3
Công cụ giả lập mạng NS-2
3.1 Tổng quan về NS-2:
NS-2-Network Simulator Version 2, là một công cụ giả lập mạng được sử
dụng rất phổ biến trong các nghiên cứu khoa học về mạng, nó được phát triển
trong một phần của dự án VINT-Virtual Internet Testbed được viết bằng ngôn
ngữ C++ và sử dụng ngôn ngữ tạo kịch bản OTcl để tạo các cấu hình ở mức giao
diện bên trên. Đây là dự án được sự cộng tác của nhiều viện nghiên cứu như UC
Berkeley, USC/ISI, LBL, AT&T, XEROX PARC và ETH.
Mục đích của NS-2 là tạo ra một môi trường giả lập cho việc nghiên cứu, kiểm
tra, thiết kế các giao thức, các kiến trúc mới, so sánh các giao thức và tạo ra các
mô hình mạng phức tạp.
Phiên bản thứ nhất của NS được phát triển vào năm 1995 và phiên bản thứ hai
ra đời vào năm 1996. NS-2 là phần mềm mã nguồn mở có thể chạy được trên nền
của Linux và Window.
3.2 Kiến trúc của NS-2: NS-2 là một công cụ giả lập hướng đối tượng được viết bằng ngôn ngữ C++
trong phần nhân và ngôn ngữ thông dịch OTcl ở phần giao tiếp.
Bộ giả lập NS-2 bao gồm 3 module chính:
► Module nhân được gọi là Compiled Hierarchy.
79
► Module giao tiếp được gọi là Interpreted Hierarchy.
► Module liên kết là module có tác dụng như một lớp keo dùng để gắn kết
các lớp, các đối tượng, các biến tương ứng trong hai module nhân và module
giao tiếp với nhau.
Kiến trúc chung của hai module nhân và module giao tiếp bao gồm một hệ
thống phân cấp các lớp có quan hệ kế thừa nhau. Hai module này có quan hệ mật
thiết với nhau: một lớp trong module giao tiếp OTcl có ánh xạ một-một với lớp
tương ứng trong module nhân thông qua module liên kết như đã trình bày ở trên.
Lớp gốc của hệ thống phân cấp này là lớp TclObject. Khi người dùng tạo một đối
tượng trong trình thông dịch OTcl, thì trình thông dịch này sẽ thông dịch đối
tượng vừa được tạo, sau đó ánh xạ đến đối tượng tương ứng trong module nhân.
Các lớp trong module giao tiếp OTcl sẽ tự động thiết lập các ánh xạ tương ứng
đến các lớp trong module nhân thông qua lớp TclClass của module liên kết.
Hình 3.1 Kiến trúc tổng quan của NS
NS được xây dựng trên nền của hai ngôn ngữ là OTcl và ngôn ngữ C++ nhằm
để đáp ứng yêu cầu của môi trường giả lập: các thành phần mạng có tính chất chi
tiết bên dưới hoặc chi tiết cài đặt của các giao thức, các thành phần mạng đòi hỏi
cần có một ngôn ngữ có tốc độ xử lý cao, trong khi đó, môi trường tương tác với
người dùng cần phải đơn giản, dễ sử dụng trong việc thiết lập, cấu hình các tham
số của các đối tượng và có thể thay đổi một cách linh hoạt.
C++ có đặc điểm là chạy nhanh nhưng khá khó trong việc viết code và thay
đổi mã nguồn nên thích hợp cho việc cài đặt các chi tiết bên dưới. OTcl thì ngược
80
lại, chạy chậm nhưng dễ dàng viết code và thay đổi cấu hình nên dùng để tạo
các giao tiếp với người dùng.
Do đó, NS đã tận dụng các ưu điểm của hai ngôn ngữ trên để tích hợp vào
trong môi trường giả lập của mình: C++ được dùng để cài đặt trong phần nhân
của NS, xây dựng nên kiến trúc của nhân, thiết kế chi tiết của các giao thức, các
thành phần mạng, xử lý các tiến trình trên các node, … Trong khi OTcl dùng để
xây dựng cấu trúc, topology, cấu hình các tham số cho mạng được dùng cho việc
giả lập của người dùng.
Hình 3.2 Mô hình đơn giản của NS
Tùy theo mục đích của người sử dụng trong việc tạo kịch bản giả lập mạng mà
kết quả giả lập có thể được lưu trữ lại trong các file để các ứng dụng khác phân
tích.
Các ứng dụng dùng để phân tích kịch bản giả lập trong NS-2:
1. Ứng dụng NAM-Network Animator Tool phân tích các file .nam.
2. Ứng dụng XGraph phân tích các file .tr.
Hình 3.3 Mô hình hoạt động của NS-2
81
3.3 Các thành phần cấu hình mạng trong NS-2: 3.3.1 Lớp Simulator
Trong bộ công cụ giả lập NS-2, lớp quan trọng nhất là lớp Simulator. Nó cung
cấp các thủ tục, giao tiếp để tạo, quản lý topology và lưu giữ các tham số cấu
hình của các thành phần trong topology. Thông thường, các kịch bản giả lập
thường bắt đầu bằng việc tạo một thể nghiệm của lớp Simulator để điều khiển và
thực hiện việc giả lập, sau đó gọi các phương thức để tạo các node, topo và cấu
hình cho các node, các liên kết, ứng dụng …
3.3.1.1 Khởi tạo đối tượng Simulator
Cú pháp để khởi tạo một đối tượng Simulator như sau:
set ten_doi_tuong [new Simulator]
Ví dụ : set ns_ [new Simulator]
Sau khi khởi tạo đối tượng thì thủ tục khởi tạo sẽ thực hiện các công việc:
+ Khởi tạo định dạng của gói dữ liệu (gọi hàm create_packetformat).
+ Tạo một bộ lập lịch (scheduler) , mặc định là calendar scheduler.
+ Tạo một “null agent” . null agent được tạo bằng cú pháp:
set nullAgent_ [new Agent/Null]
3.3.1.2 Các bộ lập lịch và các sự kiện
Hiện tại NS-2 cung cấp bốn bộ lập lịch cho công cụ giả lập:
+ List scheduler.
+ Heap Scheduler.
+ Calendar scheduler.
+ Real time scheduler.
Qui trình làm việc của bộ lập lịch như sau: Bộ lập lịch các sự kiện sẽ chọn
sự kiện kế tiếp gần nhất trong bộ lập lịch để thực thi, sau khi thực thi xong sẽ
trở về để thực thi sự kiện kế tiếp. Đơn vị thời gian dùng trong bộ lập lịch được
tính bằng giây. Hiện tại, bộ công cụ giả lập chỉ sử dụng tiến trình đơn, tức là
tại một thời điểm chỉ có một sự kiện được xử lý. Nếu có nhiều sự kiện trong bộ
82
lập lịch thì sự kiện nào vào trước sẽ được xử lý trước. Trong mỗi kịch bản giả
lập chỉ được sử dụng một bộ lập lịch.
Bộ lập lịch List Scheduler (lớp Scheduler/List) được cài đăt dựa trên cấu
trúc dữ liệu danh sách liên kết đơn. Bộ lập lịch này dùng thời gian để phân biệt
thứ tự các sự kiện vì vậy khi thêm hoặc xóa một sự kiện cần phải tìm kiếm cả
danh sách để chọn một entry thích hợp. Khi chọn sự kiện kế tiếp để thực thi thì
cần phải dời các sự kiện còn lại lên một vị trí.
Bộ lập lịch Heap Scheduler (lớp Scheduler/Heap) dùng cấu trúc dữ liệu
Heap để cài đặt. Cấu trúc dữ liệu này cao cấp hơn so với danh sách liên kết vì
lưu trữ được nhiều sự kiện hơn. Độ phức tạp của các thao tác thêm, xóa bằng
O(log n) tương ứng với n sự kiện.
Bộ lập lịch Calendar Scheduler (lớp Scheduler/Calendar) sử dụng cấu trúc
dữ liệu tương tự như lịch tính dương lịch, mà các sự kiện cùng ngày, tháng của
các năm khác nhau có thể được lưu trữ trong cùng một ngày.
Bộ lập lịch thời gian thực Real-Time Scheduler (lớp Scheduler/RealTime)
đồng bộ thực thi các sự kiện trong thời gian thực. Bộ lập lịch này vẫn đang
trong giai đoạn phát triển.
Định nghĩa Cấu trúc Heap
Heap là cây nhị phân gần đầy được cài đặt bằng mảng một chiều với các
node trên heap có nội dung nhỏ hơn hoặc bằng nội dung của node cha. Heap
này được gọi là heap giảm (descending heap ). Heap tăng ( ascending heap )
thì ngược lại: các node trên heap có nội dung lớn hơn hoặc bằng nội dung của
node cha.
83
Hình 3.4 Cấu trúc Heap giảm
Cấu trúc heap giảm được cài đặt bằng cây nhị phân và mảng một chiều
3.3.1.3 Các phương thức khác
Lớp Simulator còn cung cấp thêm một số phương thức cho việc cài đặt các
thông số cho việc giả lập.
Các phương thức này bao gồm ba loại:
+ Các phương thức tạo, quản lý các node, topo và các liên kết.
+ Các phương thức thực hiện việc ghi nhận kết quả của quá trình giả lập.
+ Các phương thức trợ giúp tương tác với bộ lập lịch.
Các phương thức bao gồm:
Simulator instproc now: trả về thời gian hiện tại.
Simulator instproc at args: thực thi sự kiện ở thời điểm cụ thể.
Simulator instproc cancel args: hủy bỏ việc thực thi sự kiện.
Simulator instproc run args: bắt đầu khởi động bộ lập lịch.
Simulator instproc halt: dừng bộ lập lịch.
Simulator instproc flush-trace: flush all trace object write buffers.
Simulator instproc create-trace type files src dst: tạo đối tượng trace.
Simulator instproc create_packetformat: thiết lập định dạng gói dữ liệu.
3.3.1.4 Tóm tắt
Để tạo một kịch bản giả lập trong NS-2, ta cần tạo một đối tượng Simulator
và thiết lập các thông số cần thiết:
…
set ns_ [new Simulator]
84
$ns_ use-scheduler Heap
$ns_ at 300 “$self ketthuc”
…
Trong đoạn Tcl này, trước tiên, ta tạo một đối tượng của lớp Simulator, sau
đó thay đổi bộ lập lịch mặc định sang bộ lập lịch Heap Scheduler và cuối cùng
bộ lập lịch sẽ ghi nhận tại thời điểm giây thứ 300 sẽ thực thi hàm “ketthuc”.
3.3.2 Cấu hình Node 3.3.2.1 Tạo Node
Để tạo một node trong Tcl ta dùng cú pháp:
set ns_ [new Simulator]
$ns node
Một node trong NS chứa ít nhất các thành phần sau:
+ Địa chỉ hoặc số ID, giá trị này khởi tạo bằng 0, và tuần tự tăng 1 đơn vị
khi có một node mới được tạo ra.
+ Danh sách các node láng giềng của nó (neighbor_).
+ Danh sách các Agent (agent_ ).
+ Loại node (nodetype_ ).
+ Module định tuyến của node.
3.3.2.2 Cấu hình cho MobileNode
Cấu hình cho node chủ yếu tập trung vào Wireless. Bao gồm các thông số
sau: loại cấu trúc địa chỉ sử dụng là địa chỉ đẳng cấp hay phân cấp, định nghĩa
các thành phần mạng cho mobilenode: địa chỉ MAC, loại Antenna, sóng
truyền, lựa chọn giao thức định tuyến, định nghĩa mô hình năng lượng, …
set topo [new Topography]
$ns_ node-config -addressingType hierarchical \
-adhocRouting AODV \
-llType LL \
-macType MAC/802_11 \
-ifqType Queue/DropTail/PriQueue \
85
-ifqLen 50 \
-antType Antenna/OmniAntenna \
-propType Propagation/TwoRayGround \
-phyType Phy/WirelessPhy \
-topologyInstance $topo \
-channel Channel/WirelessChannel \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF
Giá trị mặc định của các tham số trên là NULL, ngoại trừ addressingType
có giá trị mặc định là flat.
3.3.2.3 Cấu hình cho Base-Station Node
Cấu hình cho Base-Station Node tương tự như cấu hình của WirelessNode
tuy nhiên, Base-Station có khả năng định tuyến đến mạng có dây trong khi
MobileNode thì không có khả năng đó. Do đó, để cấu hình cho Base-Station
Node, ta thêm thuộc tính:
$ns_ node-config –wiredRouting ON
3.3.2.4 Bảng các tham số cấu hình cho Node
Option Các giá trị Giá trị
default
Chú thích
addressType Flat, hierarchical Flat Loại địa chỉ của
node
MPLS ON ,OFF OFF Chuyển mạch nhãn đa giao thức
wiredRouting ON , OFF OFF Định tuyến
trong mạng
86
không dây
llType LL “” Loại LinkLayer
macType Mac/802.11 , Mac/Tdma “” Loại địa chỉ
MAC
ifqType Queue/DropTail,
Queue/DropTail/PriQueue
“” Kiểu bộ nhớ
trong card mạng
phyType Phy/WirelessPhy “” Loại card mạng
adhocRouting DIFFUSION/RATE, TORA,
DIFFUSION/PROB, DSDV,
DSR , FLOODING, AODV,
OMNIMCAST,
“” Giao thức định
tuyến
propType Propagation/TwoRayGround,
Propagation/Shadowing
“” Cách thức
truyền dữ liệu
qua mạng
propInstance Propagation/TwoRayGround,
Propagation/Shadowing
“” Thể hiện của đối
tượng propType
antType Antenna/OmniAntennna “” Loại antenna
Channel Channel/WirelessChannel “” Kênh truyền
topoInstance <topology file> “” thể hiện của
topo mạng
mobileIP ON , OFF OFF sử dụng kỹ thuật
MobileIP?
energyModel EnergyModel “” Mô hình năng
lượng
initialEnergy <value in Joules> “” Khởi tạo giá trị
năng lượng cho
node
87
rxPower <value in W> “” Giá trị năng
lượng của node
txPower <value in W> “” Giá trị năng
lượng của node
idlePower <value in W> “”
agentTrace ON , OFF OFF Ghi nhận các
thông tin cho
việc nghiên cứu,
kiểm tra
routerTrace ON , OFF OFF “”
macTrace ON , OFF OFF “”
movementTrace ON , OFF OFF “”
errProc UniformErrorProc “” “”
toraDebug ON , OFF OFF “”
Bảng 3.1 Các tham số cấu hình cho MobileNode
3.3.3 Tạo liên kết cho các Node
Trong NS-2 có hai loại liên kết các node:
+ Liên kết đơn công.
+ Liên kết song công.
Liên kết đơn công là loại liên kết theo kiểu point-to-point giữa hai node mà
chỉ có một node truyền và một node nhận. Lớp tương ứng trong OTcl của liên kết
đơn công là lớp SimpleLink. Cú pháp của liên kết đơn công giữa hai node:
set ns_ [new Simulator]
$ns_ simplex-link <node0> <node1> <bandwidth><delay>< queue_type>
Câu lệnh trên tạo ra một liên kết từ node0 đến node1 với một giá trị băng
thông bandwidth, thời gian trễ giữa hai lần truyền delay và liên kết sử dụng loại
hàng đợi queue_type. Loại hàng đợi đã được đề cập ở trên.
88
Liên kết song công cũng là liên kết point-to-point giữa hai node nhưng mỗi
node đều có khả năng vừa truyền và vừa nhận, tức liên kết song công là hai liên
kết đơn công. Cú pháp cũng tương tự như liên kết đơn công:
set ns_ [new Simulator]
$ns_ duplex-link <node0> <node1> <bandwidth> <delay> < queue_type>
3.4 Các Agent trong NS-2: 3.4.1 Giới thiệu
Agent hay có thể gọi là giao thức ở tầng mạng hoặc ở tầng vận tải dùng để xử
lý các gói tin khi node nhận được. lớp Agent được cài đặt một phần trong OTcl
và một phần trong C++. Trong OTcl là file ~ns/tcl/ns-agent.tcl, trong C++ là các
file ~ns/agent.cc và ~ns/agent.h.
Các Agent được cài đặt trong công cụ giả lập này là:
Tên Agent Chú thích
TCP TCP “Tahoe”
TCP/Reno TCP “Reno”
TCP/Newreno TCP “Reno” đã được chỉnh sửa
TCP/Sack1 TCP SACK
TCP/Fack “forward” TCP SACK
TCP/FullTCP TCP hai chiều
TCP/Vegas TCP Vegas
TCP/Vegas/RBP TCP Vegas với “rate based pacing”
TCP/Reno/RBP TCP Reno với “rate based pacing”
TCP/Asym TCP Tahoe với liên kết không đối xứng
TCP/Reno/Asym TCP Reno với liên kết không đối xứng
TCP/Newreno/Asym TCP Newreno với liên kết không đối xứng
89
TCPSink TCP Reno hoặc Tahoe ở bên nhận
TCPSink/DelAck TCP Delayed-ACK ở bên nhận
TCPSink/Asym TCPSink với liên kết không đối xứng
TCPSink/Sack1 TCP SACK ở bên nhận
TCPSink/Sack1/DelAck TCP Delayed-ACK SACK
UDP Agent UDP
RTP Agent RTP bên gởi và bên nhận
RTCP Agent RTCP bên gởi và bên nhận
LossMonitor Agent ở bên nhận dùng để kiểm tra việc mất các gói
dữ liệu
IVS/Source Agent IVS ở bên gởi
IVS/Receiver Agent IVS ở bên nhận
CtrMcast/Encap Bộ đóng gói “centralized multicast”
CtrMcast/Decap Bộ mở gói “centralized multicast”
Message Giao thức truyền tin nhắn nguyên bản
Message/Prune Xử lý định tuyến multicast với các message đã được
rút gọn
SRM agent SRM không có timer
SRM/Adaptive agent SRM có timer
Tap Agent giao tiếp giữa bộ giả lập với mạng thực
Null
rtProto/DV Agent giao thức định tuyến distance-vector
Bảng 3.2 Các Agent hổ trợ trong NS-2
3.4.2 UDP Agent UDP agent được cài đặt bên node gởi dữ liệu và cũng có thể được cài đặt bên
node nhận. Agent này là agent không hướng kết nối, tức là không có cơ chế để
90
phát hiện gói tin bị mất khi truyền, và truyền lại gói tin khi bị mất. Nó chỉ thích
hợp cho những ứng dụng không đòi hỏi độ chính xác cao, và chấp nhận chịu sự
mất mát dữ liệu.
Các cú pháp thông dụng dùng để thiết lập UDP agent trong NS-2:
+ Tạo một thể nghiệm của đối tượng UDP agent:
set udp0 [new Agent/UDP]
+ Kết nối agent UDP cho node:
$ns_ attach-agent <node> <agent>
+ Cài đặt ứng dụng cho agent:
$traffic-gen attach-agent <agent>
Ví dụ:
Để cài đặt ứng dụng CBR cho agent udp1, ta có cú pháp:
set cbr1 [new Application/Traffic/CBR]
$cbr1 attach-agent $udp1
+ Tạo một kết nối giữa hai agent:
$ns_ connect <src-agent> <dst-agent>
Các thông số thiết lập chi tiết cho agent UDP:
$udp set packetSize_ <pktsize>
$udp set dst_addr_ <address>
$udp set dst_port_ <portnum>
$udp set class_ <class-type>
$udp set ttl_ <time-to-live>
Ví dụ:
Tạo một ứng dụng CBR, với các agent UDP:
set ns [new Simulator]
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 5Mb 2ms DropTail
set udp0 [new Agent/UDP]
91
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$udp0 set packetSize_ 536 ;# set MSS to 536 bytes
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 1.0 "$cbr0 start"
3.4.3 TCP Agent Trong NS-2, TCP agent được chia làm hai loại:
+ Agent một chiều.
+ Agent hai chiều.
Agent một chiều là những agent chỉ đóng một trong hai vai trò hoặc là bên gởi
hoặc là bên nhận. Trong khi đó, agent hai chiều là agent đóng cả hai vai trò vừa là
bên nhận, vừa là bên gởi. Hiện nay, agent này vẫn đang được phát triển.
Các agent một chiều ở bên gởi (one-way TCP sending agents ) đã cài đặt trong
NS:
+ Agent/TCP.
+ Agent/TCP/Reno.
+ Agent/TCP/Newreno.
+ Agent/TCP/Sack1.
+ Agent/TCP/Vegas.
+ Agent/TCP/Fack.
Các TCP agent một chiều ở bên nhận (one-way TCP receiving agents):
+ Agent/TCPSink.
+ Agent/TCPSink/DelAc
+ Agent/TCPSink/Sack1.
+ Agent/TCPSink/Sack1/DelAck.
TCP agent hai chiều ( two-way TCP agent):
92
+ Agent/TCP/FullTcp.
3.4.3.1 Một số TCP agent bên gởi
3.4.3.1.1 TCP Tahoe
TCP Tahoe (Agent/TCP) là phiên bản sửa đổi của giao thức TCP có thêm
chức năng kiểm soát thông lượng truyền của kết nối ( kiểm soát tắt nghẽn
của kết nối ) và đã được cài đặt dầu tiên trong lõi Unix của BSD (Berkeley’s
Software Distribution) phiên bản 4.3 BSD Tahoe.
Mục tiêu của cơ chế kiểm soát tắt nghẽn của kết nối là tìm ra một giá trị
thích hợp cho khung truyền nằm giữa một MSS-Maximum Segment Size và
giá trị này thay đổi tùy theo hoàn cảnh của mạng hiện tại. Để đạt được điều
này, TCP Tahoe sử dụng ba cơ chế Slow-Start (Khởi động chậm),
Congestion Avoidance (Tránh tắt nghẽn) và Fast Retransmit (Truyền lại
nhanh).
Các tham số của TCP Tahoe:
+ cwnd_ (congestion window) là giới hạn khung truyền lớn nhất có thể
mà truyền mà không bị tắt nghẽn kết nối, đơn vị tính là packet.
+ window_ là kích thước khung truyền bên nhận.
+ swnd_ là kích thước khung truyền hiện tại, được tính theo công thức:
swnd_ = min (cwnd_, window_)
Công thức có ý nghĩa rằng, kích thước của khung truyền hiện tại của
TCP Tahoe có giá trị lớn nhất là bằng với kích thước khung truyền ở bên
nhận.
Slow-Start
Trong TCP chuẩn, khi bắt đầu kết nối, bên gởi có thể gởi dữ liệu với
kích thước khung truyền bằng kích thước khung truyền bên nhận một
cách đột ngột. Khi đó, có thể kích thước vùng đệm của bên nhận không
còn đủ, dẫn đến hiện tượng của các packet bị mất và bên gởi sẽ phải
truyền lại đoạn dữ liệu bị mất đó. Điều đó làm cho kết nối TCP mất đi
tính hiệu quả. Thay vì vậy, trong cơ chế khởi động chậm, TCP sẽ tăng giá
93
trị cwnd_ dần dần để đạt đến giá trị tối đa. Giá trị khởi tạo của cwnd_
nhỏ hơn hay bằng 2MSS, thông thường được gán bằng 1MSS. Sau đó,
giá trị này tăng thêm 1MSS mỗi khi nhận được thông báo yêu cầu gởi dữ
liệu mới (bên nhận đã nhận thành công dữ liệu trước đó). Cơ chế Slow-
Start sẽ kết thúc khi giá trị cwnd_ vượt quá giá trị ssthresh_ (slow-start
threshold) là giá trị ngưỡng của của cwnd_.
Congestion Avoidance
Trong giai đoạn này, TCP Tahoe hoạt động một cách rất thận trọng khi
khung truyền đã gần đạt đến giá trị mà trước đó đã xảy ra mất dữ liệu.
Khi đó, mỗi khi nhận về một ACK khung sẽ tăng giá trị cwnd_ theo công
thức:
cwnd_ = cwnd_ + 1/cwnd_
Theo công thức này, sau khi nhận được đầy đủ thông tin cho một số
cwnd_ của các packet, cwnd_ sẽ tăng lên 1 MSS.
Fast Retransmit
TCP Tahoe cho rằng một packet đã bị mất (vì bị tắt nghẽn) khi nó
nhận thấy có một số liên tục các giá trị ACK trùng nhau cho cùng một
packet (giá trị mặc định là 3) hoặc thời gian chờ nhận phản hồi gói tin
ACK hết hiệu lực. Khi đó, TCP Tahoe sẽ phản ứng lại bằng cách gán giá
trị ssthresh_ bằng ½ giá trị kích thước của khung truyền hiện tại. Sau đó,
khởi tạo giá trị cwnd_ bằng giá trị windowInit_ (giá trị mặc định là
1MSS) và bắt đầu khởi động lại cơ chế Slow-Start.
3.4.3.1.2 TCP Reno
TCP Reno (Agent/TCP/Reno) là một cải tiến của TCP Tahoe bằng cách
đưa ra cơ chế Fast Recovery (phục hồi nhanh) kết hợp với cơ chế Fast
Retransmit trong TCP Tahoe. Ý tưởng của Fast Recovery là một yêu cầu
truyền lại (D-ACK) sẽ phải chỉ ra băng thông có thể dùng trong khung
truyền từ khi một đoạn dữ liệu được phát đi thành công. Điều này có nghĩa
rằng cwnd_ cần thực sự tăng lên mỗi khi phát đi một D-ACK. Sau khi gởi
94
đoạn được xem như là bị mất, Fast Recovery sẽ bắt đầu. Lúc đó, cwnd_ sẽ
được tăng lên:
cwnd_ = ssthresh_ + 3 MSS
Sau đó, mỗi khi nhận D-ACK, cwnd_ sẽ tăng lên 1MSS.
Cơ chế Fast Recovery được kích hoạt khi nhận được một số ngưỡng các
D-ACK: bên gởi sẽ truyền lại một đoạn và gán các ngưỡng này giá trị bằng
½ giá trị của cwnd_ hiện tại. Kế đến, thay vì chuyển sang cơ chế Slow-Start
như TCP Tahoe, bên gởi sẽ cộng thêm vào cwnd_ một số bằng với số
ngưỡng. Sau đó, chừng nào bên nhận còn trong trạng thái Fast Recovery thì
cwnd_ sẽ được cộng thêm 1 cho mỗi D-ACK được nhận. Fast Recovery chỉ
được hoàn tất khi một ACK cho dữ liệu mới được nhận. Bên gởi sau đó sẽ
gán cwnd_ bằng với giá trị của ngưỡng hiện tại và chỉnh lại số đếm D-ACK
về giá trị ban đầu.
3.4.3.1.3 TCP Newreno
TCP Newreno (Agent/TCP/Newreno) giải quyết được sự bất khả thi của
TCP Reno đó là việc khắc phục lỗi khi có nhiều packet bị mất đồng thời. Nó
sửa lại quá trình hoạt động của cơ chế Fast Recovery: trong quá trình Fast
Recovery, nếu một “partial ACK” (thông báo không công nhận số byte liên
tiếp cao nhất đã được nhận) được nhận, bên gởi sẽ xem nó như là dấu hiệu
chỉ ra rằng đoạn kế tiếp tương ứng với thông báo đó đã bị mất. TCP
Newreno sẽ truyền lại đoạn đó và đợi thông báo phản hồi tương ứng. Trạng
thái Fast Recovery sẽ không kết thúc chừng nào mà byte được đánh số cao
nhất được gởi đi trước khi phát hiện ra sự mất packet đầu tiên được thừa
nhận. Khi điều này xảy ra, kích thước khung sẽ co lại bằng ssthresh_ và cơ
chế tránh tắt nghẽn được lặp lại.
3.4.3.2 Một số TCP agent bên nhận
TCPSink
95
TCPSink có nhiệm vụ trả về giá trị ACK mỗi khi nhận gói dữ liệu từ
TCP bên gởi. Nó chỉ phát sinh một ACK cho mỗi packet nhận được. Kích
thước của ACK có thể thay đổi đựoc.
Các tham số cấu hình:
Agent/TCPSink set packetSize_ 40 : thay đổi kích thước của packet.
TCPSink/DelAck
Đối tượng Delayed-ACK TCP Sink (Agent/TCPSink/DelAck) có thể gởi
phản hồi một gói ACK sau khi đã nhận được vài packet. Đối tượng này
chứa tham số interval_ để qui định thời gian chờ giữa hai lần truyền gói tin
ACK.
Các tham số cấu hình:
Agent/TCPSink/DelAck set interval_ 100ms1
3.4.3.3 TCP agent hai chiều
Để có thể tạo kết nối, TCP phải thực hiện việc bắt tay ba lần (3 way_
handshake):
+ Bên gởi gởi một gói SYN sang bên nhận.
+ Bên nhận gởi phản hồi một gói với SYN + ACK tương ứng.
+ Bên gởi sẽ gởi lại một gói ACK để chấp nhận kết nối.
Sau đó dữ liệu sẽ được trao đổi với nhau.
Các tham số cấu hình mặc định cho FullTcp:
+ Agent/TCP/FullTcp set segsperack_ 1.
+ Agent/TCP/FullTcp set segsize_ 536.
+ Agent/TCP/FullTcp set tcprexmtthresh_ 3.
+ Agent/TCP/FullTcp set iss_ 0.
+ Agent/TCP/FullTcp set nodelay_ false.
+ Agent/TCP/FullTcp set data_on_syn_ false.
+ Agent/TCP/FullTcp set dupseg_fix_ true.
+ Agent/TCP/FullTcp set dupack_reset_ false.
+ Agent/TCP/FullTcp set interval_ 0.1.
96
Ví dụ:
Tạo một agent FullTcp:
set src [new Agent/TCP/FullTcp] ;# create agent
set sink [new Agent/TCP/FullTcp] ;# create agent
$ns_ attach-agent $node_(s1) $src ;# bind src to node
$ns_ attach-agent $node_(k1) $sink ;# bind sink to node
$src set fid_ 0 ;# set flow ID field
$sink set fid_ 0 ;# set flow ID field
$ns_ connect $src $sink ;# active connection src to sink
# set up TCP-level connections
$sink listen ;# will figure out who its peer is
$src set window_ 100;
3.4.4 Ví dụ minh họa Tạo một kết nối TCP giữa hai node n0 và n1 với n0 sử dụng TCP Tahoe và n1
sử dụng TCPSink. lớp TCP đại diện cho giao thức TCP ở bên node gởi dữ liệu.
Nó sẽ gởi dữ liệu đến cho agent TCPSink và TCPSink sẽ xử lý tham số ACK để
kiểm tra tính đúng đắn của gói dữ liệu:
set ns [new Simulator]
…
set tcp [new Agent/TCP] ;# Khởi tạo agent TCP bên node gởi dữ liệu
$tcp set fid_ 2 ;# set IP-layer flow ID
set sink [new Agent/TCPSink] ;# Khởi tạo agent TCPSink bên node nhận
$ns attach-agent $n0 $tcp ;# Thiết lập agent TCP cho node n0
$ns attach-agent $n1 $sink ;# Thiết lập agent TCPSink cho node n1
$ns connect $tcp $sink ;# Xác lập một kết nối TCP cho hai agent
set ftp [new Application/FTP] ;# Tạo môt ứng dụng FTP
$ftp attach-agent $tcp ;# Cài đặt ứng dụng FTP cho node n0
$ns at 2 "$ftp start" ;# Thực thi ứng dụng FTP tại thời điểm giây thứ 2
97
3.5 Ứng dụng trong NS-2: 3.5.1 Lớp Application
Ứng dụng trong NS-2 được xây dựng bỡi lớp Application được cài đặt trong
phần nhân của NS-2:
class Application: public TclOject {
public:
Application();
virtual void send(int nbytes);
virtual void recv(int nbytes);
virtual void resume();
protected:
int command(int argc, const char* const* argv);
virtual void start();
virtual void stop();
Agent *agent_;
int enableRecv_; // call Otcl recv or not
int enableResume_; // call Otcl resume or not
};
Bảng 3.3 Các phương thức của lớp Application
Lớp Application cung cấp một số phương thức cơ bản cho quá trình hoạt động
của một ứng dụng: send(), recv(), resume(), start(), stop(), một con trỏ trỏ đến
giao thức ở tầng vận tải bên dưới mà nó kết nối.
3.5.2 Phân loại ứng dụng Trong NS-2 có hai loại ứng dụng cơ bản:
+ Ứng dụng phát sinh lưu lượng mạng (Traffic Generator).
+ Ứng dụng giả lập mạng (Simulated Applications).
98
Hình 3.5 Hai loại ứng dụng trong NS-2
3.5.2.1 Ứng dụng phát sinh lưu lượng mạng
Loại ứng dụng này được xây dựng bỡi lớp TrafficGenerator:
class TrafficGenerator :
public:
TrafficGenerator();
virtual double next_
virtual void init()
virtual double interval()
virtual int on()
virtual void timeout();
virtual void recv()
virtual void resume()
protected:
virtual void start();
virtual void stop();
double nextPkttime_;
int size_;
int running_;
TrafficTimer timer_;
99
};
Bảng 3.4 Các phương thức của lớp TrafficGenerator
Ứng dụng phát sinh lưu lượng mạng có thể chia làm ba loại: exponential,
pareto và CBR.
Đối tượng Exponential (Application/Traffic/Exponential) phát sinh lưu
lượng mạng theo hai trạng thái ON/OFF. Ở trạng thái “ON”, các gói dữ liệu
được phát sinh theo một tốc độ truyền không đổi. Ngược lại, trong trạng thái
“OFF”, không phát sinh lưu lượng mạng. Các tham số cấu hình cho đối
tượng:
PacketSize_ : kích thước của gói dữ liệu.
burst_time_ : thời gian trung bình trong ở trạng thái ON.
idle_time_ : thời gian trung bình trong ở trạng thái OFF.
rate_ : tốc độ gởi các gói dữ liệu.
Đối tượng Pareto (Application/Traffic/Pareto) cũng phát sinh lưu lượng
mạng theo hai trạng thái ON, OFF. Các tham số cấu hình:
PacketSize_ : kích thước của gói dữ liệu.
burst_time_ : thời gian trung bình trong ở trạng thái ON.
idle_time_ : thời gian trung bình trong ở trạng thái OFF.
rate_ : tốc độ gởi các gói dữ liệu.
Đối tượng CBR (Application/Traffic/CBR) dùng để phát sinh các gói dữ
liệu theo một tốc độ bit không đổi. Các tham số cấu hình:
PacketSize_ : kích thước của gói dữ liệu.
rate_ : tốc độ truyền dữ liệu.
interval_ : khoảng thời gian giữa hai lần truyền dữ liệu.
random_ : phát sinh tín hiệu nhiễu một cách ngẫu nhiên. Giá trị mặc
định là off.
maxpkts_ : số packet lớn nhất được truyền đi.
3.5.2.2 Ứng dụng giả lập mạng
FTP ( Application/FTP ) là ứng dụng dùng để truyền tải các file qua mạng.
100
Các phương thức đã được cài đặt trong NS-2:
attach-agent : gắn ứng dụng FTP lên agent vận tải.
start : khởi động ứng dụng FTP.
stop : ngừng ứng dụng.
Tham số cấu hình:
maxpkts : số gói dữ liệu lớn nhất được phát sinh ở bên gởi.
Telnet : ( Application/Telnet ) dùng để phát sinh các gói dữ liệu theo một
trong hai cách dựa vào biến interval_ . Mặc định , giá trị này bằng 0.
3.5.3 Các ví dụ minh họa Ví dụ 1 :
Tạo ứng dụng phát sinh lưu lượng mạng:
set src [new Agent/UDP]
set sink [new Agent/UDP]
$ns_ attach-agent $node_0 $src
$ns_ attach-agent $node_1 $sink
$ns_ connect $src $sink
set e [new Application/Traffic/Exponential]
$e attach-agent $src
$e set packetSize_ 210
$e set burst_time_ 500ms
$e set idle_time_ 500ms
$e set rate_ 100k
$ns_ at 0.0 "$e start"
$ns_ at 100.0 "$e stop"
Ví dụ 2 :
Tạo ứng dụng giả lập mạng:
set Tcp [new Agent/TCP]
set Sink [new Agent/TCPSink]
$ns_ attach-agent $node_0 $Tcp
101
$ns_ attach-agent $node_1 $Sink
$ns_ connect $Tcp $Sink
set App [new Application/FTP]
$App attach-agent $Tcp
$ns_ at 10 "$App start"
$ns_ at 100 "$App stop"
3.6 Mạng không dây trong NS-2: Thành phần quan trọng nhất trong mô hình mạng không dây là MobileNode.
Trong C++, lớp MobileNode được kế thừa từ lớp cha là lớp Node. Do đó,
MobileNode có đầy đủ các đặc điểm của đối tượng Node, thêm vào đó là các đặc
tính của Wireless như khả năng di chuyển tự do trong phạm vi của topology, có
khả năng truyền và nhận tín hiệu vô tuyến.
Điểm khác nhau quan trọng giữa Node và MobileNode là MobileNode không
dùng khái niệm Link (liên kết có dây) để liên kết với các Node hay các
MobileNode khác. Thay vào đó, MobileNode sử dụng sóng vô tuyến để liên kết
với các MobileNode khác.
Lớp Mobile được cài đặt trong cả C++ và OTcl: Các cài đặt phức tạp như việc
di chuyển của MobileNode, việc cập nhật lại vị trí, duy trì cầu trúc mạng, …
được viết bằng C++. Trong khi đó, việc cấu hình các thành phần trong
MobileNode như địa chỉ Mac, Channel, Antenna, … được cài đặt trong OTcl.
3.6.1 Các thành phần cấu hình của một MobileNode Xem phần 3.3.2 ( Cấu hình Node ).
3.6.2 Tạo mô hình mạng không dây trong NS-2 Một MobileNode bao gồm các thành phần: Link Layer, Interface Queue, ARP,
địa chỉ MAC, mô hình truyền của sóng vô tuyến, Card mạng, kênh truyền. Ngoài
ra, còn có các thành phần khác: kiểu Antenna, loại giao thức định tuyến.
Do đó, để tạo một mô hình mạng không dây, ta cần cấu hình cho MobileNode:
set val(chan) Channel/WirelessChannel ;#channel type
102
set val(prop) Propagation/TwoRayGround ;#radio-propagation model
set val(ant) Antenna/OmniAntenna ;#Antenna type
set val(add) hierarchical ;#Addressing type
set val(ll) LL ;#Link layer type
set val(ifq) Queue/DropTail/PriQueue ;#Interface queue type
set val(ifqlen) 50 ;#max packet in ifq
set val(netif) Phy/WirelessPhy ;#network interface type
set val(mac) Mac/802_11 ;#MAC type
set val(adhocRouting) DSDV ;#ad-hoc routing protocol
set val(x) 500 ;#X-cordinate
set val(y) 500 ;#Y-cordinate
set topo [new Topography]
…
set ns_ [new Simulator]
…
$ns_ node-config -adhocRouting $val(adhocRouting) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $opt(ifqlen) \
-antType $opt(ant) \
-propInstance [new $opt(prop)] \
-phyType $opt(netif) \
-channel [new $opt(chan)] \
-topoInstance $topo \
-wiredRouting OFF \
-agentTrace ON \
-routerTrace OFF \
-macTrace OFF
103
Tiếp theo, tạo một mô hình mạng không dây với năm MobileNode theo cú
pháp:
set val(nn) 5
for { set j 0 } { $j < $val(nn)} {incr j} {
set node_($j) [ $ns_ node ]
$node_($i) random-motion 0 ;# disable random motion
}
3.6.3 Tạo kịch bản chuyển động cho các Node Các MobileNode được thiết kế để chuyển động ba chiều ( X,Y,Z ). Tuy nhiên,
trong công cụ giả lập này, thì chiều Z không được sử dụng ( Z=0 ), nên các
MobileNode chỉ chuyển động theo hai chiều X, Y.
Trong NS-2, có hai phương pháp để tạo sự chuyển động cho các MobileNode:
+ Khởi tạo vị trí ban đầu cho các MobileNode và khai báo địa chỉ đích
mà các MobileNode di chuyển tới một cách tường minh.
+ Thiết lập cho các MobileNode di chuyển ngẫu nhiên.
Phương pháp thứ nhất
$node set X_ <x1>
$node set Y_ <y1>
$node set Z_ <z1>
$ns at $time $node setdest <x2> <y2> <speed>
Chú thích:
Ban đầu, ta khởi tạo vị trí bắt đầu cho node với tọa độ (x1,y1,0). Sau đó,
tại thời điểm “$time” giây, node sẽ bắt đầu di chuyển từ vị trí khởi tạo
(x1,y1,0) đến vị trí đích (tọa độ ( x2 , y2 ,0 ) ) với vận tốc speed.
Phương pháp thứ hai
$node start
Chú thích:
MobileNode khởi tạo ngẫu nhiên cho vị trí ban đầu, vị trí đích và tốc độ
di chuyển.
104
3.6.4 Giao thức định tuyến cho mạng không dây Giao thức định tuyến là một trong những thành phần quan trong trong cấu hình
mạng Trong phạm vi của đề tài này, chúng tôi tập trung tìm hiểu các giao thức
định tuyến đã được cài đặt trong công cụ giả lập mạng NS-2 sử dụng trong mạng
MANET, bao gồm: TORA, DSDV, AODV, DSR.
3.6.4.1 Giới thiệu tổng quan
Trong mạng Ad-hoc, giao thức định tuyến được chia thành ba loại:
+ Giao thức định tuyến kiểu Table-driven (Proactive).
+ Giao thức định tuyến kiểu On-Demand (Reactive).
+ Giao thức định tuyến kết hợp.
Giao thức định tuyến kiểu Table-driven (Proactive)
Trong kiểu giao thức định tuyến này, một node luôn luôn duy trì trong
bảng định tuyến của nó thông tin định tuyến đến tất cả các node khác trong
mạng. Thông tin định tuyến được phát broadcast trên mạng theo một
khoảng thời gian qui định để giúp cho bảng định tuyến luôn cập nhật những
thông tin mới nhất. Tuy nhiên, với những mạng mà các node di chuyển
nhiều, hoặc các liên kết giữa các node bị đứt thì giao thức định tuyến
proactive sẽ phải tìm kiếm hoặc sửa chữa các liên kết bị đứt, nhưng nếu các
liên kết đó không sử dụng thì sẽ trở nên lãng phí tài nguyên, ảnh hưởng đến
băng thông của mạng. Nên giao thức định tuyến này chỉ áp dụng trong các
mô hình mạng MANET mà các node ít di chuyển.
Các giao thức định tuyến theo kiểu Proactive:
+ Destination-Sequenced Distance Vector (DSDV).
+ Wireless Routing Protocol (WRP).
+ Global State Routing (GSR).
+ Clusterhead Gateway Switch Routing (CGSR).
Giao thức định tuyến kiểu On-Demand (Reactive)
Trong loại giao thức định tuyến này, các con đường đi sẽ chỉ được tạo ra
nếu có nhu cầu. Khi một node muốn gởi dữ liệu đến một node đích, nó sẽ
105
khởi động tiến trình route discovery để tìm kiếm con đường đi đến đích. Sau
khi một đường đi đã được xác lập, nó sẽ duy trì thông tin đó bằng tiến trình
route maintenance cho đến khi hoặc node đích không thể truy cập hoặc con
đường đi đó không còn hiệu lực.
Với các cơ chế đó, giao thức định tuyến theo kiểu Reactive không phát
broadcast các thay đổi của bảng định tuyến theo thời gian, nên tiết kiệm
được tài nguyên mạng. Vì vậy loại giao thức này có thể sử dụng trong các
mạng lớn, các node di chuyển nhiều.
Các giao thức định tuyến dạng Reactive tiêu biểu:
+ Cluster Based Routing Protocol (CBRP).
+ Ad hoc On-Demand Distance Vector (AODV).
+ Dynamic Source Routing (DSR).
+ Temporally Ordered Routing Algorithm (TORA).
+ Associativity-Based Routing (ABR).
+ Signal Stability Routing (SSR).
+ Location Aided Routing (LAR).
Giao thức định tuyến kết hợp(Hybrid)
Trong kiểu định tuyến này, mạng được chia thành các zone. Mỗi node
duy trì cả thông tin về kiến trúc mạng trong zone của nó và thông tin về các
zone láng giềng. Điều đó có nghĩa là: giao thức Hybrid sử dụng giao thức
định tuyến proactive trong zone của nó và giao thức định tuyến reactive
giữa các zone. Do đó, đường đi đến mỗi node trong cùng một zone được xác
lập mà không cần phải định tuyến ra ngoài zone, trong khi đó các tiến trình
route discovery và route maintenance thì được sử dụng để tìm kiếm, duy trì
đường đi giữa các node của các zone với nhau.
Các giao thức định tuyến tiêu biểu sử dụng kiểu Hybrid:
+ Zone Routing protocol (ZRP).
+ Zone-based hierarchical link state (ZHLS) routing protocol.
+ Distributed dynamic routing algorithm (DDR).
106
Hình 3.6 Các giao thức định tuyến trong mạng MANET
3.6.4.2 Giao thức định tuyến TORA
TORA (Temporally Ordered Routing Algorithm) là một giao thức định
tuyến giải quyết được nhược điểm của các giao thức định tuyến truyền thống là
phá bỏ được vòng lặp (loop-free) và có khả năng thích ứng cao với môi trường
mạng có nhiều thay đổi dựa trên khái niệm “link reversal”, nó tìm kiếm thông
tin về đường đi theo yêu cầu, cung cấp nhiều đường đi đến đích, xác lập đường
đi một cách nhanh chóng.
TORA ít sử dụng con đường đi tối ưu (tức là con đương đi ngắn nhất) mà
nó thường sử dụng các con đường đi dài hơn nhằm để hạn chế việc phải tìm
kiếm các con đường đi mới làm ảnh hưởng đến lưu lượng truyền trên mạng.
Cách thức hoạt động của thuật toán TORA có thể diễn tả như thuật ngữ mô
hình nước chảy từ node nguồn đến node đích của mạng các ống nước như
trong mô hình mạng thực tế. Các ống nước đại diện cho liên kết giữa các node,
giao điểm của các ống nước đại diện cho các node và nước trong ống đại diện
cho các gói dữ liệu truyền đến đích. Mỗi node có một trọng số tới mỗi node
đích được tính toán bỡi giao thức định tuyến. Nếu một ống nước giữa node A
và node B bị chặn làm cho nước không thể chảy qua được, thì trọng số của
node A được đặt trọng số lớn hơn các node láng giềng của nó và do đó nước sẽ
chảy ngược trở ra node A (và chảy vào các node khác mà có thông tin định
tuyến đến đích qua node A).
107
Hình 3.7 Mô hình nước chảy trong mạng với giao thức TORA
Giao thức định tuyến TORA được sử dụng trong môi trường mạng di động
có tính chất động cao, cung cấp nhiều đường đi khác nhau giữa hai node. Để
làm được điều này, các node cần duy trì thông tin định tuyến đến các node
láng giềng của nó.
Giao thức định tuyến này thực hiện ba chức năng chính :
+ Tạo thông tin định tuyến.
+ Duy trì thông tin định tuyến.
+ Xóa bỏ thông tin định tuyến.
Mỗi node trong mạng luôn duy trì một đồ thị không vòng có hướng
(directed acyclic graph (DAG)) riêng cho mỗi node còn lại trong mạng. Khi
một node muốn định tuyến đến một node đích cụ thể nào đó, nó phát broadcast
một gói QUERY chứa thông tin về địa chỉ đích. Gói QUERY này được truyền
trong mạng cho đến khi nó tìm được node đích hoặc một node trung gian mà
có thông tin định tuyến đến node đích. Sau đó, node đích hoặc node trung gian
đó sẽ phát broadcast một gói UPDATE chứa trọng số của nó đến node nguồn.
Khi gói UPDATE truyền qua mạng, các node trong mạng mà nhận được gói
UPDATE này sẽ cập nhật lại thông tin về trọng số của nó bằng cách đặt giá trị
trọng số lớn hơn giá trị trọng số của node láng giềng mà đã nhận gói UPDATE
trước đó. Điều này tạo ra một chuỗi các liên kết có hướng từ node gởi gói
QUERY đến node gởi gói UPDATE trả lời. Khi một node khám phá rằng một
108
thông tin định tuyến đến một node đích không còn giá trị, nó sẽ điều chỉnh giá
trị trọng số của nó bằng giá trị lớn nhất so với các node láng giềng của nó và
phát gói UPDATE lên mạng. Nếu node mà có tất cả các láng giềng có trọng số
bằng vô cùng đến node đích này, thì node sẽ bắt đầu khám phá thông tin định
tuyến mới. Khi một node khám phá ra con đường đi mới, nó sẽ phát sinh một
gói CLEAR để thiết lập lại trạng thái bảng định tuyến và xóa các con đường đi
không còn hiệu lực.
Hình 3.8 Các giá trị hop-count trong TORA
Như đã đề cập ở trên, trong quá trình tạo và duy trì thông tin định tuyến, các
node sử dụng giá trị hop-count để xác lập một DAG đến node đích. Sau đó,
hướng của các liên kết được chỉ định dựa trên mối quan hệ giữa các node láng
giềng. Khi các liên kết giữa các node trong một DAG bị đứt, thì cơ chế duy trì
thông tin định tuyến (route maintenance) sẽ xác lập một DAG mới đến node đích.
Sau đó, TORA sẽ phảt broadcast gói tin CLEAR qua mạng để loại bỏ thông tin
định tuyến không còn giá trị đó.
3.6.4.3 Giao thức định tuyến DSDV
DSDV (Destination-Sequenced Distance-Vector) là một biến thể của giao
thức định tuyến distance vector theo kiểu proactive, dựa trên ý tưởng của thuật
toán định tuyến kinh điển Bell-man-Ford với một chút cải tiến.
Cải tiến mới của DSDV là sử dụng kỹ thuật đánh số sequence number. kỹ
thuật này dùng để nhận ra các con đường đi không còn giá trị trong quá trình
cập nhật bảng định tuyến, do đó sẽ tránh được vòng lặp trong quá trình định
109
tuyến. Mỗi node sẽ tăng số sequence number khi gởi thông tin về bảng định
tuyến của nó cho các node khác trong mạng.Các cơ chế trong DSDV:
Quản lý bản định tuyến
Mỗi node luôn duy trì một bảng định tuyến đến tất cả các node khác trong
mạng. Thông tin của một entry trong bảng định tuyến bao gồm:
+ Địa chỉ của node đích.
+ Số hop đến đích (hop-count ).
+ Next hop.
+ Số sequence number của node đích.
Để đảm bảo cho bảng định tuyến luôn phù hợp với những thay đổi trong
mạng thì các node phải thường xuyên cập nhật bảng định tuyến theo một
khoảng thời gian nhất định hoặc khi mạng có sự thay đổi. Do đó, các node
phải quảng bá thông tin định tuyến của nó cho các node khác trong mạng
bằng cách phát broadcast những thay đổi trong bảng định tuyến của nó. Khi
một node nhận gói tin cập nhật bảng định tuyến, nó sẽ kiểm tra số sequence
number của gói tin cập nhật, nếu số sequence number trong gói tin cập nhật
lớn hơn hoặc bằng với số sequence number trong bảng định tuyến và có số
hop-count nhỏ hơn thì node đó sẽ cập nhật thông tin đó vào bảng định tuyến.
Cách thức cập nhật bảng định tuyến:
Bảng định tuyến cập nhật theo hai cách:
+ Cập nhật toàn bộ bảng định tuyến cho các node láng giềng và có
thể truyền trong nhiều packet, gọi là full- dump.
+ Cập nhật các phần thay đổi trong bảng định tuyến của nó cho các
node láng giềng và các thông tin thay đổi đó chỉ được gởi đi trong một
packet. Cách cập nhật này gọi là incremental- update.
Đối với một mạng Ad-hoc tương đối ổn định, thì kiểu cập nhật
incremental-update sẽ thường được sử dụng để hạn chế lưu lượng truyền
trên mạng. Trong khi đó, full-dump sẽ được sử dụng trong mạng ít có sự ổn
định.
110
Quản lý sự thay đổi của Topology
Khi một node di chuyển từ nơi này đến nơi khác thì các liên kết của nó
với các node láng giềng có thể không còn hiệu lực. Khi node phát hiện rằng
liên kết đến next hop của nó không còn tồn tại, thì đường đi thông qua next
hop đó lập tức sẽ có hop-count là ∞ và số sequence number được tăng lên 1.
Sau đó node sẽ phát broadcast thông tin đó cho tất cả các node trong mạng
và các node sẽ cập nhật lại bảng định tuyến của mình.
3.6.4.4 Giao thức định tuyến DSR
DSR (Dynamic Source Routing) là giao thức định tuyến đơn giản và hiệu
quả được thiết kế riêng cho mạng MANET. DSR cho phép mạng tự động tổ
chức và cấu hình mà không cần đến sự quản trị hoặc cơ sở hạ tầng sẵn có của
mạng.
Giao thức định tuyến DSR bao gồm hai cơ chế cơ bản: Route Discovery và
Route Maintenance, nhờ hai cơ chế này mà các node có thể tìm và duy trì
được các đường đi đến các node trong mạng.
Một đặc tính nổi bật khác của DSR là nó sử dụng kỹ thuật định tuyến source
routing, khi đó bên gởi sẽ biết toàn bộ thông tin đường đi đến đích, điều này
giúp cho việc định tuyến trên mạng không bị hiện tượng vòng lặp (loop) làm
tăng hiệu năng của mạng. Để định tuyến được thì trong header của packet lưu
giữ thêm thông tin về source route. Thông tin về bảng định tuyến được lưu
trong route cache. Khi một node trong mạng Ad hoc muốn gởi dữ liệu đến một
node đích nó sẽ tìm kiếm thông tin trong route cache nếu chưa có thông tin về
đường đi thì node nguồn sẽ khởi động tiến trình route discovery để tìm kiếm
con đường đi đến đích.
Cơ chế route discovery:
Route Discovery cho phép các host trong mạng Ad hoc tìm kiếm đường
đi đến đích một cách tự động thông qua các node trung gian. Tiến trình
route discovery sẽ phát broadcast gói route request (RREQ) lên mạng.
Ngoài các trường bình thường, Thông tin trong packet RREQ còn chứa một
111
số request ID_ là một số được tạo ra bỡi node nguồn và là số không trùng
nhau. Khi một node nhận gói RREQ thì nó sẽ tiến hành kiểm tra thông tin
trong RREQ như sau:
1. Nó kiểm tra xem đây có phải là lần đầu tiên nó nhận gói RREQ có
địa chỉ đích và số request ID_ hay không? nếu không phải thì nó sẽ loại
bỏ gói tin này và không xử lý. Ngược lại thì qua bước 2.
2. Nó kiểm tra trong trường source route của gói RREQ đã có địa chỉ
của nó hay chưa? nếu đã tồn tại thì nó cũng sẽ loại bỏ gói tin đó và không
xử lý gì thêm. Ngược lại thì qua bước 3.
3. Nó kiểm tra trong route cache của nó có đường đi đến node đích mà
còn hiệu lực hay không? nếu có đường đi đến đích thì nó sẽ phản hồi lại
cho node nguồn bằng gói route reply (RREP) chứa thông tin về đường đi
đến đích và kết thúc tiến trình. Ngược lại qua bước 4.
4. Nó kiểm tra địa chỉ đích cần tìm có trùng với địa chỉ của nó hay
không? nếu trùng thì nó cũng sẽ gởi lại cho node nguồn gói route reply
(RREP) chứa thông tin về đường đi đến đích và kết thúc tiến trình.
Ngược lại thì nó sẽ phát broadcast đến các node láng giềng của nó.
Quá trình này cứ tiếp tục cho đến khi node nguồn nhận được thông tin về
đường đi đến đích hoặc thông tin rằng không thể định tuyến đến đích. Gói
route reply (RREP) được gởi đến node nguồn bằng cơ chế phát unicast với
source route là đảo ngược source route trong gói RREQ.
Trong quá trình route discovery, thì các node sẽ học các con đường đi
đến các node khác và lưu trong route cache của mình:
+ Khi node nguồn tìm kiếm được đường đi đến node đích thì nó
cũng sẽ biết được đường đi đến các node trung gian.
Ví dụ: Khi node S tìm được đường đi đến node D là [S,E,F,J,D] thì
node S sẽ biết được đường đi đến các node khác như node F là
[S,E,F], node J là [S,E,F,J], …
112
+ Trong quá trình phát broadcast gói RREQ, các node trung gian
cũng sẽ biết được con đường đi đến node nguồn.
Ví dụ: Khi node K nhận được một gói RREQ với source route là
[S,C,G] thì node K sẽ biết được đường đi đến node nguồn S là
[K,G,C,S].
+ Trong quá trình forward gói RREP thì các node trung gian biết
được đường đi đến node đích.
Ví dụ: Khi node F forward gói RREP với source route là
[S,E,F,J,D], thì node F biết được đường đi đến D là[F,J,D].
Cơ chế route maintenance
Trong giao thức định tuyến DSR, các node khi chuyển gói tin trên mạng
đều phải có nhiệm vụ xác nhận rằng gói tin đó đã chuyển đến next hop hay
chưa? Trong một trường hợp nào đó mà node đó phát hiện rằng gói tin
không thể truyền đến next hop. Nó sẽ gởi gói Route Error (RERR) cho node
nguồn để thông báo tình trạng hiện thời của liên kết và địa chỉ của next hop
mà không thể chuyển đi. Khi node nguồn nhận được gói RERR, nó sẽ xóa
con đường đi mà sử dụng liên kết bị hỏng trong route cache và tìm một
đường đi khác mà nó biết trong route cache hoặc sẽ khởi động một tiến trình
route discovery mới nếu đường đi này đang có nhu cầu sử dụng.
3.6.4.5 Giao thức định tuyến AODV
AODV (Ad hoc On-Demand Distance Vector) là sự kết hợp giữa hai giao
thức định tuyến DSDV và DSR. Cũng giống như DSR, trong giao thức định
tuyến AODV, các node chỉ tìm kiếm và duy trì thông tin định tuyến khi các
node có nhu cầu trao đổi dữ liệu.
AODV vẫn sử dụng cơ chế tìm đường như trong DSR là sử dụng tiến trình
route discovery. Tuy nhiên, AODV còn sử dụng nhiều cơ chế khác để duy trì
thông tin bảng định tuyến. Nó sử dụng bảng định tuyến truyền thống để lưu
trữ thông tin định tuyến với mỗi entry cho một địa chỉ đích . Điều đó trái
ngược với giao thức DSR, có thể duy trì nhiều entry cho một địa chỉ đích.
113
Không sử dụng source route và chỉ cần biết thông tin về các node láng giềng
của nó, AODV dựa trên các entry của bảng định tuyến để phát gói RREP về
cho node nguồn và node nguồn dùng thông tin đó để gởi dữ liệu đến đích. Để
đảm bảo rằng thông tin trong bảng định tuyến là mới nhất thì AODV sử dụng
khái niệm destination sequence number của giao thức định tuyến DSDV để
loại bỏ những đường đi không còn giá trị trong bảng định tuyến. Mỗi node sẽ
có một bộ tăng số sequence number riêng cho nó. Các cơ chế chính của
AODV:
Cơ chế Route Discovery
Mỗi node luôn có hai bộ đếm (counter): bộ đếm số sequence number và
bộ đếm broadcast ID. Số sequence number được tăng lên trong các trường
hợp:
+ Trước khi một node khởi động tiến trình route discovery, điều này
chống sự xung đột với các gói RREP trước đó.
+ Trước khi một node đích gởi gói RREP trả lời gói RREQ, nó sẽ cập
nhật lại giá trị sequence number lớn nhất của số sequence number hiện
hành mà nó lưu giữ với số sequence number trong gói RREQ.
+ khi có một sự thay đổi trong mạng cục bộ của nó (mạng cục bộ là
các node láng giềng).
Số Broadcast ID được tăng lên khi node khởi động một tiến trình route
discovery mới.
Tiến trình Route Discovery được khởi động khi nào một node muốn trao
đổi dữ liệu với một node khác mà trong bảng định tuyến của nó không có
thông tin định tuyến đến node đích đó. Khi đó tiến trình sẽ phát broadcast
một gói RREQ cho các node láng giềng của nó. Thông tin trong RREQ
ngoài địa chỉ đích, địa chỉ nguồn, số hop count, ... Còn có các trường: số
sequence number của node nguồn, số broadcast ID, số sequence number của
node đích. Cặp thông tin <địa chỉ nguồn, số broadcast ID> là số định danh
114
duy nhất cho một gói RREQ. Khi node láng giềng nhận được gói RREQ, thì
nó sẽ kiểm tra tuần tự theo các bước:
1. Xem gói RREQ đã được xử lý trước đó hay chưa? nếu đã được xử
lý thì nó sẽ loại bỏ gói tin đó và không xử lý thêm. Ngược lại chuyển qua
bước 2.
2. Nếu trong bảng định tuyến của nó có chứa đường đi đến đích, thì sẽ
kiểm tra giá trị destination sequence number trong entry chứa thông tin
về đường đi với số destination sequence number trong gói RREQ, nếu số
destination sequence number trong RREQ lớn hớn số sequence number
trong entry thì nó sẽ không sử dụng thông tin trong entry của bảng định
tuyến để trả lời cho node nguồn mà nó sẽ tiếp tục phát broadcast gói
RREQ đó đến các node láng giềng của nó. Ngược lại nó sẽ phát unicast
gói RREP ngược trở lại cho node láng giềng mà nó đã nhận gói RREQ.
Gói RREP ngoài các thông tin như: địa chỉ nguồn, địa chỉ đích, còn chứa
các thông tin: destination sequence number, hop-count, giá tr ị TTL.
Ngược lại thì qua bước 3.
3. Nếu trong bảng định tuyến của nó không có đường đi đến đích thì
nó sẽ tăng số hop-count lên 1, đồng thời nó sẽ tự động thiết lập một
đường đi ngược (reverse path) từ nó đến node nguồn bằng cách ghi nhận
lại địa chỉ của của node láng giềng mà nó nhận gói RREQ lần đầu tiên.
Entry chứa đường đi ngược này sẽ được tồn tại trong một khoảng thời
gian đủ để gói RREQ tìm kiếm đường đi đến đích và gói RREP phản hồi
cho node nguồn, sau đó entry này sẽ được xóa đi. Các thông tin bao gồm:
+ Địa chỉ đích.
+ Địa chỉ nguồn.
+ Số broadcast ID.
+ Thời gian timeout cho việc chờ đợi thời gian nhận gói RREP.
+ Số sequence number của node nguồn.
Sau đó phát broadcast đến các node láng giềng của nó.
115
Và quá trình trên cứ lặp lại cho đến khi gặp node đích hoặc một node
trung gian mà có các điều kiện thỏa bước 2.
Trong quá trình trả về gói RREP, một node có thể nhận cùng lúc nhiều
gói RREP, khi đó nó chỉ sẽ xử lý gói RREP có số destination sequence
number lớn nhất, hoặc nếu cùng số destination sequence number thì nó sẽ
chọn gói RREP có số hop-count nhỏ nhất. Sau đó nó sẽ cập nhật các thông
tin cần thiết vào trong bảng định tuyến của nó và chuyển gói RREP đi.
Cơ chế Route Maintenance
Khi một node nhận thấy rằng next hop của nó không thể tìm thấy, thì nó
sẽ phát một gói RREP khẩn cấp với số sequence number bằng số sequence
number trước đó cộng với 1, và hop count bằng ∞ và gởi đến tất cả các node
láng giềng đang ở trạng thái active, những node đó sẽ tiếp tục chuyển gói tin
đó đến các node láng giềng, … và cứ như vậy cho đến khi tất cả các node
trong mạng mà ở trạng thái active nhận được gói tin này.
Sau khi nhận thông báo đó, các node có thể sẽ khởi động lại tiến trình
route discovery nếu nó có nhu cầu định tuyến dữ liệu đến node bị hỏng đó,
để biết node cần có nhu cầu định tuyến đến đích hay không thì nó sẽ kiểm
tra ở các giao thức bên dưới có kết nối nào đến node đích mà còn mở hay
không? Nếu thấy cần có nhu cầu định tuyến nó sẽ gởi một gói RREQ (với
số sequence number bằng số sequence number mà nó biết trước đó cộng
thêm 1) đến các node láng giềng để tìm đến địa chỉ đích. Để kiểm tra trạng
thái một node có active hay không? AODV sử dụng một bộ timer. Một
entry của bảng định tuyến sẽ bị xem là không active nếu nó không được sử
dụng thường xuyên.
Quản lý bảng định tuyến
Một node duy trì một entry trong bảng định tuyến cho một địa chỉ đích.
Một entry chứa các thông tin:
+ Địa chỉ đích.
+ Next hop.
116
+ Hop count.
+ Số sequence number của node đích.
+ Các node láng giềng ở trạng thái active.
+ Thời gian hết hạn của entry.
Trong mỗi entry của bảng định tuyến, địa chỉ của các node láng giềng ở
trạng thái active mà có định tuyến đến đích vẫn được lưu giữ. Một node
láng giềng được đặt ở trạng thái là active nếu nó khởi tạo hoặc chuyển tiếp
ít nhất một packet đến node đích trong giới hạn của active_timeout. Thông
tin này cần được lưu giữ để giúp cho việc thông báo một link bị hỏng đến
các node active được thuận lợi. Một entry của bảng định tuyến được xem là
active nếu nó được sử dụng bỡi các node láng giềng ở trạng thái active.
Khi có một đường đi mới đến một node đích, thì node nguồn sẽ so sánh
số sequence number của đường đi mới với số sequence number có trong
entry tương ứng với địa chỉ đích trong bảng định tuyến. Đường đi mà có số
sequence number lớn hơn sẽ được chọn. Nếu số sequence number bằng
nhau, thì đường đi nào có số hop-count nhỏ hơn sẽ được chọn.
117
Chương 4
Ngôn ngữ TCL
4.1 Tổng quan và một số đặc điểm của ngôn ngữ TCL: TCL -Tool Command Language là một ngôn ngữ lệnh khá mạnh, có thể chạy
được trên các hệ điều hành như Unix, Linux, DOS/Window, OS/2 và MacOS
nhờ các trình thông dịch. Tuy nhiên, ngôn ngữ này chỉ có một số ít các cấu trúc
nền tảng và khá ít các cú pháp.
Các đặc điểm của ngôn ngữ TCL:
TCL là ngôn ngữ lệnh (scripting language)
Cũng như các ngôn ngữ lập trình Unix shell, awk, perl, TCL cung cấp các
đặc tính của ngôn ngữ lập trình cấp cao như:
+ Khai báo biến theo kiểu chuỗi.
+ Khai báo mảng.
+ Khai báo kiểu danh sách (list).
+ Khả năng định nghĩa và tái định nghĩa các thủ tục ở trong lúc run-
time.
+ Truy cập file.
+ Khả năng bắt lỗi.
TCL là ngôn ngữ có khả năng nhúng vào các ứng dụng khác
Ngôn ngữ TCL được thiết kế để nhúng vào trong các ứng dụng khác (ví dụ
như ngôn ngữ C) như là một ngôn ngữ mở rộng. Điều này sẽ làm giảm đến
mức tối đa số lượng ngôn ngữ lập trình mà người lập trình cần phải học nhưng
vẫn có thể tạo ra được những ứng dụng như ý muốn.
TCL là ngôn ngữ có khả năng mở rộng
Ngôn ngữ TCL được thiết kế đặc biệt để có khả năng mở rộng, để tạo một
lệnh mới cho TCL, chỉ cần định định nghĩa thêm các thủ tục hoặc cài đặt hàm
bằng ngôn ngữ C.
118
Quản lý bộ nhớ tự động
Tất cả các cấu trúc dữ liệu trong ngôn ngữ TCL được cấp phát động và
không giới hạn về kích thước. Do đó, người lập trình sẽ không cần quan tâm
đến việc cấp phát bộ nhớ cho các biến hoặc kích thước của các biến như thế
nào.
Trao đổi giữa các ứng dụng TCL
TCL hỗ trợ khả năng trao đổi dữ liệu giữa các ứng dụng Tcl chạy trên các
máy khác nhau trên mạng. Để làm được điều đó, cần những giao thức theo mô
hình client-server mà tương thích với ngôn ngữ TCL.
4.2 Cú pháp của TCL: Để tạo ra các file Tcl, chúng ta có thể sử dụng bất cứ trình soạn thảo văn bản
nào như vi, emacs, notepad, …với phần mở rộng của file là .tcl.
4.2.1 Khai báo biến và mảng Trong Tcl, chúng ta không cần phải khai báo biến trước khi sử dụng, và Tcl
phân biệt chữ hoa và chữ thường.
Để định nghĩa một biến ta dùng cú pháp:
set tên_biến giá_trị_biến
Ví dụ:
set var1 1
set var2 “day la bien var2”
Để khai báo một biến mà có thể sử dụng trong toàn bộ chương trình, ta dùng từ
khóa global:
global tên_biến
Ví dụ:
global ns
Để lấy giá trị của các biến, ta đặt toán tử $ ở trước tên biến.
Ví dụ:
Để in giá trị của các biến ở trên:
119
Puts “var1=$var1 , var2=$var2”
Kết quả: 1 , day la bien var2
Các kiểu biến cơ bản trong Tcl là string, list, array. Trong đó, string cũng
được coi là một list với mỗi từ trong string là một phần tử của list. Tcl tự xác
định kiểu và đổi kiểu tự động.
Giống như hầu hết các ngôn ngữ khác, TCL cũng cung cấp cách khai báo
mảng. Tuy nhiên, một ưu điểm của ngôn ngữ TCL là nó không cần phải khai báo
kích thước của mảng:
set n(0) [$ns node]
set n(1) [$ns node]
set opts(bottlenecklinkrate) 1Mb
set opts(ECN) "on"
Trong ví dụ thứ nhất, một mảng n được tạo ra với các chỉ số là các số nguyên.
Trong khi đó, với ví dụ thứ hai, một mảng được tạo ra bằng cách gọi lệnh opts
với các chỉ số index không phải là các số nguyên.
4.2.2 Các biểu thức toán học trong TCL Bản thân trình thông dịch Tcl không thể tính toán các biểu thức toán học, thay
vì vậy Tcl cung cấp lệnh expr để tính toán các biểu thức toán học. Các cú pháp
toán học dùng trong các đối số của lệnh expr giống như trong ngôn ngữ C. Lệnh
expr xử lý được số nguyên, số thực, các giá trị Boolean, … Các toán tử logic trả
về giá trị 0 (false) hay 1 (true).
Cú pháp:
expr bieu_thuc
Trong đó, bieu_thuc là biểu thức toán học cần tính toán. Giá trị trả về của lệnh
expr sẽ là giá trị của biểu thức bieu_thuc sau khi đã tính toán.
Ví dụ:
set var3 [expr 5*10] . kết quả var3=50
Lệnh expr sẽ tự động chuyển đổi các đối số chuỗi thành các giá trị số. Sau đó
thực hiện việc tính toán với giá trị kiểu double, giá trị định dạng cho string là 6
120
chữ số có ý nghĩa. Việc định dạng này có thể điều chỉnh được thông qua biến
tcl_precision.
Bảng các toán tử và thứ tự ưu tiên từ cao đến thấp:
Toán tử Chú thích
- ~ ! Trừ một ngôi; bitwise NOT; logic NOT
* / % Nhân; chia; phần dư
+- Cộng, trừ hai ngôi
<<>> Dịch trái; Dịch phải
<>
<= >=
So sánh nhỏ hơn, lớn hơn
Nhở hơn hoặc bằng, lớn hơn hoặc bằng
== So sánh bằng
!= So sánh không bằng
& | ^ Bitwise AND; OR; XOR
&& | | Phép toán logic AND, OR
x?y:z Nếu x thì y ngoài ra thì z
Bảng 4.1 Các toán tử trong TCL
4.2.3 Thay thế và lập nhóm Thay thế và lập nhóm là hai vấn đề hết sức quan trọng trong Tcl. Nó giúp cho
người lập trình xây dựng được các chương trình một cách gọn nhẹ.
4.2.3.1 Thay thế
Có hai loại thay thế: thay thế lệnh và thay thế biến.
Thay thế lệnh (command substitution)
Tcl lấy mọi thứ giữa hai dấu “[“ và “]”, đánh giá chúng như một lệnh,
sau đó viết lại lệnh bao ngoài bằng cách thay lệnh được thay thế bỡi giá trị
đã được tính toán của nó.
Thay thế biến
121
Khi gặp dấu $, Tcl sẽ tự động thay thế giá trị của biến có tên sau nó thế
chỗ.
4.2.3.2 Lập nhóm
Cho phép nhiều từ trong một đối số, được dùng với các biến và các lệnh gọi
lồng nhau Tcl thực hiện lập nhóm trước, sau đó mới thực hiện phép thay thế và
cuối cùng gọi lệnh để thực thi. Có hai loại lập nhóm, lập nhóm bỡi dấu móc
nhọn “{“ “}” và nhóm bỡi dấu trích dẫn “ và “. Lập nhóm bỡi dấu móc nhọn
“{“ và “}” không cho phép thay thế ở bên trong nó. Còn lập nhóm bỡi dấu
trích dẫn cho phép việc thay thế xuất hiện bên trong nó. Thông thường lập
nhóm bằng dấu móc được dùng trong trường hợp muốn làm trễ việc thực thi
một lệnh. Chẳng hạn như với các vòng lặp, các lời gọi hàm, … Dấu ngoặc
vuông [ ] không cho phép lập nhóm.
4.2.4 Cấu trúc điều khiển 4.2.4.1 Điều kiện if
Cú pháp của lệnh if rất đơn giản:
if {$i < 10}{
Puts “i nho hon 10” }
if { $var2 == “day la bien var2”}{
puts “var2= thanh cong!” }
4.2.4.2 Vòng lặp for
Trong rất nhiều ngôn ngữ lập trình, cấu trúc vòng lặp for rất hay được sử
dụng vì tính tiện lợi của nó. Để khai báo một cấu trúc vòng lặp for trong TCL,
ta dùng cú pháp:
for { set i 0 } { $i < 100 } {inrc I } {
set n($i) [$ns node]
}
Vòng lặp for trên khai báo một mảng gồm 100 phần tử với mỗi phần tử là
một node.
4.2.4.3 Vòng lặp while
122
Cú pháp của vòng lặp while:
set i 0
while { $i < 10 }{
set n($i) [new Node]
incr i
}
4.2.4.4 Thủ tục
Thủ tục là một trong những thành phần quan trọng nhất của ngôn ngữ TCL.
Nó làm cho việc lập trình trong Tcl trở nên đơn giản và hiệu quả, chương trình
trở nên gọn nhẹ, dễ quản lý hơn. Để định nghĩa một thủ tục ta dùng từ khóa
proc với cú pháp:
proc ten_thu_tuc {thamso}{
// cài đặt chức năng cho thủ tục
}
Trong đó:
ten_thu_tuc: tên của thủ tục hay lệnh mới.
thamso: danh sách các tham số, các tham số cách nhau bỡi ít nhất một
khoảng trắng. Thủ tục có thể không cần tham số.
Trình thông dịch sẽ bắt đầu thực thi lệnh trong script từ đầu đến cuối, khi
gặp từ khóa proc nó sẽ hình dung ten_thu_tuc là một thủ tục. Nó sẽ ghi nhớ tên
và nội dung của thủ tục và không thực thi các lệnh trong thủ tục đó cho đến
cuối ký tự “}”. Khi gặp lại ten_thu_tuc lần thứ hai thì trình thông dịch biết là
sẽ triệu gọi thủ tục, lúc này nó sẽ thực thi nội dung của thủ tục ten_thu_tuc, khi
đã chấm dứt thủ tục, dòng lệnh tiếp theo sau thủ tục sẽ tiếp tục đựợc thực thi.
Minh họa các loại thủ tục:
+ Định nghĩa một thủ tục không có tham số:
proc thutuc1 {} {
puts “day la thu tuc thu nhat”
}
123
Để gọi thủ tục trong chương trình , ta làm như sau:
set i 0
while { $i < 5 }{
thutuc1
incr i
}
+ Định nghĩa một thủ tục có tham số:
proc thutuc2 {parameter1}{
puts “gia tri cua tham so la $parameter1”
}
Để gọi thủ tục có tham số , ta làm như sau:
set i 0
while { $i < 10 }{
thutuc2 i
incr i
}
+ Định nghĩa một thủ tục có giá trị trả về:
proc thutuc3 {min , max } {
set randomvar [ rand $min $max]
return $randomvar
}
Hàm rand dùng để phát sinh một giá trị ngẫu nhiên trong khoảng từ
giá trị min đến giá trị max.
Để lấy giá trị trả về của thủ tục, ta làm như sau:
set i 0
while { $i < 5 }{
set randomvar [thutuc3 0 i]
puts “$randomvar”
incr i
124
}
4.2.4.5 Tập lệnh của TCL
Tập lệnh của Tcl được chia thành nhiều nhóm lệnh:
4.2.4.5.1 Nhóm lệnh điều khiển
Lệnh Chú thích
break thoát khỏi vòng lặp
case Thực thi các script dựa trên các giá trị đã cho
catch Bắt lỗi
Continue Yêu cầu vòng lặp quay lại thưc thi lệnh kế tiếp
Error Thông báo lỗi
eval Thực thi một kịch bản TCL
exit Kết thúc một ứng dụng
For Vòng lặp for
Foreach Lặp lại trên các phần tử trong một hay nhiều
danh sách
If Thực thi lệnh nếu thỏa điều kiện
Interp Khởi tạo thêm trình thông dịch TCL
Proc Tạo một thủ tục trong TCL
Rename Đổi tên hay xóa một lệnh
Return Giá trị trả về từ một thủ tục
Run Thực thi ứng dụng
Safe
Source Thực thi các lệnh TCL từ một file khác
Switch Cấu trúc rẽ nhánh
Uplevel Thực hiện một script trên một stack frame
khác
125
While Cấu trúc vòng lặp while
Bảng 4.2 Nhóm lệnh điều khiển
4.2.4.5.2 Nhóm lệnh sự kiện
Lệnh Chú thích
After Thực thi một lệnh sau một khoảng thời gian
định trước
background error Được hỗ trợ để xử lý các lỗi background
Fileevent Thực thi một script khi một channel trở nên có
thể đọc hay có thể viết
Update
Wait Xử lý các sự kiện cho đến khi một biến được
thay thế
Bảng 4.3 Nhóm lệnh sự kiện
4.2.4.5.3 Nhóm lệnh về file
Lệnh Chú thích
close Đóng một channel
Eof Điều kiện để kiểm tra kết thúc file
Fbclocked Thăm dò một kênh I/O để xác định dữ liệu có
sẵn sang hay không
Fconfigure Set và get các option trên một channel
Fcopy Copy dữ liệu từ channel này sang channel
khác
File Thao tác trên file hệ thống
Filename
Flush
Gets Đọc một hàng từ một channel
126
Global Khai báo các biến toàn cục
Open Mở một file hoặc điều khiển pineline channel
Puts Viết vào một channel
Read Đọc từ một channel
Seek Thay đổi vị trí truy cập cho một channel đã mở
Tell Trả về vị trí truy cập hiện hành của một
channel đã mở
Bảng 4.4 Nhóm lệnh file
4.2.4.5.4 Nhóm lệnh trên danh sách
Lệnh Chú thích
concat Liên kết các danh sách với nhau
join Tạo một chuỗi bằng cách liên kết các phần tử
của danh sách lại với nhau
lappend Bổ sung các phần tử vào cuối một danh sách
lindex Lấy một phần tử của danh sách
list Tạo một danh sách dựa trên các đối số
llength Đếm số phần tử trong danh sách
lrange Trả về một hay nhiều phẩn tử liên tiếp nhau
của một danh sách
lreplace Thay thế các phần tử trong một danh sách
bằng các phần tử mới
lsearch Tìm kiếm một phần tử của một danh sách thõa
mãn một điều kiện nào đó
lsort Sắp xếp các phần tử của một danh sách
split Chuyển một chuỗi thành một danh sách
Bảng 4.5 Nhóm lệnh xử lý trên danh sách
127
4.2.4.5.5 Nhóm lệnh trên xử lý chuỗi
Lệnh Chú thích
append Nối các đối số vào một biến không thêm
khoảng trắng
binary Chuyển đổi giữa chuỗi và dữ liệu nhị phân
format Định dạng một chuỗi
regexp So sánh các biểu thức chính qui có trùng nhau
không
regsub
scan Phân tích một chuỗi dựa trên đặc tả định dạng
string Thao tác trên các chuỗi
subst Thay thế nhưng không đánh giá kết quả của
một lệnh
Bảng 4.6 Nhóm lệnh xử lý trên chuỗi
4.2.4.5.6 Nhóm lệnh trên xử lý biến
Lệnh Chú thích
array Thao tác trên các biến array
global Khai báo biến toàn cục
namespace Khởi tạo và ngữ cảnh thao tác trên các biến
set Gán giá trị cho biến
stdvars Biến đã được sử dụng trong TCL
trace Giám sát việc gán giá trị biến
unset Xóa biến
upvar Tạo liên kết đến các biến trong một stack
frame khác
variable Tạo và khởi gán một biến namespace
128
Bảng 4.7 Nhóm lệnh xử lý biến
4.2.4.5.7 Nhóm lệnh về thời gian
Lệnh Chú thích
clock Lấy thời gian và định dạng chuỗi date
time Đo thời gian thực thi một script
Bảng 4.8 Nhóm lệnh xử lý thời gian
Mỗi lệnh TCL thường cho phép rất nhiều thông số, tùy chọn. Minh họa
một số ví dụ về nhóm lệnh thao tác trên I/O:
Tham số Chú thích
open what
access?
permission
Mờ file/pipeline, trả về ID
puts – nonewline
channel
Ghi chuỗi
gets channel?
numbytes
Đọc một dòng
read – nonewline
channel?
Đọc tất cả các byte và bỏ qua \n
tell channel Trả về offset tìm thấy
seek channel?
offset? origin?
Đặt offset tìm từ offset đầu , hiện hành hay
cuối cùng
eof channel? Xác định trạng thái cuối channel
flush channel? Ghi vào channel data từ buffer
close channel? Đóng channel I/O
read channel
numBytes
Đọc tất cả data trả về số bytes
Bảng 4.9 Các tham số tùy chọn trên I/O
129
Ví dụ:
Mở file để ghi:
set file [open /tmp/book.txt w 0600]
puts $file “hello world!”
close $file
Ta có thể thay tham số w của tác vụ open bằng tham só r+ như sau:
set file [open /tmp/book.txt r+]
puts $file “hello world!”
close $file
Bảng tham số các tác vụ open:
Tham số Chú thích
r Mở file để đọc, điều kiện file phải tồn tại
r+ Mờ file để đọc và ghi nối tiếp vào cuối file
điều kiện file phải tồn tại
w Mở file để ghi, nếu file đã tồn tại thì sẽ bị ghi
đè
w+ Mở file để ghi
a Nối vào cuối file
a+ Mở file để đọc / ghi dữ liệu vào cuối file
Bảng 4.10 Các tham số tùy chọn xử lý trên file
Bảng cờ cho tác vụ open:
Cờ ( flag ) Chú thích
RDONLY Chỉ đọc
WRONLY Chỉ ghi
RDWR Đọc và ghi
APPEND Ghi vào cuối
CREATE Tạo mới
130
EXCL Tạo mới file đã tồn tại
NOCTTY Lấy biến cố từ terminal để điều khiển
NONBLOCK Trong suốt quá trình mở không sử dụng block
TRUNC Ghi đè file nếu tồn tại
Bảng 4.11 Các cờ xử lý tác vụ mở file
Ví dụ:
set field [open /tmp/book.txt {RDWR CREATE}] hay
if [catch {open /tmp/book.txt} field]{
puts stderr “khong the mo file /tmp/book.txt : $field” }
else{
close $field
}
Bảng cú pháp exec để định hướng I/O:
Thuộc tính Chú thích
-keepnewline Lấy new line từ kết quả
l Xuất chuẩn của pipe từ 1 tiến trình vào một tiến
trình
l& Xuất chuẩn pipe và lỗi
<filename Lấy input từ file filename
<@field Lấy input từ kênh I/O định dạng bỡi field
<<value Lấy input từ giá trị đã cho
>filename Xuất chuẩn ra filename
2>filename Xuất chuẩn lỗi ra filename
>&filename Xuất chuẩn filename và lỗi
2>>filename Ghi lỗi vào filename, nếu filename chưa tồn tại thì
tạo và ghi mới, nếu đã tồn tại thì ghi tiếp vào cuối
131
file
>>&filename Ghi tiếp xuất chuẩn và lỗi vào trong filename
>@field Xuất chuẩn trực tiếp đến field
2>@field Xuất chuẩn lỗi đến I/O field
>&@field Xuất chuẩn nội dung và lỗi chuẩn đến I/O file
& Ký tự cuối, chỉ định pipe chạy background
Bảng 4.12 cú pháp exec để định hướng I/O
Ví dụ:
set d [exec date]
catch { exec program arg arg } result
Liên kết file (file join). Tùy theo hệ điều hành:
+ Unix:
Disk:SystemFolder:Extension:ToolCommandLanguage:tcl7.6
c:/Program Files/Tcl/lib/Tcl7.6
file join a b/c d
+ Windows:
Disk:System Folder:Extension:Tool Command Language:tcl7.6
c:\Program Files\Tcl\lib\tcl8.0
+ Macitosh :
Disk:Applications:Tcl/Tk4.2
file join /usr/local/lib
Thuộc tính Chú thích
file atime name ? Trả về thời gian truy cập là một chuỗi deci
file attributes na
option ? value ?
Tìm kiếm hay xác định thuộc tính file
file copy – force?
destination?
Sao chép file từ nguồn đến đích. Nguồn và đích là
thư mục
132
file delete – force Xóa file
file driname name Lấy tên thư mục cha hay tên file
file exist name Trả về 1 nếu tồn tại tên file, ngược lại thì trả về 0
file extension na Trả về tên mở rộng kể từ dấu chấm cuối
file executable n Trả về 1 nếu file cho phép thực thi, ngược lại trả về
0
file isdirectory n Trả về 1 nếu file là thư mục, ngược lại trả về 0
file is file name Trả về 1 nếu name là file, ngược lại trả về 0
file join path path Nối các thành phần thành đường dẫn mới
file lstat name var Lấy thuộc tính name liên kết với var
file mkdir name Tạo thư mục với tên thư mục là “name”
file mtime name Trả về thời gian khi sửa file “name”, giá trị trả về
là chuỗi decimal
file nativename
name
Trả về native version của “name”
file owned name Trả về 1 nếu user là chủ sở hữu của “name”, ngược
lại trả về 0
file readable name Trả về 1 nếu file “name” cho phép đọc, ngược lại
trả về 0
file readlink name Trả về nội dung ký hiệu liên kết của “name”
file rename –
force old? new?
Đổi tên file (thư mục )cũ thành file (thư mục) mới
file size name Trả về số byte của file “name”
file split name Tách nội dung của file “name” thành các thành
phần nhỏ
Bảng 4.13 Cú pháp các thao tác trên file
133
Chương 5
NGÔN NGỮ HƯỚNG ĐỐI TƯỢNG OTCL
5.1 OTcl là ngôn ngữ hướng đối tượng của TCL:
OTcl (Object TCL) là ngôn ngữ hướng đối tướng được phát triển trên nền của
ngôn ngữ Tcl. Với khả năng hướng đối tượng, chúng ta có thể định nghĩa lớp, các
phương thức, các thành phần dữ liệu của lớp.
Trong NS có một thành phần quan trọng gọi là TclCl được dùng để liên kết các
lớp được viết bằng C++ với các lớp tương ứng trong OTcl. Nghĩa là TclCL là
một lớp keo để liên kết các lớp của hai module với nhau.
5.2 Lớp và đối tượng trong Otcl: Để định nghĩa một lớp OTcl sử dụng từ khóa class và để kế thừa từ một lớp
khác ta dùng từ khóa superclass. Cú pháp khai báo:
class ten_lop –superclass ten_lop_cha
Ví dụ:
Để tạo một lớp có tên là MyNode mà kế thừa từ lớp cha là lớp Node ta khai
báo: class MyNode –superclass Node
Cũng như trong ngôn ngữ C++, khai báo trên có nghĩa là sẽ có một số phương
thức trong lớp Node sẽ có thể được sử dụng trong lớp MyNode.
Để tạo một thể hiện của một lớp ta dùng cú pháp:
set ten_doi_tuong [new ten_lop]
Ví dụ:
Để tạo một thể hiện của lớp MyNode, ta khai báo:
set mynode [new MyNode]
5.3 Phương thức khởi tạo và hủy của lớp:
134
Trong OTcl để xây dựng phương thức khởi tạo cho lớp, chúng ta sử dụng một
phương thức đặc biệt là phương thức init . Ví dụ để tạo phương thức khởi tạo cho
lớp MyNode ta khai báo phương thức init như sau:
MyNode instproc init {} {
$self next
$self instvar datamember1
set datamember1 0
}
$self next: lệnh này tương tự như lệnh super() trong ngôn ngữ Java, dùng để
gọi phương thức khởi tạo của lớp cha.
Ngoài ra, phương thức khởi tạo init của lớp có thể chứa đối số:
MyNode2 instproc init {arg1 arg2} {
$self next
$self instvar dm1 dm2
set dm1 $arg1
set dm2 $arg2
}
Khởi tạo đố tượng MyNode2:
set mn2 [new MyNode2 1 2]
Phương thức hủy của OTcl là phương thức destroy:
MyNode instproc destroy {} {
$self next
}
5.4 Khai báo các phương thức cho lớp: Sau khi đã tạo được một lớp, ta cần khai báo các phương thức cần dùng cho
lớp đó. Cú pháp khai báo phương thức với từ khóa instproc:
ten_lop instproc ten_phuong_thuc {[tham_so]}{
// cài đặt chi tiết cho phương thức
135
}
Trong đó:
+ ten_lop: Tên của lớp cần khai báo các phương thức.
+ ten_phuong_thuc: Tên của phương thức cần khai báo.
+ tham_so: Tham số đầu vào của phương thức. Giá trị này là option.
Ví dụ:
Khai báo phương thức với tên là “phuong_thuc_thu_nhat” cho lớp
MyNode:
MyNode instproc phuong_thuc_thu_nhat {} {
puts “day la noi Phuong thuc thu nhat cua lop MyNode!”
}
Để sử dụng phương thức này trong chương trình, ta gọi:
set mynode [new MyNode] // tạo một đối tượng mynode
$mynode phuong_thuc_thu_nhat
5.5 Khai báo các thành phần dữ liệu: Trong OTcl các thành phần dữ liệu của một lớp chỉ được định nghĩa trong các
phương thức của lớp mà không được định nghĩa như là một thành phần của lớp.
Điều này khác với ngôn ngữ C++, với C++ các thành phần dữ liệu của lớp được
khai báo ngay trong phần header của lớp và được xem là một thành phần của lớp.
Để khai báo và tham chiếu các thành phần dữ liệu của lớp ta dùng chỉ thị instvar.
Minh họa cách khai báo các thành phần dữ liệu:
MyNode instproc phuong_thuc_thu_hai {} {
$self instvar datamember1
set datamember1 "data member – phuong_thuc_thu_hai"
}
MyNode instproc phuong_thuc_thu_ba {} {
$self instvar datamember1
136
puts "datamember1 = $datamember1"
}
Biến self có thể sử dụng trong phạm vi của các phương thức của lớp để đề cập
đến đối tượng cụ thể. Biến seft tương tự như con trỏ this của ngôn ngữ lập trình
C++. Trong những trường hợp cụ thể, biến seft có thể dùng để gọi các phương
thức khác từ trong phạm vi một phương thức.
Cách triệu gọi các phương thức:
set mynode [new MyNode]
$mynode phuong_thu_thu_hai
$mynode phuong_thuc_thu_ba
Một đối tượng MyNode được khởi tạo với tên là mynode. Sau đó, phương thức
phuong_thuc_thu_hai được gọi. phương thức này thực hiện việc gán giá trị cho
thành phần dữ liệu (biến) datamember1. Tiếp theo, phương thức
phuong_thuc_thu_ba được gọi và phương thức này sẽ thực hiện việc in giá trị của
biến datamember1. Giá trị của biến datamember1 chính là giá trị được gán trong
phương thức phuong_thuc_thu_hai
137
B. GIỚI THIỆU CÁC CÔNG CỤ PHÁT SINH
TOPOLOGY MẠNG
PHẦN 3
CÁC CÔNG CỤ HỔ TRỢ NGÔN NGỮ DML
138
Chương 6
DMLEditor
6.1 Giới thiệu:
DMLEditor là một công cụ hổ trợ cho việc thiết kế các mô hình mạng theo
hướng trực quan, sinh động dựa trên ngôn ngữ DML và trình giả lập mạng
SSFNet.
DMLEditor được viết bằng ngôn ngữ Java của tác giả Andreas Hartl thuộc
trường đại học Technische Universitat Munchen, được bảo hộ bởi tổ chức GNU.
6.2 Các tính năng nổi bật của DMLEditor: ► Dễ sử dụng và thao tác.
► Chính xác.
► Hiệu quả.
► Save file DML.
► Load file DML.
► Là phần mềm nguồn mở, dễ nâng cấp và mở rộng ứng dụng.
► Gọn, nhẹ.
► Linh hoạt, có thể chạy trên nhiều HDH khác nhau như Window,
Unix, Linux.
6.3 Các bước cài đặt DMLEditor: Quá trình cài đặt DMLEditor (trên Window cũng như trên Linux) tương đối dễ
dàng, tiến hành qua 3 bước sau:
Bước 1:
Tải về bản DMLEditor.jar và tiến hành giải nén (bằng Winzip hoặc Winrar)
ta sẽ được một thư mục là DMLEditor chứa 2 thư mục con là DMLEditor và
139
META-INF (chú ý là không được thay đổi bất kỳ file hay thư mục nào trong
thư mục gốc).
Bước 2:
Chép thư mục giả nén DMLEditor vào ổ đĩa (chẳng hạn chép vào thư mục
gốc ổ đĩa C:\).
Bước 3:
Từ của sổ DOS, gõ dòng lệnh sau (ở một thư mục bất kỳ, giả sử đang ở thư
mục d:\): D:\> java -classpath c:\DMLEditor DMLEditor.DMLEditor
Chú ý: bạn phải cài jdk phiên bản 1.2 hay mới hơn và thiết lập các biến môi
trường cần thiết theo hướng dẫn ở những phần trên.
6.4 Quá trình thiết kế trên DMLEditor: Giao diện chính của DMLEditor sau khi biên dịch:
Hình 6.1 Giao diện chính của DMLEditor
Các chức năng trên menu File:
140
New: tạo một Simulation mới.
Open: mở một file DML.
Save/Save as: lưu mô hình theo file DML.
Exit: kết thúc chương trình.
Các chức năng trên Tooolbar:
Create new Network: hiển thị cửa sổ tạo mới Network.
Hình 6.2 Tạo id cho mạng
Create new Peer, Create more Peers: hiển thị cửa sổ cấu hình cho
các Host và Router.
Hình 6.3 Giao diện cấu hình cho Host, Router
Remove Peer(s): xóa các đối tượng Host hoặc Router khỏi mạng mà
người dùng đang chọn (chọn đối tượng bằng cách click phải chuột vào
đối tượng hiễn thị trên cữa sổ view).
141
Create new Link: tạo link giữa 2 interface của 2 Host hoặc Router.
Chức năng này chỉ có hiệu lực khi đã tạo Host hoặc Router với interface
tương ứng và phải chọn 2 đối tượng cần tạo liên kết.
Hình 6.4 Giao diện tạo liên kết giữa các Host,Router
Remove Link: xóa link giữa 2 interface được chọn.
Edit Dictionary Peer: định nghĩa các thông số thường dùng cho Host
và Router.
Hình 6.5 Giao diện thiết lập thông số cho Host, Router
Edit Dictionary Interface: định nghĩa các thông số thường dùng cho
Interface.
142
Hình 6.6 Giao diện cấu hình card mạng
Define Route: cấu hình định tuyến cho Host và Router.
Hình 6.7 Giao diện thiết lập bảng định tuyến
List all Routes: danh sách các cấu hình định tuyến cho các interface.
Hình 6.8 Danh sách bảng định tuyến
143
Chương 7
RacewayViewer
7.1 Giới thiệu:
RacewayViewer là một công cụ khác cũng nhằm hổ trợ cho việc thiết kế các
mô hình mạng theo hướng trực quan, sinh động giống như công cụ DMLEditor.
RacewayViewer do tổ chức Renesys Corporation phát triển vào năm 2001
được viết bằng ngôn ngữ Java, hiện phiên bản mới nhất là phiên bản 2.0 đi kèm
với SSFNet 2.0.
7.2 Các tính năng nổi bật của RacewayViewer: ► Hiển thị trực quan cấu trúc mạng theo hướng phân cấp.
► Cho phép chỉnh sữa các thành phần mạng, thay đổi vị trí, kích
thước, màu sắc các node.
► Save file DML.
► Là phần mềm nguồn mở, dễ nâng cấp và mở rộng ứng dụng.
► Gọn, nhẹ.
► Linh hoạt, có thể chạy trên nhiều HDH khác nhau như Window,
Unix, Linux.
7.3 Các bước cài đặt RacewayViewer: RacewayViewer được tích hợp trong phiên bản SSFNet 2.0 có tên file là
raceway.jar, được chứa trong thư mục lib của ssfnet sau khi cài đặt. Quá trình cài
đặt được tiến hành qua 3 bước sau:
Bước 1:
Giải nén file raceway.jar (bằng Winzip hoặc Winrar) ta sẽ được một thư
mục là Raceway chứa 2 thư mục con là com và META-INF cùng với file
144
RacewayViewer.class (chú ý là không được thay đổi bất kỳ file hay thư mục
nào trong thư mục gốc).
Bước 2:
Chép thư mục giả nén raceway vào ổ đĩa bất kỳ (chẳng hạn chép vào thư
mục gốc ổ đĩa C:\).
Bước 3:
Từ của sổ DOS, gõ dòng lệnh sau (ở một thư mục bất kỳ, giả sử đang ở thư
mục d:\): D:\> java RacewayViewer <path file DML> <options>
<path file DML> là tham số đường dẫn của file DML.
<option> có các tham số sau (có thể có hoặc không):
-s my_data.dat
-p my_player
-start <start_time>
-stop <stop_time>
Ví dụ: D:\> java RacewayViewer f:\SimpleLan.dml
Các ví dụ về animation được chứa trong thư mục ssfnet/animation.
Chú ý: bạn phải cài jdk phiên bản 1.2 hay mới hơn và thiết lập các biến môi
trường cần thiết theo hướng dẫn ở những phần trên.
7.4 Quá trình thiết kế trên RacewayViewer: Giao diện chính của RacewayViewer sau khi biên dịch:
145
Hình 7.1 Giao diện chính của RacewayViewer
Các chức năng chính trên menu File và Edit:
Save/Save Copy…0: copy một bản dự phòng với tên file thêm vào
“_0”.
Undo/Redo: trở về các thiết lập trước và sau thiết lập hiện hành.
Select: chọn các thành phần mạng.
Scale/Rotate/Zoom: thay đổi kích thước mô hình mạng.
146
Hình 7.2 Minh họa chức năng zoom toàn bộ network
147
Hình 7.3 Minh họa chức năng scale một sub-network
Commit: lưu lại các thiết lập giống nhau cho các thành phần mạng
khác.
Center: điều chỉnh của sổ nhìn về chính giữa.
148
Chương 8
NetViewer
8.1 Giới thiệu:
NetViewer là cũng là một công cụ hổ trợ cho việc thiết kế các mô hình mạng
theo hướng trực quan, sinh động dựa trên ngôn ngữ DML và trình giả lập
SSFNet.
Tác giả của NetViewer là Jame A. Rome thuộc tổ chức Oak Ridge National
Laboratory, được viết bằng ngôn ngữ Java, sử dung trình dịch jdk phiên bản 1.4
hay hơn.
8.2 Các tính năng nổi bật của NetViewer: ► Dễ sử dụng và thao tác.
► Chính xác.
► Hiệu quả.
► Hiển thị trực quan cấu trúc mạng theo hướng phân cấp.
► Cho phép chỉnh sữa các thành phần mạng.
► Save file DML.
► Load file DML.
► Là phần mềm nguồn mở, dễ nâng cấp và mở rộng ứng dụng.
► Gọn, nhẹ.
► Linh hoạt, có thể chạy trên nhiều HDH khác nhau như Window,
Unix, Linux.
8.3 Các bước cài đặt NetViewer: Cũng giống như RacewayViewer, quá trình cài đặt của NetViewer khá đơn
giản, được tiến hành qua 3 bước sau:
Bước 1:
149
Tải về bản NetViewer từ địa chỉ:
http://www.ornl.gov/~jar/NetViewer/NetViewer.zip
Giải nén file NetViewer.zip (bằng Winzip hoặc Winrar) ta sẽ được một thư
mục là NetViewer chứa các file: NetViewer.jar, NetSchema.dml, protocols.dat
và 2 file demo (chú ý là không được thay đổi bất kỳ file nào trong thư mục
gốc, trừ 2 file demo).
Bước 2:
Chép thư mục giải nén NetViewer vào ổ đĩa bất kỳ (chẳng hạn chép vào thư
mục gốc ổ đĩa C:\).
Bước 3:
Từ của sổ DOS, chuyển vào thư mục gốc của NetViewer bằng lệnh (giả sử
đang ở ổ đĩa D:\):
d:\> c: ←Enter
c:\> cd NetViewer ←Enter
c:\NetViewer> java -Xmx200m -Xms100m -jar NetViewer.jar
Chú ý: bạn phải cài jdk phiên bản 1.4 hay mới hơn và thiết lập các biến môi
trường cần thiết theo hướng dẫn ở những phần trên.
8.4 Quá trình thiết kế trên NetViewer: Giao diện chính của NetViewer sau khi biên dịch:
150
Hình 8.1 Giao diện chính của NetViewer
Giao diện của NetViewer sau khi mở một file DML.
Hình 8.2 Giao diện của NetViewer khi mở một file DML
Các chức năng chính trên menu File, Search, View:
Open DML: mở một file DML.
151
Add file at Node: chèn nội dung một file DML vào vị trí Node đang
được chọn.
Open Template: mở một file DML theo định dạng Template.
Save/ Save as: lưu mô hình thành file DML.
Check Schema: kiểm tra nội dung file Schema dùng trong mô hình.
Find: tìm kiếm một node hay một thuộc tính trong mô hình mạng.
Hình 8.3 Giao diện tìm kiếm node
expand references: trở về trạng thái expand tối thiểu.
undo expand: quay về tình trang expand trước đó.
Look and Feel: các tùy chọn hiển thị giao diện NetViewer, có các
tham số sau: Default, Motif, Java.
Các chức năng chính dưới thanh Tooolbars:
Edit Attribute: chỉnh sữa một thuộc tính đang được chọn.
152
Hình 8.4 Giao diện chỉnh sửa các thuộc tính
Add Child Node/ Add node: thêm node vào mô hình.
153
Hình 8.5 Giao diện thêm Node vào trong mạng
Replace Node: thay thế một node.
Delete: xóa một node khỏi mô hình.
Reload Schema: nạp lại file Schema.
Expand Node: trở về trạng thái expand tối thiểu.
Topology: hiển thị topology mạng trong mô hình.
Hình 8.6 Mô hình mạng sau khi cấu hình
Mô tả các chức năng chính trên giao diện Network Topology:
expand Combobox: tùy chọn expand cho các node, có các tham số
sau: near, far right, on bottom.
Port spacing: điều chỉnh khoảng cách giữa các port trên các node.
Print: xuất mô hình ra máy in dưới dạng file ảnh.
Save Image: lưu mô hình Topology thành file ảnh theo định dạng png.
Save Positions: lưu lại các vị trí x-y của các thành phần đã được thay
đổi, chức năng chỉ có hiệu lực khi người dùng chức năng lưu file DML
trong cữa sổ giao diện chính.
154
Redraw: lưu vị trí mới của các node và vẽ lại mô hình Topology.
Display CIDR: hiển thị tham số CIDR cho các node nếu có.
Expand: mở rộng vùng hiển thị Topology.
Set Area: cho phép người dùng phân bố các giao tiếp OSPF Areas,
chọn Router (có màu xanh lá cây), chon tất cả các giao tiếp trên Router
đó bằng cách nhấn ALT + click từng giao tiếp, nhấn Set Area.
Tất cả các node là Net trong vùng hiển thị khi right-lick sẽ cung cấp các
thông tin về Net đó dưới dạng TreePopUp.
Hình 8.7 Các thành phần mạng dưới dạng TreePopUp
Loại thiết bị và màu sắc:
Net:
Host:
Router, Switch, Hub:
155
PHẦN 4
CÁC CÔNG CỤ HỔ TRỢ NGÔN NGỮ TCL
Chương 9
BRITE
9.1 Thiết kế và cài đặt của BRITE:
BRITE là công cụ phát sinh topo được thiết kế rất uyển chuyển, có nhiều cách
để phát sinh topo. Ngoài ra, BRITE cũng cung cấp nhiều mô hình phát sinh topo:
Hình 9.1 Cấu trúc tổng quát của BRITE
Như trong hình 9.1, BRITE sẽ đọc các tham số để phát sinh topo cho mạng từ
file cấu hình bằng tay hoặc từ giao diện GUI của BRITE (1). BRITE còn có khả
năng hổ trợ việc import các topo được phát sinh bỡi các công cụ phát sinh khác
(2) và BRITE hổ trợ việc export topo mạng cho các công cụ giả lập mạng (3) như
NS, SSF … Trong BRITE, module đóng vai trò quan trọng nhất là BRITE
Analysis Engine gọi tắt là BRIANA. Module BRIANA được đại học Boston phát
156
triển, với mục đích chính là dùng để chuyển đổi cú pháp của các công cụ phát
sinh topo khác sang dạng chuẩn của BRITE.
Hiện tại, BRITE có hai giao diện đầu vào: Giao diện đồ họa dựa trên Java, và
dòng lệnh. Do đó, tất cả các tham số dùng để phát sinh topology cho mạng có thể
được cấu hình từ file hoặc từ giao diện đồ họa. và BRITE chỉ có một giao diện
output: xuất ra các file theo các định dạng khác nhau tùy thuộc vào người dùng.
BRITE chưa hổ trợ việc output trực tiếp sang các môi trường giả lập như NS và
SSF.
9.1.1 Download và cài đặt BRITE
Hiện tại, BRITE cung cấp hai phiên bản của bộ công cụ phát sinh: phiên bản
cài đặt bằng Java và phiên bản cài đặt bằng C++ và có thể download từ :
http://cs-pub.bu.edu/brite/index.htm
Cài đặt và chạy phiên bản Java
Để cài đặt và chạy được phiên bản Java thì cần phải cài bộ JDK1.3 hoặc mới
hơn.
Sau khi download thành công, giải nén file theo cú pháp sau:
$gunzip BRITE_JAVA.tar.gz
$tar xvf BRITE_JAVA.tar
Cấu trúc của thư mục sau khi giải nén:
Hình 9.2 Cấu trúc thư mục của phiên bản Java
Chuyển đến thư mục BRITE_JAVA và tiến hành biên dịch:
$ cd BRITE_JAVA
157
$ make java
Sau khi biên dịch thành công, ta có thể chạy BRITE từ GUI:
$ startGUI.
Hoặc có thể chạy từ màn hình terminal:
$ cd Java
$ java Main>BRITE <config_file.conf> <output_file> <seed_file>
Cài đặt và chạy phiên bản C++
Sau khi đownload thành công, tiến hành giải nén file:
$ gunzip BRITE_CPP.tar.gz
$ tar xvf BRITE_CPP.tar
Cấu trúc thư mục của phiên bản C++:
Hình 9.3 Cấu trúc thư mục phiên bản C++
Chuyển đến thư mục BRITE_CPP và tiến hành biên dịch:
$ cd BRITE_CPP
$ make c++
Sau khi biên dịch thành công, ta có thể chạy BRITE từ GUI:
$ startGUI.
Hoặc có thể chạy từ màn hình terminal:
$ cd C++
$ brite <config_file.conf> <output_file> <seed_file>
9.1.2 Giao diện bằng GUI
158
Giao diện của BRITE được cài đặt bằng ngôn ngữ Java. Tuy nhiên, nó vẫn có
thể được sử dụng cho phần giao diện của phiên bản BRITE cài đặt bằng C++.
Kiểu kiến trúc này làm cho phần giao diện GUI tách biệt với phần cài đặt các chi
tiết về các mô hình phát sinh topo bên trong.Tất cả các giao tiếp giữa phần giao
diện với phần bên trong được thông qua một file cấu hình. Khi người dùng cấu
hình các tham số, giao diện GUI sẽ phát sinh file cấu hình GUI_GEN.conf thích
hợp. Sau đó, BRITE khởi động một tiến trình C++ hoặc Java (tùy theo phiên bản
cài đặt) và chạy công cụ phát sinh topo với file cấu hình vừa được tạo ra. Hình vẽ
9.4 minh họa sự tương tác giữa phần giao diện GUI với phần phát sinh topo:
Hình 9.4 sự tương tác giữa phần giao diện GUI với phần phát sinh topo
9.1.3 Giao diện bằng dòng lệnh
159
Giao tiếp bằng dòng lệnh tức là tạo ra các file cấu hình, do đó nó sẽ gọi trực
tiếp engine phát sinh topo. Sau đó, sử dụng các thông tin được lưu trong seed_file
để phát sinh topo. BRITE sử dụng các số giả ngẫu nhiên (pseudo-random) ở các
điểm khác nhau suốt trong quá trình phát sinh topo. seed_file chứa các thông tin
để khởi tạo bộ phát sinh số giả ngẫu nhiên mỗi khi được yêu cầu. Trong quá trình
phát sinh, BRITE lưu lại một file backup của seed_file là last_seed_file để có thể
phát sinh lại topo.
Để sử dụng giao tiếp bằng dòng lệnh, chuyển đến thư mục BRITE và thực hiện
lệnh :
$brite my_config.conf my_export.brite seed_file (C++)
$ java Main.BRITE my_config.conf my_export.brite seed_file (Java)
9.1.4 Các file cấu hình
Tất cả các file cấu hình của BRITE đều bắt đầu bằng từ khóa BriteConfig. Cú
pháp của một dòng trong file cấu hình:
Key = Value
Với Key Thông số cấu hình (kiểu ký tự)
Value giá trị của các thông số
Mỗi mô hình có một thông số khác nhau.
File cấu hình của mô hình AS Waxman:
160
Hình 9.5 File cấu hình của mô hình AS Waxman
File cấu hình của mô hình phát sinh NLANR:
Hình 9.6 File cấu hình của mô hình phát sinh NLANR
9.1.5 Định dạng output của BRITE
Định dạng output của BRITE gồm ba phần:
+ Thông tin về mô hình: bao gồm số lượng các node, các cạnh, thông tin về
mô hình sử dụng để phát sinh topology.
+ Thông tin về Node: Mỗi node trong file cấu hình output có cú pháp:
161
NodeId xpos ypos indegree outdregee Asid type
Ý nghĩa của các thông số:
Thông số Ý nghĩa
NodeId số ID của node
xpos tạo độ x của node trong mặt phẳng
ypos tạo độ y của node trong mặt phẳng
indegree Bậc trong của node
outdegree Bậc ngoài của node
ASid id của AS mà node đó đang chịu sự quản lý
type Loại node (Router hoặc AS)
Bảng 9.1 Các tham số thiết lập cho Node
+ Thông tin về các cạnh : Mỗi cạnh trong file cấu hình output có cú pháp:
EdgeId from to length delay bandwidth Asfrom Asto type
Ý nghĩa của các thông số:
Thông số Ý nghĩa
EdgeId số id của cạnh
from chỉ số id của node nguồn
to chỉ số id của node đích
Length Chiều dài của cạnh
delay Độ trễ
bandwidth Băng thông của kết nối
ASfrom chỉ số id của AS nguồn
ASto Chỉ số id của AS đích
type loại cạnh
Bảng 9.2 Các tham số thiết lập cho cạnh
162
Hình 9.7 Ví dụ file output của mô hình Flat-RouterWaxman
9.2 Kiến trúc của BRITE: 9.2.1 Qui trình hoạt động của BRITE
Qui trình phát sinh topo cho mạng phụ thuộc chủ yếu vào các mô hình phát
sinh cụ thể. Qui trình đó có thể chia thành bốn giai đoạn:
+ Cách thức đặt các node lên mặt phẳng.
+ Tạo các liên kết giữa các node.
+ Thiết lập các thuộc tính cho các thành phần mạng (như địa chỉ của
node, băng thông …).
+ export topo mạng sang một định dạng file của các công cụ giả lập.
9.2.2 Kiến trúc của BRITE Trong BRITE, một topology được biểu diễn bằng lớp Topology. Lớp
Topology chứa hai thành phần dữ liệu (data member) là Model và Graph. Ngoài
ra, lớp Topology còn chứa một số các hàm và phương thức export sang các công
cụ giả lập mạng.
163
Hình 9.8 Cấu trúc của một Topology trong BRITE
Lớp Model là một lớp trừu tượng và được kế thừa từ các mô hình phát sinh cụ
thể (như trong hình 2: Model1, Model2 …). Một topo được phát sinh bỡi BRITE
có thể dùng một trong các mô hình phát sinh trên nếu cấu trúc của topo là đẳng
cấp (flat), ngược lại, nếu cấu trúc của topo là phân cấp ( hierarchical ) thì sẽ dùng
kết hợp cac mô hình phát sinh khác nhau. Lớp Graph là lớp dùng để tạo ra các
cấu hình chính cho mạng như tạo các node, các liên kết giữa các node, …
9.2.2.1 Lớp Model
Kiến trúc của BRITE chủ yếu tập trung vào lớp Model :
Hình 9.9 Mô hình của lớp Model
Như trong hình, hiện tại BRITE hổ trợ tám mô hình phát sinh topo mạng
khác nhau. Mỗi mô hình đều có một phương thức Generate, phương thức này
trả về lưu đồ (graph ) chứa toàn bộ thông tin của topo vừa được phát sinh. Chi
tiết của các mô hình:
9.2.2.1.1 Mô hình Flat Router-level
164
Mô hình này chứa một lớp RouterModel kế thừa từ lớp Model. Các mô
hình Router-level được hổ trợ trong BRITE là RouterWaxman và
RouterBarabasiAlbert. Hai mô hình này sử dụng chung một số phương thức
từ lớp RouterModel. Cụ thể, cả hai phương thức giống nhau trong việc đặt
node vào trong mặt phẳng, và cấp phát băng thông cho các liên kết. Điểm
khác nhau giữa hai mô hình là cách thức tăng trưởng của mạng và phương
thức tương tác giữa các node.
Cách thức đặt Node
Đặt node trong mặt phẳng tức là lựa chọn vị trí trên mặt phẳng cho node
và khởi tạo các cấu trúc dữ liệu cho Node. Lớp RouterModel có phương
thức PlaceNodes dùng để đặt các node trên mặt phẳng theo một trong hai
cách: ngẫu nhiên (randomly) hoặc heavy-tailed. Theo phương pháp đặt node
ngẫu nhiên, mỗi node được đặt ở những vị trí ngẫu nhiên trên mặt phẳng.
Trong khi đó, theo phương pháp heavy-tailed, BRITE chia mặt phẳng thành
các ô vuông ( kích thước của mặt phẳng và các ô vuông phụ thuộc vào các
tham số đầu vào ) . Mỗi ô vuông được gán một số lượng các node nhất
định. Sau đó, trong mỗi ô vuông các node được đặt ngẫu nhiên.
Hình 9.10 Hai mô hình phân bố node randomly và Heavy-Tailed
Cấp phát băng thông
Sau khi đã hoàn thành việc phát sinh topo, cả hai mô hình Router-level sẽ
gọi phương thức Assignbandwidth của lớp RouterModel. Để cấp phát băng
thông cho các liện kết giữa các node, người dùng có thể cấu hình giá trị băng
thông lớn nhất (BWmax) giá trị băng thông nhỏ nhất (BWmin) từ file cấu
165
hình hay từ giao diện GUI. Khi đó, BRITE sẽ cấp phát băng thông cho các
liên kết dựa trên các tham số sau:
Constant: Băng thông cho tất cả các liên kết bằng Bwmin.
Uniform: Giá trị băng thông được cấp phát cùng một giá trị giống
nhau nằm giữa giá trị Bwmin và Bwmax cho tất cả các liên kết.
Exponential: Giá trị được cấp phát theo hàm số mũ với hệ số Bwmin.
Heavy-tailed: Giá trị được cấp phát theo phương pháp heavy-tailed với
giá trị nhỏ nhất là BWmin và giá trị lớn nhất là Bwmax.
Mô hình RouterWaxman
Các mô hình phát sinh topo khác nhau chủ yếu về cách thức tăng trưởng các
node trong mạng và phương thức liến kết giữa các node. Mô hình Waxman là
mô hình phát sinh topo một cách ngẫu nhiên như đã trình bày ở trên. Khả năng
liên kết giữa các node trong topo được tính theo công thức:
P(u,v) =α e-d/βL
Trong đó:
0 <α , β ≤ 1
d: khoảng cách từ node u đến node v.
L: khoảng cách lớn nhất giữa hai node bất kỳ trong mạng.
Mô hình Router BarabasiAlbert
Mô hình này kế thừa từ lớp Model. Nó được gọi là Router BarabasiAlbert vì
nó được cài đặt theo đề xuất của hai tác giả Barabasi và Albert. Theo mô hình
này, quá trình tăng tưởng của mạng là do các node mới liên tục được thêm vào
mạng chứ không phát sinh ngẫu nhiên như trong mô hình Waxman. Độ ưu tiên
của các liên kết của một node mới với các node đã tồn tại trong mạng phụ
thuộc vào số lượng các node trong mạng. Khi một node i gia nhập vào mạng,
khả năng liên kết của nó với node j (đã tồn tại trong mạng ) được tính theo
công thức:
P( i , j ) = dj / ∑kєVdk
Trong đó:
166
dj: Bậc của node j.
V: Số lượng các node đã tồn tại trong mạng.
∑kєV dk: Tổng số bậc ngoài của tất cả các node trong mạng.
9.2.2.1.2 Mô hình Flat AS-level
Mô hình AS-level cũng tương tự như mô hình Router-level. Điểm khác
nhau giữa hai mô hình này là trong mô hình AS-level AS node có thể chứa
các Router node. Hai mô hình AS-level được cài đặt trong BRITE :
ASWaxman và ASBarabasiAlbert.
9.2.2.1.3 Mô hình phân cấp top-down
Trong mô hình top-down, quá trình phát sinh topo diễn ra như sau: đầu
tiên, BRITE sẽ phát sinh topo ở mức AS-level. Tiếp theo đó, ứng với mỗi
AS node trong AS-level (1), BRITE sẽ tiếp tục phát sinh topo ở mức
Router-level (2). BRITE sử dụng một cơ chế kết nối cạnh (3) để kết nối các
topo ở mức Router-level nếu như các AS node tương ứng có kết nối trực
tiếp với nhau.
Hình 9.11 Mô hình phân cấp top-down
9.2.2.1.4 Mô hình phân cấp Botton-up
167
Mô hình này ngược với mô hình phân cấp top-down, tronng mô hình này
BRITE sẽ phát sinh topo ở mức Router-level trước, sau đó BRITE sẽ phân
các Router node thành các nhóm khác nhau và mỗi nhóm Router node sẽ
chịu sự quản lý của một AS node
9.2.2.1.5 Mô hình Imported File
Một trong những mục tiêu khi thiết kế của BRITE là có thể tích hợp
nhiều công cụ phát sinh topo vào trong BRITE. Do đó, BRITE xây dựng lớp
ImporteđFileModel kế thừa từ lớp Model để phân tích cấu trúc cú pháp của
các file được phát sinh bỡi các công cụ phát sinh topo đã được tích hợp
trong BRITE như GT-ITM, NLANR, Inet . Ví dụ, chúng ta có thể phát sinh
một mô hình mạng phân cấp top-down với topo mạng ở mức AS-level được
import từ công cụ phát sinh NLANR và topo mạng ở mức Router-level theo
mô hình Waxman được import từ công cụ phát sinh GT-ITM. Hiện tại,
BRITE hổ trợ bốn mô hình ImportedFile:
+ Import topo của BRITE.
+ Import topo của GT-ITM.
+ Import topo của NLANR.
+ Import topo của Inet.
Hình 9.12 Mô hình ImportedFile
9.3 Các tham số của BRITE:
Tham số Ý nghĩa Các giá trị
168
HS Kích thước một cạnh của mặt phẳng int ≥ 1
LS Kích thước một cạnh của ô vuông int ≥ 1
N Số node trong mô hình int 1 ≤ N ≤ HS*LS
Model Số ID của mô hình int ≥ 1
alpha Giá trị hàm số mũ của mô hình
Waxman
0 < α ≤ 1, α є R
beta Giá trị hàm số mũ của mô hình
Waxman
0 < β ≤ 1, β є R
Node
Placement
Cách thức đặt node trong mặt phẳng 1: Random, 2: HT
Growth Type Cách thức tăng trưởng của mạng 1: Incremental,
2: Random
BWdist Băng thông của các liên kết int ≥ 1
m Số các liên kết của mỗi node int ≥ 1
MaxBW,
MinBW
Giá trị băng thông lớn nhất và nhỏ nhất
của các liên kết
float > 0
Bảng 9.3 Các tham số của mô hình đẳng cấp
Tham số Ý nghĩa Các giá trị
Edge
Connection
Phương thức kết nối các topo ở mức
router-level
1: Random node
2: Smallest degree
3: Smallest degree-
non-leaf
4: k-Degree
Intra Bwdist Cách thức phân phát băng thông trong
domain
1: Constant
2: Uniform
3: Exponential
169
4: Heavy-tailed
Intra
BWMax/Min
Giá trị băng thông lớn nhất, nhỏ nhất
của các liên kết trong domain
float > 0
Inter Bwdist Cách thức phân phát băng thông giữa
các domain
1: Constant
2: Uniform
3: Exponential
4: Heavy-tailed
Inter
BWMax/Min
Giá trị băng thông lớn nhất, nhỏ nhất
của các liên kết giữa các domain
Float > 0
Bảng 9.4 Các tham số của mô hình phân cấp top-down
Tham số Ý nghĩa Các giá trị
AssignType Cách thức phân bố các router trong AS 1: Constant
2: Uniform
3: Exponential
4: Heavy-tailed
NumAS Số lượng các AS int > 0
Grouping
Method
Cách thức các router được nhóm vào
các AS
1: Random pick
2 : Random Walk
Inter BWdist Giá trị băng thông lớn nhất, nhỏ nhất
của các liên kết giữa các domain
1: Constant
2: Uniform
3: Exponential
4: Heavy-tailed
Inter
BWMax/Min
Giá trị băng thông lớn nhất, nhỏ nhất
của liên kết
float > 0
Bảng 9.5 Các tham số của mô hình phân cấp botton-up
Tham số Ý nghĩa Các giá trị
Format Định dạng file được import 1: BRITE
170
2: GT-ITM
3: NLANR
4: SKITTER
5:GT-ITM Transit-
Stub
6: Inet
File đường dẫn của file
HS, LS Kích thước của các cạnh Như giá trị trong
bảng B.2.1.1
BWdist Cách thức phân phát băng thông 1: Constant
2: Uniform
3: Exponential
4: HT
BWmin,
BWmax
Giá trị băng thông lớn nhất, nhỏ nhất
của các liên kết
Foat > 0
Bảng 9.6 Các tham số của mô hình Imported File
9.4 Các hạn chế của BRITE: BRITE chỉ đơn thuần là tạo ra các topo cho mạng có dây với các node và các
liên kết giữa các node mà vẫn chưa tạo được các ứng dụng cũng như các giao
thức cho mạng. Ngoài ra, BRITE vẫn chưa phát sinh được topo cho mạng không
dây nói chung và đặt biệt là mạng MANET, là những mô hình mạng đang phát
triển mạnh mẽ trong thời gian gần đây. Do đó, để khắc phục những khuyết điểm
hiện tại của BRITE, đề tài cố gắng giải quyết một hạn chế của BRITE hiện tại là
sẽ xây dựng một module dùng cho việc phát sinh topo, kịch bản chuyển động của
các node không dây, kịch bản ứng dụng cho mô hình mạng không dây, giúp cho
BRITE hoàn thiện hơn.
171
Chương 10
NS-2 và NAM
10.1 Cài đặt NS-2 và NAM trên Window:
10.1.1 Download NS-2 và NAM Phiên bản NS-2 trên môi trường Window có thể download tại địa chỉ:
http://www.isi.edu/nsnam/dist.
Để chạy được NS-2 trên Window, cần phải cài đặt thêm Microsoft Visual
Studio phiên bản 5.0 hoặc 6.0. Bản NS-2 ở địa chỉ trên bao gồm các gói:
+ Tcl8.3.2.tar.gz
+ tk8.3.2.tar.gz
+ ns-2.1b9a-win32.exe
+ nam-1.0a11a-win32.exe
+ compile_dll_D_Win2000_1.00.zip
Hình 10.1 Cấu trúc thư mục của NS-2 cài đặt trên Window
10.1.2 Cài đặt NS-2 Trình tự cài đặt trên Window theocác bước:
a. Tạo 1 thư mục và chép toàn bộ các gói vừa download ở trên vào thư mục
vừa tạo đó. Ví dụ: tạo thư mục: “C:\NS_2”.
172
b. Tạo 2 thư mục con trong thư mục vừa tạo ở trên (thư mục NS_2 ) và
dùng các chương trình giải nén như WinZip hoặcWinRar để giải nén các gói
vào các thư mục vừa tạo như sau:
Thư mục con Các gói giải nén
C:\NS_2\DYNAMIC Tcl8.3.2.tar.gz
Tk8.3.2.tar.gz
C:\NS_2\TEMP Compile_dll_D_Win2000_1.00.zip
C:\NS_2\BIN ns-2.1b9a-win32.exe
nam-1.0111a-win32.exe
Bảng 10.1 Cách thức cài đặt NS-2 trong Window
c . Đổi tên các file ns-2.1b9a-win32.exe và nam-1.0a11a-win32.exe thành
ns.exe và nam.exe cho thuận tiện trong việc sử dụng sau này.
d. Tìm tập tin vcvars32.bat trong hệ thống (nằm trong thư mục VC98\Bin
của Microsoft Visual Studio). Sau đó chép tập tin đó vào trong thư mục
“C:\NS_2\TEMP” . Dùng chương trình soạn thảo (như NotePad ) để xóa các
dòng sau:
set VSCommonDir=C:\PROGRA~1\MIAF9D~1\Common .
set MSDevDir=C:\PROGRA~1\MIAF9D~1\Common\msdev98
set MSVCDir=C:\PROGRA~1\MIAF9D~1\VC98
e. Mở chương trình Command Prompt và thực hiện các lệnh sau:
C:\> cd C:\NS_2\TEMP
C:\> NS_2\TEMP>vcvars32.bat
C:\> NS_2\TEMP>compile-dll-win32.bat C:\NS_2
f. Thêm dòng “C:\NS_2\BIN” vào trong biến môi trường PATH của hệ
thống.
10.1.3 Chạy NS-2 và NAM Mở Command Prompt và chuyển đường dẫn đến “C:\NS_2\BIN”. Để chạy ns,
ta gõ lệnh ‘ns <Tclscript>’. Hoặc để chạy ns thông qua trình thông dịch Tcl
173
Wish83.exe, ta gõ lệnh ‘ns <Tclscript>’ với Tclscript là tên của file .tcl ví dụ
như: ns test.tcl. Để chạy chương trình thực thi NAM, ta gõ lệnh ‘nam <namfile>’
với namfile là tên của file .nam, ví dụ: nam test.nam.
10.2 Cài đặt NS-2 và NAM trên Linux: 10.2.1 Download NS-2 và NAM
Có thể download gói ns-allinone (là gói chứa tất cả các file cần thiết cho NS-
2 trên môi trường Linux) tại địa chỉ:
http://www.isi.edu/nsnam/ns/ns-build.html#allinone.
Gói ns-allinone chứa các gói:
+ Tcl release 8.4.5.
+ Tk release 8.4.5.
+ OTcl release 1.9.
+ TclCL release 1.16.
+ Ns release 2.28.
+ Nam release 1.11.
+ Xgraph version 12.1.
+ CWeb version 3.4g.
+ SGB version 1.0.
+ Gt-itm gt-itm and sgb2ns 1.1.
+ Zlib version 1.1.4.
Để cài đặt thành công NS-2 trên Linux và Unix , các gói sau đây là cần thiết
phải có:
+ Tcl release 8.4.5.
+ Tk release 8.4.5.
+ OTcl release 1.8.
+ TclCL release 1.15.
+ Ns release 2.28.
174
Hình 10.2 Cấu trúc thư mục của NS-2 trên Linux
10.2.2 Cài đặt Sau khi download gói ns-allinone thành công , giải nén các gói OTcl và TclCL
và ns vào trong cùng một thư mục. Ví dụ giải nén các gói đó vào trong thư muc
/home/ns_2.
Sau đó, biên dịch và cài đặt các gói theo thứ tự sau:
a. Dùng lệnh cd để chuyển đến thư mục OTcl (cd /home/ns_2/OTcl).
+ Thực hiện lệnh : ./configure.
+ Thực hiện lệnh : ./make.
b . Chuyển đến thư mục TclCL bằng lệnh cd /home/ns_2/TclCL.
+ Thực hiện lệnh : ./configure.
+ Thực hiện lệnh : ./make.
c . Chuyển đến thư mục ns bằng lệnh cd /home/ns_2/ns.
+ Thực hiện lệnh : ./configure.
+ Thực hiện lệnh : ./make.
Hoặc đơn giản hơn, chỉ cần chuyền đến thư mục chứa gói ns-allinone đã giải
nén, thực hiện lệnh ./configure, make để ns-allinone tự động cài đặt.
175
10.2.3 Chạy NS-2 và NAM Khai báo biến môi trường cho ns và nam, thêm dòng /home/ns_2/bin vào
trong biến môi trường PATH như sau: PATH=$PATH:/home/ns_2/bin
Sau đó, để chạy ns hoặc nam, mở màn hình terminal và gõ lệnh:
ns <Tclscript> với <Tclscript> là file với phần mở rộng .tcl.
Ví dụ: ns test.tcl.
Để chạy nam, gõ lệnh:
nam <Namscript> với <Namscript> là file có phần mở rộng .nam.
Ví dụ : nam test.nam. Hoặc chỉ cần gõ nam , khi đó màn hình giao diện của
nam sẽ hiện ra.
176
PHẦN 5
CÁC CÔNG CỤ KHÁC
Chương 11
Otter
11.1 Giới thiệu: Otter là một công cụ giúp trừu tượng hóa các dữ liệu chuyên dụng của mạng
có thể được thể hiện trực quan như Node, Link, Path. Đây là một công cụ rất tốt
cho việc tái hiện các dữ liệu khổng lồ trên mạng Internet như Topology,
Workload, Routing, Domain Name, SNMP Data, … hay thiết kế cấu trúc cây thư
mục cho Website, …
Otter do tổ chức CAIDA-Cooperative Association for Internet Data Analysis
xây dựng và phát triển trên nền Java bắt đầu từ năm 1999.
11.2 Các tính năng nổi bật của Otter: ► Dễ sử dụng và thao tác.
► Hiển thị trực quan cấu trúc mạng với kích thước lớn và phức tạp.
► Cho phép chỉnh sữa các thành phần mạng như zoom, focus,
graph layout, ...
► Save file dưới dạng file ảnh png.
► Load file dữ liệu odf.
► Là phần mềm nguồn mở, dễ nâng cấp và mở rộng ứng dụng.
► Gọn, nhẹ.
► Linh hoạt, có thể chạy trên nhiều HDH khác nhau như Window,
Unix, Linux.
177
11.3 Các bước cài đặt Otter: Trong phần cài đặt, chúng em tiến hành cài đặt trên HDH Linux, quá trình cài
đặt của Otter trên Linux khá đơn giản, tiến hành qua các bước sau:
Bước 1:
Tải về bản Otter (phiên bản hiện tại là Otter 0.9.1) từ địa chỉ:
http://www.caida.org/tools/visualization/otter/source/otter-0.9.1.tar.gz
Bước 2:
Giải nén file otter-0.9.1.tar.gz theo cách sau (giả sử đã lưu file nén vào thư
mục /home trên HDH Linux):
+ Mở cửa sổ Terminal và chuyển vào thư mục /home bằng lệnh cd.
+ Gõ lệnh :
$ gunzip otter-0.9.1.tar.gz
$ tar xvf otter-0.9.1.tar
Lúc này trong thư mục /home có thư mục otter-0.9.1 sau khi được giải nén
(thư mục này cũng có sẵn trên đĩa CD, có thể chép thẳng vào đĩa trên Linux để
chạy chương trình mà không cần phải giải nén).
Bước 3:
Chuyển vào thư mục otter-0.9.1 bằng lệnh:
$ cd otter-0.9.1
Biên dịch và chạy chương trình bằng lệnh:
$ ./otter
Chú ý: bạn phải cài JDK phiên bản 1.3 hay mới hơn trên Linux và thiết lập
các biến môi trường cần thiết theo hướng dẫn ở những phần trên (trên đĩa CD
đã có bản JDK 1.5 for Linux: jdk-1_5_0_01-linux-i586.rpm).
Để cài gói này chỉ cần chép gói vào một thư mục nào đó trên Linux, mở
Terminal, chuyển đến thư mục chứa gói và gõ lệnh:
$ rpm -i jdk-1_5_0_01-linux-i586.rpm
178
Sau khi cài gói, Linux sẽ cài JDK vào thư mục /src/java/jdk-1_5_0_01-
linux-i586 , thiết lập biến môi trường –PATH đến thư mục bin/jdk-1_5_0_01-
linux-i586.
11.4 Quá trình thiết kế trên Otter: Giao diên chính sau khi biên dịch Otter:
Hình 11.1 Giao diện chính của Otter
Giao diên Load file odf:
179
Hình 11.2 Giao diên load file
Giao diên sau khi Load một file odf:
Hình 11.3 Giao diên thiết kế trên Otter
Giới thiệu một số mô hình kết xuất từ chương trình Otter (được lưu dưới dạng
file ảnh png):
180
Hình 11.4 Mô hình kết xuất theo trạng thái Tunnel
Hình 11.5 Mô hình kết xuất theo Domain Name
181
Hình 11.6 Mô hình kết xuất theo cấu trúc cây thư mục của một Website
182
C. XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG
BRITE
PHẦN 6
CƠ SỞ LÝ THUYẾT
183
Chương 12
Lý thuyết cơ bản về mạng không dây
12.1 Giới thiệu:
Thuật ngữ “Mạng Máy Tính” đã và đang trở nên phổ biến và gần gũi với mọi
người. Các công ty, nhà máy, trường học, … đều cần sử dụng mạng máy tính cho
những mục đích và nhu cầu riêng của họ. Mạng máy tính ra đời đã làm cho công
việc trở nên đơn giản và hiệu quả hơn, giúp chúng ta trao đổi thông tin, chia sẽ dữ
liệu một cách rất thuận tiện.
Trong mạng máy tính, có hai kiểu mạng chính là mạng có dây và mạng không
dây. Mạng máy tính có dây đã ra đời từ khá lâu và nó đã chứng minh được vai trò
và công dụng to lớn cho nhu cầu phát triển chung của xã hội. Tuy nhiên, với sự
phát triển mạnh mẽ của khoa học kỹ thuật và công nghệ, thì mạng có dây bắt đầu
bộc lộ những hạn chế của nó. Khi những thiết bị di động: laptop, PDA, ... ra đời
thì mạng có dây đã không thể đáp ứng hết tất cả công dụng của các thiết bị đó.
Do đó, mạng máy tính không dây ra đời như một xu thế tất yếu.
Mạng không dây giúp các thiết bị di động được sử dụng một cách hiệu quả,
thuận tiện hơn vì có những đặc tính nổi bật so với mạng có dây:
+ Hệ thống mạng không dây có khả năng cơ động cao, các thiết bị có thể
di chuyển 1 cách tùy ý mà vẫn có thể truy cập mạng và có thể trao đổi dữ
liệu với nhau.
+ Mạng không dây cho phép dễ dàng bổ sung, thay thế các thiết bị tham
gia trong mạng mà không cần phải cấu hình phức tạp lại toàn bộ topo của
mạng.
+ Mạng không dây tỏ rõ ưu thế của nó trong những hoàn cảnh như: hội
nghị, hội thảo, hội chợ thương mại, truy cập internet ở những nơi công
cộng, … Nó tạo nên một không gian sang trọng, lịch sự, và rất thuận tiện
cho những người tham gia.
184
+ Mạng không dây không phụ thuộc vào vị trí địa hình, nên rất dễ dàng
triển khai lắp đặt.
Tuy mạng không dây còn có những hạn chế về giá cả cũng như về mặt kỹ
thuật: băng thông còn thấp, bán kính phủ sóng còn hạn chế, thiết bị phần cứng
còn đắt, tuổi thọ pin còn thấp, các kết nối chưa thực sự đảm bảo, khả năng bảo
mật chưa cao. Xong, với xu hướng phát triển của khoa học công nghệ, cũng như
sự đầu tư có trọng điểm của các quốc gia, mạng không dây sẽ càng trở nên phổ
biến và sẽ có thể thay thế được mạng có dây.
Căn cứ vào mô hình tổ chức và cách thức hoạt động, ta có thể chia mạng
không dây thành hai loại:
+ Mạng không dây cố định.
+ Mạng không dây không cố định.
12.1.1 Mạng không dây cố định Mạng không dây cố định là loại mạng không dây được phát triển dựa trên
nền của mạng có dây đã có sẵn và loại mạng đang được sử dụng rất phổ biến
hiện nay. Mạng bao gồm một hay nhiều AccessPoint (AP) để mở rộng phạm vi
hoạt động của các máy trạm. AP vừa đóng vai trò là điểm truy cập cho các
máy trạm trong mạng không dây, vừa là trạm chuyển tiếp cho việc liên lạc
giữa hai mạng. Các AP quản lý các máy trạm trong vùng phủ sóng của nó: khi
một máy trạm muốn liên lạc với các máy trạm khác trong mạng thì nó phải
thông qua AP quản lý nó. Khi một máy trạm di chuyển ra khỏi cùng phủ sóng
của một AP thì nó sẽ phải thực hiện cơ chế roaming để tìm kiếm một AP mới.
185
Hình 12.1 Mô hình mạng không dây cố định
12.1.2 Mạng không dây di động Mạng không dây không cố định hay thường gọi là mạng Mobile Ad-hoc
Network (MANET) (ad-hoc có thể hiểu theo nghĩa là không có tổ chức, hay là
mô hình mạng có tính chất động). Mô hình này gồm hai hay nhiều wireless
mobile kết nối với nhau theo mô hình mạng ngang hàng (peer-to-peer) và các
node có vai trò như nhau, và có thể kết nối với nhau một cách tùy ý và không
cần đến cơ sở hạ tầng của các mạng trước đó. Các node trong mạng này còn
đóng vai trò như là các router có khả năng tìm kiếm, duy trì và định tuyến các
gói dữ liệu cho các node nằm trong vùng phát sóng của nó. Các node trong
mạng di chuyển tùy ý nên kiến trúc của mạng luôn luôn thay đổi. Mô hình
mạng Ad hoc được sử dụng nhiều trong những trường hợp khẩn cấp: Hoạt
động tìm kiếm và cứu hộ, hội nghị, hội thảo, …
Hình 12.2 Mô hình mạng không dây di động (AdHoc)
Trong phạm vi của đề tài, chúng tôi tập trung vào việc tìm hiểu sơ lược về mô
hình, các giao thức định tuyến và minh họa cụ thể cách thức hoạt động của một
mạng MANET bằng cách sử dụng công cụ phát sinh topo mạng BRITE có cài đặt
thêm module wireless để tạo ra các kịch bản minh họa.
12.2 Mô hình mạng MANET:
12.2.1 Tổng quan về mạng MANET
186
Mạng MANET đang trở thành thế hệ kế tiếp của mạng máy tính. Mạng
MANET là tập hợp các mobile node trong một mạng có tính chất tạm thời mà
không có sự quản lý của các nhà quản trị. Theo định nghĩa của tổ chức Internet
Engineering Task Force (IETF), mạng MANET là một vùng tự trị (Automomous
System) của các router (đó chính là các node ) được kết nối với nhau bằng liên
kết không dây, các node có thể di chuyển một cách tự do nên kiến trúc của mạng
thay đổi liên tục mà không thể dự đoán trước.
12.2.2 Phân loại mạng MANET theo cách thức định tuyến 12.2.2.1 Mạng MANET định tuyến Single-hop
Mạng MANET định tuyến Single-hop là loại mô hình mạng Ad-hoc đơn
giản nhất, trong đó, tất cả các node đều nằm trong cùng một vùng phủ sóng,
nghĩa là các node có thể kết nối trực tiếp với các node khác mà không cần
thông qua các node trung gian.
Hình 12.3 Định tuyến Single-hop
Trong mô hình này, các node có thể di chuyển tự do nhưng chỉ trong một
phạm vi nhất định đủ để node có thể liên lạc trực tiếp với các node khác trong
mạng.
12.2.2.2 Mạng MANET định tuyến Multi-hop
Đây là mô hình phổ biến nhất trong mạng MANET, mô hình này khác với
mô hình trước là các node có thể kết nối với các node khác trong mạng mà có
thể không cần phải kết nối trực tiếp với nhau. Các node có thể định tuyến đến
node khác thông qua các node trung gian trong mạng. Để mô hình này có thể
187
hoạt động 1 cách hoàn hảo thì cần phải có các giao thức định tuyến phù hợp
với mô hình mạng MANET.
Hình 12.4 Định tuyến multi-hop
12.2.2.3 Mô hình MANET định tuyến Mobile Multi-hop
Mô hình này là sự mở rộng của mô hình thứ hai với một chút khác biệt: mô
hình này tập trung vào các ứng dụng có tính chất thời gian thực như: audio,
video.
12.2.3 Phân loại mạng MANET theo chức năng của Node 12.2.3.1 Mạng MANET đẳng cấp (Flat)
Trong kiến trúc này , tất cả các node có vai trò ngang hàng với nhau ( peer-
to-peer) và các node cũng đóng vai trò như các router dùng để định tuyến các
gói dữ liệu truyền trên mạng . Trong những mạng lớn thì kiến trúc Flat không
tối ưu việc sử dụng tài nguyên băng thông của mạng vì những message điều
khiển (control message) phải truyền trên toàn bộ mạng . Tuy nhiên , nó thích
hợp trong những topo mà các node di chuyển nhiều .
12.2.3.2 Mạng MANET phân cấp (Hierarchical)
Đây là mô hình mạng được sử dụng phổ biến nhất trong mạng MANET.
Trong kiến trúc này, mạng chia làm các domain, trong mỗi domain bao gồm
một hoặc nhiều cluster với mỗi cluster bao gồm một hoặc nhiều node. Do đó,
node trong kiến trúc này chia làm hai loại:
188
Master node là node quản trị một cluster và có nhiệm vụ chuyển dữ
liệu của các node trong cluster đến các node trong các cluster khác và
ngược lại . Nói cách khác, nó có chức năng như một gateway.
Normal node là các node nằm trong cùng một cluster và chỉ có thể kết
nối với các node trong cùng một cluster hoặc kết nối với các node trong
các cluster khác thông qua master node.
Hình 12.5 Mô hình mạng phân cấp
Với các cơ chế trên, mạng sử dụng tài nguyên băng thông mạng hiệu quả
hơn vì các message điều khiển chỉ phải truyền trong một cluster. Tuy nhiên,
việc quản lý tính chuyển động của các node trở nên phức tạp hơn. kiến trúc
mạng phân cấp thích hợp cho các mạng có tính chuyển động thấp.
12.2.3.3 Mạng MANET kết hợp (Aggregate)
Trong kiến trúc mạng này, mạng phân thành các zone và các node được chia
vào trong các zone. Nên mỗi node bao gồm hai mức topo (topology ): topo
mức thấp ( node level ) và topo mức cao (zone level ) (high level topology ).
Ngoài đó, mỗi node còn đặc trưng bỡi hai số ID: node ID và zone ID. Trong
một zone có thể áp dụng kiến trúc đẳng cấp hoặc kiến trúc phân cấp.
189
Hình 12.6 Mô hình mạng Aggregate Ad hoc
190
PHẦN 7
XÂY DỰNG ỨNG DỤNG
Chương 13
Giới thiệu chung
13.1 Giới thiệu: Như đã trình bày trong phần giới thiệu về BRITE, đây là ứng dụng được xây
dựng đầu tiên bỡi các tác giả trong khoa CNTT thuộc trường đại học Boston với
mục đích là tạo ra một công cụ phát sinh topology cho mạng. Đây là ứng dụng
mã nguồn mở và chạy rất ổn định và phát sinh chuẩn xác các mô hình mạng.
Tận dụng những ưu điểm sẵn có của BRITE, chúng tôi quyết định lựa chọn
BRITE để xây dựng ứng dụng cho mình. Mục tiêu chính cần đạt được trong
phạm vi của đề tài này là gắn kết công cụ phát sinh topology với công cụ giả lập
mạng lại với nhau, với công cụ giả lập mạng là NS-2. NS-2 là một môi trường giả
lập mạng rất tốt và đáng tin cậy cho những tìm hiểu, nghiên cứu cũng như hiện
thực các mô hình mạng. Tuy nhiên, NS-2 giao tiếp với người dùng bằng tập lệnh
mà không giao tiếp bằng các giao diện trực quan. Do đó, BRITE trong đề tài này
được phát triển với mục tiêu là tạo ra một giao diện trực quan phục vụ cho việc
tạo ra các topology, các kịch bản chuyển động, các ứng dụng mạng cho công cụ
giả lập mạng NS-2, mà chủ yếu tập trung vào mạng không dây, đặc biệt là mạng
MANET.
13.2 Ngôn ngữ cài đặt và tính tương thích:
191
BRITE được cài đặt bằng ngôn ngữ Java nhằm mục đích là có thể chạy được
trên nhiều hệ điều hành khác nhau mà tiêu biểu là Linux và Window. Trong đề tài
này, chúng tôi chỉ cài đặt BRITE và NS-2 trên môi trường Linux. Phiên bản
Linux chúng tôi thử nghiệm là Fedora Core 2.
Các chương trình được yêu cầu khi sử dụng BRITE:
NS-2 (Network Simulator version 2).
NAM (Network Animator).
Bộ JDK1.3 hoặc mới hơn (Trong chương trình ứng dụng sử dụng bộ
JDK1.5).
Cách thức cài đặtvà sử dụng NS-2 và NAM đã được hướng dẫn trong phần
trước.
13.3 Các mô hình mạng trong ứng dụng: 13.3.1 Mạng MANET
Mô hình mạng MANET trong đề tài này là mô hình mạng Flat Ad-hoc
Network như đã đề cập trong phần trên: là mô hình mạng peer-to-peer, các node
trong mạng có vai trò như nhau, đồng thời đóng vai trò như các router dùng để
định tuyến.
13.3.2 Wired-cum-Wireless Đây là mô hình mạng thường sử dụng trong thực tế, là sự kết hợp của hai
mạng có dây và mạng không dây thông qua Base-Station đóng vai trò như là
gateway dùng để định tuyến giữa hai mạng. Mạng không dây trong mô hình này
là mạng MANET Hierarchical Adhoc Network. Trong đó, mỗi domain được chia
thành các cluster và mỗi cluster bao gồm một hay nhiêu node. Tất cả các gói dữ
liệu định tuyến đến một node sẽ phải thông qua Base-Station của domain của
node đó và Base-Station sẽ có nhiệm vụ định tuyến gói dữ liệu đó đến node đích.
192
Chương 14
Các chức năng chính của ứng dụng
14.1 Giới thiệu các lớp trong module wireless: Trong chương trình ứng dụng BRITE, module wireless có chức năng phát sinh
file script tcl tạo kịch bản giả lập cho mạng không dây. Các file source thêm vào
module này nằm trong 2 gói là GUI và Util.
Bảng mô tả các file thêm vào trong chương trình:
Tên lớp Mô tả chức năng Gói
WirelessPanel Là Panel giao diện chính thực hiện quá trình thiết
kế giả lập như khai báo số wireless node, wired
node, bs-node, kích thước vùng giả lập, thiết lập
cấu hình cho các wireless node, tạo kịch bản
chuyển động, kịch bản ứng dụng, thực hiện lưu
file script tcl và gọi chương trình NS tiến hành giả
lập
Wireless Lưu toàn bộ thông tin về mô hình giả lập trong
module wireless do người dùng xây dựng
WNode Lớp WNode lưu các thông tin về cấu hình cho
từng wireless node
TableNode Lưu giữ các thông tin về các Agent và Application
Option Giao diện cấu hình các thông số cần thiết chung
cho tất cả các wireless node trong mô hình giả lập
ModifyNode Giao diện cấu hình riêng các thông số cho từng
wireless node trong mô hình giả lập
GUI
193
Movement Giao diện thiết lập vị trí khởi tạo và tạo kịch bản
chuyển động cho các wireless node, có thể thiết
lập bằng tay hoặc được phát sinh tự động, ngẫu
nhiên
Application Giao diện tạo kịch bản ứng dụng cho các wireless
và wired node với các tham số là Agent,
Application, start time và end time
AutoRun Thực thi file script tcl bởi NS và NAM
NodeServer Các node dùng để gởi dữ liệu
Node_Client Các node dùng để nhận dữ liệu
Node_Info Thông tin chung về cấu hình của từng node
Table Tạo bảng hổ trợ thiết kế kịch bản ứng dụng
MessageBox Phát sinh các thông báo tương tác với người sử
dụng như các thông báo, cáccảnh báo lổi
Util
Bảng 14.1 Các lớp trong module wireless
14.2 Giao diện chính của module Wirless:
194
Hình 14.1 Giao diện chính module Wireless của BRITE
Giao diện Wireless giúp người sử dụng thiết kế trực quan mô hình giả lập
mạng wireless Ad-hoc có kết hợp với mạng wired bằng ngôn ngữ TCL.
Mô tả các chức năng trên giao diện:
Wireless Node: số wireless node trong mô hình giả lập.
BS Node: số base-station node trong mô hình giả lập, các BS Node đóng
vai trò là các trạm trung gian liên lạc giữa wired và wireless node.
Wired Node: số wired node trong mô hình giả lập.
X-cordinate, Y-cordinate: kích thước của vùng không gian trong mô
hình giả lập, tính bằng mét.
195
Set Option: chức năng thiết lập cấu hình chung cho tất cả các wireless
node.
Set App: chức năng tạo kịch bản ứng dụng cho các wireless node trong
mô hình giả lập.
Set Movement: chức năng tạo kịch bản chuyển động cho các wireless
node trong mô hình giả lập.
Set Event: chức năng tạo kịch bản các sự kiện cho ứng dụng trong mô
hình giả lập (chức năng này chưa được hoàn thiện).
Output Script: vùng hiển thị file cấu hình TCL sau khi nhấn nút Build
Topology .
Build Topology: phát sinh file script TCL, sau khi nhấn nút Build
Topology và thông báo dịch thành công trên hộp thoại status window,
chương trình sẽ gọi trình biên dịch NS_2 để dịch file TCL, và tiến hành
quá trình giả lập.
Hình 14.2 Cửa sổ thông báo trạng thái phát sinh topo
Export Topology: đường dẫn đầy đủ lưu file script TCL.
Hộp thoại Save file TCL (sau khi nhấn nút Browse…) cho phép người sử
dụng chọn thư mục cần lưu file với tên do người dùng nhập vào.
Chú ý: không được nhập phần mở rộng tcl, chương trình sẽ tự động thêm
vào nhằm tránh trường hợp nhập sai phần mở rộng sẽ báo lỗi lúc thực thi
bên NS.
196
Hình 14.3 Giao diện lưu file
14.3 Cấu hình các wireless node: Giao diện Set Options:
197
Hình 14.4 Giao diện cấu hình chung cho các MobileNode
Giao diện Set Options thiết lập cấu hình chung cho tất cả các wireless node
trong mô hình giả lập. Các giá trị ban đầu là các giá trị mặc định, thường được sử
dung trong cấu hình các wireless node của ngôn ngữ tcl. Đối với các BS Node, do
tính chất nhất quán và đúng đắn của ngôn ngữ TCL, việc cấu hình cho các BS
Node được thiết lập mặc định bởi chương trình.
Mô tả các tham số trên giao diện Set Options:
Channel Type: thiết lập kênh truyền thông cho các wireless node.
Phiên bản NS_2 hiện tại chỉ có một giá trị tham số duy nhất là
WirelessChannel.
Propagation: thiết lập mô hình truyền thông (radio-propagation) cho
các wireless node, giá trị: TwoRayGround và Shadowing.
Interface Type: chọn loại card giao tiếp cho các thiết bị wireless, giá
trị: WirelessPhy.
198
Addressing Type: kiểu phân bố địa chỉ cho các wireless node, giá trị:
flat, hierarchical.
Antenna Type: kiểu anten sử dụng cho các wireless node, giá trị:
OmniAntenna.
Interface Queue: Interface Queue Type, giá trị: DropTail/PriQueue,
DropTail, FQ, DRR, SRR, PI, VQ, REM, GK, DynamicLink, Filter.
Routing Protocol: giao thức định tuyến cho các wireless node, giá trị:
DSDV, DSR, AODV, TORA.
MAC Type: Media Access Control, giá trị: 802_11, TDMA,
CSMA/CA.
Link Layer Type: chỉ có một giá trị là LL.
MAC Trace: ON/OFF
Agent Trace: ON/OFF.
Movement Trace: tùy chọn này thiết lập bật hoặc tắt chức năng di
chuyển của các wireless node trong quá trình giả lập, giá trị: ON/OFF.
Router Trace: tùy chọn này cho phép các wireless node có khả năng
tự định tuyến các gói tin hay không, giá trị: ON/OFF.
Max Packet: Max Packet in Interface Queue, là kích thước tối đa
vùng đệm trên card giao tiếp của các wireless node, kiểu Integer.
Antenna Radius: bán kính vùng phủ song của các wireless node, đơn
vị tính là mét, kiểu Integer.
Modify each node: chức năng cấu hinh cho từng wireless node riêng
biệt.
Giao diện Modify each Node:
199
Hình 14.5 Giao diện cấu hình cho từng MobileNode
Giao diện Modify each node cho phép cấu hình từng wireless node riêng biệt.
Các tham số trên giao diện là các tham số có nhiều giá trị.
Để cấu hình cho một wireless node riêng biệt, chọn node trong danh sách
combobox Choose node , thiết lập các tham số thay đổi, sau đó nhấn nút Update
for Node để xác nhận thiết lập.
Kết thúc, nhấn nut Ok.
14.4 Tạo kịch bản chuyển động: Đặc trưng nổi bật nhất của mạng không dây là tính chất động của mạng. Tức là
các node luôn luôn di chuyển. Do đó, để có thể đánh giá, kiểm nghiệm các mô
hình mạng một cách chân thật và chuẩn xác nhất thì nhất thiết phải tạo ra một
giao diện tạo kịch bản chuyển động cho các node trong mạng.
Theo cách thiết kế của NS, các node có thể được chuyển động ngẫu nhiên mỗi
lần thực hiện việc giả lập. Khi kiểm nghiệm các giao thức , ta có thể tiến hành
200
kiểm nghiệm trên nhiều mẫu thử ngẫu nhiên khác nhau . Tuy nhiên, để có thể
đánh giá chính xác và so sánh tính hiệu quả của các thành phần trong mạng như
các giao thức định tuyến, loại địa chỉ MAC , …, chúng ta cần phải thực hiện trên
cùng một mẫu thử hoặc một nhóm các mẫu thử.
Xuất phát từ yêu cầu đó, trong những phiên bản gần đây, NS có thêm một lệnh
cho phép tạo các chuyển động cho node. Tuy nhiên, còn một số hạn chế : không
có giao tiếp trực quan với người dùng, không cho phép xác định các thông số giới
hạn về số lần chuyển động cần tạo, thời gian, tọa độ … , những điều đó làm khó
khăn trong việc tạo kịch bản giả lập.
Xuất phát từ những khó khăn đó, trong module Wireless của BRITE, chúng tôi
xây dựng thêm một giao diện tạo kịch bản chuyển động cho các node. Muốn thiết
lập các thông số chuyển động cho node, ta click vào button “Set Movement” ở
màn hình chính:
201
Hình 14.6 Giao diện tao kịch bản chuyển động cho các MobileNode
Ta có thể tạo kịch bản chuyển động theo hai cách:
14.4.1 Tạo bằng tay Đối với BS node: Các BS node chỉ cần tạo vị trí khởi tạo, không cần tạo các
chuyển động.
Đối với MobileNode: Người dùng cần nhập vào các thông số vị trí khởi tạo,
thời gian, vị trí cần di chuyển đến, tốc độ di chuyển cho từng node.
Đối với một Node, vị trí khởi tạo tức là vị trí của node tại thời điểm thời gian
bằng 0, đây là giá trị duy nhất cho từng node, nếu trong quá trình cấu hình, khi có
một giá trị mà thời gian bằng 0, thì vị trí đó sẽ cập nhật vị trí khởi tạo cũ.
Các giá trị khác với giá trị khởi tạo sẽ căn cứ vào thời gian để tạo kịch bản
chuyển động, nếu hai giá trị có cùng thời gian thì sẽ lấy giá trị tọa độ sau.
202
14.4.2 Tạo ngẫu nhiên Người dùng cần nhập vào một số thông tin: thời điểm lớn nhất, thời điểm nhỏ
nhất để phát sinh kịch bản chuyển động ( hai giá trị này sẽ được ràng buộc bỡi giá
trị Stop Time ) phạm vi tọa độ di chuyển của các node (X1, Y1), (X2, Y2) (hai tọa
độ này bị ràng buộc bỡi hai giá trị MaxX, MaxY), tốc độ lớn nhất, tốc độ nhỏ
nhất, số lần di chuyển của các Node. Sau khi đã thiết lập đầy đủ các thông số,
chương trình sẽ tự động phát sinh ngẫu nhiên kịch bản chuyển động cho mạng.
14.4.3 Ý nghĩa của tạo bằng tay và ngẫu nhiên Cách tạo bằng tay có ưu điểm là nhanh chóng cho những mô hình mạng nhỏ
với ít node di chuyển và thời gian dự định giả lập không lâu. Người dùng có thể
chọn những sự di chuyển với những chủ ý nhằm đánh giá ưu, khuyết điểm của
các mô hình mạng.
Tuy nhiên, đối với những mô hình mạng lớn với hàng trăm node chuyển động
và thời gian giả lập kéo dài, cách tạo bằng tay sẽ không hiệu quả. Đôi khi cách
tạo bằng tay còn bị giới hạn bỡi suy nghĩ chủ quan của người tạo kịch bản làm
ảnh hưởng đến tính ngẫu nhiên của các chuyển động vốn là yếu tố bắt buộc của
các mạng di động. Do đó, chức năng tạo ngẫu nhiên sẽ giải quyết tôt vấn đề này.
14.5 Tạo kịch bản ứng dụng: Một mô hình mạng hoàn chỉnh phải cần có các ứng dụng được thiết lập trên
đó. Ứng dụng cho phép chúng ta có thể đánh giá, kiểm nghiệm các thành phần
mạng như giao thức định tuyến. NS-2 hổ trợ khá nhiều ứng dụng. Tuy nhiên,
trong phạm vi đề tài này, chúng tôi chỉ lựa chọn một số ứng dụng tiêu biểu nhất
để minh họa.
Muốn cấu hình các ứng dụng cho mạng, ta click vào button “Set App” ở màn
hình chính:
203
Hình 14.7 Giao diện thiết lập ứng dụng cho mạng
Trong List là tất cả các Node có trong mạng (được lấy từ màn hình chính) và
cũng là các Node sẽ gởi dữ liệu. Các Node trong Jtable là các Node sẽ nhận dữ
liệu.
Muốn tạo một ứng dụng cho các Node, ta chọn các Node trong List (có thể
chọn nhiều Node cùng lúc) và chọn các Node trong JTable mà muốn kết nối bằng
cách đánh dấu check vào Node muốn tạo kết nối, sau đó chọn agent và ứng dụng
muốn tạo và thiết lập giá trị thời gian khởi động và thời gian kết thúc của ứng
dụng (có sự ràng buộc giữa hai giá trị này).
Các Agent và các ứng dụng hỗ trợ trong Module Wireless của BRITE:
Agent Chú thích
UDP Giao thức UDP
TCP Giao thức TCP
TCP Tahoe Giao thức TCP Tahoe
TCP Reno Giao thức TCP Reno
TCP Newreno Giao thức TCP Newreno
Bảng 14.2 Các agent được cài đặt trong module Wireless
204
Ứng dụng Chú thích
FTP Ứng dụng FTP
Telnet Ứng dụng Telnet
Traffic/Exponential Ứng dụng phát sinh lưu lượng mạng
Traffic/Exponential
Traffic/Pareto Ứng dụng phát sinh lưu lượng mạng
Traffic/Pareto
Traffic/CBR Ứng dụng phát sinh lưu lượng mạng
Traffic/CBR
Bảng 14.3 Các ứng dụng được cài đặt trong module Wireless
GUI: Muốn cấu hình các ứng dụng cho mạng, ta click vào button “Set App” ở
màn hình chính.
14.6 Giải thuật phát sinh số Domain và Cluster: Trong mô hình mạng wired-cum-wireless, địa chỉ của các node được quản lí
theo dạng phân cấp (hierarchical), các wired node được nhóm vào một Domain,
các base-station sẽ tương ứng với một Domain quản lý một số wireless node nhất
định.
Mỗi Domain được chia thành các Cluster. Trong Domain wired, mỗi một
wired node tướng ứng với một Cluster, điều này có nghĩa là trong mỗi Cluster
của Domain wired chỉ có một node duy nhất; trong các Domain wireless chỉ có
một Cluster duy nhất chính là Domain wireless đó.
Hình ảnh phân bố các node trong các Domain và Cluster như sau:
205
Hình 14.8 Mô hình mạng wire-cum-wireless
Địa chỉ của một node trong mô hình được xác định bởi 3 giá trị: Domain,
Cluster, chỉ số node.
Ví dụ:
Địa chỉ của node 0 (2.1.3) có nghĩa node 0 thuộc Domain 2, Cluster 1 và có
chỉ số node là 3.
Giải thuật phân bố các wireless node vào các Domain wireless:
Giả sử trong mô hình mạng wire-cum-wireless có các tham số giá trị sau:
+ Số wired node: K
+ Số BS node: M
+ Số wireless node: N
Theo như trên, số Domain trong mạng sẽ là: M + 1, và được đánh số theo
thứ tự từ Domain wired → Domain BS 0 → Domain BS 1 → … → Domain
BS M.
Các wireless node được phân bố vào các Domain wireless như sau:
Nếu N<=M: mỗi BS sẽ quản lý 1 wireless node (BS 0 → BS (N-1)).
Nếu N>M:
206
Tính : a = N/M, b = N%M
Khi đó, số wireless node trong Domain BS 0 sẽ là a + b , trong các
Domain của các BS còn lại là a.
14.7 Tiến hành giả lập: 14.7.1 Các bước xây dựng kịch bản và biên dịch Quá trình tiến hành giả lập được thực hiện tuần tự theo các bước:
+ Cấu hình cho các Node như phần 14.3.
+ Tạo kịch bản chuyển động cho các MobileNode như phần 14.4.
+ Tạo kịch bản các ứng dụng cho mạng như phần 14.5.
+ Chương trình sẽ tự động phát sinh ngôn ngữ Tcl tương ứng cho mô hình
mạng vừa tạo.
+ BRITE sẽ gọi ứng dụng NS để biên dịch file Tcl vừa tạo và phát sinh file
.nam
+ Ứng dụng NAM sẽ thực thi file .nam để mô phổng mang.
14.7.2 Các ví dụ minh họa 14.7.2.1 Mạng MANET
Kịch bản được tạo ra gồm 5 mobile node được cấu hình như sau:
$ns_ node-config -addressingType hierarchical \
-adhocRouting AODV \
-llType LL \
-macType MAC/802_11 \
-ifqType Queue/DropTail/PriQueue \
-ifqLen 50 \
-antType Antenna/OmniAntenna n \
-propType Propagation/TwoRayGround n \
-phyType Phy/WirelessPhy \
-topologyInstance $topo n \
-channel Channel/WirelessChannel \
207
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-movementTrace ON
Hình 14.9 Mô hình mạng MANET trong NAM ( cảnh 1 )
208
Hình 14.10 Mô hình mạng MANET trong NAM ( cảnh 2 )
14.7.2.2 Mạng Wired-cum-Wireless
Kịch bản được tạo ra gồm 5 mobile node, 2 BS node và 3 wired node.
Đoạn script phát sinh số Domain, số Cluster và số node trong mỗi Cluster
như sau (giải thuật phát sinh đã được trình bày ở phần trên):
AddrParams set domain_num_ 3 ;#number of domains.
lappend cluster_num 2 1 1 ;#so cluster trong moi domain.
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel 1 1 4 3 ;#so node trong moi cluster.
AddrParams set nodes_num_ $eilastlevel
Các BS node được cấu hình như sau:
$ns_ node-config -adhocRouting DSDV \
-llType LL \
-macType Mac/802_11 \
209
-propInstance [new $val(prop)] \
-ifqType Queue/DropTail/PriQueue \
-ifqLen $val(ifqlen) \
-phyType Phy/WirelessPhy \
-antType Antenna/OmniAntenna \
-channel [new $val(chan)] \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-wiredRouting ON \
Hình 14.11 Mô hình mạngWired-cum-Wireless trong NAM
210
TỔNG KẾT
Những mục tiêu đã thực hiện được: + Tìm hiểu về mạng không dây và các vấn đề liên quan như: phân loại mạng,
các giao thức định tuyến.
+ Đề tài đã tìm hiểu và trình bày khá chi tiết cơ sở lý thuyết một số ngôn ngữ
dùng để mô hình hóa mạng như DML, TCP, OTCL. Mà đặc biệt, chúng tôi tập
trung vào ngôn ngữ TCL để xây dựng các kịch bản giả lập cho mạng không dây
trong phần ứng dụng.
+ Tìm hiểu các công cụ phát sinh topology và giả lập mạng đã được hổ trợ
trong ứng dụng BRITE nguyên thủy: SSFNet, BRITE, NS-2, Otter … Và đề tài
đã chú trọng hơn vào BRITE và NS-2, hai công cụ dùng trong phần ứng dụng.
+ Giải quyết được hạn chế trong việc giao tiếp với người dùng của bộ công cụ
NS-2 bằng cách sử dụng BRITE như là phần giao diện giao tiếp với NS-2.
+ Mô hình hóa hoàn chỉnh được một số mô hình mạng không dây trong môi
trường NS-2 như mạng MANET, mạng MANET kết hợp với mạng có dây.
Hướng phát triển trong tương lai: Dù đã cố gắng thực hiện, nhưng BRITE vẫn chưa thực sự hoàn chỉnh cho việc
phát sinh tất cả các mô hình mạng trong thực tế vì những nguyên nhân chủ quan
lẫn khách quan: hạn chế về thời gian hoặc một công cụ giả lập mạng không thể
hổ trợ đồng thời tất cả các mô hình mạng trong thực tế.
Trong tương lai, chúng tôi sẽ phát triển thêm một giao diện cho phép hỗ trợ
việc tạo, thiết kế các topology mạng, cấu hình các tham số mạng bằng cách kéo-
thả giúp cho việc tạo các mô hình mạng trở nên đơn giản hơn.
Hiện nay, phần mạng không dây trong bộ công cụ NS-2 vẫn đang trong giai
đoạn phát triển nên chưa thật sự hoàn chỉnh. Do đó, trong phần mạng không dây,
chúng tôi chỉ có thể phát triển thêm mô hình mạng MobileIP. Các mô hình mạng
211
khác vẫn chưa thể tiến hành giả lập được (hiện tại, NS vẫn chưa hổ trợ), trong
tương lai NS sẽ phát triển thêm module Satellite (vệ tinh) hổ trợ công việc giả lập
cho các vệ tinh.
Một khuyết điểm hiện tại của BRITE là chỉ dừng lại ở việc phát sinh topology
chứ chưa chưa phát sinh được các ứng dụng cho mạng có dây. Đó sẽ là một
hướng phát triển của chúng tôi để BRITE ngày càng hoàn thiện hơn.
212
PHỤ LỤC
Một số ví dụ minh họa ngôn ngữ DML và TCL
Minh họa ngôn ngữ DML (A Switched-Shared-LAN): # -----------------------------------Mô hình Topology--------------------------------#
# C0 ---------|
# C1 ---------|
# C2 ---------| //------------ S0
# C3 ---------| //-------- S1
# C4 ---------|--------R1------R2----------|
# C5 ---------| \\-------- S3
# C6 ---------| \\------------ S4
# C7 ---------|
#-------------------------------------------------------------------------------------------#
Net [
frequency 1000000000
randomstream [ generator MersenneTwister
stream "seed starter"
reproducibility_level timeline
]
#-----------define the two router R1 and R2-------------#
router [ id 1
graph [
ProtocolSession [ name ip use SSF.OS.IP ] ]
interface [ id 0
buffer 192000
_extends .dictionary.1Gbps
]
213
interface [ id 1
buffer 192000
_extends .dictionary.100Mbps
]
route [ dest default interface 0 ]
]
router [ id 2
graph [
ProtocolSession [ name ip use SSF.OS.IP ] ]
interface [ id 0
buffer 192000
_extends .dictionary.1Gbps
]
interface [
idrange [ from 1 to 5 ]
buffer 192000
_extends .dictionary.100Mbps
]
route [ dest default interface 0 ]
]
#---------------------Define a shared LAN of 8 clients-----------------------#
host [ idrange [ from 100 to 107 ]
_extends .dictionary.TCPRenoTestClient
]
#---------------------Define a switched LAN of 4 servers--------------------#
host [ idrange [ from 201 to 205 ]
_extends .dictionary.TCPRenoTestServer
]
#---------------------Define Network Connections----------------------------#
214
link [ attach 1(0) attach 2(0) delay 0.0005 ]
link [attach 1(1)
attach 100(0) attach 101(0) attach 102(0) attach 103(0)
attach 104(0) attach 105(0) attach 106(0) attach 107(0)
]
link [ attach 2(1) attach 201(0) delay 0.000005 ]
link [ attach 2(2) attach 202(0) delay 0.000005 ]
link [ attach 2(3) attach 203(0) delay 0.000005 ]
link [ attach 2(4) attach 204(0) delay 0.000005 ]
link [ attach 2(5) attach 205(0) delay 0.000005 ]
#-------------Define Traffic: A client requests files from 2 servers---------------#
traffic [
pattern [client 100
servers [ nhi_range [ from 201(0) to 202(0) ] port 8080] ]
pattern [client 101
servers [nhi_range [ from 203(0) to 205(0) ] port 8080] ]
pattern [client 102
servers [nhi_range [ from 202(0) to 204(0) ] port 8080] ]
pattern [client 103
servers [ nhi_range [ from 201(0) to 205(0) ] port 8080] ]
pattern [ client 104
servers [nhi_range [ from 201(0) to 205(0) ] port 8080 ] ]
pattern [client 105
servers [ nhi_range [ from 202(0) to 204(0) ] port 8080 ] ]
pattern [client 106
servers [ nhi_range [ from 201(0) to 203(0) ] port 8080 ] ]
pattern [ client 107
servers [ nhi_range [ from 201(0) to 205(0) ] port 8080 ] ]
]
215
# end Traffics
]
# end Net
#---------------------------------------Define dictionary------------------------------------#
dictionary [
# Standard Interfaces
100Mbps [bitrate 100000000 # bits/s
latency 0.00001 # per packet proc. delay, in sec ]
622Mbps [bitrate 622000000 # bits/s
latency 0.0001 # per packet proc. delay, in sec ]
1Gbps [bitrate 1000000000 # bits/s
latency 0.0001 # per packet proc. delay, in sec ]
single_homed_host [
interface [ id 0 _extends .dictionary.100Mbps ] ]
TCPRenoTestClient [
_extends .dictionary.single_homed_host
nhi_route [ dest default interface 0 next_hop 1(1)]
#Define client protocol stack
graph [
ProtocolSession [ name client use SSF.OS.TCP.test.tcpClient
start_time 10.0 # Time to send request (sec)
start_window 0.0 # make start time deterministic
file_size 10000000 # bytes to be downloaded
request_size 100 # client request size in bytes
show_report true # show debugging information
debug true
]
ProtocolSession [ name socket use SSF.OS.Socket.socketMaster ]
ProtocolSession [ name tcp use SSF.OS.TCP.tcpSessionMaster
216
_find .dictionary.tcpinit
]
ProtocolSession [ name ip use SSF.OS.IP ]
] # end of Protocol Graph
] # End of TCPRenoTestClient
TCPRenoTestServer [
_extends .dictionary.single_homed_host
route [ dest default interface 0 ]
graph [
ProtocolSession [ name server use SSF.OS.TCP.test.tcpServer
# Server configuration
port 8080
client_limit 1024
request_size 100 # client request size in bytes
show_report true # show debugging information
debug true
]
ProtocolSession [ name socket use SSF.OS.Socket.socketMaster ]
ProtocolSession [ name tcp use SSF.OS.TCP.tcpSessionMaster
_find .dictionary.tcpinit
]
ProtocolSession [ name ip use SSF.OS.IP ]
] # end of Protocol Graph
] # end of server definition
# TCP Initial parameters
tcpinit [
ISS 0
MSS 1460
SendBufferSize 64
217
RcvWndSize 64
AdvertisedWnd 10000
MaxConWnd 10000
conThresh 10000
fast_recovery true
delayed_ack true
TCP_FAST_INTERVAL 0.500
show_report true
]
] # End of dictionary
Minh họa ngôn ngữ TCL (A wired-cum-wireless Network):
#--------------------Define Options----------------------#
global val
set val(chan) Channel/WirelessChannel ;#channel type
set val(prop) Propagation/TwoRayGround ;#radio-propagation model
set val(ant) Antenna/OmniAntenna ;#Antenna type
set val(add) hierarchical ;#Addressing type
set val(ll) LL ;#Link layer type
set val(ifq) Queue/DropTail/PriQueue ;#Interface queue type
set val(ifqlen) 50 ;#max packet in ifq
set val(netif) Phy/WirelessPhy ;#network interface type
set val(mac) Mac/802_11 ;#MAC type
set val(rp) DSDV ;#ad-hoc routing protocol
set val(nn) 5 ;#number of mobilenodes
set val(bs) 2 ;#number of bsnodes
set val(wn) 2 ;#number of wirenodes
set val(x) 500 ;#X-cordinate
set val(y) 500 ;#Y-cordinate
218
set val(seed) 0.0 ;# seed for random number gen.
#-----Check for boundary parameters and random seed.
if {$val(x) == 0 || $val(y) == 0} {
puts "No X-Y boundary values given for wireless topology\n"
}
if {$val(seed) > 0} {
puts "Seeding Random number generator with $val(seed)\n"
ns-random $val(seed)
}
set ns_ [new Simulator]
#-----Set up for hierarchical routing.
$ns_ node-config -addressType hierarchical
AddrParams set domain_num_ 3 ;#number of domains.
lappend cluster_num 2 1 1 ;#so cluster trong moi domain.
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel 1 1 4 3 ;#so node trong moi cluster.
AddrParams set nodes_num_ $eilastlevel
set tracefd [open /home/wire_wireless.tr w ]
$ns_ trace-all $tracefd
set namtracefd [open /home/wire_wireless.nam w ]
$ns_ namtrace-all-wireless $namtracefd $val(x) $val(y)
#-----Set up topography object.
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
#-----Create God.
create-god [expr $val(nn) + $val(bs)]
#-----Create and configure wired Nodes.
set temp {0.0.0 0.1.0} ;#hierachical addresses for wired domain.
for {set i 0} {$i < $val(wn)} {incr i} {
219
set W($i) [$ns_ node [lindex $temp $i]]
}
#-----Configure for base-station Nodes.
$ns_ node-config -adhocRouting DSDV \
-llType LL \
-macType Mac/802_11 \
-propInstance [new $val(prop)] \
-ifqType Queue/DropTail/PriQueue \
-ifqLen $val(ifqlen) \
-phyType Phy/WirelessPhy \
-antType Antenna/OmniAntenna \
-channel [new $val(chan)] \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-wiredRouting ON \
set temp_1 { 1.0.0 1.0.1 1.0.2 1.0.3 }
set BS_(0) [$ns_ node [ lindex $temp_1 0]]
$BS_(0) random-motion 0
set temp_2 { 2.0.0 2.0.1 2.0.2 }
set BS_(1) [$ns_ node [ lindex $temp_2 0]]
$BS_(1) random-motion 0
#-----Configure for wireless nodes.
$ns_ node-config -wiredRouting OFF
#-----Configure for the wireless nodes that have the same configuration.
$ns_ node-config -adhocRouting DSDV \
-addressingType hierarchical \
-llType LL \
220
-macType Mac/802_11 \
-propType Propagation/TwoRayGround \
-ifqType Queue/DropTail/PriQueue \
-ifqLen 50 \
-phyType Phy/WirelessPhy \
-antType Antenna/OmniAntenna \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-movementTrace ON \
for {set j 0} {$j < 3} {incr j} {
set node_($j) [$ns_ node [lindex $temp_1 [expr $j + 1-0]]]
$node_($j) base-station [AddrParams addr2id [$BS_(0) node-addr]]
$node_($j) random-motion 0 ; #Disable random motion
}
for {set j 3} {$j < 5} {incr j} {
set node_($j) [$ns_ node [lindex $temp_2 [expr $j + 1-3]]]
$node_($j) base-station [AddrParams addr2id [$BS_(1) node-addr]]
$node_($j) random-motion 0 ; #Disable random motion
}
$node_(0) label "W0"
$node_(0) set X_ 374.0
$node_(0) set Y_ 466.0
$node_(0) set Z_ 0.0
$node_(1) label "W1"
$node_(1) set X_ 342.0
$node_(1) set Y_ 454.0
$node_(1) set Z_ 0.0
221
$node_(2) label "W2"
$node_(2) set X_ 309.0
$node_(2) set Y_ 427.0
$node_(2) set Z_ 0.0
$node_(3) label "W3"
$node_(3) set X_ 239.0
$node_(3) set Y_ 244.0
$node_(3) set Z_ 0.0
$node_(4) label "W4"
$node_(4) set X_ 65.0
$node_(4) set Y_ 479.0
$node_(4) set Z_ 0.0
$BS_(0) label "BS0"
$BS_(0) set X_ 178.0
$BS_(0) set Y_ 29.0
$BS_(0) set Z_ 0.0
$BS_(1) label "BS1"
$BS_(1) set X_ 483.0
$BS_(1) set Y_ 47.0
$BS_(1) set Z_ 0.0
$ns_ at 52.18422 "$node_(0) setdest 394.0 284.0 11.0"
$ns_ at 62.195705 "$node_(1) setdest 442.0 480.0 65.0"
$ns_ at 84.75359 "$node_(2) setdest 1.0 382.0 86.0"
$ns_ at 75.980675 "$node_(3) setdest 441.0 445.0 22.0"
$ns_ at 38.467274 "$node_(4) setdest 195.0 32.0 69.0"
$ns_ at 19.1865 "$node_(0) setdest 431.0 193.0 69.0"
$ns_ at 51.863335 "$node_(1) setdest 193.0 145.0 93.0"
$ns_ at 40.75516 "$node_(2) setdest 204.0 459.0 11.0"
222
$ns_ at 92.63895 "$node_(3) setdest 478.0 128.0 69.0"
$ns_ at 45.802128 "$node_(4) setdest 30.0 68.0 56.0"
#-----Create links between wired and bs nodes.
$ns_ duplex-link $W(0) $W(1) 5Mb 2ms DropTail
$ns_ duplex-link-op $W(0) $W(1) orient down
$ns_ duplex-link $W(1) $BS_(0) 5Mb 2ms DropTail
$ns_ duplex-link-op $W(1) $BS_(0) orient down
$ns_ duplex-link $W(1) $BS_(1) 5Mb 2ms DropTail
$ns_ duplex-link-op $W(1) $BS_(1) orient down
#-----Protocol and Application connections between node_(0) and w_(0)
set TCP0_0 [new Agent/TCP]
$TCP0_0 set class_ 2
set sink0_0 [new Agent/TCPSink]
$ns_ attach-agent $node_(0) $TCP0_0
$ns_ attach-agent $W(0) $sink0_0
$ns_ connect $TCP0_0 $sink0_0
set App0_0 [new Application/FTP]
$App0_0 attach-agent $TCP0_0
$ns_ at 10 "$App0_0 start"
$ns_ at 100 "$App0_0 stop"
#-----Protocol and Application connections between node_(3) and
node_(1)
set TCP3_1 [new Agent/TCP]
$TCP3_1 set class_ 2
set sink3_1 [new Agent/TCPSink]
$ns_ attach-agent $node_(3) $TCP3_1
$ns_ attach-agent $node_(1) $sink3_1
$ns_ connect $TCP3_1 $sink3_1
set App3_1 [new Application/FTP]
223
$App3_1 attach-agent $TCP3_1
$ns_ at 10 "$App3_1 start"
$ns_ at 100 "$App3_1 stop"
#-----Define the node size in nam, must adjust it according to your
scenario.
for {set i 0} {$i < $val(nn)} {incr i} {
$ns_ initial_node_pos $node_($i) 40
}
#-----Tell all nodes when the simulation ends.
for {set i 0} {$i<$val(nn)} {incr i} {
$ns_ at 100.0 "$node_($i) reset";
}
for {set i 0} {$i<$val(bs)} {incr i} {
$ns_ at 100.0 "$BS_($i) reset";
}
$ns_ at 100.0 "stop"
$ns_ at 100.01 "puts \"NS EXITING...\"; $ns_ halt"
proc stop {} {
global ns_ tracefd
$ns_ flush-trace
close $tracefd
exec nam /home/wire_wireless.nam &
exit 0
}
#-----Informative headers for CMUTracefile.
puts $tracefd "M 0.0 nn $val(nn) x $val(x) y $val(y) rp \ $val(rp)"
puts $tracefd "M 0.0 prop $val(prop) ant $val(ant)"
puts "Starting Simulation..."
$ns_ run
224
TÀI LIỆU THAM KHẢO
[1] Nguyễn Lãm Cao Nguyên, “Giao thức TCP trong mạng không dây”, bản thảo
luận văn thạc sĩ, ĐHKHTN tpHCM, tháng 12 , năm 2003.
[2] Nguyễn Mậu Tuấn, Trương Lê Minh Ngọc, Cao Đăng Tân, “giáo trình Mạng
máy tính không dây kỹ thuật, thiết kế và cài đặt”, Trung Tâm tin học ĐH KHTN,
2005.
[3] Tarek HelmiAbd El-Nabi,Ali Ahmed, “Modeling and Simulation of a routing
protocol for Ad Hoc networks combining queuing network analysis and ANT
colony algorithms”, Master’s Thesis, April, 2005.
http://hvg.ece.concordia.ca/Publications/Thesis/Tarek-Thesis.pdf
[4] Samba Sesay, Zongkai Yang and Jianhua He, “A Survey on Mobile Ad Hoc
Wireless Network”, Asian Network for Scientific Information, Information
Technology Journal 3 (2), 2004, pp: 168-175 .
http://www.ansinet.org/fulltext/itj/itj32168-175.pdf
[5] Paul Meeneghan and Declan Delaney, “An Introduction to NS, Nam and OTcl
scripting”, National University of Ireland, Technical Report, May, 2004.
http://www.cs.nuim.ie/research/reports/2004/nuim-cs-tr-2004-05.pdf
[6] Hung-ying Tyan, “Design, Realization and evaluation of a component-based
compositional software architecture for network simulation “, PhD Thesis, Ohio
State University, 2002.
http://www.j-sim.org/whitepapers/tyan_thesis.pdf
[7] Charles E.Perkins, Elzabeth B.Royer, Samir R.Das, “Ad-hoc On-Demand
Distance Vertor (AODV) Routing”, RFC 3561, July 2003.
http://www.faqs.org/rfcs/rfc3561.html
[8] Alex Song, “Ad hoc Multihop Wireless Networking”, thesis, June 2001.
http://piconet.sourceforge.net/thesis/progressreport.pdf
[9] Guoyou He, “Destination-Sequenced Distance Vector (DSDV) Protocol”,
technical report, December 2, 2003
225
http://wiki.uni.lu/secan-lab/destination-sequenced-distance-vector2.pdf
[10] David B.Johnson,”Routing in Ad Hoc Networks of Mobile Hosts”, Proceedings
of IEEE Workshop on Mobile Computing Systems and Applicayions, December
1994.
http://www.ics.uci.edu/%7Eatm/adhoc/paper-collection/johnson-routing-adhoc-
94.pdf
[11] Tomasz Imielinski, Hank Korth, ”Mobile Computing”, Kluwer Academic
publisher, 1996.
[12] S.Kannan, John E.Mellor, D.D.Kouvatsos, “Investigation of Distance Vector
Routing for Mobile Ad hoc Networks”, PGNet, 2003.
http://www.cms.livjm.ac.uk/pgnet2003/submissions/Paper-24.pdf
[13] Vinccent D.Park, M. Scott Corson, “A Highly Adaptive Distributed Routing
Algorithm for Mobile Wireless Networks”, IEEE Computer Society, April 1997.
http://lambda.cs.yale.edu/cs425/doc/tora.pdf [14] Theodoros Salonidis, “Scalable Route Caching Methods for Networks with
Many Mobile Nodes”, Master’s Thesis, August 1999.
http://www-ece.rice.edu/~thsalon/publications/MS-thesis.pdf
[15] E. Royer and Chai-Keong Toh, "A Review of Current Routing Protocols
for Ad-Hoc Mobile Wireless Networks", IEEE Personal Communications
Magazine, April 1999, pp. 46-55.
http://www.eecs.harvard.edu/~mdw/course/cs263/fa04/papers/royer-
ieeepc99.pdf
[16] Alberto Medina, Anukool Lakhina, Ibrahim Matta, John Byers,”BRITE:
Universal Topology Generation from a User’s Perspective”, report, April 2001.
http://www.cs.bu.edu/techreports/pdf/2001-003-brite-user-manual.pdf
[17] Kevin Fall, Kannan Varadhan, “The ns Manual”, report, May 2005.
http://www.isi.edu/nsnam/ns/ns-documentation.html
226
[18] Tony Dongliang Feng, Rob Ballantyne, Ljiljana Trajkovic, “Implementation of
BGP in a Network Simulator”, Applied Telecomunacations Symposium, April 18-22,
2004.
http://www.ensc.sfu.ca/~ljilja/papers/ASTC2004.pdf
[19] Andreas Hartl, “DMLEditor”, report manual.
http://www.net.informatik.tu-muenchen.de/software/DMLEditor.pdf
[20] Andy T. Ogielski, “Scalable Modeling & Simulation of Internet Monitoring
Infrastructure“, Leiden Workshop, Sept 12.2000.
http://www.renesys.com/projects/leiden/Ogielski-Leiden2000.pdf
[21] James H. Cowie, “Scalable Simulation Framework API Reference Manual
version 1.0”, Documentation Draft, March 25,1999.
http://www.ssfnet.org/SSFdocs/ssfapiManual.pdf
[22] Sameh Ibraheem, “Network Simulation Using The Scalable Simulation
Framework (SSFNet)”, SSFNet manual, May 2003.
http://www.cs.sunysb.edu/~kostas/mpls/ssfnet_intro.pdf
[23] Dirk Jacob, “The Scalable Simulation Framework and SSF network models”,
seminar
[24] Thông tin về SSFNet http://www.ssfnet.org
[25] Thông tin về NS-2 http://www.isi.edu/nsnam/ns/
[26] Thông tin về BRITE http://www.cs.bu.edu/brite/