2.3.1 Ý tưởng xây dựng bộ mô phỏng mạng
Hoạt động của mạng máy tính có thể xem là một dãy các sự kiện xảy ra liên tiếp, tại các thời điểm xác định, rời rạc; mỗi sự kiện diễn ra trong một khoảng thời gian xác định. Bằng cách sử dụng máy tính điện tử số, chúng ta có thể xây dựng các mô-
đun chương trình phần mềm để mô phỏng các thành phần khác nhau của mạng thực cũng như hành vi của chúng. Các mô-đun này được kết hợp với nhau tạo thành bộ
mô phỏng. Ý tưởng mô phỏng các sự kiện rời rạc là tính toán bằng cách nhanh nhất các thời điểm vật lý xảy ra các sự kiện trong dãy các sự kiện thực tế, không chờ các sự kiện xảy ra theo trình tự thời gian thực. Để thực hiện ý tưởng đó bằng chương trình máy tính, người ta sử dụng một hàng đợi chứa các sự kiện được sắp xếp theo thứ tự thời gian xảy ra. Chương trình mô phỏng sẽ xử lý các sự kiện trong hàng đợi theo thứ tự thời gian tăng dần. Tất nhiên chương trình phải được trang bị “kiến thức” về các loại sự kiện, mỗi sự kiện nhất định sẽ kéo theo các sự kiện gì xảy ra, để
xếp các sự kiện đó vào hàng đợi tại các vị trí xác định. Thí dụ, chương trình mô phỏng biết rằng nếu sự kiện A xảy ra vào thời điểm t, thì sẽ kéo theo sự kiện B xảy ra vào thời điểm t+5, nhờđó khi xử lý sự kiện A, chương trình có thể xếp sự kiện B vào hàng đợi. Bộ mô phỏng hoạt động theo nguyên lý như vậy được gọi là Bộ mô phỏng vận hành theo các sự kiện rời rạc (Discrete Event-Driven Simulator).
Thí dụ về các sự kiện rời rạc
Hình 2.5 minh hoạ một phần của mạng LAN CSMA/CD, với nút A đang gửi một gói số liệu tới nút B.
Hình 2.5 Nút A đang gửi một gói số liệu tới nút B Các sự kiện trên mạng này xảy ra như sau:
Thời điểm Sự kiện
t = 1.0s A gửi gói số liệu tới NIC* của nó, NIC bắt đầu “nghe” sóng mang trên
đường truyền
t = 1.005s NIC của A thấy đường truyền rỗi, bắt đầu truyền gói số liệu t = 1.006s NIC của B bắt đầu nhận gói số liệu
t = 1.01s NIC của B nhận xong, rồi chuyển cho chương trình ứng dụng *Chú thích: NIC (Network Interface Card): vỉ mạng, card mạng.
Các sự kiện rời rạc, liên tiếp, được mô phỏng theo cách sau: Thời điểm Sự kiện
t = 1.0 A xếp gói số liệu vào hàng đợi của mạng LAN
t = 1.01 LAN đưa gói số liệu ra khỏi hàng đợi, kích hoạt B nhận nó
2.3.2 Bộ mô phỏng mạng NS (Network Simulator)
2.3.2.1 Giới thiệu
Các nhà nghiên cứu mạng đã phát triển trên quy mô lớn các bộ mô phỏng định hướng vào các nghiên cứu chuyên biệt của họ. Do tính chất định hướng của các bộ
mô phỏng này nên các kết quả nghiên cứu thường không phản ánh các kinh nghiệm phổ biến. Việc tạo ra một bộ mô phỏng mạng nhiều tính năng, với một cộng đồng người sử dụng đông đảo, thuộc nhiều lĩnh vực chuyên sâu khác nhau về mạng máy
tính sẽ đem lại những lợi ích to lớn, lâu dài. Tính đúng đắn của bộ mô phỏng sẽ được kiểm nghiệm bởi cả cộng đồng, các kết quả và kinh nghiệm nghiên cứu bằng công cụ mô phỏng này dễ dàng được chia sẻ và thừa nhận. Nhận thức rõ vềđiều đó, Bộ Quốc phòng Mỹ đã cấp kinh phí cho dự án VINT (Virtual InterNetwork Testbed) nhằm xây dựng một bộ mô phỏng công cộng, có chứa 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 họ đánh giá được các giao thức trong các điều kiện khác nhau. VINT đã chọn bộ mô phỏng mạng NS, do nhóm nghiên cứu tại Phòng thí nghiệm Quốc gia Lawrence Berkeley, Hoa Kỳ, xây dựng để tiếp tục phát triển. NS được phát triển từ bộ mô phỏng REAL (Realistic and Large) của S. Keshav từ
năm 1989, còn REAL thì bắt nguồn từ bộ mô phỏng NEST (Network Simulation Testbed). Các phiên bản 2.xx của NS ra đời sau năm 1997 và từđó người ta thường gọi bộ mô phỏng là NS-2, nó khác khá nhiều so với các phiên bản 1.xx. Đây là một bộ mô phỏng vận hành theo các sự kiện rời rạc. Người sử dụng có thể lập trình thay
đổi cấu hình và mở rộng mô hình mạng mô phỏng một cách dễ dàng, ngay cả khi chương trình mô phỏng đang chạy. NS được thiết kếđể chạy trên nền hệ điều hành Unix/Linux, sau này người ta cũng xây dựng một số phiên bản NS chạy trong môi trường Windows [22].
Kịch bản mô phỏng cho NS có thể chạy theo vết (trace-driven) hoặc chạy tự động. Ởđây, vết là một luồng các sự kiện chính quan sát được trong một hệ thống
đang hoạt động, thời gian xảy ra các sự kiện được ghi lại, sau đó luồng các sự kiện này được sử dụng để đưa vào làm input cho mô hình mô phỏng NS. 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 đó, nhà nghiên cứu nắm được và 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 năng; bằng cách đó xác định được các tham số và cấu hình tối ưu.
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 [23]. 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ô phỏng NS có các đặc điểm nổi bật chính sau:
• 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 đó.
• 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.
Các thành phần của bộ chương trình mô phỏng NS
Trong bộ chương trình mô phỏng mạng NS, chương trình mô phỏng NS là thành phần chính. Người nghiên cứu có thể lập trình cho nó để định ra hình trạng (tô-pô) mạng tĩnh hoặc động, cũng như tạo ra các luồng lưu lượng theo một số phân bố đã
được định nghĩa trước. Người nghiên cứu có thể lựa chọn chính sách quản lý hàng
đợi tại các nút mạng, cũng như có thể đưa các mô hình sinh lỗi vào các đường truyền. Một số mô hình lưu lượng hay được sử dụng trong nghiên cứu đã được tích hợp trong NS, thí dụ lưu lượng có tốc độ không đổi, lưu lượng với sự đến của các
gói số liệu theo phân bố Poisson. Các ứng dụng phổ biến cũng được tích hợp trong NS, thí dụ web, FTP, telnet, Real-Audio. Các giao thức giao vận như TCP (Tahoe, Reno, New-Reno, Sack, Vegas...), UDP được NS hỗ trợ rất tốt. Rất nhiều thuật toán
định tuyến phổ biến trong các mạng có dây và không dây cũng như các môi trường vật lý khác nhau đã và sẽđược đưa thêm vào bộ mô phỏng.
Thành phần thứ hai là các công cụ hiển thị trực quan NAM và XGRAPH. NAM là công cụ hiển thị, cho phép người nghiên cứu nhìn thấy bằng đồ hoạ hình trạng mạng, gồm các nút mạng, các đường truyền nối các nút ở dạng tĩnh và động; NAM cũng có thể hiển thị hành vi động của hàng đợi tại các nút, cũng như sự chuyển
động của các gói số liệu trên mạng. Đối với mạng di động không dây, các phiên bản mới của NAM có thể hiển thị hình trạng động của mạng, tức là sự chuyển động của các nút mạng trong không gian hai chiều.
XGRAPH [21] là một chương trình ứng dụng chạy trong X-Windows, nó có chức năng vẽđồ thị trong không gian hai chiều, dựa trên dữ liệu nhận vào từ các file dạng text, do chương trình mô phỏng sinh ra. XGRAPH có thể vẽ đồ thị dạng
đường (Line graph), đồ thịđiểm (Scatter plots) và đồ thị cột (Bar charts). Các đồ thị
này có thể được sao lưu (save) dưới dạng các file ảnh thông dụng và sử dụng cho các chương trình ứng dụng khác nhau.
Bộ mô phỏng NS đưa kết quả ra tệp vết (trace file) , chứa thông tin vết của các sự
kiện trong thời gian tiến hành chạy mô phỏng. Chính người nghiên cứu phải xử lý số liệu do bộ mô phỏng sinh ra; công cụ thường được sử dụng là các ngôn ngữ
Awk, Perl, hoặc Tcl. Một số nhà nghiên cứu đã đóng góp các kịch bản mô phỏng hoặc gói phần mềm xử lý kết quả mô phỏng cho cộng đồng người sử dụng NS.
Các chức năng mô phỏng chính của NS [23], [37]
Đố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.
− Vấn đềđịnh tuyến Unicast/Multicast (Unicast/Multicast routing).
− Các giao thức tầng Giao vận: TCP/Tahoe/Reno/New-Reno/Sack/Vegas, 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, Web caching, truyền luồng dữ liệu đa phương tiện.
Đối với mạng không dây:
− Kênh truyền.
− Sự di chuyển của các nút mạng trong không gian hai chiều.
− Mạng LAN không dây (WLAN) 802.11.
− Mobile IP.
− Các thuật toán định tuyến trong mạng không dây đặc biệt (Adhoc networks): DSDV, DSR, AODV, TORA...
− Liên mạng sử dụng vệ tinh (Satellite Networking).
Trong lĩnh vực mạng hỗn hợp có dây và không dây:
− 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.
2.3.2.2 Cấu trúc phần mềm của NS Lập trình tách biệt Lập trình tách biệt
Người ta đã xây dựng NS theo tư tưởng tạo cho nó 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. Để đạt được mục tiêu trên, NS sử
dụng một mô hình lập trình phân tách làm hai phần; ngôn ngữ C++ được sử dụng để
triển khai thực hiện hạt nhân của bộ mô phỏng, gồm các chức năng căn bản nhất của mô phỏng cần chạy ở tốc độ cao. Phần thứ hai của NS sử dụng ngôn ngữ Tcl, thực hiện các nhiệm vụđịnh nghĩa, định cấu hình và điều khiển mô phỏng. Cách tiếp cận lập trình tách biệt này đem lại lợi ích to lớn và lâu dài, nó tách gánh nặng của việc thiết kế, bảo trì, mở rộng và gỡ rối bộ mô phỏng khỏi mục đích của mô phỏng – đó
là để làm các thí nghiệm nghiên cứu, đem đến cho người nghiên cứu bằng mô phỏng một môi trường dễ sử dụng, dễđặt lại cấu hình và lập trình được.
Lập trình hướng đối tượng
Việc phân chia NS làm hai phần được lập trình bằng các ngôn ngữ khác nhau cũng thường thay đổi trong quá trình nghiên cứu các giao thức. Vì vậy, việc tái sử
dụng các mô-đun chương trình có ý nghĩa hết sức quan trọng, điều này dẫn đến sự
lựa chọn lập trình hướng đối tượng. Tuy nhiên, ban đầu khi người ta thiết kế NS, ngôn ngữ Tcl không hỗ trợ việc lập trình hướng đối tượng, vì thế dự án VINT đã chấp nhận sử dụng các mở rộng hướng đối tượng của ngôn ngữ Tcl, được phát triển tại Viện Công nghệ Massachuset (MIT), ngôn ngữ này được gọi là OTcl. Ngoài ra, VINT cũng chấp nhận một sự mở rộng đơn giản của Tcl, đó là các lớp (TclCL). Nhờ đó có thể dễ dàng tạo ra một đối tượng được xây dựng bằng cả hai ngôn ngữ
C++ và OTcl.
2.3.2.3 Lập trình mô phỏng bằng NS
Dưới đây chúng tôi liệt kê các thao tác cơ bản trong việc lập trình mô phỏng bằng NS, mỗi thao tác này nói chung được biểu diễn bằng một dòng lệnh trong chương trình mô phỏng, sử dụng “ngôn ngữ” của NS. Các hướng dẫn chi tiết hơn có thể tra cứu trong tài liệu ns-Manual [23].
1. Các thao tác đối với bộ lập lịch các sự kiện. 2. Tạo ra mạng.
3. Chọn thuật toán định tuyến. 4. Tạo ra kết nối và lưu lượng.
5. Đưa mô-đun sinh lỗi vào đường truyền của mạng mô phỏng. 6. Ghi lại vết của mô phỏng (Tracing) để xử lý và phân tích sau.
CHƯƠNG 3 ĐÁNH GIÁ HIỆU NĂNG MẠNG BẰNG MÔ HÌNH HÀNG ĐỢI
Chương này sử dụng khái niệm mạch ảo (VC - Virtual Circuit), một khái niệm tương đương với khái niệm dịch vụ hướng kết nối. Trên cơ sở đó, xây dựng mô hình hàng đợi cho mạch ảo và đưa bài toán đánh giá hiệu năng của các cơ chế kiểm soát lỗi kiểu đầu cuối - đầu cuối và kiểu theo chặng, cũng nhưđánh giá hiệu năng của cơ chếđiều khiển lưu lượng bằng cửa sổ trượt về các bài toán hàng đợi; các bài toán này có thể giải được nếu áp dụng một số giả thiết thích hợp, làm cho nó trở nên
đơn giản. Mục 3.2 trình bày một kết quả nghiên cứu của chúng tôi, sử dụng lý thuyết Hàng đợi để tính toán định lượng hiệu năng hai cơ chế kiểm soát lỗi đầu cuối - đầu cuối và kiểm soát lỗi theo chặng. Thông qua việc so sánh kết quả, chúng tôi đã rút ra được một số kết luận hữu ích, trong đó có một số kết luận minh chứng cho tính hợp lý của giải pháp Snoop TCP.
3.1 Mô hình mạch ảo
Mạch ảo là khái niệm để chỉđường đi từ nguồn tới đích trong mạng chuyển mạch gói, tương tự khái niệm đường truyền vật lý (Physical circuits) trong các hệ thống
điện thoại. Mạch ảo đảm bảo việc chuyển các gói số liệu từ nguồn tới đích theo
đúng thứ tự mà chúng đã được gửi đi từ nguồn. Như vậy, khái niệm mạch ảo tương
đương với khái niệm dịch vụ hướng kết nối trong các mô hình tham chiếu OSI và TCP/IP. Sử dụng khái niệm mạch ảo làm cho việc phân tích các giao thức hướng kết nối trở nên đơn giản hơn. Hình 3.1a minh hoạ một mạch ảo, đó là một kết nối kiểu đầu cuối - đầu cuối, bên gửi được ký hiệu là S và bên nhận được ký hiệu là D. Kết nối này đi qua các nút mạng 1, 2, 4, 5.
Trong một mạng, tại cùng một thời điểm, có thể có nhiều mạch ảo khác nhau, các mạch ảo có thể cùng đi qua một số nút mạng và đường truyền vật lý, chúng cùng chia sẻ các tài nguyên mạng tại các nút và đường truyền. Tài nguyên mạng nói ở đây có thể là dải thông của đường truyền, bộđệm và bộ xử lý tại các nút mạng v.v.
Hình 3.1 Lập mô hình hàng đợi của một mạch ảo
Tuy nhiên, nếu chúng ta chỉ tập trung nghiên cứu một mạch ảo nào đó, thì chúng ta có thể lập mô hình cho mạch ảo đó như một dãy các hàng đợi nối tiếp nhau, gọi