Hiệu năng mạng là một vấn đề phức tạp do các yếu tố có thể tổng hợp đưa ra nhằm đánh giá vấn đề hiệu năng chưa thực sự rõ ràng. Đã có nhiều khái niệm, tham số được đưa ra nhằm minh chứng cho bản chất của vấn đề hiệu năng, lý giải cho việc truyền thông tin hiệu quả hay kém hiệu quả giữa các hệ thống trong mạng.
Trang 1CHƯƠNG 1 TỔNG QUAN ĐÁNH GIÁ HIỆU NĂNG MẠNG
1.1.Khái niệm hiệu năng mạng
Hiệu năng mạng là một vấn đề phức tạp do các yếu tố có thể tổng hợp đưa
ra nhằm đánh giá vấn đề hiệu năng chưa thực sự rõ ràng Đã có nhiều khái niệm, tham số được đưa ra nhằm minh chứng cho bản chất của vấn đề hiệu năng, lý giải cho việc truyền thông tin hiệu quả hay kém hiệu quả giữa các hệ thống trong mạng Tuy nhiên, trong thực tế rất cần có những khái niệm bản chất và sát thực tiễn với mục tiêu đánh giá được toàn bộ vấn đề hiệu năng bao gồm cả các yếu tố
đo đạc, theo dõi, điều khiển đều được tính đến Có thể sơ lược khái niệm hiệu
năng mạng như sau: Hiệu năng mạng là hiệu quả và năng lực hoạt động của hệ thống mạng Như vậy, việc đánh giá hiệu năng mạng chính là tính toán và xác
định hiệu quả, năng lực thực sự của hệ thống mạng trong các điều kiện khác nhau
Các điều kiện được sử dụng trong đánh giá hiệu năng là rất quan trọng, chúng ảnh hưởng trực tiếp tới các kết quả thu được Trong các điều kiện ảnh hưởng tới quá trình đánh giá hiệu năng thì kịch bản mô tả là yếu tố then chốt quyết định giá trị hiệu năng tại điểm cần đo Trong kịch bản cần xác định các tham số đầu vào rõ ràng như các nút tham gia hệ thống, thiết bị kết nối, tác nhân tham gia, giao thức hoạt động, ứng dụng triển khai, thời gian thực hiện, và rất nhiều yếu tố khác kết hợp tạo ra một kịch bản hoàn thiện
1.2.Các phương pháp đánh giá hiệu năng
1.2.1 Phương pháp toán học
Việc sử dụng các phương pháp toán trong tính toán hiệu năng mạng đã được thực hiện từ lâu, trong đó các công cụ toán học đã được sử dụng rất linh hoạt và đa dạng như xác suất thống kê, đồ thị, quy hoạch, luồng, để giải quyết nhiều vấn đề trong hiệu năng Ưu điểm chính của phương pháp toán học là có
Trang 2thể xác định các ngưỡng giá trị của hệ thống qua việc xác định mối tương quan giữa các yếu tố trước khi tồn tại hệ thống Nhưng khi áp dụng trong thực tế, việc
mô tả đầy đủ các yếu tố đầu vào cho bài toán là cực kỳ khó khăn do vậy kết quả của phương pháp này còn nhiều hạn chế
1.2.2 Phương pháp đo thực tế
Sau khi hệ thống mạng đã được xây dựng, đây là một hệ thống tổng thể kết nối của các thiết bị với những công nghệ khác nhau do vậy việc đo đạc để đưa ra kết quả từ mô hình thật là rất quan trọng Khi thực hiện đo thực tế, người
đo phải dựng ra được các kịch bản cần đo từ đó tạo ra những điều kiện giống với kịch bản thực tế và sử dụng các công cụ đo như phần mềm, thiết bị đo để thu nhận các kết quả thực tế từ hoạt động của hệ thống theo kịch bản Thông thường với phương pháp đo thực tế cho chúng ta kết quả với độ chính xác rất cao, tuy nhiên việc đầu tư quá lớn trước khi biết kết quả hoạt động nhiều khi gây ra sự lãng phí vì vậy giải pháp đo thực tế chỉ được sử dụng để giám sát hoạt động mạng Để đo được giá trị hiệu năng, quan trọng nhất là lấy thông tin chính xác về
hệ thống Hiện nay phổ biến có 3 phương pháp lấy thông tin sau:
• Truy vấn các nút mạng để lấy trực tiếp thông tin đang lưu trữ
• Theo dõi luồng thông tin thực tế trên hệ thống
• Xây dựng kịch bản với dữ liệu thử nghiệm để đo hệ thống
Trang 3phải rất chuẩn xác Trong khuôn khổ môn học, chúng ta sẽ đi sâu vào tìm hiểu và
áp dụng phương pháp mô phỏng vào đánh giá hiệu năng mạng Có hai phương pháp chính được sử dụng trong mô phỏng hệ thống mạng là mô phỏng thời gian thực và mô phỏng rời rạc Để mô phỏng theo thời gian thực là rất khó do vậy phương pháp phổ biến hiện nay là mô phỏng rời rạc tức là các sự kiện được xác định rõ ràng và có thời điểm mô tả trên trục thời gian
1.3.Các tham số đánh giá hiệu năng
Để lượng hóa vấn đề hiệu năng mạng, cần thiết phải có bộ tham số tiêu biểu đặc trưng cho vấn đề này Trong đó, 5 tham số sau đây được sử dụng như những khái niệm điển hình mà nhìn vào chúng có thể cho thấy kết quả của đánh giá hiệu năng mạng
1.3.1 Tính sẵn sàng (Availability)
Tính sẵn sàng là thước đo đầu tiên khi xác định và đánh giá hiện trạng mạng
có khả năng phục vụ, đáp ứng yêu cầu hay không Tham số này cho phép chỉ ra luồng thông tin có đang được chuyển tiếp qua hệ thống mạng hay bị tắc nghẽn cần phải xử lý, các dịch vụ mạng đang được cung cấp có sẵn sàng cho việc trả lời các yêu cầu đưa ra Vấn đề liên thông giữa các hệ thống trong mạng cũng được đề cập trong tính sẵn sàng
Một trong các công cụ, phương pháp đơn giản thường được sử dụng khi kiểm tra tính sẵn sàng của hệ thống mạng là sử dụng chương trình ping Chương trình khi thực hiện sẽ gửi các gói tin dưới giao thức ICMP tới phía máy cần kiểm tra và đợi kết quả trả lời, nếu có kết quả trả lời chúng ta có thể xác định được tính sẵn sàng của hệ thống đích
Trang 4Hình 1.1 Kiểm tra tính sẵn sàng với chương trình ping
Trong ví dụ trên, yêu cầu gửi đi đã có kết quả đáp ứng, trong một số trường hợp và tình huống thực tế việc mất gói tin thường xuyên xảy ra, điều nay có thể
do nhiều nguyên nhân khác nhau, trong đó có một số nguyên nhân điển hình sau:
- Xung đột xảy ra giữa các phân đoạn mạng: Các giao thức điều khiển
truy cập đóng vai trò quan trọng trong quá trình kiểm soát xung đột, việc lựa chọn giao thức phù hợp ảnh hưởng lớn tới xử lý các gói tin khi hệ thống gặp vấn đề
- Các gói tin bị hủy bởi các thiết bị mạng: Mỗi thiết bị đều có những bộ
đệm nhằm lưu trữ những gói tin chưa kịp xử lý Để kiểm soát bộ đệm, thông thường các thiết bị sẽ sử dụng một số giải thuật nhằm duy trì trật tự của bộ đệm như giải thuật DropTail, RED, DDR, trong các giải thuật này luôn tồn tại phương án hủy gói tin khi thỏa mãn điều kiện hủy nhằm duy trì hoạt động tốt nhất cho thiết bị, tránh tắc nghẽn
và quá thời gian xử lý
Trang 5Hình 1.2 Hiện tượng hủy gói tin trên bộ đệm của thiết bị
1.3.2 Thời gian đáp ứng (Response time)
Khi yêu cầu được gửi tới, sẽ có một khoảng thời gian dành cho việc xử lý trước khi trả về kết quả, khoảng thời gian này được gọi là thời gian đáp ứng, bao gồm thời gian đi, thời gian xử lý yêu cầu và thời gian về Đây là tham số rất quan trọng ảnh hưởng tới quá trình đánh giá khả năng giải quyết vấn đề khi có yêu cầu
và hạ tầng truyền thông Thời gian đáp ứng chậm thường do khả năng giải quyết vấn đề của ứng dụng, hạn chế trong truyền và nhận thông tin trên giao thức và hạ tầng truyền thông tin Có thể chỉ ra một số các yếu tố ảnh hưởng trực tiếp tới thời gian đáp ứng như sau:
• Quá tải trong các phân đoạn mạng
• Các lỗi xuất hiện trên mạng
• Khiếm khuyết khi mở rộng mạng
• Xử lý các thông tin quảng bá trên mạng chưa tốt
• Thiết bị mạng kém chất lượng
• Quá tải trên các nút mạng
Trang 6Trong hình 1.1 khi sử dụng chương trình ping cho chúng ta kết quả như sau:
64 bytes from 192.168.1.100: icmp_seq=0 ttl=255 time=0.712 ms
Thời gian đáp ứng được đo bằng milli giây (ms) Thông thường với các kết nối mạng LAN thì thời gian đáp ứng nhỏ hơn 1 hoặc 2 milli giây, với các kết nối mạng WAN thời gian đáp ứng có thể lên tới 200 hoặc 300 milli giây là chấp nhận được, giá trị cụ thể tùy thuộc vào tốc độ đường truyền giữa các hệ thống
Trong minh họa trên, thời gian đáp ứng trung bình khi sử dụng chương trình ping đã được xác định
round-trip min/avg/max/stddev =
2.940/2.992/3.133/0.060 ms
1.3.3 Khả năng sử dụng mạng (Network utilization)
Khi hệ thống mạng hoạt động, việc đánh giá khả năng sử dụng mạng là yếu tố quan trọng khi cần đánh giá hiệu năng mạng Hệ thống mạng có thể hoạt động ở trạng thái bình thường trong đa số thời gian, tuy nhiên trong thực tế thì hệ thống có thể chưa hoạt động hết công suất và khả năng, như vậy phần dư thừa khi xây dựng mạng chưa tính đến cũng là yếu tố giảm đi hiệu năng của hệ thống
Để tính tham số khả năng sử dụng mạng, thông thường công thức chính được sử dụng là phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng Trong rất nhiều tình huống, có những thời điểm hệ thống sử dụng 100% công suất nhưng có những thời điểm là về 0% cho trạng thái không có yêu cầu Để tăng tính chính xác khi xác định khả năng sử dụng mạng, việc tính toán lưu
lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đã được
sử dụng Giá trị cụ thể khi tính toán còn phụ thuộc nhiều vào phương thức truyền trên các kết nối được sử dụng tại các giao diện mạng Ví dụ ở chế độ truyền bán
Trang 7song công (Half duplex) chỉ có dữ liệu một chiều tại một thời điểm và như vậy việc tính khả năng sử dụng mạng liên quan tới tỷ lệ tổng lượng vào ra trong suốt thời gian trên khả năng của thiết bị tại thời điểm đo Công thức tính khả năng sử dụng mạng như sau:
TP (Throughput): Thông lượng cho phép của kết nối
ST (Sample Time): Thời gian hoạt động
Ví dụ: Với thông lượng cho phép 10MB ở chế độ kết nối bán song công, thực hiện đo trong thời gian 5 giây, lượng dữ liệu gửi đi là 700,000 bytes và dữ liệu nhận về là 175,000 bytes, chúng ta có
mạng mà xác định giá trị thông lượng mạng tại 2 điểm cần đo
Trang 81.3.4 Thông lượng mạng (Network throughput)
Về bản chất, khả năng sử dụng mạng chính là tỉ lệ làm việc thực tế của hệ thống còn thông lượng mạng là tổng lượng dữ liệu chuyển tiếp qua các nút cần
đo trong một thời điểm xác định
Người quản trị hệ thống mạng có thể xác định thông lượng mạng bằng phương pháp tìm nút cổ chai giữa 2 điểm cần đo Đồng thời, trong một số tình huống nhiều người sẽ khẳng định thông lượng của hai điểm sẽ được xác định bằng giá trị băng thông (Bandwidth) tại 2 điểm đó Những điểm nêu trên là hoàn toàn không chính xác bởi 2 lý do chính sau đây:
- Giá trị băng thông không phụ thuộc vào thời gian đo và đây là khái
niệm khác hoàn toàn với thông lượng
- Thông lượng thực tế phụ thuộc rất nhiều vào tổng thể kết nối, thiết bị
sử dụng, ứng dụng hoạt động, dịch vụ cung cấp của hệ thống tại thời điểm cần đo
Hình 1.3 Độ phức tạp khi xác định thông lượng giữa client và server
1.3.5 Khả năng của băng thông mạng (Network bandwidth capacity)Khả năng của băng thông là một trong những yếu tố để xác định thông lượng mạng trong thời điểm cần đo Tổng dung lượng băng thông có khả năng giữa hai nút mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều này là khá hiển
Trang 9nhiên, khi ta kết nối mạng 100BaseTX thì đương nhiên luôn nhanh hơn với kết nối T1 Tuy nhiên việc xác định khẳ năng của băng thông giữa 2 điểm cần đo thường rất phức tạp do tổng thể kết nối của hệ thống tác động (mô tả tại hình 1.3), do vậy đòi hỏi phải có kỹ thuật cụ thể trong việc xác định giá trị lớn nhất trong khả năng của băng thông mạng khi hoạt động Có 2 kỹ thuật chính được sử dụng để xác định khả năng băng thông đó là kỹ thuật packet pair/packet train và
kỹ thuật thống kê gói tin
Hình 1.4 Minh họa kỹ thuật packet pair/packet train
1.4.Phần mềm đánh giá hiệu năng
1.4.1 Ns2
Đây là phần mềm mô phỏng mạng được phát triển từ đại học California Berkeley nhằm thay thế cho phương pháp đo đạc trên hệ thống thực Ns2 là gói phần mềm mô phỏng theo phương pháp rời rạc, đây là phần mềm tổng thể có sự tham gia của ngôn ngữ C++, Tcl, oTcl Hiện tại số lượng các module đã được xây dựng trong gói phần mềm Ns2 là rất lớn như nam, ns, xgraph, awk,
1.4.2 SSFNet
SSFNet ứng dụng bộ công cụ phát triển SSF (Scalable Simulation Framework), đây là ngôn ngữ mô phỏng tương đối chuẩn, có khả năng triển khai
mô hình hóa mô phỏng của nhiều yếu tố mạng, lưu lượng mạng Ngoài SSFNet
sử dụng trong SSF để mô phỏng mạng còn có phần mềm DaSSF (Dartmouth
Trang 10SSF) Cả hai gói trên đều có thể triển khai mô hình mạng khi mô phỏng các mạng cỡ lớn Gói DaSSF sử dụng ngôn ngữ C++ để mô phỏng thiết bị, kết nối,
sự kiện Gói SSFNet sử dụng ngôn ngữ Java
1.4.3 Một số phần mềm
Ngoài hai phần mềm bên trên, còn có nhiều phần mềm mô phỏng mạng, viễn thông, vệ tinh, giao thức như OPNET, OmNet++, Packet Tracer Tuy nhiên mỗi phần mềm thường tập trung riêng biệt cho các đối tượng sử dụng cụ thể và chạy trên hệ điều hành đã xác định do vậy chúng đều có những hạn chế nhất định Để đáp ứng nhu cầu mô phỏng hệ thống trên các cấp độ khác nhau thì phần mềm NS2 được đánh giá là hàng đầu bởi tính mở cũng như khả năng chuyên sâu của hệ thống
Trang 11CHƯƠNG 2 CÔNG CỤ MÔ PHỎNG MẠNG - NS2 2.1 Tổng Quan NS2
NS (Network Simulator) là phần mềm mô phỏng mạng theo phương thức điều khiển sự kiện rời rạc và hướng đối tượng Được phát triển tại đại học California Berkeley, viết bằng ngôn ngữ C++ và OTcl, Tcl NS rất hữu ích cho việc mô phỏng mạng diện rộng (WAN) và mạng nội bộ (LAN), ngoài ra NS còn
có khả năng mô phỏng rất nhiều lĩnh vực như mạng thông tin di động, thông tin
vệ tinh, Khi sử dụng NS chúng ta có thể thực hiện được một số khả năng sau:
• Khả năng kiểm tra tính ổn định của các giao thức mạng
• Khả năng đánh giá các giao thức mới trước khi đưa vào sử dụng
• Khả năng thực thi những mô hình mạng lớn mà gần như ta không thể triển khai được trong thực tế
• Khả năng mô phỏng nhiều loại mạng khác nhau
Đã có nhiều phiên bản NS khác nhau nhưng hiện nay phổ biến là phiên bản Ns2 có thể cài đặt và hoạt động cả trên Windows32 và Linux
2.2 Một số lớp trong môi trường NS2
2.2.1 TclObject
Lớp TclObject là lớp cơ sở đối cho hầu hết các lớp khác trong trình thông dịch và trình biên dịch phân cấp Mỗi đối tượng trong lớp TclObject được tạo ra bởi người dùng từ bên trong trình thông dịch Một đối tượng bóng (shadow object) tương đương được tạo ra trong trình biên dịch phân cấp Hai đối tượng có quan hệ chặt chẽ với nhau Lớp TclClass bao gồm các cơ chế dùng để thực thi đối tượng bóng (shadow) này
Điểm khác biệt với NS v1: lớp TclObject được đưa vào sớm hơn lớp NsObject
Vì thế nó lưu trữ giao diện các kết nối thay đổi, kết nối các đặc tính khác nhau
Trang 12trong các đối tượng thông dịch sao cho phù hợp với các biến thành viên của đối tượng biên dịch Quá trình kết nối mạnh hơn trong NS v1 vì bất kỳ sự thay đổi nào liên quan đến các biến của OTcl đều được giữ lại, và các giá trị hiện tại của C++ và OTcl đều được nhất quán sau mỗi truy suất trong trình thông dịch Sự nhất quán được thực hiện thông qua lớp InstVar Và cũng không giống NS v1, các đối tượng trong lớp TclObject không lưu trữ dài như trong một danh sách liên kết chung Thay vì vậy, chúng được lưu trữ trong bảng phân cấp (hash table) bên trong lớp Tcl.
Minh họa cấu hình của một đối tượng TclObject: Ví dụ sau đây minh họa cho quá trình cấu hình một tác nhân SRM (lớp Agent/SRM/Adaptive)
set srm [new Agent/SRM/Adaptive]
$srm set packetSize_ 1024
$srm traffic-source $s0
Quy ước trong NS, lớp Agent/SRM/Adaptive là lớp con của Agent/SRM, Agent/SRM là lớp con của Agent, Agent là lớp con của TclObject Tương ứng với lớp biên dịch phân cấp là ASRMAgent, là lớp con của SRMAgent, SRMAgent là lớp con của Agent, Agent là lớp con của TclObject
Dòng lệnh đầu tiên cho biết cách một đối tượng TclObject được tạo ra (hay hủy bỏ)
Dòng lệnh thứ hai cấu hình một biến giới hạn (bound variable)
Dòng lệnh cuối cùng trình bày quá trình đối tượng thông dịch gọi phương thức C++ khi chúng đã là một thủ tục đặc tính (instance)
2.2.2 TclClass
Trang 13Lớp biên dịch này (TclClass) là một lớp ảo hòan tòan Các lớp này xuất phát từ lớp cơ sở cung cấp hai chức năng sau:
Tạo cấu trúc cho lớp trình trình thông dịch phân cấp để phản ánh lớp biên dịch phân cấp
Cung cấp các phương thức để minh họa đối tượng TclObject mới
Mỗi lớp con đó có quan hệ chặt chẽ với môt lớp biên dịch đặc biệt trong lớp biên dịch phân cấp, và có thể minh họa cho các đối tượng mới trong các lớp kết hợp (associated)
Ví dụ, xem xét lớp RenoTcpClass Nó là xuất phát từ lớp TclClass, và được có quan hệ chặt chẽ với lớp RenoTcpClass Nó sẽ minh họa cho các đối tượng mới trong lớp RenoTcpAgent Lớp biên dịch phân cấp của RenoTcpAgent là lớp xuất phát từ TcpAgent, mà là lớp xuất phát từ Agent, mà là lớp xuất phát TlcObject RenoTcpClass được định nghĩa như sau:
static class RenoTcpClass: public TclClass {
public:
RenoTcpClass() : TclClass("Agent/TCP/Reno") {}
TclObject* create(int argc, const char*const* argv) {
return (new RenoTcpAgent());
}
} class_reno;
Chúng ta có thể theo dõi từ những định nghĩa sau:
⇒ Lớp chỉ xác định một quá trình tạo cấu trúc, và một phương thức thêm vào,
để tạo ra các đặc tính cho các đối tượng liên kết TclObject
Trang 14⇒ NS sẽ tiến hành tạo cấu trúc cho RenoTcpClass với biến tĩnh class_reno vào lúc bắt đầu Nó sẽ cài đặt các phương thức và lớp thông dịch phân cấp phù hợp.
⇒ Quá trình tạo cấu trúc ghi rõ lớp thông dịch như Agent/TCP/Reno Điều này cũng được chỉ định rõ trong lớp thông dịch phân cấp
⇒ Quá trình tạo cấu trúc trong lớp TclClass tạo ra 3 lớp, Agent/TCP/Reno là lớp con của Agent/TCP, là lớp con của lớp Agent là lớp con của lớp TclObject
⇒ Nhớ rằng quy ước trong NS sử dụng ký hiệu “/”để phân tách Ví dụ, A/B/C/D
là lớp con của A/B/C, A/B/C là lớp con của A/B, …
⇒ Lớp này liên kết chặt chẽ với lớp RenoTcpAgent; nó tạo ra các đối tượng mới trong lớp liên kết này
⇒ Phương thức The RenoTcpClass::create trả về đối tượng TclObjects trong lớp RenoTcpAgent
⇒ Khi người sử dụng ghi rõ new Agent/TCP/Reno, thủ tục RenoTcpClass::create đựơc gọi
⇒ Các đối số vector (argv) gồm có:
argv[0] lưu trữ tên của đối tượng
s argv[1 3] lưu trữ $self, $class, and $proc Vì create được gọi thông qua thủ tục đặc tính create-shadow
argv[3] lưu trữ create-shadow
argv[4] lưu trữ bất kỳ đối số được thêm vào (đưa vào một chuỗi) cung cấp bởi người sử dụng
Lớp Trace minh hoạ các đối số điều khiển bởi các phương thức TclClass
class TraceClass : public TclClass {
public:
Trang 151 Quá trình tạo cấu trúc đối tượng được thực thi khi NS bắt đầu
2 Quá trình tạo cấu trúc này gọi quá trình tạo cấu trúc lớp TclClass với tên của lớp thông dịch như đối số của nó
3 Cấu trúc của lớp Tcl lưu trữ tên của lớp, và thêm đối tượng này vào trong một danh sách liên kết của các đối tượng TclClass
4 Trong suốt quá trình khởi tạo của trình mô phỏng, Tcl_AppInit(void) gọi TclClass::bind(void)
5 Đối với mỗi đối tượng trong danh sác các đối tượng TclClass, bind() gọi register{}, ghi rõ tên của lớp thông dịch như đối số của nó
6 register{} thiết lập lớp phân cấp, quá trình tạo lớp được yêu cầu và chưa được tạo
7 Cuối cùng, bind() xác định các thủ tục đặc tính (instance) create-shadow và delete-shadow cho lớp mới này
2.2.3 TclCommand
Trang 16Lớp này cung cấp cơ chế để NS đưa các lệnh đơn giản đến trình thông dịch, sau
đó có thể được thi bên trong một ngữ cảnh chung (context) bởi trình thông dịch
2.2.4 EmbeddedTcl
NS cho phép phát triển các chức năng ở trong mã trình biên dịch hay thông qua
mã thông dịch, điều đó được xác định tại quá trình khởi tạo
2.2.5 InstVar
Phần này mô tả các phần bên trong lớp InstVar Lớp này định nghĩa các phương thức và các cơ chế để kết nối một biến thành viên C++ trong đối tượng của trình biên dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trình thông dịch Quá trình kết nối được cài đặt sao cho giá trị của biến có thể được tập hợp hay truy suất trong cả trình thông dịch lẫn trình biên dịch tại tất cả các thời điểm Có 5 lớp biến:
Khi cài đặt một biến cho trình thông dịch để truy suất đến một biến thành viên, các hàm thành viên của lớp InstVar thực thi bên trong quá trình thực thi các phương pháp tiếp cận Vì vậy, chúng không yêu cầu trình thông dịch phải xác định ngữ cảnh nào biến này phải tồn tại
Trang 17Để đảm bảo mức chính xác trong quá trình thực thi, một biến chỉ biên dịch khi lóp của nó sẵn sàng thiết lập bên trong trình thông dịch, và trình thông dịch phải đang được tiến hành trên một đối tượng trong lớp đó Chú ý rằng những nhà phát minh yêu cầu khi một phương thức được đưa ra trong một lớp phải làm cho các biến có thể truy suất thông qua trình thông dịch, ở đó phải là là lớpliên kết TclClass Phương thức tiếp cận quá trình thực thi có thể được tạo ra bởi một hay hai cách:
- Cách thứ nhất là khi một đối tượng TclObject được tạo ra bên trong trình thông dịch Từ đây cài đặt quá trình thực thi phương thức bên trong trình thông dịch Khi biên dịch đối tượng shadow của trình thông dịch, đối tượng TclObject được tạo ra Quá trình tạo ra cấu trúc mà đối tượng biên dịch có thể kết nối các biến thành viên của đối tượng đó để thông dịch các biến trong khi tạo ra đối tượng thông dịch mới hơn
- Cách thứ hai là định nghĩa một biến kết hợp bên trong một hàm lệnh, sau đó được gọi thông qua phương thức cmd Quá trình thực thi phương thức một cách chính xác được thiết lập để mà thực thi phương thức cmd Ngược lại, mã trình biên dịch được đang thực thi trên quá trình tiếp cận đối tượng shadow và có thể
vì vậy kết nối một cách cẩn thận các biến thành viên yêu cầu
Một biến được tạo ra bằng cách chỉ ra tên của biến thông dịch, và địa chỉ của các biến thành viên trong quá trình biên dịch Quá trình tạo cấu trúc cho lớp cơ sở InstVar tạo ra một biến cụ thể trong trình thông dịch và sau đó cài đặt thủ tục giữ lại (trap) để bắt tất cả các truy suấ đến biến thông qua trình thông dịchl
Bất cứ khi nào biến được đọc thông qua trình thông dịch, thủ tục trap cũng được gọi trước khi đọc Thủ tục gọi một tập các hàm thích hợp trả về giá trị hiện tại của biến Giá trị này sau đó được sử dụng để tập hơp giá trị của biến trình thông dịch sau đó được đọc bởi trình thông dịch
Trang 18Ngược lại, bất cứ khi nào biết được tập hợp thông qua quá trình thông dịch, thủ tục trap được gọi sau khi tập hợp giá trị của thành viên biên dịch đến giá trị hiện được tập hợp bên trong trình thông dịch.
2.3 Mô phỏng (Simulation)
Toàn bộ việc mô phỏng được mô tả bởi Tclclass Simulation Nó cung cấp một tập hợp giao diện để cấu hình một mô phỏng và lựa chọn kiểu lập trình sự kiện thường dùng điều khiển mô phỏng Một tập lệnh mô phỏng thường bắt đầu bằng việc tạo một trường hợp cụ thể của lớp này và gọi các phương thức khác nhau để tạo nút, các cấu hình (topologies), và cấu hình diện mạo bên ngoài của việc mô phỏng
2.3.1 Khởi tạo mô phỏng.
Khi một đối tượng mô phỏng mới được tạo ra trong Tcl, các thủ tục khởi tạo thực thi các hoạt động sau:
- Khởi tạo định dạng gói tin ( gọi create_packetformat)
có thể được thay thế bởi các lịch lập trình luân phiên được cung cấp với ngữ nghĩa khác.(Xem phần tiếp theo để biết chi tiết hơn.)
Tác nhân rỗng (null agent) được tạo với việc gọi:
set nullAgent_ [new Agent/Null]
Tác nhân này nói chung rất có ích như một vùng cho việc loại bỏ các gói hay như một đích đến cho các gói không có giá trị hay không ghi lại được
Trang 192.3.2 Lịch lập trình và các sự kiện.
Việc mô phỏng là một mô phỏng điều khiển sự kiện Hiện nay có 4 kiểu lịch lập trình, mỗi cái sử dụng một cấu trúc dữ liệu khác nhau: một danh sách liên kết đơn, heap (vun đống), hàng đợi lịch, và một kiểu đặc biệt được gọi là
“thời gian thực” (real-time) Mỗi cái sẽ được mô tả cụ thể dưới đây Lịch lập trình chạy bằng cách chọn ra sự kiện sớm nhất kế tiếp, thực thi nó tới khi hoàn thành và quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong lịch lập trình là giây Hiện tại việc mô phỏng là đơn tuyến, chỉ một sự kiện được thực thi tại một thời điểm Nếu có nhiều hơn một sự kiện được lập trình để thực thi trong cùng thời gian thì việc thực thi được thực hiện trên một lịch lập trình đầu tiên – cái đầu tiên được gởi đi Các sự kiện đồng thời không được sắp xếp lại theo bất cứ lịch lập trình nào và tất cả các lịch lập trình nên sắp theo thứ tự giống nhau để gởi đi đến cùng một điểm vào
2.3.3 Danh sách lịch lập trình
Lớp Scheduler hay List (class Scheduler/List) thực thi lập lịch lập trình sử dụng cấu trúc danh sách liên kết đơn Danh sách được giữ trong một thứ tự thời gian (từ sớm nhất đến muộn nhất), vì thế sự kiện thêm vào và xóa đi yêu cầu phải quét qua danh sách để tìm phần tử tương ứng Lựa chọn sự kiện tiếp theo để thực thi yêu cầu phải là phần tử đầu tiên trên cùng của danh sách Việc thực thi này duy trì việc thực thi các sự kiện theo cơ chế FIFO (First In First Out) cho các
sự kiện đồng bộ
2.3.4 Lập trình heap.
Lập trình heap (class Scheduler/ Heap) thực thi lịch lập trình sử dụng một cấu trúc heap (hay vun đống) Cấu trúc này dùng cho một số lượng lớn các sự kiện, như việc thêm vào và xoá thời gian O(log n) cho n sự kiện Việc thực thi này trong NS version 2 được vay mượn từ MaRS-2.0 simulator[1] Nó tin tưởng
Trang 20rằng MaRS tự nó mượn code từ NetSim [12], mặc dù nguồn gốc của nó không được xác định hoàn toàn.
2.3.5 Lập trình hàng đợi
Lập trình hàng đợi lịch (class Scheduler/Calendar) sử dụng một cấu trúc
dữ liệu tương tự lịch bàn trong một năm, trong đó các sự kiện trên các tháng/ngày giống nhau của nhiều năm có thể sắp xếp lại trong một ngày Việc thực thi lập trình hàng đợi lịch này trong NS version2 được đóng góp bởi David Wetherall
2.3.6 Lập trình thời gian thực
Lập trình thời gian thực (class Scheduler/RealTime) cố gắng tạo ra sự đồng thời việc thực thi các sự kiện trong thời gian thực Hiện tại nó hoạt động như một lớp con của lập trình theo danh sách Dung lượng thời gian thực trong NS vẫn chưa được phát triển, nhưng thường được sử dụng để giới thiệu một NS mô phỏng mạng vào một cấu hình thế giới thực với cấu hình mạng đơn giản hơn, vượt qua lưu lượng,… Điều này chỉ hoạt động trong mạng với lưu lượng và tốc độ dữ liệu chậm Sự đồng bộ này hiện tại không có hiệu lực
2.3.7 Các phương thức khác
Lớp mô phỏng cung cấp một số các phương thức khác thường sử dụng thiết lập
mô phỏng Nó thường rơi vào 3 trường hợp sau: phương pháp tạo và quản lí cấu hình, quản lí liên kết, và phương pháp thực thi dò tìm, chức năng trợ giúp phân chia với lịch lập trình Dưới đây là một danh sách không cấu trúc liên quan tới các phương thức mô phỏng
- Simulator instproc now (trả về khái niệm lập trình của thời gian hiện tại)
- Simulator instproc at args (Thực thi lập trình mã hoá ở thời gian đặc biệt)
- Simulator instproc cancel args ( huỷ sự kiện)
- Simulator instproc run args (bắt đầu lập trình)
Trang 21- Simulator instproc halt (Ngưng lập trình)
- Simulator instproc flush-trace (Thêm tất cả các đối tượng dò tìm vào bộ đệm)
- Simulator instproc create-trace type files src dst (tạo đối tượng dò tìm)
- Simulator instproc create_packetformat( thiết lập định dạng các gói mô phỏng.)
2.4 Quá trình chuyển tiếp các node và gói
Phần nay trình bày một phương diện của quá trình tạo một topo trong NS, nghĩa
là tạo ra các node Lớp này cung cấp các thủ tục đặc tính để tạo và quản lý topo,
và bộ lưu trữ bên trong tham chiếu đến mỗi thành phần của topo
2.4.1 Node Basics
Cơ sở đầu tiên để tạo ra một node là:
set ns [new Simulator]
$ns node
Thủ tục đặc tính Node tạo cấu trúc một node bên ngoài các đối tượng phân lớp (classifier) đơn giản Tự bản thân Node chính là một lớp chuẩn độc lập trong OTcl Tuy nhiên, hầu hết các thành phần cấu thành của node lại chính là các TclObject Dạng cấu trúc của một node unicast được biểu diễn trong hình dưới đây Đây là dạng cấu trúc đơn giản, gồm có hai đối tượng TclObjects:
- Địa chỉ phân lớp (classifer_)
- Cổng phân lớp (dmux_)
Chức năng của những phân lớp này được dùng để phân phối đến các packet đển các agent xác định hay gởi đi các link
Tất cả các node lưu trữ ít nhất một trong các thành phần sau:�
- Địa chỉ hay id_, tăng lên 1 cách đều đặn (từ giá trị ban đầu 0) khi các node được tạo ra
- Danh sách của các lân cận (neighbor_)
Trang 22Hình 2.1 Cấu trúc của một node Unicast
Trang 23Entry_ là một biến nhãn đơn giản thay thế cho một đối tượng thực (real), ví dụ như classifier_.
- Danh sách của các agent (agent_)
- Định danh dạng node (nodetype_), và một module định tuyến
Mặc định rằng các node trong NS được tạo cấu trúc cho các quá trình mô phỏng unicast Để có thể mô phỏng multicast, quá trình mô phỏng cần phải được tạo ra cùng với tùy chọn “-multicast on”, ví dụ:
set ns [new Simulator -multicast on]
Cấu trúc bên trong của node dạng multicast được biểu diễn trong hình 2.4.1bKhi trình mô phỏng định tuyến multicast, bit cao nhất của địa chỉ chỉ ra địa chỉ đặc biệt là một địa chỉ multicast hay unicast Nếu bit là 0, địa chỉ đưa ra là địa chỉ unicast, ngược lại, đó là địa chỉ multicast
Hình 2.2 Cấu trúc bên trong của Node dạng Multicast
Trang 242.4.2 Các phương thức của Node
Các thủ tục dùng để cấu hình một node độc lập có thể được phân lớp thành:
⇒ Các chức năng điều khiển
⇒ Quản lý địa chỉ và chỉ số Port, các chức năng định tuyến unicast
⇒ Quản lý agent
⇒ Thêm vào các lân cận (neighbor)
a Chức năng điều khiển
$node trả con trỏ đến một node Đây là phần tử đầu tiên sẽ điều khiển các packet đến node đó Biến cụ thể của node, entry_, lưu trữ tham chiếu đến phần
tử này Đối với các node unicast, đây là địa chỉ phân lớp xem xét các bit mức cao của địa chỉ đích đến (destination) Biến cụ thể, classifier_ lưu trữ tham chiếu đến phân lớp này Tuy nhiên, đối với các node multicast, điểm nhập là switch_ xem xét các bit đầu tiên để quyết định nên chuyển packet sang phân lớp unicast hay phân lớp multicast cho thích hợp Ngoài ra, $node reset sẽ điều chỉnh tất cả các agent tại node
Trang 25- Các thủ tục, add-route và add-routes được sử dụng bới định tuyến unicast để thêm các router vào vùng phân lớp classifier Sử dụng cú pháp là:
$node add-route <destination id><TclObject>
- TclObject là chỉ mục của dmux_, port demultiplexer tại node, nếu id đích giống với id của node này, nó thường là phần đầu của link để gửi các packet đến đích
đó, nhưng cũng có thể là chỉ mục cho các phân lớp khác hay các dạng khác của phân lớp
- $node add-routes <destination id><TclObjects> được sử
dụng để thêm nhiều router đến cùng một đích cùng một lúc trong dạng luân chuyển (round robin manner) để mở rộng băng thông sử dụng để đến được đích
đó thông qua tất cả các link tương tự Nó chỉ được sử dụng nếu biến cụ thể multiPath_ được đặt là 1, và quá trình điều hành chi tiết định tuyến động có hiệu quả, và yêu cầu sử dụng một phân lớp với multipath
- Đi kèm với add-routes{} là delete-routes{}
* add-routes{} Tạo ra id, một danh sách của TclObjects, và tham chiếu đến
nullagent của trình mô phỏng
* delete-routes{} Gỡ bỏ TclObject trong danh sách của quá trình cài đặt
các tuyến (routes) trong phân lớp multipath Nếu tuyến nhập vào trong phân lớp classifrier không trỏ đến phân lớp multipath, thông thường thì xóa bỏ chỉ mục từ classifirer_, và cài đặt nullagent trong không gian của nó
- Chi tiết quá trình định tuyến động cũng sử dụng hai phương thức thêm vào:
* Thủ tục init-routing{} thiết lập biến cụ thể multiPath_ tương tự như lớp biến cùng tên Nó cũng thêm vào một tham chiếu đến đối tượng điều khiển định tuyến trong biến cụ thể, rtObject_.Thủ tục rtObject?{} trả về quyền điều khiển cho đối tượng định tuyến tại node
Trang 26* Cuối cùng, thủ tục intf-changed{} được gọi bởi mạng thay đổi nếu một link trên node thay đổi trạng thái bất ngờ
c Quản lý Agent
Đưa ra một <agent>, thủ tục attach{} sẽ thêm agent vào danh sách agents_
của nó, gán một chỉ số port vào agent và cài đặt địa chỉ nguồn cho nó, cài đặt
đích của agent là entry{}, và thêm một con trỏ vào port demultiplexer tại node
(dmux_) (dmux_) đển agent tại khe tương ứng trong phân lớp dmux_ Ngược lại, detach{}sẽ gỡ bỏ agent trong agent_, và chỉ đến đích của agent, và nhập node dmux_ giá trị nullagent
d Kiểm tra các lân cận
Mỗi node giữ một danh sách các lân cận gần với nó trong biến cụ thể của nó,
neighbor_ Thủ tục add-neighbor{} thêm một lân cận vào danh sách Thủ tục neighbors{} trả về danh sách này.
2.5 Các liên kết
Đây là phần tử thứ hai trong quá trình xác định topo Trong phần này mô tả trong giới hạn các link đơn giản: point-to-point NS hỗ trợ các môi trường truyền thông khác nhau, bao gồm sự mô phỏng đa truy suất của LAN sử dụng link đơn giản dạng mesh, và các trình mô phỏng khác của môi trường truyền thông dạng
vô tuyến và broadcast CBQlink được bắt nguồn từ các link đơn giản và các link
có dạng phức tạp hơn không được mô tả trong phần này Giống như node gồm
có nhiều phân lớp, một link đơn giản là các kết nối liên tiếp nhau một cách tuần
tự Chúng ta cũng mô tả ngắn gọn các thủ tục cụ thể thực thi trên các phần tử cấu thành khác nhau được xác định bởi một vài trong số các kết nối này
Lớp Link là một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link{} để tạo một link có một hướng duy nhất (unidirectional) từ một node đến node khác
Trang 27Link thuộc lớp SimpleLink Các mô tả sau đây trình bày cú pháp của link đơn giản:
set ns [new Simulator]
$ns simplex-link <node0> <node1> <bandwidth> <delay>
<queue_type>
Lệnh tạo ra một linh từ <node0> đến <node1>, với ký hiệu đặc tả <bandwidth>
và <delay> Link sử dụng một hàng đợi dạng <queue_type> Thủ tục cũng thêm kiểm tra TTL vào link 5 biến cụ thể xác định link là:
• head_ Điểm nhập (entry point) của link, nó chỉ đến đối tượng đầu tiên trong link
• queue_ Tham chiếu đến hàng đợi chính của link Các link đơn giản thường có một hàng đơị trên một link Các dạng phức tạp khác cũng có nhiều phần tử link trong link
• link_ Tham chiếu đến phần tử thông thường là các mô hình thực sự của link, trong đặc trưng delay và bandwidth của link
• ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet
• drophead_ Tham chiếu đến một đối tượng chủ chốt của hàng đợi các phần tử xử lý huỷ (drop) link
Hơn nữa, nếu biến của mô phỏng là $traceAllFile_ được xác định, thủ tục
sẽ thêm các phần tử vết (trace) để kiểm tra khi một packet được đưa vào hay lấy
ra khỏi queue_ Quá trình kiểm tra can thiệp vào việc hủy một phân tử vết sau biến drophead_ Các biến sau đây kiểm tra các phần tử vết (trace):
• enqT_ Tham chiếu đến phần tử vết (trace) các packet nhập vào queue_
• deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_
• drpT_ Tham chiếu đến phần tử vết (trace) các packet huỷ khỏi queue_
Trang 28• rcvT_ Tham chiếu đến phần tử vết (trace) các nhận bởi node kế tiếp.Tuy nhiên cần phải chú ý rằng, nếu người dùng có thể truy tìm nhiều lần trên link, các biến này chỉ lưu trữ tham chiếu đến phần tử thêm vào cuối cùng mà thôi Các cơ chế cấu hình khác mà thêm vào các thành phần cấu thành đển một link đơn giản là các giao diện của mạng (sử dụng trong đinh tuyến multicast), các mô hình link động, và cơ chế truy tìm cùng với các bộ kiểm tra (monitor)
Hinh 2.3 Cấu trúc của một liên kết
2.6 Quản lý hàng đợi và lập trình gói tin
Các hàng đợi biểu diễn các vị trí mà các gói tin có thể được giữ lại hoặc bị bỏ
đi Lập trình gói tin liên quan tới việc xử lí quyết định thường dùng để lựa chọn các gói tin được sử dụng hay sẽ bị bỏ đi Việc quản lí bộ đệm liên quan tới các phương pháp riêng biệt thường dùng để điều chỉnh lại thời gian chiếm đóng của một hàng đợi riêng biệt Hiện tại, việc hỗ trợ bao gồm hàng đợi FIFO, quản lí bộ đệm RED, CBQ (bao gồm lập trình ưu tiên và lập trình xoay vòng), và các khác biệt của hàng đợi phiên và bao gồm cả hàng đợi phiên (Fair Queueing), Stochastic Fair Queueing (SFQ) và Deficit Round-Robin (DDR) Trong trường hợp thông thường, một phần tử delay là yếu tổ tải về từ hàng đợi, hàng đợi có thể
bị chặn lại cho đến khi nó được cho phép trở lại bởi các dòng tải xuống lân cận
Trang 29nó Đây là một kĩ thuật được gọi là giả vờ trì hoãn truyền thông Thêm vào đó, hàng đợi có thể bị chặn nhiều hơn hoặc được cho phép ớ một thời gian tùy ý bởi lân cận của chúng (thường sử dụng thực thi đa hàng đợi tập hợp các hàng đợi với việc điều khiển luồng hàng đợi trong) Các gói tin bị bỏ được thực thi trong trường hợp các hàng đợi đó chứa một đích đến bị bỏ, đó là, một đối tượng nhận tất cả các gói tin bị bỏ bởi một hàng đợi Điều này có thể hữu ích trong việc thống kê các gói tin bị bỏ.
2.6.1 Lớp C++ Queue
Lớp Queue có nguồn gốc từ một lớp kết nối cơ bản Nó cung cấp một lớp
cơ bản sử dụng bởi các kiểu lớp hàng đợi riêng biệt, giống như việc gọi lại hàm thực thi việc blocking
Dưới đây định nghĩa các ứng dụng trong queue.h:
class Queue : public Connector {
public:
virtual void enque(Packet*) = 0;
virtual Packet* deque() = 0;
void recv(Packet*, Handler*);
int command(int argc, const char*const* argv);
int qlim_;/*số lượng các gói tin lớn nhất cho phép trong hàng đợi*/
Trang 30Các hàm enque và deque là các lớp ảo, chỉ ra lớp Queue được dùng như một lớp
cơ sở Các hàng đợi riêng biệt có nguồn gốc từ Queue và thực thi hai hàm này như một điều cần thiết Nhìn chung các hàng đợi riêng biệt không ghi đè lên hàm recv bởi vì nó đưa ra các hàm enque và deque riêng biệt
Lớp Queue không chứa nhiều các trạng thái nội bộ Thông thường những cái đó
là các đối tượng kiểm tra đặc biệt thành phần qlim_ được đặt ra để chỉ định một giới hạn lớn nhất chiếm giữ hàng đợi nhưng lại không chịu ảnh hưởng (không có hiệu lực ) bởi chính lớp Queue, nó được sử dụng bởi các lớp queue phụ riêng biệt nếu thấy cần giá trị này Thành phần blocked_ là một giá trị logic chỉ định bất cứ khi nào hàng đợi có thể gởi các gói tin ngay tức khắc tới các dòng tải xuống lân cận của nó Khi một hàng đợi bị khóa, nó có thể cho vào hàng đợi nhưng không gởi chúng
2.6.2 Khoá hàng đợi
Một hàng đợi có thể bị khóa hay không ở bất kì thời gian nào Thông thường, một hàng đợi bị khóa khi một gói tin quá cảnh giữa nó và các dòng tải xuống lân cận nó (phần lớn thời gian nếu hàng đợi bị đầy) Một hàng đợi bị khóa
sẽ bị khóa chừng nào liên kết các dòng tải xuống bận và hàng đợi có ít nhất một gói tin được gởi đi Một hàng đợi được phá khó a chỉ khi hàm cho phép nó tiếp tục được đưa ra (có nghĩa là việc lập trình một dòng tải xuống lân cận nó thông qua việc gọi lại), thường thì khi không có gói tin nào trong hàng đợi Việc gọi lại được thực thi bằng cách sử dụng các lớp và các phương thức dưới đây:
Trang 31class QueueHandler : public Handler
{
public:
inline QueueHandler(Queue& q) : queue_(q) {}
void handle(Event*); /* gọi queue_.resume() */
Trang 33QueueHandler thông qua qh_ để lập trình mô phỏng Hàm điều khiển bắt đầu lại,
sẽ gởi theo dòng tải xuống gói tin được lập trình tiếp theo (và rời khỏi hàng đợi
bị khóa.), hoặc bẻ khóa hàng đợi khi không có gói tin nào sẵn sàng được gởi đi Việc xử lí này cũng có thể làm gọn gàng hơn với đề nghị của phương thức LinkDelay::recv()
2.6.3 Lớp PacketQueue.
Lớp Queue có thể thực thi việc quản lí bộ đệm và lập trình nhưng không thực thi các hoạt động cấp thấp trên một hàng đợi riêng biệt Lớp PacketQueue được sử dụng cho mục đích này, và được định nghĩa như sau:
Trang 34các gói tin Việc lập trình riêng biệt hay sự sắp xếp quản lí hệ thống bộ nhớ có thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản lí việc đếm các gói tin hiện tại trong hàng đợi được trả về bằng phương thức length() Hàm enque đặt gói tin ở cuối hàng đợi và cập nhật lại biến thành viên len_ Hàm deque trả về gói tin ở đầu hàng đợi và xóa nó khỏi hàng đợi (và cập nhật lại biến
đếm counter), hay trả về NULL néu hàng đợi rỗng Hàm lookup trả về gói tin nth
ở đầu hàng đợi, hay NULL trong các trường hợp khác Hàm remove xóa gói tin lưu trữ trong địa chỉ lấy từ hàng đợi (và cập nhật lại biến đếm) Nó tạo ra một chương trình không bình thường và kết thúc nếu gói tin không tồn tại
Ví dụ : Drop Tail
Ví dụ dưới đây làm sáng tỏ việc thực thi đối tượng Queue/DropTail, thực thi lập trình FIFO và việc quản lí bộ đệm bỏ trên luồng (drop-on-overflow) trong hầu hết các router Internet ngày nay Định nghĩa dưới đây sẽ trình bày các lớp và kết nối Otcl của nó:
class DropTail : public Queue {
void DropTail::enque(Packet* p)
{
Trang 352.6.4 Các kiểu khác nhau của các đối tượng Queue
Một đối tượng hàng đợi là một lớp tổng quát của đối tượng có khả năng giữ và đánh dấu một cách hợp lí hay loại bỏ các gói tin như chúng di chuyển thông qua mô phỏng topology Các tham số cấu hình cho các đối tượng hàng đợi là:
limit_ kích thước hàng đợi của các gói tin.
Trang 36blocked_ mặc định là false, nó bật lên true khi hàng đợi bị khoá (không cho
phép gởi các gói tin tới dòng tải xuống lân cận của nó)
unblocked_on_resume_ mặc định bằng true, chỉ ra một hàng đợi nên bẻ khóa
tại thời điểm gói tin cuối cùng được gởi đi (không nhất thiết phải được nhận).Các đối tượng hàng đợi khác xuất phát từ lớp cơ sở khác là các đối tượng hàng đợi drop-tail, FQ, SFQ, DRR, RED và CBQ Mỗi cái được mô tả như sau:
Đối tượng drop-tail: là một lớp con của các đối tượng Queue thực thi hàng đợi FIFO đơn giản
Đối tượng FQ: là lớp con của các đối tượng Queue thực thi hàng đợi phiên, không có phương thức nào đặc trưng cho các đối tượng FQ Các tham số cấu hình là:
+ secsPerByte_ không có các biến trạng thái kết hợp với đối tượng này
+ Đối tượng SFQ: là một lớp con của các đối tượng Queue thực thi hàng đợi Stochastic Fair Không có phương thức nào đặc trưng cho đối tượng này Các tham số cấu hình là:
+ maxqueue_
+ buckets_ không có biến trạng thái nào kết hợp vói đối tượng này
Đối tượng DRR: là một lớp con của các đối tượng Queue thực thi lập trình xoay vòng Những đối tượng này thực thi việc lập trình xoay vòng giữa các luồng khác nhau( một luồng riêng biệt là một luồng có các gói tin với node và port id gói tin OR giống nhau) Cũng khác với các đối tượng đa hàng đợi khác, đối tượng hàng đợi này thực thi một sự chia sẻ không gian bộ đệm cho các luồng khác Các tham số cấu hình là:
+ buckets_ chỉ ra tổng số bucket thường dùng cho việc hashing mỗi luồng
+ blimit_ chỉ ra kích thước bộ đệm chia sẻ bằng byte
+ quantum_ chỉ ra số byte quay vòng của mỗi luồng
Trang 37+ mask_ khi được bật lên 1, có nghĩa là một luồng riêng biệt chứa các gói có các node id giống nhau (các port id có thể khác nhau), khác 1 là các luồng chứa các node id và các port id giống nhau.
Đối tượng RED: là một lớp con của các đối tượng Queue thực thi ngẫu nhiên ở cac gateway phát hiện sớm Đối tượng chỉ có thể cấu hình bỏ hay đánh dấu các gói tin Không có một phương thức đặc biệt nào cho các đối tượng này Các tham số cấu hình là:
+ bytes_ lập bằng true cho phép RED chế độ byte, là kích thước của các gói tin đến có khả năng ảnh hưởng đến việc đánh dấu (hay loại bỏ) các gói tin
+ queue-in-bytes_ lập bằng true để đo kích thước hàng đợi trung bình bằng byte tốt hơn các gói tin Cho phép tuỳ chọn này cũng là nguyên nhân thresh_ và maxthresh_ tự động scaled bởi vì mean_pktsize_
+ thresh_ Giới hạn nhỏ nhất của kích thước hàng đợi trung bình trong các gói tin.+ maxthresh_ Giới hạn lớn nhất của kích thước hàng đợi trung bình trong các gói tin
+ mean_pktsize_ Ước lượng kích thước gói tin trung bình bằng byte Sử dụng cập nhật việc tính toán kích thước hàng đợi trung bình sau thời gian nhàn rỗi.+ q_weight_ Trọng lượng hàng đợi, used in the exponential-weightedmoving average để tính hàng đợi trung bình
+ wait_ Thiết lập bằng true để duy trì một khoảng thời gian giữa các gói tin bị bỏ
+ linterm_ Thay đổi kích thước trung bình của hàng đợi giữa “thresh_” và
“maxthresh_”, việc loại bỏ các gói tin có khả năng thay đổi giữa 0 và 1
+ setbit_ thiết lập bằng true để đánh dấu các gói tin bằng việc thiết lập bit tắc nghẽn trong header gói tin rather than loại bỏ các gói tin