Lời nói đầu
Sự phát triển nhanh chóng các dịch vụ IP và sự bùng nổ Internet đã dẫn đến một loạt thay đổi trong nhận thức kinh doanh của các nhà khai thác. Lưu lượng lớn nhất hiện nay trên mạng trục là lưu lượng IP. Giao thức IP thống trị toàn bộ các giao thức lớp mạng, hệ quả là tất cả các xu hướng phát triển công nghệ lớp dưới đều hỗ trợ cho IP. Nhu cầu thị trường cấp bách cho mạng tốc độ cao với chi phí thấp là cơ sở cho một loạt các công nghệ mới ra đời, trong đó có MPLS.
Trong 5 năm gần đây là khoảng thời gian mà công nghệ MPLS đã chứng minh được tính ứng dụng thực tiễn các tính năng vượt trội của nó so với các công nghệ chuyển mạch truyền thống khác như ATM.
Công nghệ MPLS là kết quả phát triển của công nghệ chuyển mạch IP sử dụng cơ chế hoán đổi nhãn như của ATM để tăng tốc độ truyền gói tin mà không cần thay đổi các giao thức định tuyến của IP. MPLS tách chức năng của IP thành hai phần riêng biệt: chức năng chuyển gói tin và chức năng điều khiển. Bên cạnh đó, MPLS cũng hỗ trợ việc quản lý dễ dàng hơn.
Tóm tắt đồ án
MPLS đã được lựa chọn để đơn giản hoá và tích hợp mạng trong mạng lõi. Nó cho phép các nhà khai thác giảm chi phí, đơn giản hoá việc quản lý lưu lượng và hỗ trợ các dịch vụ Internet. Quan trọng hơn cả, nó là một bước tiến mới trong việc đạt mục tiêu mạng đa dịch vụ với các giao thức gồm di động, thoại, dữ liệu
Tập đoàn BCVT Việt Nam đã lựa chọn IP/MPLS làm công nghệ cho lớp chuyển tải mạng NGN đang triển khai trên phạm vi toàn quốc. Một trong những ưu điểm lớn nhất của MPLS là ở khả năng thực hiện kỹ thuật lưu lượng.
Đề tài tốt nghiệp được chia thành 4 chương với những nội dung chính như sau:
ã Chương 1 - Chuyển mạch nhãn đa giao thức MPLS: Giới thiệu tổng quan công nghệ MPLS, các khái niệm cơ bản, kiến trúc chức năng và cơ chế hoạt động của MPLS.
ã Chương 2 - Định tuyến và báo hiệu MPLS: Trình bày các kỹ thuật định tuyến được hỗ trợ bởi MPLS , các chế độ báo hiệu và một số giao thức báo hiệu phân phối nhãn của MPLS .
ã Chương 3 – Kỹ thuật lưu lượng trong MPLS: Trình bày các khái niệm và mục tiêu
ã của kỹ thuật lưu lượng, khả năng và các cơ chế thực hiện kỹ thuật lưu lượng MPLS. Các vấn đề bảo vệ khôi phục đường - một trong những nhiệm vụ của kỹ thuật lưu lượng cũng được trình bày trong chương này.
ã Chương 4 – Mô phỏng MPLS – TE và đánh giá.
SUMMARIZED DESIGN
MPLS is chosen in order to simplify and integrate network in core-network . It allows the operators lower their cost and simply in management traffic , support Internet’services. The most importance , it’s the new move to multi-service included mobile , voice , data .
Corporation BCVT Vietnam has applied technology MPLS network for the next NGN which being operated over country. One of most advantage of MPLS is traffic engineering .
With the theme: " Traffic enginneering in MPLS ’’the content of project including 4 chapters will in turn present the basic issues and trffic engineering of MPLS network
ã Chapter 1 : The multi protocol label switching MPLS : Overview of MPLS , basic define , fuction and performance of MPLS .
ã Chapter 2 : Routing and signalling in MPLS :Present routing mechanism used by MPLS , the signalling modes and somes distribution label protocol .
ã Chapter 3 : Traffic engineering in MPLS : Present the define , ambition of MPLS techonogy and the mechanism to operate the taffic engineering of MPLS. The problem about protection and repair road – most important mission of trffic engineering is presented in this chapter.
ã Chapter 4 : Simulation MPLS-TE and summary.
Mục lục
Lời nói đầu - 1 -
Tóm tắt đồ án - 2 -
Các hình vẽ sử dụng trong luận văn - 7 -
DANH MỤC BẢNG BIỂU - 8 -
Các Thuật Ngữ Viết Tắt - 9 -
Chương 1: CHUYỂN MẠCH NHÃN ĐA GIAO THỨC MPLS - 12 -
1.1 Tổng quan - 12 -
1.1.1 Tính thông minh phân tán - 12 -
1.1.2 MPLS và mô hình tham chiếu OSI - 13 -
1.2 Các khái niệm cơ bản trong MPLS - 14 -
1.2.1 Miền MPLS (MPLS domain) - 14 -
1.2.2 Lớp chuyển tiếp tương đương (FEC) - 16 -
1.2.3 Nhãn và Stack nhãn - 16 -
1.2.4 Hoán đổi nhãn (Label Swapping) - 17 -
1.2.5 Đường chuyển mạch nhãn LSP (Label Switched Path) - 17 -
1.2.6 Chuyển gói qua miền MPLS - 18 -
1.3 Mã hóa nhãn và các chế độ đóng gói nhãn MPLS - 19 -
1.3.1 Mã hóa stack nhãn - 19 -
1.3.2 Chế độ Frame - 20 -
1.3.3 Chế độ Cell - 21 -
Chương 2:ĐỊNH TUYẾN VÀ BÁO HIỆU MPLS - 22 -
2.1 Định tuyến trong MPLS - 22 -
2.1.1 Định tuyến ràng buộc (Constrain-based Routing) - 23 -
2.1.2 Định tuyến tường minh (Explicit Routing) - 24 -
2.2 Các chế độ báo hiệu MPLS - 24 -
2.2.1 Chế độ phân phối nhãn - 24 -
2.2.2 Chế độ duy trì nhãn - 26 -
2.2.3 Chế độ điều khiển LSP - 27 -
2.2.4 Các giao thức phân phối nhãn MPLS - 28 -
2.3 Giao thức LDP (Label Distribution Protocol) - 29 -
2.3.1 Hoạt động của LDP - 29 -
2.3.2 Cấu trúc thông điệp LDP - 31 -
2.3.3 Các bản tin LDP - 33 -
2.3.4 LDP điều khiển độc lập và phân phối theo yêu cầu - 34 -
2.4 Giao thức CR-LDP (Constrain-based routing LDP) - 35 -
2.4.1 Mở rộng cho định tuyến ràng buộc - 35 -
2.4.2 Thiết lập một CR-LSP (Constrain-based routing LSP) - 36 -
2.5 Giao thức RSVP-TE (RSVP Traffic Engineering) - 37 -
2.5.1 Các bản tin thiết lập dự trữ RSVP - 37 -
2.5.2 Các bản Tear Down, Error và Hello của RSVP-TE - 38 -
2.5.3 Thiết lập tuyến tường minh điều khiển tuần tự theo yêu cầu - 39 -
2.5.4 Giảm lượng overhead làm tươi RSVP - 41 -
2.6 Giao thức BGP - 41 -
2.6.1 BGPv4 và mở rộng cho MPLS - 41 -
2.6.2 Kết nối MPLS qua nhiều nhà cung cấp dịch vụ - 43 -
2.7 Tổng kết chương - 44 -
Chương 3:Kỹ thuật lưu lượng trong MPLS - 45 -
3.1 Kỹ thuật lưu lượng (Traffic Engineering) - 45 -
3.1.1 Các mục tiêu triển khai kỹ thuật lưu lượng - 45 -
3.1.2 Các lớp dịch vụ dựa trên nhu cầu QoS và các lớp lưu lượng - 46 -
3.1.3 Hàng đợi lưu lượng - 47 -
3.1.4 Giải thuật thùng rò và thùng token - 49 -
3.1.5 Giải pháp mô hình chồng phủ (Overlay Model) - 51 -
3.2 MPLS và kỹ thuật lưu lượng - 53 -
3.2.1 Khái niệm trung kế lưu lượng (traffic trunk) - 53 -
3.2.2 Đồ hình nghiệm suy (Induced Graph) - 54 -
3.2.3 Bài toán cơ bản của kỹ thuật lưu lượng trên MPLS - 54 -
3.3 Trung kế lưu lượng và các thuộc tính - 54 -
3.3.1 Các hoạt động cơ bản trên trung kế lưu lượng - 55 -
3.3.2 Thuộc tính tham số lưu lượng (Traffic Parameter) - 55 -
3.3.3 Thuộc tính lựa chọn và quản lý đường (chính sách chọn đường) - 55 -
3.3.4 Thuộc tính ưu tiên / lấn chiếm (Priority/Preemption) - 57 -
3.3.5 Thuộc tính đàn hồi (Resilience) - 57 -
3.3.6 Thuộc tính khống chế (Policing) - 58 -
3.4 Các thuộc tính tài nguyên - 58 -
3.4.1 Bộ nhân cấp phát cực đại (maximum allocation multiplier) - 58 -
3.4.2 Lớp tài nguyên (Resource-Class) - 58 -
3.4.3 TE Metric - 59 -
3.5 Tính toán đường ràng buộc - 59 -
3.5.1 Quảng bá các thuộc tính của link - 59 -
3.5.2 Tính toán LSP ràng buộc (CR-LSP) - 60 -
3.5.3 Giải thuật chọn đường - 61 -
3.5.4 Ví dụ về chọn đường cho trung kế lưu lượng - 61 -
3.5.5 Tái tối ưu hóa (Re-optimization) - 64 -
3.6 Bảo vệ và khôi phục đường - 64 -
3.6.1 Phân loại các cơ chế bảo vệ khôi phục - 65 -
3.6.2 Mô hình Makam - 66 -
3.6.3 Mô hình Haskin (Reverse Backup) - 67 -
3.6.4 Mô hình Hundessa - 67 -
3.6.5 Mô hình Shortest -Dynamic - 68 -
3.6.6 Mô hình Simple -Dynamic - 68 -
3.6.7 Mô hình Simple -Static - 69 -
3.7 Tổng kết chương - 69 -
Chương 4 : Mô phỏng MPLS và đánh giá - 70 -
4.1.Tổng quan về NS2 - 70 -
4.1.1 Giới thiệu - 70 -
4.1.2 Download và install NS-2 và NAM - 70 -
4.1.3 Chạy chương trình NS-2 và NAM - 76 -
4.2.Kiến trúc của NS2 - 77 -
4.2.1 Giới thiệu - 77 -
4.2.2 C++ và OTcl - 79 -
4.2.3 Các đặc tính của NS-2 - 82 -
4.3.Giới thiệu các phần mềm dùng kết hợp với NS2 - 83 -
4.3.1 NAM - 83 -
4.3.2 NSCRIPT - 88 -
4.3.3 Topology Generator - 91 -
4.3.4 Trace Data Analyzers - 92 -
4.4.Mô phỏng khôi phục đường theo cơ chế Shortest – Dynamic - 98 -
4.4.1.Mô hình - 98 -
4.4.2.Thực hiện và kết quả - 99 -
4.4.3.Nhận xét - 100 -
Kết luận - 101 -
Tài liệu tham khảo - 102 -
Phụ lục - 103 -
111 trang |
Chia sẻ: banmai | Lượt xem: 2209 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Kỹ thuật lưu lượng trong MPLS, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
§ PML (Path Merge LSR): Là LSR chịu trách nhiệm nhận lưu lượng trên đường
khôi phục, và sẽ: hoặc hợp nhất lưu lượng trở về đường làm việc, hoặc chuyển
lưu lượng ra khỏi miền MPLS nếu bản thân nó là đích.
§ POR (Point of Repair): POR là một LSR chịu trách nhiệm sửa chữa một LSP,
nó có thể là một PSL hoặc PML tùy theo cơ chế khôi phục nào được dùng.
§ FIS (Fault Indication Signal): Là bản tin chỉ thị có lỗi xảy ra trên đường, được
chuyển tiếp bởi các LSR trung gian cho tới khi nó đến được POR. FIS được
phát đi theo chu kỳ bởi các nút cận kề vị trí lỗi.
§ FRS (Fault Recovery Signal): Là bản tin chỉ thị một lỗi trên đường làm việc đã
sửa chữa xong. FRS được chuyển tiếp cho tới khi nó đến được một LSR đảm
nhận việc chuyển trả lại đường nguyên thủy.
3.6.1 Phân loại các cơ chế bảo vệ khôi phục
3.6.1.a Sửa chữa toàn cục và sửa chữa cục bộ
Sửa chữa toàn cục là bảo vệ khi có sự cố ở bất kỳ vị trí nào trên đường làm việc.
Điểm sửa chữa POR (ở đây chính là ingress -LSR) thường cách xa vị trí lỗi và cần
được thông báo bằng tín hiệu FIS. Việc khôi phục đường là end -to-end, trong đó
đường làm việc và đường bảo vệ tách rời nhau (disjoint) hoàn toàn.
Sửa chữa cục bộ cũng nhằm bảo vệ khi có sự cố link hoặc nút nhưng khôi phục
nhanh hơn do việc sửa chữa được thực hiện cục bộ tại thiết bị phát hiện sự cố. Nút
nằm kề trực tiếp trước vị trí lỗi sẽ đóng vai trò là PSL khởi tạo công tác khôi phục.
Sửa chữa cục bộ có thể được thiết lập theo hai trường hợp:
§ Khôi phục link: để bảo vệ một link trên đường làm việc. Nếu một lỗi xảy ra
trên link này thì đường khôi phục sẽ nối liền giữa PSL và PML ở hai đầu link
lỗi. Đường khôi phục và đường làm việc tách rời nhau đối với link được bảo vệ.
§ Khôi phục nút: để bảo vệ một nút trên đường làm việc. Đường khôi phục và
đường làm việc phải tách rời nhau đối với nút được bảo vệ và các link có nối
vào nút này. PML có thể là nút trên đường làm việc nằm kề sau nút được bảo
vệ, hoặc PLM là egress -LSR.
3.6.1.b Tái định tuyến và chuyển mạch bảo vệ
Đối với khôi phục bằng tái định tuyến (re-route), đường khôi phục được thiết lập
theo yêu cầu sau khi xảy ra sự cố. Khi phát hiện sự cố trên đường làm việc, một LSR đứng trước vị trí lỗi có vai trò là POR mới bắt đầu báo hiệu một đường khôi phục đi vòng qua điểm lỗi và nối (merge) vào một nút nào đó nằm sau điểm lỗi trên đường làm việc. Đường khôi phục này có thể được tính toán sẵn trước hoặc tính toán sau khi phát hiện sự cố. Khi đường khôi phục được thiết lập xong, PSL bắt đầu chuyển lưu lượng trên đường này.
Trong chuyển mạch bảo vệ thì đường khôi phục được tính toán và thiết lập trước
khi xảy ra sự cố trên đường làm việc. PSL được cấu hình để chuyển mạch lưu lượng
sang đường khôi phục ngay khi nó biết có lỗi trên đường làm việc (trực tiếp phát hiện lỗi hoặc nhờ nhận được FIS). Vì đường khôi phục đã thiết lập trước nên chuyển mạch bảo vệ nhanh hơn so với khôi phục bằng tái định tuyến.
3.6.2 Mô hình Makam
Đây là mô hình khôi phục MPLS đầu tiên được đề xuất. Nó cung cấp bảo vệ toàn
cục cho một LSP bằng cách thiết lập đường khôi phục giữa ingress -LSR và egress -
LSR. Đường làm việc và khôi phục tách rời nhau (disjoint) cả về link và nút. Khi phát hiện lỗi ở bất kỳ vị trí nào trên đường làm việc, tín hiệu FIS được dùng để chuyển thông báo lỗi về cho ingress -LSR (là PSL). Ingress-LSR sẽ thực hiện chuyển mạch lưu lượng sang đường khôi phục. Mô hình này hỗ trợ cả đường khôi phục thiết lập sẵn (chuyển mạch bảo vệ) và đường khôi phục thiết lập động (tái định tuyến).
Hình 3.14: Mô hình Makam
Ưu điểm: Chỉ cần một đường dự phòng cho mọi sự cố trên đường làm việc và chỉ
cần một LSR có chức năng làm PSL.
Nhược điểm: Mô hình này có một khoảng thời gian trễ để tín hiệu FIS truyền
ngược về tới PSL. Trong thời gian này, lưu lượng trên đường làm việc bị mất.
3.6.3 Mô hình Haskin (Reverse Backup)
Mô hình này khắc phục nhược điểm mất gói ở mô hình Makam. Ngay khi một LSR
phát hiện sự cố trên đường làm việc, nó chuyển hướng lưu lượng đến trên đường làm việc sang một đường dự phòng đảo đi ngược về PSL. Khi quay trở về đến PSL, lưu lượng được chuyển sang đường khôi phục toàn cục. Đường dự phòng đảo và đường khôi phục phải thiết lập sẵn nên cách này tốn kém tài nguyên.
Hình 3.15: Mô hình Haskin
Một cải tiến khác cho phép PSL chuyển trực tiếp lưu lượng sang đường khôi phục
toàn cục ngay khi nó thấy đường dự phòng đảo được dùng. Các gói đầu tiên trong
phần lưu lượng được đảo chiều có tác dụng như tín hiệu FIS. Cách này tối ưu hơn vì
đường đi của lưu lượng được bảo vệ ngắn hơn. Tuy nhiên trong thời gian đầu, lưu
lượng mới chuyển đi trên đường khôi phục sẽ trộn lẫn với phần lưu lượng được đảo
chiều làm thay đổi thứ tự gói ban đầu.
3.6.4 Mô hình Hundessa
Mô hình Hundessa giống như mô hình Haskin cải tiến nhưng khắc phục được vấn
đề xáo trộn thứ tự gói. Khi gói đầu tiên quay trở về PSL trên đường dự phòng đảo có tác dụng như tín hiệu FIS báo cho PSL biết đã có lỗi. PSL đánh dấu gói cuối cùng truyền ra đường làm việc (đang có lỗi) bằng cách đặt một bit trong trường EXP của nhãn, sau đó ngưng đẩy gói ra đường lỗi. Khi gói được đánh dấu quay trở về PSL trên đường đảo, PSL mới tiếp tục chuyển các gói mới trực tiếp ra đường khôi phục.
3.6.5 Mô hình Shortest -Dynamic
Trong mô hình này chỉ có đường làm việc được thiết lập. Khi một nút phát hiện sự
cố link thì nó phải tính toán rồi báo hiệu thiết lập một đường hầm LSP ngắn nhất đi từ nó đến nút ở phía bên kia link bị sự cố và sau đó chuyển mạch lưu lượng (bằng cách xếp chồng nhãn để “luồn” đường làm việc chui qua đường hầm tránh lỗi này).
Hình 3.16: Mô hình Shortest – Dynamic
3.6.6 Mô hình Simple -Dynamic
Giống như Shortest -Dynamic, cơ chế này cũng là một cơ chế cục bộ. Nút phát hiện
sự cố link sẽ chuyển mạch lưu lượng. Sự khác nhau giữa hai cơ chế này là nút cuối
cùng của đường làm việc phải là PML. Sau đó, đường khôi phục sẽ là từ nút phát hiện sự cố đến nút PML. Trong trường hợp này không tính toán trước đường LSP khôi phục.
Hình 3.17: Mô hình Simple – Dynamic
3.6.7 Mô hình Simple -Static
Ý tưởng này là giống cơ chế simple -dynamic, nhưng với đường khôi phục đã được
tính toán trước khi xảy ra lỗi.
3.7 Tổng kết chương
Chương này này trình bày tập hợp các yêu cầu cho kỹ thuật lưu lượng qua MPLS.
Nhiều khả năng đã được mô tả tập trung vào việc tăng cường tính ứng dụng của
MPLS đối với kỹ thuật lưu lượng.
Bài toán cơ bản của MPLS -TE là làm sao ánh xạ đồ hình nghiệm suy (induced
graph) lên trên topology vật lý của mạng một cách hiệu quả nhất. MPLS cũng cung
cấp các cơ chế bảo vệ và khôi phục lưu lượng ở lớp MPLS một cách tin cậy.
Chương 4 : Mô phỏng MPLS và đánh giá
4.1.Tổng quan về NS2
4.1.1 Giới thiệu
NS (phiên bản) là phần mềm mô phỏng mạng điều khiển sự kiện riêng rẽ hướng đối tượng, được phát triển tại UC Berkely, viết bằng ngôn ngữ C++ và OTcl. NS rất hữu ích cho việc mô phỏng mạng diện rộng (WAN) và mạng local (LAN). Bốn lợi ích lớn nhất của NS-2 phải kể đến đầu tiên là:
Khả năng kiểm tra tính ổn định của các giao thức mạng đang tồn tại
Khả năng đánh giá các giao thức mạng 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ể thực thi được trong thực tế
Khả năng mô phỏng nhiều loại mạng khác nhau
Mặc dù NS-2 là phần mềm mã nguồn mở có sẵn cho cả nền Windows 32 và Linux, nhưng giáo trình này chỉ đề cập đến việc cài đặt cũng như thực thi NS-2 trong môi trường Linux.
4.1.2 Download và install NS-2 và NAM
NS-2 và NAM có thể được cài đặt bằng duy nhất một gói phần mềm (cách 1) hay bằng cách cài từng gói phần mềm riêng lẻ (cách 2). Cách 1 dành cho những người vừa mới làm quen với mô phỏng. Những người đã có kinh nghiệm thì được khuyến khích cài theo cách 2.
4.1.2.1 Cách 1: Cài đặt bằng duy nhất một gói phần mềm
4.1.2.1.a Download
Download gói phần mềm ns-allinone-2.28.tar về từ địa chỉ Ns-allinone-2.28 bao gồm các gói sau:
cweb
gt-itm
nam-1.11
ns-2.28
otcl-1.9
sgb
tcl8.4
tclcl-1.16
tk8.4
xgraph-1.1
zlib-1.1
install
install.win
readme install
4.1.2.1.b Install
Chuyển đến thư mục ta muốn cài đặt NS (chẳng hạn như /usr/local/src/), giải nén gói ns-allinone-2.28.tar bằng lệnh:
tar xvf ns-allinone-2.28.tar
và chạy script:
./install
Nếu cài đặt thành công thì sẽ có những vị trí được cài đặt như sau:
tcl8.4.5 {đường dẫn đến thư mục ns-allinone-2.28}/{bin,include,lib}
tk8.4.5 {đường dẫn đến thư mục ns-allinone-2.28}/{bin,include,lib}
otcl {đường dẫn đến thư mục ns-allinone-2.28}/otcl-1.9
tclcl {đường dẫn đến thư mục ns-allinone-2.28}/tclcl-1.16
ns {đường dẫn đến thư mục ns-allinone-2.28}/ns-2.28/ns
nam {đường dẫn đến thư mục ns-allinone-2.28}/nam-1.11/nam
xgraph {đường dẫn đến thư mục ns-allinone-2.28}/xgraph-12.1
Đặt
{đường dẫn đến thư mục ns-allinone-2.28}/bin
{đường dẫn đến thư mục ns-allinone-2.28}/tcl8.4.5/unix
{đường dẫn đến thư mục ns-allinone-2.28}/tk8.4.5/unix
vào biến môi trường PATH; để có thể chạy itm/tclsh/wish/xgraph, bằng lệnh:
export PATH=$PATH:{đường dẫn đến thư mục ns-allinone-2.28}/bin:{đường dẫn đến thư mục ns-allinone-2.28}/tcl8.4.5/unix:{đường dẫn đến thư mục ns-allinone-2.28}/tk8.4.5/unix.
CHÚ Ý
(1) Phải đặt {đường dẫn đến thư mục ns-allinone-2.28}/otcl-1.9, {đường dẫn đến thư mục ns-allinone-2.28}/lib, vào trong biến môi trường LD_LIBRARY_PATH.
Nếu dùng csh, gõ lệnh:
setenv LD_LIBRARY_PATH
và nếu dùng sh thì gõ lệnh:
export LD_LIBRARY_PATH
(2) Phải thêm {đường dẫn đến thư mục ns-allinone-2.28}/tcl8.4.5/library vào trong biến môi trường TCL_LIBRARY để tránh việc ns và nam báo lỗi khi khởi động.
(3) [Tuỳ chọn] Để tiết kiệm đĩa thì có thể xoá hai thư mục tcl8.4.5 và tk8.4.5 đi vì chúng đã được cài đặt vào trong {đường dẫn đến thư mục ns-allinone-2.28}/{bin,include,lib}.
Sau những bước này, có thể kiểm tra lại NS-2 bằng lệnh:
cd {đường dẫn đến thư mục ns-allinone-2.28}/ns-2.28
./validate
4.1.2.2 Cách 2: Cài đặt bằng cách cài từng gói phần mềm riêng lẻ
4.1.2.2.a Download
Để chạy được chương trình NS-2 thì cần phải có tối thiểu 3 gói sau:
otcl
tclcl
ns-2
Để biểu diễn mô phỏng thì cần gói:
nam-1
Đến bước 1.1 của phần 1.2.2.b để kiểm tra xem tập tin hệ thống mạng NFS có hỗ trợ tcl/tk8.4.5 không. Nếu không thì cần download thêm hai gói:
tcl8.4.5
tk8.4.5
Download các gói phần mềm trên về từ địa chỉ
4.1.2.2.b Install
Bước 1: Install tcl/tk
Bước 1.1: Nếu tcl/tk8.4.5 đã được install vào trong hệ thống thì chúng ta có thể dùng để cài otcl, tclcl, ns-2 và nam bằng cách:
1. Kiểm tra vị trí chính xác của tiêu đề và các tập tin thư viện của tcl/tk. Thông thường là:
tclsh8.4 trong /usr/local/bin (hay /usr/bin)
libtcl8.4.a trong /usr/local/lib (hay /usr/lib)
init.tcl in /usr/local/lib/tcl8.4 (hay /usr/lib/tcl8.4)
tcl*.h in /usr/local/include (hay /usr/include)
Kiểm tra tương tự với tk như sau:
tksh8.4 trong /usr/local/bin (hay /usr/bin)
libtk8.4.a trong /usr/local/lib (hay /usr/lib)
init.tcl in /usr/local/lib/tk8.4 (hay /usr/lib/tk8.4)
tk*.h in /usr/local/include (hay /usr/include)
Nếu không định vị được những file trên của tcl/tk8.4.5 thì bỏ mục 2,3 sau và chuyển ngay sang bước 1.2 để tiến hành install tcl/tk8.4.5.
2. Thiết lập các biến môi trường
setenv TCL_LIBRARY /usr/local/lib/tcl8.4 (hay /usr/lib/tcl8.4)
setenv TK_LIBRARY /usr/local/lib/tk8.4 (hay /usr/lib/tk8.4)
3. Thiết lập các tuỳ chọn khi cấu hình otcl, tclcl, ns-2 trong bước 3 bên dưới.
--with-tcl=/usr/local --with-tcl-ver=8.4 --with-tk=/usr/local --with-tk-ver=8.4
(hay --with-tcl=/usr --with-tcl-ver=8.4 --with-tk=/usr --with-tk-ver=8.4)
Bước 1.2: Install tcl và tk
1. Configure và install tcl/tk
tcl8.4.5
cd tcl8.4.5/unix
./configure –disable-load
make
tk8.4.5
cd tk8.4.5/unix
./configure –disable-load
make
2. Những file quan trọng
tclsh trong {đường dẫn đến thư mục tcl8.4.5}/unix
libtcl8.4.a trong {đường dẫn đến thư mục tcl8.4.5}/unix
init.tcl trong {đường dẫn đến thư mục tcl8.4.5}/library
tcl*.h trong {đường dẫn đến thư mục tcl8.4.5}/generic
Kiểm tra tương tự với tk.
3. Các biến môi trường
setenv TCL_LIBRARY {đường dẫn đến thư mục tcl8.4.5} (hay /usr/lib/tcl8.4)
setenv TK_LIBRARY {đường dẫn đến thư mục tk8.4.5} (hay /usr/lib/tk8.4)
4. Thiết lập các tuỳ chọn khi cấu hình otcl, tclcl, ns-2 trong bước 2 bên dưới.
--with-tcl={đường dẫn đến thư mục tcl8.4.5} --with-tcl-ver=8.4.5
--with-tk= {đường dẫn đến thư mục tk8.4.5} --with-tk-ver=8.4.5
Bước 2: Install/ re-install otcl, tclcl, ns-2 và nam
Với từng gói này ta cần chạy script ‘configure’ để tạo ra Makefile với các đường dẫn và tên file BIN, INCLUDE, LIB đúng.
Đôi khi script ‘configure’ tạo được Makefile nhưng lại không định vị chính xác tên đường dẫn và tên file. Vì thế, ‘make’ sẽ không thành công. Nên chúng ta cần chỉnh sửa lại Makefile để có thể compiler có thể tìm được đường dẫn và tên file đúng mà biên dịch.
otcl
./configure --with-tcl={đường dẫn đến thư mục tcl8.4.5} --with-tcl-ver=8.4.5
--with-tk={đường dẫn đến thư mục tk8.4.5} --with-tk-ver=8.4.5
make
tclcl
./configure --with-tcl={đường dẫn đến thư mục tcl8.4.5} --with-tcl-ver=8.4.5
--with-tk={đường dẫn đến thư mục tk8.4.5} --with-tk-ver=8.4.5
--with-otcl={đường dẫn đến thư mục otcl}
make
ns-2
./configure --with-tcl={đường dẫn đến thư mục tcl8.4.5} --with-tcl-ver=8.4.5
--with-tk={đường dẫn đến thư mục tk8.4.5} --with-tk-ver=8.4
--with-otcl={đường dẫn đến thư mục otcl}
--with-tclcl={đường dẫn đến file tclcl hay Tcl}
make
nam
./configure --with-tcl={đường dẫn đến thư mục tcl8.4.5} --with-tcl-ver=8.4.5
--with-tk={đường dẫn đến thư mục tk8.4.5} --with-tk-ver=8.4.5
--with-otcl={đường dẫn đến thư mục otcl}
--with-tclcl={đường dẫn đến file tclcl hay Tcl}
make
CHÚ Ý
Xem lại các chú ý đã trình bày trong phần 1.2.1
4.1.3 Chạy chương trình NS-2 và NAM
Hình sau biểu diễn kiến trúc thư mục NS-2 và NAM trong môi trường Linux. NS-2 và NAM đều là các thư mục con của ns-allinone-2.28. NS-2 bao gồm các thực thi mô phỏng (bằng mã C++ và mã OTcl), các kịch bản Otcl kiểm tra tính hiệu lực và các kịch bản OTcl minh họa.
TK8.4.5
OTcl
tclcl
Tcl8.4.5
ns-2.28
nam-1.19
tcl
ex
test
lib
...
...
Các ví dụ
Các kiểm tra
Mã C++
Mã OTcl
ns-allinone-2.28
mcast
Hình 4.1: Kiến trúc thư mục cài đặt của NS-2 và NAM trong môi trường Linux
Trước tiên, chúng ta cần xem lại các chú ý trong phần 1.2.1 để kiểm tra việc thiết lập giá trị biến PATH.
Tiếp theo, để chạy NS-2, chuyển vào thư mục ns-2.28, gọi chương trình ns bằng lệnh ns file.tcl. Cách chạy kịch bản ví dụ simple.tcl đặt trong thư mục ../ns-2.28/tcl/ex như sau:
ns-2
cd{đường dẫn đến thư mục ns-2.28}/tcl/ex/
../../ns simple.tcl
Tương tự, để chạy NAM, chuyển vào thư mục nam-1.19, gọi chương trình nam bằng lệnh nam file.nam. Chạy kịch bản ví dụ lan.nam trong thư mục ../nam-1.19/ex như sau:
nam
cd {đường dẫn đến thư mục nam-1.11}/ex
gunzip lan.nam.gz
../nam lan.nam
Lệnh gunzip dùng giải nén tập tin lan.nam.gz thành lan.nam.
4.2.Kiến trúc của NS2
4.2.1 Giới thiệu
NS thực thi các giao thức mạng như Giao thức điều khiển truyền tải (TCP) và Giao thức gói người dùng (UDP); các dịch vụ nguồn lưu lượng như Giao thức truyền tập tin (FTP), Telnet, Web, Tốc độ bit cố định (CBR) và Tốc độ bit thay đổi (VBR) ; các kỹ thuật quản lý hàng đợi như Vào trước Ra trước (Drop Tail), Dò sớm ngẫu nhiễn (RED) và CBQ; các thuật toán định tuyến như Dijkstra… NS cũng thực thi multicasting và vài giao thức lớp Điều khiển truy cập đường truyền (MAC) đối với mô phỏng LAN.
Hình 4.2: Tổng quan về NS dưới góc độ người dùng
OTcl Script Kịch bản OTcl
Simulation Program Chương trình Mô phòng
OTcl Bộ biên dịch Tcl mở rộng hướng đối tượng
NS Simulation Library Thư viện Mô phỏng NS
Event Scheduler Objects Các đối tượng Bộ lập lịch Sự kiện
Network Component Objects Các đối tượng Thành phần Mạng
Network Setup Helping Modules Các mô đun Trợ giúp Thiết lập Mạng
Plumbling Modules Các mô đun Plumbling
Simulation Results Các kết quả Mô phỏng
Analysis Phân tích
NAM Network Animator Minh họa Mạng NAM
Trong hình trên, NS là Bộ biên dịch Tcl mở rộng hướng đối tượng; bao gồm các đối tượng Bộ lập lịch Sự kiện, các đối tượng Thành phần Mạng và các mô đun Trợ giúp Thiết lập Mạng (hay các mô đun Plumbing).
Để sử dụng NS-2, user lập trình bằng ngôn ngữ kịch bản OTcl. User có thể thêm các mã nguồn Otcl vào NS-2 bằng cách viết các lớp đối tượng mới trong OTcl. Những lớp này khi đó sẽ được biên dịch cùng với mã nguồn gốc. Kịch bản OTcl có thể thực hiện những việc sau:
Khởi tạo Bộ lập lịch Sự kiện
Thiết lập Mô hình mạng dùng các đối tượng Thành phần Mạng
Báo cho nguồn traffic khi nào bắt đầu truyền và ngưng truyền packet trong Bộ lập lịch Sự kiện
Thuật ngữ plumbing được dùng để chỉ việc thiết lập mạng, vì thiết lập một mạng nghĩa là xây dựng các đường dữ liệu giữa các đối tượng mạng bằng cách thiết lập con trỏ “neighbour” cho một đối tượng để chỉ đến địa chỉ của đối tượng tương ứng. Mô đun plumbing OTcl trong thực tế thực hiện việc trên rất đơn giản. Plumbing làm nên sức mạnh của NS.
Thành phần lớn khác của NS bên cạnh các đối tượng Thành phần Mạng là Bộ lập lịch Sự kiện. Bộ lập lịch Sự kiện trong NS-2 thực hiện những việc sau:
Tổ chức Bộ định thời Mô phỏng
Huỷ các sự kiện trong hàng đợi sự kiện
Triệu gọi các Thành phần Mạng trong mô phỏng
Phụ thuộc vào mục đích của user đối với kịch bản mô phỏng OTcl mà kết quả mô phỏng có thể được lưu trữ như file trace. Định dạng file trace sẽ được tải vào trong các ứng dụng khác để thực hiện phân tích:
File nam trace (file.nam) được dùng cho công cụ Minh họa mạng NAM
File Trace (file.tr) được dùng cho công cụ Lần vết và Giám sát Mô phỏng XGRAPH hay TRACEGRAPH
Hình 4.3: Luồng các sự kiện cho file Tcl chạy trong NS
NAM Visual Simulation Mô phỏng ảo NAM
Tracing and Monitoring Simulation Mô phỏng Lần vết và Giám sát
4.2.2 C++ và OTcl
Hình sau biểu diễn kiến trúc chung của NS. User có thể tưởng tượng mình đang đứng ở góc trái dưới, thiết kế và chạy các mô phỏng trong Tcl. Tcl dùng các đối tượng mô phỏng trong OTcl. Các đối tượng Bộ lập lịch Sự kiện và hầu hết các đối tượng Thành phần Mạng thực thi bằng C++ và sẵn có cho OTcl qua một liên kết OTcl. Liên kết OTcl này được thực thi dùng TclCL. Tất cả đã làm nên NS, bộ biên dịch Tcl mở rộng hướng đối tượng và các thư viện mô phỏng mạng.
NS sử dụng hai ngôn ngữ lập trình: Ngôn ngữ kịch bản (Tcl – Tool Command Language, đọc là tickle) và Ngôn ngữ lập trình hệ thống (C/C++)
NS là tầng biên dịch Tcl để chạy các kịch bản Tcl
Bằng cách sử dụng C++/OTcl, bộ mô phỏng mạng phải hoàn toàn là hướng đối tượng
Hình sau chỉ ra các đối tượng C++ có liên kết OTcl. Khi đó, nếu chúng tạo nên một phân cấp thì các đối tượng OTcl cũng có một phân cấp tương ứng như vậy.
TclCL là ngôn ngữ được sử dụng để cung cấp liên kết giữa C++ và OTcl. Các kịch bản Tcl/OTcl được viết để thiết lập và cấu hình topology của mạng. TclCL cung cấp liên kết giữa phân cấp lớp, khởi tạo đối tượng, nối kết biến và gửi lệnh.
Hình 4.4: TclCL hoạt động như liên kết giữa A và B
Vậy, tại sao NS lại cần sử dụng đến hai ngôn ngữ? Lý do là vì Bộ mô phỏng cần thực hiện hai việc khác nhau.
Một mặt là vì các mô phỏng cho các giao thức yêu cầu một ngôn ngữ lập trình hệ thống có thể tính toán một cách hiệu quả các byte, các tiêu đề packet và các thuật toán thực thi đang chạy trên một tập dữ liệu lớn. Với tác vụ này, run-time speed (tốc độ thời gian chạy thực) là quan trọng trong khi turn-around time (thời gian thay đổi) thì ít quan trọng hơn. Turn-around time bao gồm thời gian chạy mô phỏng, thời gian tìm lỗi, thời gian sửa lỗi, thời gian biên dịch lại và thời gian chạy lại.
Mặt khác, khi nghiên cứu mạng thì rất cần quan tâm đến các tham số và các cấu hình có thay đổi nhưng không đáng kể, hay quan tâm đến các scenario (tình huống) cần khám phá thật nhanh chóng. Trong tác vụ này thì iteration time (thời gian lặp lại, tức là thời gian hay đổi mô hình và chạy lại) là quan trọng hơn. Vì cấu hình chỉ chạy một lần lúc bắt đầu mô phỏng nên run-time trong tác vụ này rõ ràng kém quan trọng hơn.
Theo giải thích trên, từng ngôn ngữ sẽ được dùng cho những việc gì?
Dùng C++ để:
Mô phỏng giao thức chi tiết yêu cầu ngôn ngữ lập trình hệ thống
Thao tác trên byte, xử lý gói, thực thi thuật toán
Tốc độ thời gian thực là quan trọng nhất
Thực hiện bất kỳ việc gì mà cần phải xử lý tứng packet của một luồng.
Thay đổi hành vi của lớp C++ đang tồn tại theo những hướng đã không được lường trước.
Và dùng OTcl để:
Mô phỏng những thông số hay cấu hình thay đổi
Tham dò nhanh một số tình huống
Thời gian tương tác (thay đổi mô hình hay chạy lại) là quan trọng
Cấu hình, thiết lập hay những gì chỉ làm một lần.
Thực hiện những cái ta muốn bằng cách thao tác trên các đối tượng C++ đang tồn tại.
Ví dụ như các link là những đối tượng OTcl liên kết các mô đun delay (trì hoãn), queueing (hàng đợi) và possibly loss (khả năng mất mát). Còn nếu muốn thực hiện những việc chuyên nghiệp hơn thì cần phải tạo ra đối tượng C++ mới.
Hầu hết định tuyến được viết bằng OTcl (dù thuật toán Dijkstra lõi viết bằng C++). Mô phỏng HTTP có từng luồng bắt đầu tại OTcl nhưng việc xử lý từng gói lại được viết bằng C++. Phương pháp này chạy tốt cho đến khi có đến 100 luồng bắt đầu thời gian mô phỏng mỗi giây. Nói chung, nếu phải triệu gọi Tcl nhiều lần mỗi giây thì có lẽ nên chuyển sang C++.
Về phương diện mã nguồn, NS-2 được viết với 100k dòng mã lệnh C++, 70k dòng mã Tcl và 20k dòng tài liệu.
4.2.3 Các đặc tính của NS-2
NS-2 thực thi những tính năng sau:
Các kỹ thuật quản lý hàng đợi Router như DropTail, RED, CBQ,
Multicasting
Mô phỏng mạng không dây
Được phát triển bởi Sun Microsystems + UC Berkeley (Dự án Daedalus)
Thuộc mặt đất (di động, adhoc, GPRS, WLAN, BLUETOOTH), vệ tinh
Chuẩn IEEE 802.11 có thể được mô phỏng, các giao thức Mobile-IP và adhoc như DSR, TORA, DSDV và AODV
Hành vi nguồn traffic – www, CBR, VBR
Các agent truyền tải – UDP, TCP
Định tuyến
Luồng packet
Mô hình mạng
Các ứng dụng – Telnet, FTP, Ping
Các packet tracing trên tất cả các link và trên các link xác định
4.3.Giới thiệu các phần mềm dùng kết hợp với NS2
4.3.1 NAM
Khi mô phỏng kết thúc, nếu các script Tcl (OTcl) đầu vào yêu cầu thì NS sẽ tạo ra các file text lưu chi tiết dữ liệu mô phỏng. Dữ liệu đó có thể được dùng cho việc phân tích hay được dùng như đầu vào cho các công cụ trình diễn mô phỏng đồ họa NAM.
NAM thực hiện lại những sự kiện từ file lần vết nam (nam tracefile). File này có thể là khổng lồ khi thời gian mô phỏng lớn và sự kiện xảy ra nhiều. Vì thế, phải hết sức cẩn thận. Ngoài ra, cần chú ý rằng các thông tin đồ họa lại không được dùng để phân tích mô phỏng một cách chính xác.
Có thể tóm tắt các tính năng của NAM như sau:
Cung cấp trình diễn ảo cho mạng đã được tạo
Có thể thi hành trực tiếp từ kịch bản Tcl
NAM có giao diện đồ hoạ bắt mắt của CD player với các điều khiển bao gồm play (chạy), stop (ngưng), fast forward (chạy tiếp nhanh), rw (lùi lại), pause (tạm ngưng), điều khiển tốc độ trình diễn và tính năng giám sát packet
Biểu diễn thông tin như throughput (thông lượng), số packet trên từng link
Cung cấp giao diện rê và thả cho việc tạo ra các topology (mô hình).
4.3.1.1 Chạy NAM
Chạy NAM trong Command Line:
$nam –a nam_trace_file.nam
Chạy nam trong kịch bản ns-2:
Proc finish{} {
… …
exec nam –a nam_trace_file.nam &
exit }
Các tuỳ chọn khi chạy NAM:
nam [-a -S -s -f init_script -d display -j jump -r rate -k initPort] tracefiles
-a tạo mới một instance của nam
-S đồng bộ hóa X
-s đồng bộ hoá nhiều trace (nhiều lần vết)
-j thời gian khởi động
-r tốc độ minh họa khởi tạo
-f kịch bản OTcl khởi tạo
-k số socket port khởi tạo
4.3.1.2 Các chức năng NAM trong giao diện đồ họa người dùng
4.3.1.2.a Của sổ NAM Console
Sau khi khởi động NAM, cửa sổ NAM console xuất hiện. Đây chính là một instance của NAM. Một cửa sổ NAM console (hay một instance của NAM) có thể có nhiều cửa sổ minh hoạ NAM. Trong cửa sổ NAM console có hai menu chính ‘File’ và ‘Help’.
‘File’: dưới File có lệnh ‘New’, ‘Open’, ‘WinList’ và ‘Quit’
‘New’ tạo mới một topology ns dùng chương trình soạn thảo NAM
‘Open’ mở các file trace đã tồn tại (mở cửa sổ minh họa nam)
‘WinList’ mở ra cửa sổ liệt kê tên của tất cả các file trace đang mở
‘Quit’ thoát nam
‘Help’: chỉ là các trợ giúp đơn giản và lệnh để xem phiên bản, thông tin về bản quyền
4.3.1.2.b Của sổ minh họa NAM
Khi một file trace được tải vào nam (bằng lệnh ‘Open’ hay từ command line) thì một cửa sổ minh hoạ NAM sẽ xuất hiện. Giao diện chính có menu bar (thanh lệnh chính), control bar (thanh điền khiển), main display (màn hình minh họa chính). Ngoài ra, khi lựa chọn một số chức năng từ menu hay bằng cách click chuột thì còn có thêm các cửa sổ con xuất hiện.
Hình 4.5: Mô tả các công cụ của NAM
Menu bar: dưới menu bar có 3 lệnh con ‘File’, ‘Views’, ‘Analysis’
‘File’
‘Save layout’ lưu tất cả các sơ đồ mạng hiện tại vào file
‘Print’ in tất cả các sơ đồ mạng hiện tại
‘Views’
‘New view’ button tạo ra khung nhìn mới cho cùng một minh họa. Tất cả các minh hoạ sẽ chạy đồng bộ.
‘Show monitor’ dạng checkbox (dùng để kiềm tra). Nếu được check (usr click chọn) thì một cửa sổ con Monitors (Giám sát) xuất hiện. Các monitors sẽ được thể hiện.
‘Show autolayout’ dạng checkbox. Nếu được check thì một cửa con Auto layout (sơ đồ) xuất hiện. Có các box nhập liệu và button điều chỉnh sơ đồ tự động. Checkbox này không thể mở nếu ta dùng các sơ đồ liên kết có hướng.
‘Show annotation’ dạng checkbox. Nếu được check thì một cửa sổ con Annotation (Chú thích) xuất hiện chú thích các sự kiện đang diễn ra theo thứ tự thời gian tăng dần.
‘Analysis’
Active Sessions
Legend
Control bar: dưới control bar có 5 button, 1 nhãn và 1 thanh trượt Rate
5 button
<< - Rewind trả lùi minh họa một khoảng 25*steps giây (steps: bước nhảy, thường là 2.0 mili giây)
< - Backward play trả lùi minh họa một bước nhảy
■ - Stop ngừng minh họa
> - Forward play trả tới minh họa một bước nhảy
>> - Fast Forward trả tới minh họa một khoảng 25*steps giây
Nhãn ‘TIME’ (thời gian) chỉ ra thời gian minh họa hiện tại
Thanh trượt Rate (tốc độ) điều khiển tốc độ update màn hình
Main display: bao gồm tool bar (thanh công cụ điều khiển) và khung minh họa với hai thanh cuộn ngang và dọc.
Tool bar có hai button phóng to và thu nhỏ, một button ‘Edit’ để chỉnh sửa topology của mạng
Khung minh họa thể hiện topology của mạng và hoạt hình hoá hoạt động của mạng
Click trái chuột vào bất kỳ đối tượng nào trong khung minh họa sẽ có cửa sổ thông tin xuất hiện. Với các đối tượng packet và agent, sẽ có button ‘Monitor’ xuất hiện. Click vào button đó sẽ mở ra cửa sổ con Monitors. Với các đối tượng link, sẽ có button ‘Graph’ xuất hiện. Click vào button đó sẽ cho lựa chọn xem biểu đồ bandwidth (băng thông) hay link loss (mất mát gói trên liên kết) của một simplex link trong một duplex link.
Trong cửa sổ con Monitor, packet được monitor sẽ có ba thông số hiển thị là size (kích cỡ), id (mã) và thời gian gửi. Khi packet đến đích thì sẽ ở trạng thái visible (không thấy được). Agent được monitor sẽ có tên agent và bất kỳ biến trace nào liên quan đến agent này được hiển thị. Hiện tại chỉ có thể monitor packet và agent.
Cửa sổ con Automatic Layout có ba box nhập liệu và một button relayout (xuất lại sơ đồ). Sau khi thay đổi thông số và click vào button relayout thì số lượng các tương tác sẽ được thực hiện.
Cửa sổ con Annotation sẽ liệt kê các chú thích cho minh hoạ từ đầu cho đến thời điểm minh họa hiện tại. Chú thích là một cặp (thời gian, chuỗi mô tả sự kiện) cho sự kiện tại thời gian xác định. Click đôi lên chú thích sẽ giúp ta xem lại minh họa tại thời điểm sự kiện diễn ra. Click phải trong cửa sổ con Annatation sẽ có menu sổ với ba tuỳ chọn Add (Thêm), Delete (Xóa), Info (Thông tin) để có thể thêm chú thích mới, xóa chú thích đang tồn tại hay chỉnh sửa thông tin cho mục chú thích tại thời điểm minh họa xác định.
4.3.2 NSCRIPT
Nscript là giao diện đồ hoạ người dùng để tạo kịch bản mô phỏng, được phát triển bằng ngôn ngữ Java 2.
Với Nscript ta có thể:
Tạo các topology và cấu hình các node, các link
Thêm và cấu hình các transport agent (agent truyền tải), UDP, TCP…
Lập lịch các sự kiện mô phỏng
Các biến lần vết
Nscript có thể mở rộng được, cho phép tạo ra các thư viện riêng (thư viện các đối tượng) để có thể dùng thêm đối tượng vào môi trường đồ hoạ.
4.3.2.1 Download và Install
Ứng dụng Nscript được phát triển trên môi trường Java 2, dùng thư viện JFC (Swing) để thực thi giao diện người dùng. Để sử dụng NScript thì cần phải cài đặt JDK (phiên bản 1.3 hay 1.4). Sau đó là cài đặt Nscript (phiên bản 1.0.4)
4.3.2.1.a Download
Hai gói cần download
j2sdk-1_4_2_03-linux-i586.bin
nscript-1.0.4
Địa chỉ download
Packet JDK tại địa chỉ
Packet NScript tại địa chỉ
4.3.2.1.b Install
Bước 1: Cài đặt môi trường Java 2
Tạo thư mục mới /usr/java, chuyển j2sdk-1_4_2_03-linux-i586.bin vào thư mục này và thực hiện các lệnh sau:
usr/java
chmod +x j2sdk-1_4_2_03-linux-i586-rpm.bin
./j2sdk-1_4_2_03-linux-i586-rpm.bin
rpm -Uv j2sdk-1_4_2_03-linux-i586.rpm
Kiểm tra lại:
/usr/java/j2sdk1.4.2_03/bin/java -version
Bước 2: Cài đặt NScript
Chuyển vào thư mục muốn cài đặt Nscript, và chạy lệnh:
tar xvf nscript1.0.4
4.3.2.2 Chạy NSCRIPT
Chuyển vào thư mục cài đặt NScript, chạy lệnh:
nscript-1.0.4
cd bin
java -jar nscript.jar
4.3.2.3 Các chức năng của NSCRIPT trong giao diện đò họa người dùng
Hình 4.6: Bốn thành phần cơ bản của Nscript GUI
Ứng dụng NSCRIPT bao gồm bốn thành phần chính và các điều khiển phụ. Bốn thành phần chính bao gồm :
Graphical Editor: Phần này biểu diễn mô hình kịch bản mô phỏng. Khi có phiên làm việc mới, Graphical Editor sẽ có sẵn một đối tượng ns. ns này thể hiện môi trường mô phỏng và cung cấp điều khiển các thiết lập môi trường, như network dynamics, tracing, nam-tracing và thời gian mô phỏng.
Object Browser: là thanh điều khiển để cấu hình cho bất kỳ đối tượng nào trong mô phỏng, bằng cách chỉ ra tên, lớp, thuộc tính của đối tượng. Đồng thời có cả button UseDefault để khôi phục giá trị mặc định cho các tham số của bất kỳ đối tượng nào, button Apply để áp giá trị hiện tại cho đối tượng được sửa đổi.
Toolbox: là thanh công cụ để tạo mô phỏng. Từng thanh con sẽ chỉ ra các đối tượng templates (đối tượng mẫu) sẵn có, hay các lớp được dùng để tạo mô phỏng. Các đối tượng này được phân loại vào trong các thư viện. Các thư viện mặc định là Topology, Transport, Application và Ultilities. Có thể thêm các đối tượng tự tạo vào môi truờng bằng cách dùng tuỳ chọn Open Library trong menu File.
Toolbar: là thanh chứa các lệnh, như mở và lưu script, xuất script dạng tcl, mở thư viện các đối tượng mô phỏng.
CHÚ Ý
Có thể export (xuất) script *.nss (file nscript) sang dạng script *.tcl để chạy trong ns trực tiếp.
Không thể đọc file *.tcl ngược lại sang dạng file *.nss để chạy trong môi trường nscript.
4.3.3 Topology Generator
Topology Generator (Bộ tạo mô hình mạng) được sử dụng kết hợp với NS-2 để tạo ra các topology mạng nhằm mô phỏng một mô hình mạng nhất định. Mỗi một bộ tạo topology cung cấp một giao diện đồ họa người dùng. Kế đến, user chọn cấu trúc của topology như số node. Khi hoàn tất thao tác trên, bộ tạo mô hình mạng sẽ chạy để sinh ra mã Tcl mô tả topology sẽ được dùng trong NS-2. Có bốn bộ tạo mô hình mạng hay được dùng là: GT-ITMS, TIERS, BRITE, INET.
4.3.3.1 GT-ITMS
Bộ tạo mô hình mạng này tập trung vào việc tái tạo lại cấu hình trúc phân lớp của topology Internet dựa trên Transit Stub. Tiến hành theo các bước sau
Đầu tiên, một đồ thị có kết nối ngẫu nhiên được tạo ra (dùng mô hình Waxman)
Từng node trong đồ thị biểu diễn một Entire Transit Domain (miền truyền tải tổng thể)
Với từng node trong miền Transit – một số đồ thị ngẫu nhiên được tạo biểu diễn một Stub Domain, miền này sẽ được gắn vào node đó.
4.3.3.2 TIERS
Tiers dựa trên phân cấp lớp ba mức, tập trung vào việc tái tạo lại sự phân biệt giữa mạng diện rộng, mạng khu vực đô thị, mạng cục bộ được giàn xếp trong Internet.
4.3.3.3 BRITE
Đây là mô hình tạo mạng đơn cung cấp vài lũy thừa (bậc) tự do lưu ý đến việc các node được đặt như thế nào trong mặt phẳng. Những thuộc tính của phương thức liên kết nối được sử dụng.
4.3.3.4 INET
Bộ tạo mạng này ban đầu giả sử các mức node theo phân bố luật luỹ thừa. Các bước của bộ tạo mô hình mạng này như sau
Hình thành cây bao trùm dùng các node có mức lớn hơn 2
Gắn các node với mức 1 vào cây bao trùm
So trùng các mức chưa được làm đầy của các node đang tồn tại với nhau
4.3.4 Trace Data Analyzers
4.3.4.1 XGRAPH
4.3.4.1.a Download và Install
Download packet:
xgraph-12.1.tar
Địa chỉ download
4.3.4.1.b Chạy XGRAPH
Chạy XGRAPH trong Command Line:
$xgraph out.tr –geometry 800x400
Chạy XGRAPH trong kịch bản ns-2:
Proc finish{} {
… …
exec xgraph out.tr –geometry 800x400 &
exit }
Các tuỳ chọn khi chạy XGRAPH:
xgraph [-device ]
[-bd border_color] [-bg background_color]
[-fg foreground_color]
[-bar][-brb bar_base][-brw bar_width][-bof bar_offset]
[-stk] [-bw bdr_width] [-db] [-gw grid_size]
[-fitx] [-fity][-gs grid_style] [-lf label_font]
[-lnx] [-lny] [-lw line_width] [-lx x1,x2] [-ly y1,y2]
[-m] [-M] [-nl] [-ng] [-nb] [-p] [-P]
[-rv] [-t title] [-tf title_font] [-tk]
[-scale factor]
[-x x_unit_name] [-y y_unit_name]
[-fmtx format] [-fmty format]
[[-geometry |=]W=H+X+Y]
[[-display] :.]
[-Pprinter|-o output_file|-O output_file]
[[- set_name] [-zg zero_color] [-zw zero_size]
[-a] [-dl ] input_files...
-bar Vẽ đồ thị thanh với cơ số base –brd, chiều rộng width –brw và offset -bof
-stk Vẽ đồ thị thanh chứa ngăn xếp tập sữ liệu
-fitx Tỉ lệ các thiết lập khít với trục X [0,1]
-fity Tỉ lệ các thiết lập khít với trục Y [0,1]
-fmtx In định dạng theo trục X
-fmty In định dạng theo trục Y
-scale Chia tỉ lệ file đầu ra theo thừa số (Scale the output file with factor)
-O fn In file đầu ra ở máy in (Printer ready output file)
-o fn File đầu ra được mã hoá (Encapsulated (document) output file)
-bb Vẽ khung bao quanh dữ liệu
-db Bật chế độ debug (chế độ gỡ rối)
-lnx Trục X tính theo tỉ lệ logarit
-lny Trục Y tính theo tỉ lệ logarit
-m -M Đánh dấu các điểm một cách rõ ràng (M thay đổi theo màu)
-nl Không vẽ các dòng (vẽ tán xạ)
-ng Không viết chú thích
-nb Không vẽ các button
-p -P Đánh dấu điểm bằng dấu chấm. P nghĩa là chấm to.
-rv Hiển thị màu đen trắng
-tk Vẽ dấu phân thời thay vì vẽ khung lưới toàn bộ
-a Khởi động trong chế độ minh họa
-dl Trì hoãn minh họa. Mặc định là 2
4.3.4.1.c Các chức năng của XGRAPH trong giao diện đồ họa người dùng
Trong giao diện đồ họa người dùng, XGRAPH rất dễ dùng. Có thể rê chuột chọn vùng để phóng to đồ thị theo ý muốn.
Hình 4.7: Giao diện đồ họa người dùng của Xgraph
4.3.4.2 TRACEGRAPH
TraceGraph là bộ phân tích file trace. Tracegraph chạy trong hệ điều hành Windows, Linux, Unix và yêu cầu hệ thống có cài đặt Matlab 6.0 (hoặc các phiên bản cao hơn).
Tracegraph hỗ trợ các định dạng file trace như sau:
Wired (có dây)
Satellite (vệ tinh)
Wireless (không dây)
Tracegraph phiên bản 2.02 có các tính năng sau:
238 đồ thị 2D (hai chiều)
12 đồ thị 3D (ba chiều)
Các đồ thị và các thống kê về Delay (trì hoãn), jitter (độ rung pha), processing times (số lần xử lý), Round Trip Times (số lần khứ hồi), intermediate nodes (số node trung gian) và throughput (thông lượng)
Các đồ thị và các thống kê cho toàn network (mạng), link (liên kết) và node
Tất cả các kết quả có thể được lưu vào file dạng text (dạng văn bản), các đồ thị có thể lưu dưới dạng file jpeg hay tiff.
Thông tin của trục x,y,z: minimum (giá trị nhỏ nhất), mean (giá trị trung bình), maximum (giá trị lớn nhất), standard deviation (độ lệch tiêu chuẩn) và median (số trung bình)
Nếu các đồ thị lưu trong file text thì trong file này có thể dựa vào thông tin 2 hay 3 cột để vẽ lại đồ thị.
Xử lý các file kịch bản để phân tích một cách tự động
4.3.4.2.a Download và Install
Hai gói cần download
Mglinstaller (packet matlab)
tracegraph202linux.tar
Địa chỉ download:
Bước 1: Cài đặt MATLAB
Tạo thư mục mới matlab, chuyển packet mglinstaller vào thư mục này và thực hiện giải nén file này
{đường dẫn đến thư mục matlab}/matlab
unzip mglinstaller
Bước 2: Cài đặt TRACEGRAPH
Chuyển vào thư mục muốn cài đặt TRACEGRAPH, copy packet tracegraph202linux.tar vào thư mục này và chạy lệnh:
tar xvf tracegraph202linux.tar
Chuyển vào thư mục tracegraph202 vừa được giải nén
./install
4.3.4.2.b Chạy TRACEGRAPH
Chuyển vào thư mục cài đặt TRACEGRAPH, chạy lệnh:
tracegraph202
cd demo # demo là thư mục chứa file ví dụ ns-simple.tr
../trgraph ns-simple.tr
4.3.4.2.c Chức năng của TRACEGRAPH trong giao diện đồ họa người dùng
Ứng dụng TRACEGRAPH bao gồm 3 thành phần chính: cửa sổ Tracegraph 2.02, cửa sổ Network Information (thông tin mạng) và cửa sổ Graphs (đồ thị).
Hình 4.8 : Cửa sổ Graphs
Hình 4.9 : Cửa sổ Network Imformation
4.4.Mô phỏng khôi phục đường theo cơ chế Shortest – Dynamic
4.4.1.Mô hình
Hình 4.10 : Mô hình mạng mô phỏng
Các nguồn phát lưu lượng (src) đều đặt tại nút 0 và các đích nhận lưu lượng (sink)
đều đặt tại nút 10. Các link giữa các nút đều là full -duplex với thời gian trễ là 30ms
và có băng thông như trên hình (M: Mbps).
Topology như hình trên, trong đó nút 0 và nút 10 là router IP thông thường (R0 và
R10). Các nút từ 1 đến 9 là các router có hỗ trợ MPLS (LSR1 đến LSR9) tạo thành một MPLS domain .
Có 1 nguồn lưu lượng (src1) được tạo ra và gắn vào nút R0. Tương ứng có 1 đích lưu lượng (sink1) gắn vào nút R10. Nguồn phát luồng lưu lượng với tốc độ 0,8 Mbps, kích thước gói 600B.
4.4.2.Thực hiện và kết quả
Thực hiện mô phỏng với lịch trình quy định trong script mô phỏng:
Thiết lập đường làm việc: LSP_1100 (ER=1_3_5_7_9)
Thời điểm 0,5s : Luồng 1 (src1 – sink1) bắt đầu truyền trên LSP _1100
Thời điểm 2,0s : Link giữa LSR5 -LSR7 bị đứt, đến 3, 5s thì khôi phục.
Thời điểm 5,0s : Luồng 1 ngưng truyền.
Kết quả truyền luồng: Truyền 750 gói, mất 192 gói, tỉ lệ mất gói: 25,6%
Hình 4.11 :Đồ thị kết quả mô phỏng
Hình 4.12 : Kết quả mô phỏng
4.4.3.Nhận xét
Cơ chế Shortest -Dynamic thuộc loại sửa chữa cục bộ bảo vệ link. Kết quả trực quan trong cửa sổ NAM (hình 69) cho thấy khi link LSR5 -LSR7 bị đứt, LSR5 tự động định tuyến và báo hiệu thiết lập LSP _1101 ngắn nhất nối giữa LSR5 và LSR7 (đi theo đường 5_6_8_7). Như vậy, các gán kết nhãn của LSP _1100 không bị thay đổi. LSP_1100 coi như được “đi ngầm” bằng cách lồng vào trong LSP _1101 để đi từ LSR5 đến được LSR7, tránh được đoạn link bị đứt. Trong thời gian chờ thiết lập tuyến “đường vòng” LSP_1101, các gói trên LSP _1100 bị maát.
Kết luận
Sau một thời gian tìm hiểu, em đã hoàn thành đồ án với nội dung về:
Công nghệ chuyển mạch nhãn đa giao thức MPLS nói chung và kỹ thuật lưu lượng nói riêng.
Các vấn đề kỹ thuật và mô hình thực hiện công nghệ MPLS TE. Trong đó, đồ án trình bày chi tiết về thuật toán Shortest-Dynamic...
Việc tìm hiểu và nghiên cứu về công nghệ MPLS TE giúp em củng cố kiến thức đã học: nắm vững cách thức tiếp cận mạng Viễn thông theo mô hinh OSI, hiểu rõ các topo mạng, hoạt động định tuyến điều khiển diễn ra trong một mạng, đặc biệt là hoạt động của mạng sử dụng công nghệ MPLS-một công nghệ chuyển mạch tiên tiến hiện nay, hơn nữa em có cơ hội tìm hiểu kỹ vào một trong những ứng dụng nổi bật của công nghệ này, đó là việc thực hiện các thuật toán lưu lượng trên nền mạng MPLS chung…
Kỹ thuật lưu lượng cho phép trong môi trường mạng công cộng xây dựng các thuật toán truyền gói tin để đảm bảo an ninh dữ liệu. Với những ưu điểm về mặt giá thành, phạm vi hoạt động không hạn chế, linh hoạt trong triển khai và mở rộng, MPLS nói chung và MPLS TE nói riêng là công nghệ hứa hẹn triển vọng thị trường rất lớn, nhất là trong bối cảnh chuẩn bị gia nhập WTO như Việt Nam ta hiện nay. Tổng Công ty BCVT đã và đang đưa MPLS TE vào ứng dụng thực tế trong mạng NGN. Ứng dụng MPLS TE ở Việt Nam là hướng phát triển tiếp theo của đề tài này.
Mặc dù đã cố gắng nhưng do thời gian và trình độ có hạn nên đồ án này khó tránh khỏi những thiếu sót. Rất mong nhận được ý kiến đóng góp của thầy cô và bạn bè để em có thể sửa đổi, bổ sung và hoàn thiện đồ án này.
Một lần nữa, em xin gửi lời cảm ơn chân thành đến thầy giáo ThS. Nguyễn Khắc Kiểm và các thầy cô giáo trong khoa Điện Tử Viễn Thông thuộc trường đại học Bách Khoa Hà Nội đã tận tình dạy dỗ và giúp đỡ em trong quá trình học tập cũng như làm đồ án này.
Tài liệu tham khảo
[1] (Luc De Ghein - CiscoPress 2006) MPLS Fundamentals
[2] (David McDysan, Dave Paw - McGrawHill 2002) ATM & MPLS: Theory and Application
[3] (Eric Osborne, Ajay Simha - CiscoPress 2002) Traffic Engineering with MPLS
[4] (Student Book - CiscoPress 2001) MPLS Traffic Engineering Technology
[5] (Johan Martin - University of Oslo 2005) MPLS Based Recovery Mechanisms
[6] RFC 3031: Multiprotocol Label Switching Architecture
[7] RFC 3032: MPLS Label Stack Encoding (updated by RFC 3443,RFC 4182)
[8] RFC 3036: LDP Specification
[9] RFC 2702: Requirements for Traffic Engineering Over MPLS
[10] RFC 3469: Framework for MPLS-based Recovery
Phụ lục
Code nguồn chương trình
######################################################################
# BAI 1: KHOI PHUC DUONG THEO CO CHE SHORTEST-DYNAMIC #
######################################################################
# Tao ra mot doi tuong mo phong
set ns [new Simulator]
$ns rtproto LS
# Tao file de xuat ket qua cho NAM
set nf [open bai6.nam w]
$ns namtrace-all $nf
# Tao cac file de luu du lieu cho xgraph
set f1 [open luong_1.tr w]
set f2 [open luong_seq.tr w]
# So do ket noi mang
#
# 1M 2M 1M
# LSR2-------LSR4-------LSR6-------LSR8
# / / / / \
# / / / / \
# 1M / 1M / 1M / 1M / \ 2M
# / / / / \
# / / / / \
# R0-----LSR1-------LSR3-------LSR5-------LSR7--------LSR9------R10
# 2M 1M 2M 1M
# Khai bao 2 nut IP (R0,R10) va 9 nut MPLS (LSR1 --> LSR9)
set R0 [$ns node]
foreach i "1 2 3 4 5 6 7 8 9" {
set LSR$i [$ns mpls-node]
set m LSR$i
eval $$m color blue
}
set R10 [$ns node]
# Khai bao link: odes bw delay queue
$ns duplex-link $R0 $LSR1 3Mb 10ms DropTail
$ns duplex-link $LSR1 $LSR3 2Mb 30ms DropTail
$ns duplex-link $LSR3 $LSR5 1Mb 30ms DropTail
$ns duplex-link $LSR5 $LSR7 2Mb 30ms DropTail
$ns duplex-link $LSR7 $LSR9 1Mb 30ms DropTail
$ns duplex-link $LSR9 $R10 3Mb 10ms DropTail
$ns duplex-link $LSR1 $LSR2 1Mb 30ms DropTail
$ns duplex-link $LSR2 $LSR4 1Mb 30ms DropTail
$ns duplex-link $LSR4 $LSR6 2Mb 30ms DropTail
$ns duplex-link $LSR6 $LSR8 1Mb 30ms DropTail
$ns duplex-link $LSR8 $LSR9 2Mb 30ms DropTail
$ns duplex-link $LSR3 $LSR4 1Mb 30ms DropTail
$ns duplex-link $LSR5 $LSR6 1Mb 30ms DropTail
$ns duplex-link $LSR7 $LSR8 1Mb 30ms DropTail
# Ve dang so do mang
$ns duplex-link-op $R0 $LSR1 orient right
$ns duplex-link-op $LSR1 $LSR3 orient right
$ns duplex-link-op $LSR3 $LSR5 orient right
$ns duplex-link-op $LSR5 $LSR7 orient right
$ns duplex-link-op $LSR7 $LSR9 orient right
$ns duplex-link-op $LSR9 $R10 orient right
$ns duplex-link-op $LSR1 $LSR2 orient 0.333
$ns duplex-link-op $LSR2 $LSR4 orient right
$ns duplex-link-op $LSR4 $LSR6 orient right
$ns duplex-link-op $LSR6 $LSR8 orient right
$ns duplex-link-op $LSR8 $LSR9 orient 1.667
$ns duplex-link-op $LSR3 $LSR4 orient 0.333
$ns duplex-link-op $LSR5 $LSR6 orient 0.333
$ns duplex-link-op $LSR7 $LSR8 orient 0.333
# Ghi chu
$ns duplex-link-op $LSR1 $LSR3 label " 2M "
$ns duplex-link-op $LSR3 $LSR5 label " 1M "
$ns duplex-link-op $LSR5 $LSR7 label " 2M "
$ns duplex-link-op $LSR7 $LSR9 label " 1M "
$ns duplex-link-op $LSR1 $LSR2 label " 1M "
$ns duplex-link-op $LSR2 $LSR4 label " 1M "
$ns duplex-link-op $LSR4 $LSR6 label " 2M "
$ns duplex-link-op $LSR6 $LSR8 label " 1M "
$ns duplex-link-op $LSR8 $LSR9 label " 2M"
$ns duplex-link-op $LSR3 $LSR4 label " 1M "
$ns duplex-link-op $LSR5 $LSR6 label " 1M "
$ns duplex-link-op $LSR7 $LSR8 label " 1M "
$R0 label "Nguon"
$R10 label "Dich"
$LSR1 label "Ingress "
$LSR9 label " Egress"
# Cau hinh LDP agent tren tat ca cac nut MPLS
$ns configure-ldp-on-all-mpls-nodes
# Dat color cho cac ban tin LDP
$ns ldp-request-color blue
$ns ldp-mapping-color red
$ns ldp-withdraw-color magenta
$ns ldp-release-color orange
$ns ldp-notification-color green
#----------------------------------------------------------------------
# Dinh nghia cac ham su dung trong chuong trinh chinh
#----------------------------------------------------------------------
# Tao mot procedure ghi nhan bang thong theo mot chu ki $time
proc record {} {
global sink1 f1
set ns [Simulator instance]
# Dinh chu ki ghi nhan bang thong
set time 0.1
# Lay so luong packet nhan duoc trong chu ky o moi sink
set bw1 [$sink1 set bytes_]
set now [$ns now]
puts $f1 "$now [expr $bw1/$time*8/1000000]"
# Reset gia tri bytes_ cua sink
$sink1 set bytes_ 0
#Dinh thoi goi lai ham record sau chu ky $time
$ns at [expr $now+$time] "record"
}
#----------------------------------------------------
set prvseqnb -1
set seqerrnb 0
# Thu tuc ghi lai so packet nhan duoc dung thu tu
proc seq-record {size rate ftime} {
global prvseqnb seqerrnb sink1 f2
set ns [Simulator instance]
# Dat chu ky thoi gian chay lai thu tuc nay
set tsize [parse-bw $size]
set trate [parse-bw $rate]
set time [expr double($tsize)/double($trate)/8.0]
set now [$ns now]
# Tim so thu tu cua packet
set revseqnb [$sink1 set expected_]
if {$prvseqnb > $revseqnb} {
incr seqerrnb 1
}
# Ghi so thu tu cua packet vao file
if {$prvseqnb != $revseqnb} {
puts $f2 "$now [$sink1 set expected_]"
set prvseqnb $revseqnb
}
# Dinh thoi goi lai ham seq-record
if { [expr $now+$time] < $ftime } {
$ns at [expr $now+$time] "seq-record $size $rate $ftime"
}
}
#----------------------------------------------------
# Ham tao mot nguon luu luong gan vao node voi sink, size goi,
# burst, idle time, rate va colour cua luu luong
proc attach-expoo-traffic { node sink size burst idle rate } {
set ns [Simulator instance]
set source [new Agent/CBR/UDP]
$ns attach-agent $node $source
set traffic [new Traffic/Expoo]
$traffic set packet-size $size
$traffic set burst-time $burst
$traffic set idle-time $idle
$traffic set rate $rate
$source attach-traffic $traffic
$ns connect $source $sink
return $source
}
#----------------------------------------------------
# Thu tuc sau thong bao ER/CR-LSP da thiet lap de thuc hien tac vu khac
proc notify-erlsp-setup {node lspid} {
global src1 src2 LSR3 LSR5 LSR7
set ns [Simulator instance]
set msg " [string range [$ns now] 0 3]s: Tunnel LSP_$lspid
(Ingress=LSR[$node id]) da duoc thiet lap xong !"
puts $msg
$ns trace-annotate $msg
set module [$node get-module "MPLS"]
switch $lspid {
1100 {
$module bind-flow-erlsp 10 100 $lspid
}
1101 { # LSP_1101 tu dong chon duong ngan nhat vong qua loi
$module secondary-lsp-binding 1100 $lspid
}
default {
puts " Error!"
exit 1
}
}
}
proc notify-erlsp-fail {node status lspid tr} {
set ns [Simulator instance]
set module [$node get-module "MPLS"]
if { [$node id] == 1 && $status=="BSNodeError" } {
$module set-lib-error-for-lspid $lspid 1
set msg " [string range [$ns now] 0 3]s: Phat hien loi tren duong lam
viec LSP_$lspid. Chuyen sang duong bao ve LSP_1200 !"
}
if { [$node id] == 1 && $status=="NodeRepair" } {
$module set-lib-error-for-lspid $lspid -1
set msg " [string range [$ns now] 0 3]s: Loi da duoc khoi phuc. Chuyen
luu luong tro lai duong lam viec LSP_$lspid !"
}
puts $msg
$ns trace-annotate $msg
}
#----------------------------------------------------
# Thu tuc xuat tong so packet nhan duoc o cac sink
proc recv-pkts {} {
global sink1 seqerrnb
set ns [Simulator instance]
set msg " Luong 1 da truyen [$sink1 set expected_] goi, mat [$sink1 set
nlost_] goi, ti le mat goi la [string range [expr [$sink1 set
nlost_]*100.0/[$sink1 set expected_]] 0 3] */*"
puts $msg
$ns trace-annotate $msg
set msg " Tong so packet bi sai thu tu : $seqerrnb goi"
puts $msg
$ns trace-annotate $msg
}
#----------------------------------------------------
# Thu tuc dong file va the hien ket qua khi ket thuc mo phong
proc finish {} {
global ns nf f1 f2
$ns flush-trace
close $nf
close $f1
close $f2
exec xgraph luong_1.tr -M -nb -bg white -fg black -zg black \
-geometry 500x250 -y "BW (Mbps)" -x "Time (sec)" \
-t "Bai 6: Khoi phuc duong theo co che Shortest-Dynamic" -tf
"helvetica-12" &
exec xgraph luong_seq.tr -p -nl -nb -bg white -fg black -zg black \
-geometry 500x250 -y "Packet No." -x "Time (sec)" \
-t "Bai 6: Bieu do so thu tu packet theo thoi gian" -tf "helvetica-12"
&
exec nam -r 2ms bai6.nam &
exit 0
}
#----------------------------------------------------
# Tao ra sink1 gan voi nut R10 (day la noi thu nhan traffic)
set sink1 [new Agent/LossMonitor]
$ns attach-agent $R10 $sink1
# Tao ra nguon luu luong src1 gan voi nut R0 bang cach
# goi ham attach-expoo-traffic. Luong co packet_size=600, rate=0.8Mbps
set src1 [attach-expoo-traffic $R0 $sink1 600B 0 0 0.8M ]
$src1 set fid_ 100
$ns color 100 red
# Cai dat co che khoi phuc: SHORTEST-DYNAMIC
$ns enable-reroute shortest-dynamic
[$LSR5 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
[$LSR9 get-module "MPLS"] enable-reroute-egress-lsr
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 6: KHOI PHUC DUONG THEO CO CHE SHORTEST-DYNAMIC \n "
$ns at 0.0 "record"
$ns at 0.0 "seq-record 600 800k 5.5"
# Thiet lap LSP lam viec
$ns at 0.2 "$ns trace-annotate {Bao hieu thiet lap duong lam viec: LSP_1100,
ER=1_3_5_7_9 }"
$ns at 0.2 "[$LSR1 get-module "MPLS"] setup-erlsp 9 1_3_5_7_9 1100”
$ns at 0.5 "$ns trace-annotate {Luong 1: BW=0.8M (start=0.5 stop=5.0) su dung
LSP_1100, ER=1_3_5_7_9 }"
$ns at 0.5 "$src1 start"
# Link giua LSR5 va LSR7 bi dut tu 2.0s, den 3.5s thi khoi phuc lai
$ns rtmodel-at 2.0 down $LSR5 $LSR7
$ns rtmodel-at 3.5 up $LSR5 $LSR7
$ns at 5.0 "$src1 stop"
$ns at 5.5 "recv-pkts"
$ns at 5.5 "finish"
$ns run
Các file đính kèm theo tài liệu này:
- Bao cao do an - Bui Quang Thai.doc