Gói tin UDP có cấu trúc tương tự cấu trúc gói tin TCP, bao gồm:
− Tiêu đề giả nhằm giúp thực thể IP xây dựng gói tin IP tương ứng để chuyển tiếp trong mạng. Trường Length trong phần tiêu đề giả là độ dài toàn bộ gói số liệu UDP, kể cả phần “tiêu đề giả”.
− Số hiệu cổng nguồn và số hiệu cổng đích (UDP Src Port /UDP Dest port) cho biết địa chỉ nguồn và địa chỉ đích của các thực thể ứng dụng sử dụng giao thức UDP.
− Trường Length trong UDP segment: là độ dài UDP segment, độ dài tối thiểu min = 8.
− Trường Checksum được tính cho toàn bộ gói số liệu UDP. Gói số liệu UDP được tự động loại bỏ một khi bị lỗi; chỉ những gói số liệu UDP không bị lỗi mới được chuyển cho các thực thể ứng dụng.
CHƢƠNG 3: BỘ MÔ PHỎNG MẠNG NS-2 3.1 Giới thiệu 3.1 Giới thiệu
NS (Network Simulator) là một phần mềm mô phỏng mạng, người ta thường gọi là bộ mô phỏng NS, được phát triển bởi dự án VINT (Virtual InterNetwork Testbed) của Bộ Quốc phòng Mỹ. VINT đã chọn bộ mô phỏng NS, do nhóm nghiên cứu ở phòng thí nghiệm quốc gia Lawrence Berkeley, Hoa Kỳ, xây dựng và phát triển. Mục đích của dự án này là xây dựng một bộ mô phỏng công cộng với một tập rất lớn các mô hình để nghiên cứu về mạng, cung cấp cho các nhà nghiên cứu nhiều khả năng mới trong thực nghiệm, giúp các nhà nghiên cứu đánh giá được các giao thức trong các điều kiện khác nhau. NS được phát triển từ bộ mô phỏng REAL (Realistic and Large) của S.Keshav năm 1989. Các phiên bản 2.xx của NS ra đời sau năm 1997, từ đó người ta thường gọi là bộ mô phỏng NS-2. Phiên bản này khác nhiều so với các phiên bản trước (1.xx). Bộ mô phỏng được vận hành theo cơ chế sử dụng các sự kiện rời rạc, có thứ tự. Người sử dụng có thể thay đổi cấu hình và mở rộng mô hình mạng rất dễ dàng bằng cách lập trình thêm vào một số mô-đun chương trình. Lúc đầu, NS chỉ chạy được trên Unix/Linux, các phiên bản sau này mới có bản chạy được trên môi trường Windows. Hiện nay, NS đã có phiên bản 2.33.
Một mô phỏng gồm các đối tượng có thể cấu hình theo ý muốn để có thể đạt được mục đích đã đề ra. Trong NS có hai loại kịch bản mô phỏng, kịch bản chạy theo vết (trace-driven) và kịch bản chạy tự động. Vết ở đây là dãy các sự kiện quan sát được trên mạng thực, thời gian xảy ra các sự kiện được ghi lại, sau khi ghi lại được vết người ta dùng nó để làm đầu vào cho mô hình mô phỏng NS (được nói rõ ở mục 4.5). Trong mô phỏng chạy tự động, chính NS sẽ sinh ra dãy các yêu cầu tài nguyên có tính xác suất. Ưu điểm của mô phỏng chạy tự động so với mô phỏng chạy theo vết là: luồng các sự kiện được sinh ra theo cách nhân tạo, do đó, người nghiên cứu có thể chủ động điều
khiển được quá trình sinh ra luồng sự kiện này. Sau khi đã xây dựng mô hình mô phỏng, người nghiên cứu sẽ cho nó hoạt động lặp đi lặp lại với các tham số và cấu hình hệ thống khác nhau, rồi so sánh các kết quả hiệu suất; bằng cách đó xác định được các tham số và cấu hình tối ưu.
Trong NS, người sử dụng có thể mô phỏng các mạng LAN, mạng không dây, mạng hỗn hợp có dây và không dây, mạng vệ tinh. NS được trang bị các giao thức mạng như TCP và UDP, các nguồn lưu lượng: FTP, Telnet, Web, CBR, VBR, cơ chế quản lý hàng đợi Drop Tail, RED và CBQ, các giải thuật định tuyến AODV, DSR,… Chương này giới thiệu một vài ý tưởng cơ bản về mô phỏng và cách thức hoạt động của bộ mô phỏng NS.
3.2 Các đặc điểm nổi bật và các chức năng mô phỏng chính của NS-2
Hiện nay, cộng đồng sử dụng NS bao gồm trên một nghìn trường đại học, viện nghiên cứu, công ty... với hơn 10 nghìn người sử dụng trên toàn thế giới. Cộng đồng sử dụng NS có một diễn đàn chung để trao đổi các vấn đề có liên quan [8].
Ba chủ đề chính thường được nghiên cứu bằng NS là: lựa chọn một trong một số cơ chế, nghiên cứu tỉ mỉ các hành vi phức tạp và điều tra các tương tác còn chưa biết giữa các giao thức.
Nhìn chung, bộ mô hỏng NS có các đặc điểm nổi bật sau [3]:
– Khả năng trừu tượng hoá: có thể thay đổi độ mịn của mô phỏng cho phù hợp với cả các mô phỏng chi tiết lẫn các mô phỏng mức cao.
– Khả năng phát sinh ra kịch bản: NS có khả năng tạo ra một cách tự động các mẫu lưu lượng, các hình trạng mạng, các sự kiện thay đổi động và phức tạp, kể cả việc mô phỏng các nút mạng và đường truyền bị hỏng.
– Khả năng mô phỏng tương tác với mạng thực: NS có một giao diện đặc biệt, cho phép lưu lượng thực đi qua nút mạng tương tác với bộ mô phỏng chạy trên nút mạng đó. Nghiên cứu và áp dụng khả năng tương tác
với mạng thực của NS là một nội dung quan trọng của bản luận văn này, tôi sẽ trình bày riêng ở Chương 4.
– Khả năng hiển thị trực quan: Công cụ hiển thị NAM giúp chúng ta thấy được hình ảnh hoạt động của mạng bằng trực giác và trợ giúp cho việc gỡ rối giao thức cần nghiên cứu.
– Khả năng mở rộng được: Bộ mô phỏng NS có khả năng mở rộng được dễ dàng khi người nghiên cứu muốn bổ sung các chức năng mới, thử nghiệm các kịch bản khác nhau và nghiên cứu các giao thức mới.
NS là bộ chương trình mô phỏng về mạng khá mạnh và ngày đang được cộng đồng người sử dụng tiếp tục phát triển, hoàn thiện. Nó hỗ trợ hầu hết các loại giao thức trong mạng có dây cũng như không dây với hầu hết các ứng dụng thông dụng và chuyên biệt. Các khả năng mô phỏng chính của NS là [3][8] là:
Đối với mạng có dây:
– Các đường truyền điểm-điểm đơn công, song công, mạng cục bộ LAN
– Các chính sách phục vụ hàng đợi – Các mô hình phát sinh lỗi.
– Định tuyến Unicast/Multicast.
– Các giao thức tầng Giao vận: TCP/Tahoe/Reno…, UDP, điều khiển lưu lượng và điều khiển tắc nghẽn.
– Các giao thức tầng Ứng dụng, truyền dữ liệu đa phương tiện.
Đối với mạng không dây:
– Kênh truyền.
– Mạng LAN không dây (WLAN) 802.11 và các mở rộng của 802.11. – Mobile IP.
– Các thuật toán định tuyến trong mạng không dây đặc biệt (Adhoc network): DSDV, DSR, AODV…
Mạng hỗn hợp:
– Trạm cơ sở (Base station) đóng vai trò gateway giữa mạng có dây và mạng không dây.
– Snoop TCP.
3.3 Kiến trúc của NS-2
NS là bộ mô phỏng hướng sự kiện viết bằng C++, với một trình thông dịch OTcl (Object Oriented Tool Command Language) giao tiếp với người sử dụng. Để giảm thời gian xử lý gói tin và thời gian xử lý sự kiện, bộ lập lịch sự kiện và các đối tượng mạng cơ bản trong đường truyền dữ liệu được viết và dịch bằng C++. Những đối tượng được biên dịch này sẽ được kết nối tới bộ thông dịch OTcl qua trình liên kết OTcl. Trình liên kết này sẽ tạo ra các đối tượng OTcl tương ứng với mỗi đối tượng trong C++. Các hàm và biến trong đối tượng C++ chuyển thành các hàm và biến trong đối tượng OTcl tương ứng. Do đó, việc điều khiển các đối tượng C++ có thể được thực hiện trong ngôn ngữ mô phỏng OTcl. Các lớp trong C++ được tổ chức dưới dạng cây phân cấp, và tạo ra tương ứng trong OTcl. Hai cây phân cấp này có mối quan hệ chặt chẽ với nhau, với một lớp trong cây phân cấp thông dịch OTcl thì cũng có một lớp tương ứng trong cây phân cấp biên dịch. Đỉnh của cây phân cấp OTcl là TclObject. Người sử dụng tạo ra những đối tượng mô phỏng mới thông qua trình thông dịch OTcl, những đối tượng này được thiết lập tự động thông qua các phương thức được định nghĩa trong lớp TclClass. Chúng ta có thể thay đổi các tham số cho các đối tượng mô phỏng thông qua các phương thức được định nghĩa trong lớp TclObject.
NS sử dụng hai ngôn ngữ là vì hai lý do. Thứ nhất, các giao thức mô phỏng yêu cầu một ngôn ngữ lập trình hệ thống có thể làm việc hiệu quả với các thao tác trên byte, các header của gói tin và cài đặt các giải thuật thực hiện trên các tệp dữ liệu lớn. Với nhiệm vụ này thì tốc độ xử lý là quan trọng, còn thời gian thay đổi chương trình và thực hiện mô phỏng ít quan trọng hơn. Thứ hai, phần lớn công việc nghiên cứu về mạng là thay đổi các tham số mô phỏng, thực hiện cấu hình mạng, hoặc thăm dò nhanh một số trường hợp được cho là có khả năng. Trong trường hợp này, thời gian lặp đi lặp lại quan trọng hơn. C++ chạy nhanh hơn nhưng khi thay đổi thì chậm hơn, nên C++ thích hợp cho việc cài đặt chi tiết các giao thức và các đối tượng mạng. OTcl chạy chậm hơn nhưng có thể thay đổi rất nhanh, thích hợp cho việc cấu hình mô phỏng.
Quy trình thực hiện mô phỏng từ góc nhìn ngƣời dùng:
Hình 3.2 Tổng quan về NS từ góc nhìn của người sử dụng
Từ góc nhìn của người dùng, NS là bộ thông dịch script OTcl chứa bộ lập lịch các sự kiện mô phỏng, thư viện đối tượng các thành phần mạng, thư viện mô-đun thiết lập mạng. Để mô phỏng với NS, người nghiên cứu phải viết kịch bản bằng ngôn ngữ OTcl được gọi là chương trình mô phỏng hay kịch bản mô phỏng. Chương trình mô phỏng sẽ khởi tạo bộ lập lịch các sự kiện, thiết lập cấu hình mạng mô phỏng sử dụng các đối tượng mạng và các hàm thiết lập mạng trong thư viện, lập lịch cho các nguồn lưu lượng bắt đầu và kết thúc truyền tin…
Khi mô phỏng kết thúc, NS sinh ra một hay nhiều tệp tin kết quả dưới dạng văn bản chứa chi tiết dữ liệu mô phỏng. Dữ liệu sinh ra trong quá trình thực hiện mô phỏng được sử dụng để phân tích, đánh giá hệ thống mạng, hoặc làm input cho một công cụ hiển thị thông tin mô phỏng như NAM (Network Animator). NAM phân tích dữ liệu và cho thấy thông tin một cách trực quan về thông lượng, các gói bị mất trên mỗi đường truyền, topo mạng dưới dạng đồ họa, ….
Để phân tích, đánh giá được các tham số hiệu suất cần thiết từ các thông tin mà NS kết xuất ra tệp tin vết, người nghiên cứu thường phải dùng thêm một số công cụ dùng để vẽ đồ thị (như XGRAPH, gnuplot,...) và công cụ để tổng hợp các dữ liệu trong các tệp tin vết. Tất nhiên, người nghiên cứu hoàn toàn có thể tự viết lấy các đoạn mã (script) hoặc chương trình để phân tích kết quả theo yêu cầu của mình. Các ngôn ngữ Awk, PERL, hoặc Tcl thường được sử dụng để làm việc này. Nhiều nhà nghiên cứu đã chia sẻ một số kịch bản mô phỏng cũng như kịch bản xử lý kết quả tệp tin vết cho cộng đồng người sử dụng NS. Đây cũng chính là lợi thế cho người mới nghiên cứu mô phỏng mạng sử dụng bộ mô phỏng NS.
Cấu trúc thƣ mục của NS:
Trong thư mục ns-allinone, có thư mục ns-2 chứa tất cả các thành phần cài đặt của bộ mô phỏng (ở dạng C++ hoặc OTcl), các kịch bản kiểm tra (test), và các ví dụ mô phỏng có sẵn. Bên trong thư mục ns-2, thư mục tcl chứa các chương trình mã lệnh OTcl, hầu hết mã nguồn C++ dùng để cài đặt các lớp đối tượng như lịch trình sự kiện, các thành phần mạng.
3.3.1 Bộ lập lịch các sự kiện
NS là một bộ mô phỏng hướng sự kiện. Có bốn bộ lập lịch sự kiện khác nhau sẵn có trong bộ mô phỏng, mỗi bộ lập lịch sử dụng một cấu trúc dữ liệu khác nhau: bộ lập lịch danh sách “List”, bộ lập lịch xếp đống “Heap”, bộ lập lịch xếp lịch “Calendar” và bộ lập lịch thời gian thực “RealTime”. Bộ lập lịch xếp lịch được sử dụng mặc định khi mô phỏng, trong trường hợp sử dụng bộ lập lịch khác cần phải khai báo. Bộ lập lịch thời gian thực cho phép bộ mô phỏng tương tác được với mạng thực. Hiện tại, tính năng tương tác với mạng thực đang trong quá trình phát triển. Bộ lập lịch sự kiện được sử dụng để lập lịch cho các sự kiện, như khi nào thì gói tin sinh ra, được gửi, nhận hay bị loại,… Bộ lập lịch sự kiện cũng được sử dụng để mô phỏng độ trễ của các gói tin.
Hình 3.4 Bộ lập lịch sự kiện
Mỗi sự kiện trong NS là một cấu trúc bản ghi, gồm bốn thành phần như: sự kiện tiếp theo (next_), đối tượng điều khiển sự kiện (handler_), thời
gian sẵn sàng thực hiện sự kiện (time_) và định danh riêng của sự kiện (uid_), được biểu diễn bởi một phần tử trong danh sách các sự kiện.
Hình 3.4 mô tả hoạt động của đối tượng mạng sử dụng bộ lập lịch sự kiện. Khi một đối tượng mạng phát ra một sự kiện, ngay lập tức sự kiện được chèn vào đúng vị trí trong hàng đợi các sự kiện dựa vào thời gian, và sẽ được xử lý tại thời gian đã được lập lịch. Cần lưu ý rằng, đường dữ liệu (data path) giữa các đối tượng mạng khác với đường sự kiện (event path). Thực tế, các gói tin được xử lý từ một đối tượng mạng tới một đối tượng mạng khác bằng cách sử dụng phương thức send(Packet* p) {target_->recv(p)} ở đối tượng gửi, và phương thức nhận recv(Packet*,Handler* h = 0) ở đối tượng nhận.
Phương thức nhận recv sẽ được gọi bởi bên gửi khi gửi dữ liệu.
Hoạt động của các bộ lập lịch sự kiện là chọn một sự kiện tiếp theo sớm nhất để thực hiện, trong quá trình thực hiện một sự kiện có thể tạo ra một hay nhiều sự kiện khác sẽ được thực hiện sau đó, bằng cách đưa chúng vào danh sách các sự kiện. Sau đó quay trở lại chờ thực kiện sự kiện tiếp theo.
3.3.2 Nút mạng (node)
Nút mạng là một đối tượng phức hợp , được hợp thành bởi các đối tượng node entry (đầu vào của nút) và các bộ phân loại C lassifier. Có hai loại nút trong NS là nút đơn hướng (unicast) và nút đa hướng (multicast). Nút đơn hướng chỉ có mô ̣t đối tượng phân loa ̣i đi ̣a chỉ thực hiê ̣n đi ̣nh tuyến đơn hướng (unicast routing) và một đối tượng phân loại cổng (port classifier). Nút đa hướng, ngoài hai đối tượng phân loại địa chỉ và phân loại cổng như trong nút đơn hướng, còn có thêm một đối tượng phân loại gói đa hướng và một đối tượng phân loa ̣i thực hiê ̣n đi ̣nh tuyến multicast. Hình sau minh họa cấu trúc của hai loại node mạng trong NS.
Hình 3.5 Cấu trúc của node mạng trong NS
3.3.3 Đƣờng truyền (link)
Đường truyền là một đối tượng phức hợp trong NS, dùng để kết nối hai nút với nhau. Trong NS, chúng ta có thể tạo ra các đường truyền song công (duplex-link) và đơn công (simplex-link). Thực chất đường truyền song công là sự kết hợp của hai đường truyền đơn công ngược hướng.
Hình 3.6 Đường truyền
Khi một nút muốn truyền một gói tin qua đường truyền, nó đưa gói tin đến đối tượng hàng đợi của đường truyền - Queue. Các gói tin ra khỏi đối tượng hàng đợi sẽ qua đối tượng độ trễ - Delay để mô phỏng độ trễ của đường truyền. Đối tượng hàng đợi gửi gói tin đến một agent/null để mô phỏng sự mất gói tin trên đường truyền. Đối tượng TTL (Time To Live) tính toán thời gian sống của mỗi gói tin nhận được và cập nhật trường TTL của gói tin.
3.3.4 Gói tin (packet)
Gói tin là đơn vị cơ sở để trao đổi giữa các đối tượng trong hệ thống mô phỏng. Một gói tin bao gồm một ngăn xếp các header và một không gian lưu dữ liệu.
Hình 3.7 Cấu trúc gói tin
Mỗi header trong ngăn xếp tương ứng với một lớp cụ thể. Thêm vào đó, một header chung cho tất cả các tầng, một trace header chứa thông tin hỗ trợ việc dò vết (trace) của người nghiên cứu. Người sử dụng có thể thêm vào các