Download as pdf or txt
Download as pdf or txt
You are on page 1of 126

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang phụ bìa

VŨ VĂN TRƯỞNG

TÊN CỦA LUẬN VĂN

KỸ THUẬT LƯU LƯỢNG TRONG MẠNG


CHUYỂN MẠCH NHÃN ĐA GIAO THỨC

Ngành : Công nghệ Điện tử- Viễn thông


Chuyên ngành: Kỹ thuật Điện tử
Mã số: 60.52.70

LUẬN VĂN THẠC SĨ

NGƯỜI HƯỚNG DẪN KHOA HỌC


PGS.TS TRẦN QUANG VINH

Hà Nội - 2009
Trang-2-

LỜI CAM ĐOAN

Tôi xin cam đoan toàn bộ những nội dung và số liệu trong luận văn thạc

sĩ: “Kỹ thuật lưu lượng trong mạng chuyển mạch nhãn đa giao thức” là do tôi

tự nghiên cứu và thực hiện.

Học viên thực hiện luận văn

Vũ Văn Trưởng
Trang-3-

LỜI CẢM ƠN
Để hoàn thành chương trình cao học và viết luận văn này,
Trước hết, tôi xin chân thành cảm ơn đến quí thầy cô
trường Đại học Công nghệ- Đại học Quốc gia Hà Nội, đặc
biệt là những thầy cô đã tận tình dạy bảo cho tôi suốt thời
gian học tập tại trường.
Tôi xin gửi lời biết ơn sâu sắc đến Phó giáo sư – Tiến
sĩ Trần Quang Vinh đã dành rất nhiều thời gian và tâm
huyết hướng dẫn nghiên cứu và giúp tôi hoàn thành luận
văn tốt nghiệp.
Mặc dù tôi đã có nhiều cố gắng hoàn thiện luận văn
bằng tất cả sự nhiệt tình và năng lực của mình, tuy
nhiên không thể tránh khỏi những thiếu sót, rất mong
nhận được những đóng góp quí báu của quí thầy cô và các
bạn.

Hà Nội, tháng 12 năm 2009


Học viên
Vũ Văn Trưởng
Trang-4-

MỤC LỤC
Trang phụ bìa .................................................................................................... 1
LỜI CAM ĐOAN .............................................................................................. 2
LỜI CẢM ƠN .................................................................................................... 3
MỤC LỤC .......................................................................................................... 4
THUẬT NGỮ VIẾT TẮT ................................................................................ 7
DANH SÁCH CÁC BẢNG............................................................................. 11
DANH SÁCH CÁC HÌNH MINH HỌA ....................................................... 11
MỞ ĐẦU .......................................................................................................... 13
Chương 1: CHUYỂN MẠCH NHÃN ĐA GIAO THỨC MPLS ................ 15
1.1 Tổng quan .............................................................................................. 15
1.1.1 Tính thông minh phân tán ............................................................. 15
1.1.2 MPLS và mô hình tham chiếu OSI ............................................... 16
1.2 Các khái niệm cơ bản trong MPLS .................................................... 17
1.2.1 Miền MPLS (MPLS domain)........................................................ 17
1.2.2 Lớp chuyển tiếp tương đương (FEC) .......................................... 18
1.2.3 Nhãn và chồng nhãn ...................................................................... 18
1.2.4 Hoán đổi nhãn (Label Swapping) ................................................ 19
1.2.5 Đường chuyển mạch nhãn LSP (Label Switched Path) ............. 19
1.2.6 Chuyển gói qua miền MPLS ......................................................... 21
1.3 Mã hóa nhãn và các chế độ đóng gói nhãn MPLS ............................ 21
1.3.1 Mã hóa chồng nhãn ....................................................................... 21
1.3.2 Chế độ Frame ................................................................................. 23
1.3.3 Chế độ Cell ..................................................................................... 23
1.4 Cấu trúc chức năng MPLS .................................................................. 25
1.4.1 Kiến trúc một nút MPLS (LER và LSR)..................................... 25
1.4.2 Mặt phẳng chuyển tiếp (mặt phẳng dữ liệu) ............................... 26
1.4.3 Mặt phẳng điều khiển.................................................................... 28
1.5 Hoạt động chuyển tiếp MPLS ............................................................. 28
1.5.1 Hoạt động trong mặt phẳng chuyển tiếp ..................................... 28
1.5.2 Gỡ nhãn ở chặng áp cuối PHP (Penultimate Hop Popping) ..... 29
1.5.3 Một ví dụ hoạt động chuyển tiếp gói ............................................ 30
1.6 Ưu điểm và ứng dụng của MPLS ........................................................ 31
1.6.1 Đơn giản hóa chức năng chuyển tiếp ........................................... 31
1.6.2 Kỹ thuật lưu lượng ........................................................................ 31
1.6.3 Định tuyến QoS từ nguồn ............................................................. 31
1.6.4 Mạng riêng ảo VPN ....................................................................... 31
1.6.5 Chuyển tiếp có phân cấp (Hierachical forwarding) ................... 32
1.6.6 Khả năng mở rộng (Scalability) ................................................... 32
1.7 Tổng kết chương ................................................................................... 32
Chương 2: ĐỊNH TUYẾN VÀ BÁO HIỆU MPLS ...................................... 34
2.1 Định tuyến trong MPLS ...................................................................... 34
2.1.1 Định tuyến ràng buộc (Constrain-based Routing) ..................... 34
2.1.2 Định tuyến tường minh (Explicit Routing) ................................. 35
2.2 Các chế độ báo hiệu MPLS ................................................................... 36
2.2.1 Chế độ phân phối nhãn ................................................................. 36
Trang-5-

2.2.2 Chế độ duy trì nhãn ....................................................................... 37


2.2.3 Chế độ điều khiển LSP .................................................................. 38
2.2.4 Các giao thức phân phối nhãn MPLS .......................................... 39
2.3 Giao thức phân phối nhãn LDP (Label Distribution Protocol) ....... 40
2.3.1 Hoạt động của LDP ....................................................................... 40
2.3.2 Cấu trúc thông điệp LDP .............................................................. 42
2.3.3 Các bản tin LDP [1] ....................................................................... 44
2.3.4 LDP điều khiển độc lập và phân phối theo yêu cầu ................... 45
2.4 Giao thức CR-LDP (Constrain-based routing LDP) ........................ 46
2.4.1 Mở rộng cho định tuyến ràng buộc .............................................. 46
2.4.2 Thiết lập một CR-LSP (Constrain-based routing LSP) ............. 47
2.4.3 Tiến trình dự trữ tài nguyên ......................................................... 48
2.5 Giao thức RSVP-TE (RSVP Traffic Engineering) [3] ...................... 49
2.5.1 Các bản tin thiết lập dự trữ RSVP [1] ......................................... 49
2.5.2 Các bản Tear Down, Error và Hello của RSVP-TE [1] ............. 50
2.5.3 Thiết lập tuyến tường minh điều khiển tuần tự theo yêu cầu ... 51
2.5.4 Giảm lượng overhead làm tươi RSVP ......................................... 52
2.6 Tổng kết chương ................................................................................... 53
Chương 3: KỸ THUẬT LƯU LƯỢNG TRONG MPLS ............................ 54
3.1 Kỹ thuật lưu lượng (Traffic Engineering) .......................................... 54
3.1.1 Các mục tiêu triển khai kỹ thuật lưu lượng ................................. 54
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 ..... 55
3.1.3 Hàng đợi lưu lượng ......................................................................... 56
3.1.4 Giải thuật Leaky Bucket và Token Bucket .................................. 59
3.1.5 Giải pháp mô hình chồng phủ (Overlay Model) .......................... 62
3.2 MPLS và kỹ thuật lưu lượng ................................................................ 62
3.2.1 Khái niệm trung kế lưu lượng (traffic trunk) .............................. 63
3.2.2 Đồ hình nghiệm suy (Induced Graph) .......................................... 64
3.2.3 Bài toán cơ bản của kỹ thuật lưu lượng trên MPLS ................... 64
3.3 Trung kế lưu lượng và các thuộc tính ................................................. 64
3.3.1 Các hoạt động cơ bản trên trung kế lưu lượng ............................ 65
3.3.2 Thuộc tính tham số lưu lượng (Traffic Parameter) .................... 65
3.3.3 Thuộc tính lựa chọn và quản lý đường (chính sách chọn đường)
................................................................................................................... 66
3.3.4 Thuộc tính ưu tiên / lấn chiếm (Priority/Preemption) ................ 67
3.3.5 Thuộc tính đàn hồi (Resilience) ..................................................... 68
3.3.6 Thuộc tính khống chế (Policing) ................................................... 68
3.4 Các thuộc tính tài nguyên ..................................................................... 68
3.4.1 Bộ nhân cấp phát cực đại (maximum allocation multiplier) ...... 68
3.4.2 Lớp tài nguyên (Resource-Class) .................................................. 69
3.4.3 Độ đo TE .......................................................................................... 69
3.5 Tính toán đường ràng buộc .................................................................. 69
3.5.1 Quảng bá các thuộc tính của liên kết ............................................ 69
3.5.2 Tính toán LSP ràng buộc (CR-LSP) ............................................. 71
3.5.3 Giải thuật chọn đường ................................................................... 71
3.5.4 Ví dụ về chọn đường cho trung kế lưu lượng .............................. 72
Trang-6-

3.5.5 Tái tối ưu hóa (Re-optimization) ................................................... 74


3.6 Bảo vệ và khôi phục đường .................................................................. 75
3.6.1 Phân loại các cơ chế bảo vệ khôi phục .......................................... 76
3.6.2 Mô hình Makam ............................................................................. 77
3.6.3 Mô hình Haskin (Reverse Backup) ............................................... 77
3.6.4 Mô hình Hundessa .......................................................................... 78
3.6.5 Mô hình Shortest-Dynamic ............................................................ 79
3.6.6 Mô hình Simple-Dynamic .............................................................. 79
3.6.7 Mô hình Simple-Static .................................................................... 80
3.7 Tổng kết chương .................................................................................... 80
Chương 4: MÔ PHỎNG MPLS-TE VÀ ĐÁNH GIÁ .................................. 81
4.1 Phương pháp và công cụ mô phỏng ..................................................... 81
4.1.1 Phương pháp phân tích .................................................................. 81
4.1.2 Chuẩn bị công cụ mô phỏng .......................................................... 82
4.2 Nội dung và kết quả mô phỏng ............................................................ 82
4.2.1 Mô phỏng mạng IP không hỗ trợ MPLS ...................................... 83
4.2.2 Mô phỏng định tuyến ràng buộc trong mạng MPLS .................. 84
4.2.3 Mô phỏng hoạt động lấn chiếm (Preemption) với các độ ưu tiên
................................................................................................................... 87
4.2.4 Mô phỏng khôi phục đường theo cơ chế Makam ........................ 89
4.2.5 Mô phỏng khôi phục đường theo cơ chế Haskin (Reverse
Backup) ..................................................................................................... 91
4.2.6 Mô phỏng khôi phục đường theo cơ chế Shortest-Dynamic....... 93
4.2.7 Mô phỏng khôi phục đường theo cơ chế Simple-Dynamic ......... 94
4.3 Tổng kết chương .................................................................................... 96
KẾT LUẬN ...................................................................................................... 97
TÀI LIỆU THAM KHẢO .............................................................................. 99
PHỤ LỤC: MÃ NGUỒN CÁC BÀI MÔ PHỎNG .................................... 100
Trang-7-

THUẬT NGỮ VIẾT TẮT

AAL ATM Adaptation Layer- Lớp thích ứng ATM


AS Autonomous System- Hệ thống tự trị
ASIC Application-Specific Integrated Circuit- Mạch tích hợp ứng
dụng riêng
ATM Asynchronous Transfer Mode- Chế độ chuyển tải không đồng
bộ
BGP Border Gateway Protocol- Giao thức cổng biên
CBQ Class Based Queueing- Hàng đợi theo lớp
CBR Constant Bit Rate- Tốc độ bít không đổi
CBS Committed Burst Size- Kích thước chùm xung cam kết
CDR Committed Data Rate- Tốc độ dữ liệu cam kết
CLIP Classical IP- IP truyền thống
CQ Custom Queuing- Hàng đợi chỉ định
CR Constraint-based Routing- Định tuyến ràng buộc
CR-LDP Constraint-based Routing Label Distribution Protocol- Giao thức
phân phối nhãn dưa trên định tuyến ràng buộc
CR-LSP Constraint-based Routing Label Switched Path- Đường chuyển
mạch nhãn dựa trên định tuyến ràng buộc
CSPF Constrained Shortest Path First Diffserv Differentiated Service-
Dịch vụ phân biệt dựa trên đường dẫn ngắn nhất có ràng
buộc
DLCI Data Link Connection Identifier- Nhận dạng kết nối liên kết dữ
liệu
DSCP Service Code Point- Điểm mã dịch vụ
eBGP exterior Border Gateway Protocol- Giao thức cổng biên ngoài
EBS Excess Burst Size- Kích thước chùm xung tới hạn
EGP External (Exterior) Gateway Protocol- Giao thức cổng ngoài
ER Explicit Route- Định tuyến tường minh
ERB Explicit Route Information Base- Cơ sở thông tin định tuyến
tường minh
ERO Explicit Route Object- Đối tượng định tuyến tường minh
EXP Experimental field- Trường ưu tiên
FDDI Fibre Distributed Data Interface- Giao diện dữ liệu phân phối
sợi
FEC Forwarding Equivalence Class- Lớp chuyển tiếp tương đương
FF Fixed Filter (RSVP reservation style)- Bộ lọc cố định
Trang-8-

FIB Forwarding Infomation Base- Cơ sở thông tin chuyển tiếp


FIFO First-in First-out- Vào trước ra trước
FIS Fault Information Signal- Tín hiệu thông tin lỗi
FR Frame Relay- Chuyển mạch khung
FRS Fault Recovery Signal- Tín hiệu khôi phục lỗi
FTN FEC to NHLFE Map- Ánh xạ FEC tới NHLFE
GFC Generic Flow Control (ATM)- Điều khiển luồng chung
GMPLS Generalized MPLS- MPLS tổng quan
HEC Header Error Control (ATM)- Điều khiển lỗi tiêu đề
iBGP interior Border Gateway Protocol- Giao thức cổng biên nội
IETF Internet Engineering Task Force- Nhóm đặc trách kỹ thuật
Internet
IGP Interior Gateway Protocol- Giao thức cổng nội
ILM Incoming Label Map- Ánh xạ nhãn đến
IP Internet Protocol- Giao thức Internet
ISDN Intergrated Services Digital Network- Mạng số tích hợp đa dịch
vụ
IS-IS Intermediate System - to - Intermediate System- Hệ thống
chuyển tiếp
IS-IS TE IS-IS with Traffic Engineering- IS-IS với kỹ thuật lưu lượng
LC-ATM Label Controlled ATM Interface- Nhãn được điều khiển qua
giao tiếp
ATM Asynchronous Transfer Mode – Chế độ truyền không đồng bộ
LDP Label Distribution Protocol- Giao thức phân phối nhãn
LER Label Edge Router- Router biên nhãn
LFIB Label Forwarding Information Base- Cơ sở thông tin chuyển
tiếp nhãn
LIB Label Information Base- Cơ sở thông tin nhãn
LIFO Last-in First-out- Vào sau ra trước
LSA Link State Advertisements- Quảng bá trạng thái liên kết
LSP Label Switched Path- Đường chuyển mạch nhãn
LSR Label Switching Router- Router chuyển mạch nhãn
MNS MPLS module for Network Simulator- Mô đun mô phỏng mạng
MPLS MultiProtocol Label Switching- Chuyển mạch nhãn đa giao
thức
MPLSCP MPLS Control Protocol- Giao thức điều khiển MPLS
MPLS-TE MPLS Traffic Engineering- Kỹ thuật lưu lượng trong MPLS
MPOA Multiprotocol over ATM- Đa giao thức trên ATM
MSC Mobile Switching Centre- Trung tâm chuyển mạch di động
Trang-9-

MTU Maximum Transfer Unit- Đơn vị truyền cưc đại


NAM Network Animator- Mô phỏng mạng
NCP Network Control Program- Chương trình điều khiển mạng
NGN Next Generation Network- Mạng thế hệ mới
NHLFE Next Hop Label Forwarding Entry- Mục nhập chuyển tiếp nhãn
ở chặng kế tiếp
NHRP Next Hop Resolution Protocol- Giao thức phân giải chặng kế
tiếp
NS Network Simulator- Mô phỏng mạng
OSI Open System Interconnection- Kết nối các hệ thống mở
OSPF Open Shortest Path First- Giao thức lựa chọn đường dẫn ngắn
nhất
OSPF-TE OSPF with Traffic Engineering- OSPF với kỹ thuật lưu lượng
PBS Peak Burst Size- Kích thước chùm xung đỉnh
PDR Peak Data Rate- Tốc độ dữ liệu đỉnh
PDU Protocol Data Unit- Đơn vị dữ liệu giao thức
PHP Penultimate Hop Popping- Gỡ nhãn ở chặng áp cuối
PoR Point of Repair- Điểm sửa chữa
PPP Point to Point Protocol- Giao thức kết nối điểm điểm
PQ Priority Queuing- Hàng đợi ưu tiên
PSL Path Switch LSR- LSR chuyển đổi đường dẫn
PTI Payload Type Identifier (ATM)- Bộ nhận dạng gói
PVC Permanent Virtual Connection- Mạch ảo cố định
QoS Quality of Service- Chất lượng dịch vụ
RED Random Early Detection (Discard)- Sự phát hiện ngẫu nhiên
sớm
RFC Request for Comments - Đề nghị duyệt thảo và bình luận
RIB Routing Information Base- Cơ sở thông tin định tuyến
RSVP Resource reSerVation Protocol- Giao thức dự trữ tài nguyên
RSVP-TE RSVP with Traffic Engineering- RSVP với kỹ thuật lưu lượng
SDH Synchronous Digital Hierarchy- Phân cấp số đồng bộ
SLA Service Level Agreement- Thỏa thuận mức dịch vụ
SONET Synchronous Optical Network- Mạng quang đồng bộ
SPF Shortest Path First- Tìm đường ngắn nhất
TCP Transmission Control Protocol- Giao thức điều khiển truyền dữ
liệu
TE Traffic Engneering- Kỹ thuật lưu lượng
TLV Type/Length/Value - Kiểu/ Độ dài/ Giá trị
ToS Type of Service- Loại dịch vụ
Trang-10-

TT Traffic Trunk- Trung kế lưu lượng


TTL Time To Live- Thời gian sống
UBR Unspecified Bit Rate- Tốc độ bít không xác định
UDP User Datagram Protocol- Giao thức gói tin người dùng
VC Virtual Circuit- Kênh ảo
VCI Virtual Circuit Identifier- Bộ nhận dạng kênh ảo
VPI Virtual Path Identifier- Bộ nhận dạng đường ảo
VPN Virtual Private Network- Mạng riêng ảo
WFQ Weighted Fair Queuing- Hàng đợi cân bằng có trọng số
Trang-11-

DANH SÁCH CÁC BẢNG

Bảng 1: Một số giao thức phân phối nhãn trong MPLS .................................. 40
Bảng 2: Các loại bản tin LDP ............................................................................. 43
Bảng 3: Các lớp dịch vụ kỹ thuật lưu lượng...................................................... 56

DANH SÁCH CÁC HÌNH MINH HỌA

Hình 1: MPLS và mô hình tham chiếu OSI ...................................................... 16


Hình 2: So sánh giữa chuyển tiếp IP và chuyển tiếp MPLS ............................ 16
Hình 3: Miền MPLS ............................................................................................. 17
Hình 4: Upstream và downstream LSR ............................................................. 17
Hình 5: Lớp chuyển tiếp tương đương trong MPLS ........................................ 18
Hình 6: Chồng nhãn ............................................................................................. 19
Hình 7: Đường chuyển mạch nhãn LSP ............................................................ 20
Hình 8: Phân cấp LSP trong MPLS ................................................................... 20
Hình 9: Gói IP đi qua mạng MPLS .................................................................... 21
Hình 10: Định dạng một entry trong stack nhãn MPLS .................................. 22
Hình 11: Shim header được “chêm” vào giữa header lớp 2 và lớp 3 .............. 23
Hình 12: Nhãn trong chế độ cell ATM ............................................................... 24
Hình 13: Đóng gói (encapsulation) gói có nhãn trên liên kết ATM ................ 24
Hình 14: Cấu trúc của LER và transit-LSR ...................................................... 25
Hình 15: FTN, ILM và NHLFE .......................................................................... 26
Hình 16: Quá trình chuyển tiếp một gói đến chặng kế ..................................... 27
Hình 17: Một ví dụ NHLFE ................................................................................ 28
Hình 18: Bên trong mặt phẳng chuyển tiếp MPLS .......................................... 29
Hình 19: Ví dụ hoạt động chuyển tiếp gói ......................................................... 30
Hình 20: Một ví dụ định tuyến ràng buộc ......................................................... 34
Hình 21: Phân phối nhãn không cần yêu cầu .................................................... 36
Hình 22: Phân phối nhãn theo yêu cầu .............................................................. 37
Hình 23: Duy trì nhãn tự do ................................................................................ 37
Hình 24: Duy trì nhãn bảo thủ ............................................................................ 38
Hình 25: Điều khiển độc lập ................................................................................ 38
Hình 26: Điều khiển tuần tự................................................................................ 39
Hình 27: Vùng hoạt động của LDP .................................................................... 40
Hình 28: Trao đổi thông điệp LDP ..................................................................... 41
Hình 29: LDP header ........................................................................................... 42
Hình 30: Format thông điệp LDP ....................................................................... 43
Hình 31: Ví dụ LDP chế độ điều khiển độc lập theo yêu cầu .......................... 45
Hình 32: Thiết lập LSP với CR-LDP ................................................................. 47
Hình 33: Tiến trình dự trữ tài nguyên ............................................................... 48
Hình 34: Thiết lập LSP với RSVP-TE ............................................................... 52
Hình 35: Nhiều luồng cho mỗi lớp lưu lượng .................................................... 57
Hình 36: Hàng đợi CQ ......................................................................................... 58
Trang-12-

Hình 37: Hàng đợi PQ ......................................................................................... 59


Hình38: Giải thuật Leaky Bucket ...................................................................... 60
Hình39: Giải thuật Token Bucket ..................................................................... 61
Hình 40: Mô hình chồng phủ (Overlay Model) ................................................. 62
Hình 41: Các trung kế lưu lượng ........................................................................ 63
Hình 42: Một ví dụ băng thông dự trữ cho từng mức ưu tiên ......................... 68
Hình 43: Minh họa cách dùng bit Affinity và Resource-Class ........................ 69
Hình 44: Băng thông khả dụng ứng với từng mức ưu tiên .............................. 70
Hình 45: Xem xét các ràng buộc khống chế ...................................................... 72
Hình 46: Xem xét tài nguyên khả dụng ............................................................. 73
Hình 47: Chọn đường tốt nhất ............................................................................ 74
Hình 48: Mô hình Makam ................................................................................... 77
Hình 49: Mô hình Haskin .................................................................................... 78
Hình 50: Mô hình Shortest-Dynamic ................................................................. 79
Hình 51: Mô hình Simple-Dynamic .................................................................... 80
Hình 52: Dữ liệu đầu vào và kết xuất của NS.................................................... 81
Hình 53: Topology vật lý mạng thực hiện mô phỏng ....................................... 82
Hình 54: Kết quả băng thông nhận được ở bài 1 .............................................. 83
Hình 55: Mô phỏng trực quan bài 1 trong cửa sổ NAM .................................. 84
Hình 56: Kết quả băng thông nhận được ở bài 2 .............................................. 85
Hình 57: Mô phỏng trực quan bài 2 trong cửa sổ NAM .................................. 86
Hình 58: Xuất nội dung bảng LIB ở các LSR ra màn hìn console .................. 86
Hình 59: Kết quả băng thông nhận được ở bài 3 .............................................. 88
Hình 60: Mô phỏng trực quan bài 3 trong cửa số NAM .................................. 88
Hình 62 Đường đi của lưu lượng trước thời điểm sự cố................................... 90
Hình 63: Đường đi của lưu lượng sau thời điểm sự cố (Makam) .................... 91
Hình 64: Kết quả băng thông nhận được ở bài 5 .............................................. 92
Hình 65: Đường đi của lưu lượng sau thời điểm sự cố (Haskin) ..................... 92
Hình 66: Kết quả băng thông nhận được ở bài 6 .............................................. 93
Hình 67: Đường đi của lưu lượng sau thời điểm sự cố (Shortest-Dynamic) .. 94
Hình 68: Kết quả băng thông nhận được ở bài 7 .............................................. 95
Hình 69: Đường đi của lưu lượng sau thời điểm sự cố (Simple-Dynamic) ..... 95
Trang-13-

MỞ ĐẦU
Trong những năm gần đây, với 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.
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. 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. Đây cũng là đối tượng nghiên cứu chính của học viên khi thực hiện luận
văn này.
Luận văn được tổ chức thành 4 chương với các nội dung chính như sau:
Chương 1 - Chuyển mạch nhãn đa giao thức : 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 của MPLS.
Nội dung tập trung vào vấn đề ánh xạ lưu lượng lên topology
vật lý, tức là tính toán đường đi tốt nhất qua mạng của lưu lượng sao cho
mạng hoạt động hiệu quả và tin cậy. 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.
Trang-14-

Chương 4 - Mô phỏng MPLS-TE và đánh giá : Học viên báo cáo kết
quả thực hiện mô phỏng MPLS-TE trên máy tính với phần mềm NS-2 để làm
rõ cơ chế thực hiện kỹ thuật lưu lượng của MPLS. Các mô hình bảo vệ khôi
phục lưu lượng của MPLS cũng được mô phỏng trong phần này.
Trang-15-

Chương 1: CHUYỂN MẠCH NHÃN ĐA GIAO THỨC


MPLS
1.1 Tổng quan
MPLS là viết tắt của “Multi-Protocol Label Switching”. Thuật ngữ multi-
protocol để nhấn mạnh rằng công nghệ này áp dụng được cho tất cả các giao
thức lớp mạng chứ không chỉ riêng có IP. MPLS cũng hoạt động tốt trên bất
kỳ các giao thức lớp liên kết. Đây là một công nghệ lai kết hợp những đặc
tính tốt nhất của định tuyến lớp 3 (Layer 3 routing) và chuyển mạch lớp 2
(Layer 2 switching).[1]
1.1.1 Tính thông minh phân tán
Trong mạng chuyển mạch kênh, tính thông minh chủ yếu tập trung
ở mạng lõi (core). Tất cả những thiết bị thông minh nhất đều đặt trong mạng
lõi như các tổng đài chuyển tiếp hay các trung tâm chuyển mạch di động
MSC… Các thiết bị kém thông minh hơn thì đặt ở mạng biên (edge), ví dụ như
các tổng đài nội hạt, truy nhập…
Trong mạng gói IP, tính thông minh gần như chia đều cho các thiết bị
trong mạng. Tất cả các router đều phải làm hai nhiệm vụ là định tuyến và
chuyển mạch. Đây là ưu điểm nhưng cũng là nhược điểm của IP.
Quan điểm của MPLS là tính thông minh càng đưa ra biên thì
mạng càng hoạt động tốt. Lý do là những thành phần ở mạng lõi phải
chịu tải rất cao. Thành phần mạng lõi nên có độ thông minh thấp và năng lực
chuyển tải cao. MPLS phân tách hai chức năng định tuyến và chuyển mạch:
Các router ở biên thực hiện định tuyến và gắn nhãn (label) cho gói. Còn các
router ở mạng lõi chỉ tập trung làm nhiệm vụ chuyển tiếp gói với tốc độ cao
dựa vào nhãn. Tính thông minh được đẩy ra ngoài biên là một trong những ưu
điểm lớn nhất của MPLS[1].
Trang-16-

1.1.2 MPLS và mô hình tham chiếu OSI

Hình 1: MPLS và mô hình tham chiếu OSI


MPLS được xem như là một công nghệ lớp đệm (shim layer), nó nằm
trên lớp 2 nhưng dưới lớp 3, vì vậy đôi khi người ta còn gọi nó là lớp 2,5.

Hình 2: So sánh giữa chuyển tiếp IP và chuyển tiếp MPLS


Nguyên lý của MPLS là tất cả các gói IP sẽ được gắn nhãn (label) và
chuyển tiếp theo một đường dẫn LSP (Label Switched Path). Các router trên
đường dẫn chỉ căn cứ vào nội dung của nhãn để thực hiện quyết định chuyển
tiếp gói mà không cần phải kiểm tra header IP[1].
Trang-17-

1.2 Các khái niệm cơ bản trong MPLS


1.2.1 Miền MPLS (MPLS domain)
RFC 3031 mô tả miền MPLS là “một tập hợp các nút mạng thực hiện
hoạt động định tuyến và chuyển tiếp MPLS”. Một miền MPLS thường được
quản lý và điều khiển bởi một nhà quản trị[6].

Hình 3: Miền MPLS


Miền MPLS được chia thành 2 phần: phần mạng lõi (core) và
phần mạng biên (edge). Các nút thuộc miền MPLS được gọi là router chuyển
mạch nhãn LSR (Label Switch Router). Các nút ở phần mạng lõi được
gọi là transit-LSR hay core-LSR (thường được gọi tắt là LSR). Các nút ở
biên được gọi là router biên nhãn LER (Label Edge Router). Nếu một LER là
nút đầu tiên trên đường đi của một gói xuyên qua miền MPLS thì nó được gọi
là LER lối vào (ingress-LER), còn nếu là nút cuối cùng thì nó được gọi là LER
lối ra (egress-LER). Lưu ý là các thuật ngữ này được áp dụng tùy theo chiều
của luồng lưu lượng trong mạng, do vậy một LER có thể là ingress-LER
vừa là egress-LER tuỳ theo các luồng lưu lượng đang xét.

Hình 4: Upstream và downstream LSR


Trang-18-

Thuật ngữ upstream-LSR và downstream-LSR cũng được dùng, phụ


thuộc vào chiều của luồng lưu lượng như chỉ ra trên hình 4. Các tài liệu
MPLS thường dùng ký hiệu Ru để biểu thị cho upstream-LSR và dùng ký
hiệu Rd để biểu thị cho downstream-LSR.
1.2.2 Lớp chuyển tiếp tương đương (FEC)
Lớp chuyển tiếp tương đương FEC (Forwarding Equivalence Class) là
một tập hợp các gói được đối xử như nhau bởi một LSR. Như vậy, FEC là một
nhóm các gói IP được chuyển tiếp trên cùng một đường chuyển mạch nhãn
LSP, được đối xử theo cùng một cách thức và có thể ánh xạ vào một nhãn bởi
một LSR cho dù chúng có thể khác nhau về thông tin header lớp mạng. Hình 5
dưới đây cho thấy cách xử lý này[1].

Hình 5: Lớp chuyển tiếp tương đương trong MPLS

1.2.3 Nhãn và chồng nhãn


RFC 3031 định nghĩa nhãn là “một bộ nhận dạng có độ dài ngắn và cố
định, mang ý nghĩa cục bộ dùng để nhận biết một FEC”. Nhãn được “dán” lên
một gói để báo cho LSR biết gói này cần đi đâu. Phần nội dung nhãn có độ dài
20 bit không cấu trúc, như vậy số giá trị nhãn có thể có là 220 (hơn một triệu
giá trị). Giá trị nhãn định nghĩa chỉ mục (index) để dùng trong bảng chuyển
tiếp[6].
Một gói lại có thể được “dán chồng” nhiều nhãn, các nhãn này chứa
trong một nơi gọi là chồng nhãn (label stack). Chồng nhãn là một tập hợp gồm
Trang-19-

một hoặc nhiều chỉ mục nhãn tổ chức theo nguyên tắc vào sau ra trước (LIFO).
Tại mỗi chặng trong mạng chỉ xử lý nhãn hiện hành trên đỉnh chồng nhãn.
Chính nhãn này sẽ được LSR sử dụng để chuyển tiếp gói.

Hình 6: Chồng nhãn


Nếu gói tin chưa có nhãn thì chồng nhãn là rỗng(độ sâu của chồng nhãn
bằng 0). Nếu chồng nhãn có chiều sâu là d thì mức 1 sẽ ở đáy của chồng nhãn
(bit S trong mục nhập nhãn đặt lên 1) và mức d sẽ ở đỉnh của chồng nhãn. Một
mục nhập nhãn có thể được đặt thêm vào (push) hoặc lấy ra (pop) khỏi chồng
nhãn.
1.2.4 Hoán đổi nhãn (Label Swapping)
Hoán đổi nhãn là cách dùng các thủ tục để chuyển tiếp gói. Để chuyển
tiếp gói có nhãn, LSR kiểm tra nhãn trên đỉnh chồng nhãn và dùng ánh xạ ILM
(Incoming Label Map) để ánh xạ nhãn này tới một mục nhập chuyển tiếp
nhãn NHLFE. Sử dụng thông tin trong NHLFE, LSR xác định ra nơi để
chuyển tiếp gói và thực hiện một tác vụ trên chồng nhãn. Rồi nó mã hóa chồng
nhãn mới vào gói và chuyển gói đi. Chuyển tiếp gói chưa có nhãn cũng tương
tự nhưng xảy ra ở ingress-LER. LER phải phân tích header lớp mạng để
xác định FEC rồi sử dụng ánh xạ FTN (FEC-to-NHLFE) để ánh xạ FEC vào
một NHLFE[1].
1.2.5 Đường chuyển mạch nhãn LSP (Label Switched Path)
Đường chuyển mạch nhãn LSP là một đường nối giữa router lối vào và
router lối ra, được thiết lập bởi các nút MPLS để chuyển các gói đi xuyên qua
mạng. Đường dẫn của một LSP qua mạng được định nghĩa bởi sự chuyển đổi
Trang-20-

các giá trị nhãn ở các LSR dọc theo LSP bằng cách dùng thủ tục hoán đổi
nhãn. Khái niệm LSP tương tự như khái niệm mạch ảo (VC) trong ATM.

Hình 7: Đường chuyển mạch nhãn LSP


Kiến trúc MPLS cho phép phân cấp các LSP, tương tự như ATM sử
dụng VPI và VCI để tạo ra phân cấp kênh ảo (VC) nằm trong đường ảo (VP).
Tuy nhiên ATM chỉ có thể hỗ trợ 2 mức phân cấp, trong khi với MPLS thì số
mức phân cấp cho phép rất lớn nhờ khả năng chứa được nhiều mục nhập nhãn
trong chồng nhãn. Về lý thuyết, giới hạn số lượng nhãn trong chồng nhãn phụ
thuộc giá trị MTU (Maximum Transfer Unit) của các giao thức lớp liên kết
được dùng dọc theo một LSP[1].

Hình 8: Phân cấp LSP trong MPLS


Trang-21-

1.2.6 Chuyển gói qua miền MPLS


Sau đây là một ví dụ đơn giản minh họa quá trình truyền gói IP đi qua
miền MPLS. Gói tin IP khi đi từ ngoài mạng vào trong miền MPLS được router
A đóng vai trò là một ingress-LER sẽ gán nhãn có giá trị là 6 cho gói IP rồi
chuyển tiếp đến router B. Router B dựa vào bảng hoán đổi nhãn để kiểm tra
nhãn của gói tin. Nó thay giá trị nhãn mới là 3 và chuyển tiếp đến router C.
Tại C, việc kiểm tra cũng tương tự như ở B và sẽ hoán đổi nhãn, gán cho gói
tin một nhãn mới là 9 và tiếp tục được đưa đến router D.

Hình 9: Gói IP đi qua mạng MPLS


Router D đóng vai trò egress-LER sẽ kiểm tra trong bảng hoán đổi nhãn
và gỡ bỏ nhãn 9 ra khỏi gói tin rồi định tuyến gói IP một cách bình thường
đi ra khỏi miền MPLS. Với kiểu làm việc này thì các LSR trung gian như
router B và C sẽ không phải thực hiện kiểm tra toàn bộ header IP của gói tin
mà nó chỉ việc kiểm tra các giá trị của nhãn, so sánh trong bảng và chuyển
tiếp. Vì vậy tốc độ xử lý trong miền MPLS sẽ nhanh hơn nhiều so với định
tuyến IP truyền thống. Đường đi từ router A đến router D được gọi là đường
chuyển mạch nhãn LSP (Label Switched Path)[1].
1.3 Mã hóa nhãn và các chế độ đóng gói nhãn MPLS
1.3.1 Mã hóa chồng nhãn
Khi nhãn được gắn lên gói, bản thân giá trị nhãn 20 bit sẽ được mã hoá
cùng với một số thông tin cộng thêm để phụ trợ trong quá trình chuyển tiếp gói
Trang-22-

để hình thành một mục nhập nhãn. Hình 10 minh họa định dạng một mục nhập
nhãn trong chồng nhãn[1].

Hình 10: Định dạng một entry trong stack nhãn MPLS
Nhóm 32 bit ở hình trên là một mục nhập trong chồng nhãn, trong đó phần
giá trị nhãn thực sự chỉ có 20 bit. Tuy nhiên người ta thường gọi chung cho cả
mục nhập 32 bit nói trênlà một nhãn. Vì vậy khi thảo luận về nhãn cần phân
biệt là đang xem xét giá trị nhãn 20 bit hay nói về mục nhập 32 bit trong chồng
nhãn. Phần thông tin 12 bit cộng thêm gồm các trường sau đây:
 EXP (một số tài liệu gọi là CoS - Class of Service – Lớp dịch vụ) –
Gồm 3 bit, có thể là một hàm của trường TOS (Type of Service- Loại
dịch vụ) hoặc Diffserv- Dịch vụ phân biệt trong gói IP. Đa số các nhà
sản xuất sử dụng các bit này để mang chỉ thị QoS, thường là copy trực
tiếp từ các bit TOS trong gói IP. Khi gói MPLS vào hàng đợi, có thể sử
dụng các bit EXP theo cách giống như các bit ưu tiên trong IP.
 S – Gồm 1 bit, chỉ thị đáy của chồng nhãn. Khi một nhãn nằm ở đáy
chồng nhãn, thì bit S đặt lên 1; còn các nhãn khác có bit S đặt về 0. Bit
S là phương tiện để xác định đáy của chồng nhãn nằm ở đâu.
 TTL – Gồm 8 bit, thường là copy trực tiếp từ trường TTL của header
IP, được giảm đi 1 qua mỗi chặng để chặn loop định tuyến giống như
IP. Tuy nhiên, các bit TTL cũng có thể được đặt khác với TTL trong
gói IP, thường dùng khi nhà khai thác mạng muốn che giấu topology
mạng MPLS. MPLS có thể hoạt động ở các chế độ: chế độ frame và
chế độ cell.
Trang-23-

1.3.2 Chế độ Frame


Các kỹ thuật lớp 2 như Ethernet, Token Ring, FDDI, PPP không có trường
nào phù hợp trong header của frame có thể mang nhãn. Vì vậy, chồng nhãn sẽ
được chứa trong header chêm (shim header). Shim header được “chêm” vào
giữa header lớp liên kết và header lớp mạng, như trong hình 11. Đỉnh chồng
nhãn nằm liền sau header lớp 2 và đáy chồng nhãn nằm liền trước header lớp
mạng.

Hình 11: Shim header được “chêm” vào giữa header lớp 2 và lớp 3
Router gởi frame phải có cách để báo cho router nhận biết rằng frame
này có chứa shim header, cách thức này khác nhau giữa các kỹ thuật lớp 2.
Ethernet sử dụng cặp giá trị ethertype 0x8847 và 0x8848 để chỉ thị frame đang
mang gói MPLS unicast và multicast tương ứng. PPP sử dụng NCP
(Network Control Program) sửa đổi gọi là MPLSCP (MPLS Control
Protocol) và đánh dấu tất cả các gói có chứa shim header bằng giá trị
0x8281 trong trường PPP Protocol.
1.3.3 Chế độ Cell
Chế độ Cell được dùng khi ta có một mạng gồm các ATM-LSR (là
các chuyển mạch ATM có hỗ trợ MPLS), trong đó nó sử dụng các giao
thức phân phối nhãn MPLS để trao đổi thông tin VPI/VCI thay cho báo
hiệu ATM. Nhãn được mã hoá trong trường gộp VPI/VCI, trong VPI hoặc
VCI của header cell ATM (RFC 3035).
Trang-24-

Hình 12: Nhãn trong chế độ cell ATM


Cell ATM gồm có 5 byte header và 48 byte payload. Để chuyển tải gói tin
có kích thước lớn hơn 48 byte từ lớp trên đưa xuống (ví dụ gói IP),
ATM phải chia gói tin thành nhiều phần nhỏ hơn, việc này gọi là phân đoạn
(fragmentation). Quá trình phân đoạn do lớp AAL (ATM Adaptation Layer)
đảm trách. Cụ thể, AAL5 PDU sẽ được chia thành nhiều đoạn 48 byte, mỗi
đoạn 48 byte này được thêm header 5 byte để tạo ra một cell ATM[2].

Hình 13: Đóng gói (encapsulation) gói có nhãn trên liên kết ATM
Khi đóng gói có nhãn MPLS trên ATM, toàn bộ chồng nhãn được đặt
trong AAL5 PDU. Giá trị thực sự của nhãn đỉnh được đặt trong trường
VPI/VCI, hoặc đặt trong trường VCI nếu 2 ATM-LSR kết nối nhau qua một
đường ảo ATM (VP). Mục nhập đỉnh chồng nhãn phải chứa giá trị 0 (coi như
mục nhập “giữ chỗ”) và được bỏ qua khi nhận. Lý do các nhãn phải chứa ở cả
trong AAL5 PDU và header ATM là để mở rộng độ sâu chồng nhãn. Khi các
cell ATM đi đến cuối LSP, nó sẽ được tái hợp lại. Nếu có nhiều nhãn trong
chồng nhãn, AAL5 PDU sẽ bị phân đoạn lần nữa và nhãn hiện hành trên đỉnh
chồng nhãn sẽ được đặt vào trường VPI/VCI.
Trang-25-

1.4 Cấu trúc chức năng MPLS


1.4.1 Kiến trúc một nút MPLS (LER và LSR)
Hình 14 minh họa mặt phẳng điều khiển và chuyển tiếp của LSR
và LER. Mặt phẳng điều khiển có chức năng định tuyến IP dùng để giao tiếp
với các LSR, LER khác hoặc các router IP thông thường bằng các giao
thức định tuyến IP. Kết quả là một cơ sở thông tin định tuyến RIB (Routing
Information Base) được tạo lập gồm các thông tin miêu tả các các route khả
thi để tìm đến các prefix địa chỉ IP. LER sẽ sử dụng các thông tin này để
xây dựng cơ sở thông tin chuyển tiếp FIB (Forwarding Information Base)
trong mặt phẳng chuyển tiếp[1].

Hình 14: Cấu trúc của LER và transit-LSR


Mặt phẳng điều khiển còn có chức năng báo hiệu MPLS dùng để giao tiếp với
các LSR khác bằng một giao thức phân phối nhãn. Kết quả là một cơ sở
thông tin nhãn LIB (Label Information Base) gồm các thông tin liên quan
đến các gán kết nhãn đã được thương lượng với các router MPLS khác. Thành
phần báo hiệu MPLS nhận thông tin từ chức năng định tuyến IP và LIB để xây
dựng cơ sở thông tin chuyển tiếp nhãn LFIB (Label Forwarding Information
Trang-26-

Base) trong mặt phẳng chuyển tiếp. Một LER có thể có thể chuyển tiếp các gói
IP, gắn nhãn vào gói (label push), hoặc gỡ nhãn ra khỏi gói (label pop), trong
khi đó một transit-LSR chỉ có khả năng chuyển tiếp gói có nhãn, thêm hoặc bỏ
bớt nhãn.

1.4.2 Mặt phẳng chuyển tiếp (mặt phẳng dữ liệu)


Mặt phẳng chuyển tiếp MPLS chịu trách nhiệm chuyển tiếp dữ liệu
của user. Nó sử dụng cơ sở thông tin chuyển tiếp nhãn LFIB để thực hiện
chuyển tiếp các gói có gắn nhãn căn cứ vào giá trị của nhãn nằm trên đỉnh
chồng nhãn.
1.4.2.1 Cơ sở thông tin chuyển tiếp nhãn LFIB
Trong mạng IP, quyết định chuyển tiếp gói được xác lập bằng cách
thực hiện tra cứu địa chỉ đích trong bảng FIB để xác định chặng kế và
giao diện ra. Trong mạng MPLS, mỗi LSR duy trì một bảng LFIB riêng rẽ và
tách biệt với FIB. Bảng LFIB có hai loại mục nhập là ILM (incoming label
map) và FTN (FEC-to-NHLFE). NHLFE là mục nhập phụ chứa các trường như
địa chỉ chặng kế, các tác vụ chồng nhãn, giao diện ra và thông tin header lớp 2.
ILM ánh xạ một nhãn đến một hoặc nhiều NHLFE. Nhãn trong gói đến sẽ dùng
để chọn ra một mục nhập ILM cụ thể nhằm xác định NHLFE. Còn FTN ánh xạ
mỗi FEC vào một hoặc nhiều NHLFE. Nhờ các mục nhập FTN, gói chưa có
nhãn được chuyển thành gói có nhãn[1].

Hình 15: FTN, ILM và NHLFE


Trang-27-

Như vậy, khi một gói không nhãn thuộc một FEC đi vào miền MPLS,
ingress-LER sẽ sử dụng một mục nhập LFIB loại FTN để chuyển gói không
nhãn thành gói có nhãn. Sau đó, tại các transit-LSR sử dụng một mục nhập
LFIB loại ILM để hoán đổi nhãn vào bằng nhãn ra. Cuối cùng, tại egress-LER
sử dụng một mục nhập LFIB loại ILM để gỡ bỏ nhãn đến và chuyển tiếp gói
không nhãn đến router kế tiếp.
1.4.2.2 Thuật toán chuyển tiếp nhãn
Các nút MPLS sử dụng giá trị nhãn trong các gói đến làm chỉ
mục để tra bảng LFIB. Khi tìm thấy mục nhập tương ứng với nhãn đến, nút
MPLS thay thế nhãn trong gói bằng nhãn ra và gởi gói đi qua giao diện ra để
đến chặng kế được đặc tả trong mục nhập phụ NHLFE. Nếu mục nhập phụ có
chỉ định hàng đợi ra, nút MPLS sẽ đặt gói trên hàng đợi đã chỉ định. Trường
hợp nút MPLS duy trì một LFIB riêng cho mỗi giao diện, nó sẽ dùng LFIB của
giao diện mà gói đến để tra cứu chuyển tiếp gói[1].

Hình 16: Quá trình chuyển tiếp một gói đến chặng kế
Nút MPLS có thể lấy định vị được các thông tin chuyển tiếp cần thiết
trong LFIB chỉ trong một lần truy xuất bộ nhớ, tốc độ thực thi rất cao nhờ các
chip ASIC.
1.4.2.3 Mục nhập chuyển tiếp nhãn ở chặng kế tiếp (NHLFE )
NHLFE là mục nhập phụ của ILM hoặc FTN, nó chứa các thông tin sau:
- Hop kế (chặng tiếp theo) của gói
- Tác vụ sẽ được tiến hành trên chồng nhãn của gói như sau:
Trang-28-

- Swap: Thay nhãn ở đỉnh của chồng nhãn bằng một nhãn mới được chỉ định.
- Pop: Bóc một nhãn ra khỏi chồng nhãn.
- Push: Chồng thêm một nhãn vào trong chồng nhãn.

Hình 17: Một ví dụ NHLFE


Ngoài ra, NHLFE cũng có thể chứa những thông tin sau:
- Đóng gói lớp liên kết dữ liệu để sử dụng khi truyền gói
- Cách thức mã hóa chồng nhãn khi truyền gói
- Bất kỳ các thông tin khác cần thiết để xử lý gói một cách chính xác.
1.4.3 Mặt phẳng điều khiển
Nhiệm vụ của các giao thức trong mặt phẳng điều khiển là phân phối các
thông tin cần thiết cho mỗi LER và LSR để cấu hình bảng FIB và LFIB.
Trong hình 14, một giao thức định tuyến sử dụng bảng thông tin định tuyến
RIB hoạt động kết hợp với một giao thức báo hiệu MPLS sử dụng bảng
thông tin nhãn LIB để phân phối cácnhãn. Việc phân tách mặt phẳng điều
khiển và mặt phẳng chuyển tiếp cho phép cài đặt một giao thức điều khiển
MPLS trên một ATM switch. Tại sao MPLS cần giao thức báo hiệu, trong khi
các router IP cổ điển chỉ cần định tuyến IP? Một lý do quan trọng phải dùng
giao thức báo hiệu MPLS kết hợp với một giao thức định tuyến xuất phát từ sự
cần thiết phải thực hiện định tuyến ràng buộc của đường chuyển mạch nhãn
MPLS.
1.5 Hoạt động chuyển tiếp MPLS
1.5.1 Hoạt động trong mặt phẳng chuyển tiếp
FEC là một tập con các gói căn cứ theo một số thông tin trong header
IP được dùng bởi FIB. Một FEC được dùng thường dựa theo luật “longest
prefix match” trên địa chỉ IP đích. Ví dụ: các địa chỉ IP so trùng 16 bit đầu có
dạng “a.b.*.*” (trong đó * đại diện cho giá trị hợp lệ bất kỳ) được biểu diễn là
“a.b/16” cho mục nhập FEC đầu tiên trong bảng FIB. FEC còn có thể căn cứ bổ
Trang-29-

sung theo các trường khác trong header IP như ToS hay Diffserv. FIB sử dụng
FEC để xác định ra giao tiếp đi đến chặng kế cho các gói IP, cách thực hiện
giống như các router cổ điển.

Hình 18: Bên trong mặt phẳng chuyển tiếp MPLS


Cho các ví dụ từng hoạt động LFIB ở hình 18. Phần ILM (incoming
label map) của LFIB thao tác trên một gói có nhãn và ánh xạ một nhãn vào
(incoming label) tới một tập các mục nhập NHLFE. ILM được thể hiện
trong hình bởi các cột IN-IF và IN-LBL, nhưng cũng có thể là một bảng
riêng rẽ cho một giao tiếp. FTN (FEC-to-NHLFE) của FIB ánh xạ một FEC tới
một tập hợp gồm một hoặc nhiều NHLFE. Như ví dụ trong hình, nhãn A được
gắn (push) lên các gói IP thuộc FEC “d.e/16”. Lưu ý là ILM hoặc FTN có thể
ánh xạ tới nhiều NHLFE, chẳng hạn để dùng trong cân bằng tải[1].
1.5.2 Gỡ nhãn ở chặng áp cuối PHP (Penultimate Hop Popping)
Một tối ưu hóa quan trọng mà MPLS hỗ trợ là tránh việc tra cứu
nhãn (label lookup) phải xử lý ở egress-LER trong trường hợp một gói đi
trên một LSP mà yêu cầu tra cứu IP (IP lookup) tiếp ngay sau đó. Ở trong hình
18, một gói đến có nhãn A được gỡ nhãn (pop) và chuyển sang FIB để tra cứu
Trang-30-

tiếp trên header IP. Để tránh việc xử lý phát sinh thêm này, MPLS định nghĩa
một tiến trình gọi là gỡ nhãn ở chặng áp cuối PHP (penultimate hop
popping), trong đó router áp cuối trên LSP sẽ gỡ nhãn thay vì egress-LER phải
làm việc đó. Nhờ vậy cắt giảm được việc xử lý ở router cuối cùng trên LSP.
1.5.3 Một ví dụ hoạt động chuyển tiếp gói
Trong ví dụ này thể hiện đường đi và các hoạt động chuyển tiếp được
thực hiện ở mỗi nút cho 2 LSP là LSP-1 và LSP-2. LSP-1 bắt đầu từ LER E1,
tại đó có một gói IP đến với địa chỉ đích là “a.b.c.d”. LER E1 kiểm tra bảng
FIB của nó và xác định rằng gói này thuộc về FEC “a.b.c/24”, nó gắn nhãn A
lên gói và xuất ra trên giao tiếp số 2. Tiếp theo, LSR S1 thấy có gói gắn nhãn
A đến trên giao tiếp số 1, LFIB của nó chỉ thị rằng gói sẽ xuất ra trên giao tiếp
số 4 và nhãn sẽ được thay thế bằng nhãn D. Gói có nhãn đi ra trên giao tiếp số
4 trên LSR S1 nối đến giao tiếp số 1 trên LSR S4.

Hình 19: Ví dụ hoạt động chuyển tiếp gói


Vì LSR S4 là chặng áp cuối của LSP-1 nên thao tác được chỉ thị trong
LFIB của nó là gỡ nhãn (pop) và gởi gói đi ra trên giao tiếp số 4. Cuối cung, ở
đích là LER E4, mục nhập FIB thao tác trên FEC “a.b.c/24” và chuyển phát gói
đến chặng kế trên giao tiếp ra số 3. Đối với ví dụ ở LSP-2, các mục nhập trong
FIB và LFIB cũng được thể hiện tương tự như đã trình bày đối với LSP-1.
Trang-31-

1.6 Ưu điểm và ứng dụng của MPLS


1.6.1 Đơn giản hóa chức năng chuyển tiếp
MPLS sử dụng cơ chế chuyển tiếp căn cứ vào nhãn có độ dài cố định
nên quyết định chuyển tiếp có thể xác định ngay chỉ với một lần tra cứu chỉ
mục trong LFIB. Cơ chế này đơn giản và nhanh hơn nhiều so với giải thuật
“longest prefix match” dùng trong chuyển tiếp gói datagram thông thường.
1.6.2 Kỹ thuật lưu lượ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 (TE: Traffic Engineering), nó đảm bảo lưu lượng được định tuyến
đi qua một mạng theo một cách thức tin cậy và hiệu quả nhất. Kỹ thuật
lưu lượng cho phép các ISP định tuyến lưu lượng theo cách họ có thể cung
cấp dịch vụ tốt nhất cho khách hàng ở khía cạnh thông lượng và độ trễ.
MPLS-TE cho phép lưu lượng được phân bố hợp lý qua toàn bộ hạ tầng
mạng, tối ưu hóa hiệu suất sử dụng mạng[4]. Đây cũng là đối tượng
nghiên cứu chính của đề tài này và sẽ được trình bày kỹ ở các chương tiếp theo.
1.6.3 Định tuyến QoS từ nguồn
Định tuyến QoS từ nguồn là một cơ chế trong đó các LSR được xác
định trước ở nút nguồn (LSR lối vào) dựa vào một số thông tin về độ khả
dụng tài nguyên trong mạng cũng như yêu cầu QoS của luồng lưu lượng. Nói
cách khác, nó là một giao thức định tuyến có mở rộng chỉ tiêu chọn đường để
bao gồm các tham số như băng thông khả dụng, việc sử dụng liên kết và
đường dẫn end-to-end, độ chiếm dụng tài nguyên của nút, độ trễ và biến động
trễ.
1.6.4 Mạng riêng ảo VPN
VPN là cho phép khách hàng thiết lập mạng riêng giống như thuê
kênh riêng nhưng với chi phí thấp hơn bằng cách sử dụng hạ tầng mạng công
cộng dùng chung. Kiến trúc MPLS đáp ứng tất cả các yêu cầu cần thiết để hỗ
trợ VPN bằng cách thiết lập các đường hầm LSP sử dụng định tuyến tường
minh. Do đó, MPLS sử dụng các đường hầm LSP cho phép nhà khai thác cung
cấp dịch vụ VPN theo cách tích hợp trên cùng hạ tầng mà họ cung cấp dịch vụ
Trang-32-

Internet. Hơn nữa, cơ chế xếp chồng nhãn cho phép cấu hình nhiều VPN lồng
nhau trên hạ tầng mạng.
1.6.5 Chuyển tiếp có phân cấp (Hierachical forwarding)
Thay đổi đáng kể nhất được MPLS đưa ra không phải ở kiến trúc định
tuyến mà là kiến trúc chuyển tiếp. Sự cải tiến trong kiến trúc chuyển tiếp có tác
động đáng kể đến khả năng cung cấp chuyển tiếp phân cấp. Chuyển tiếp phân
cấp cho phép lồng một LSP vào trong một LSP khác (xếp chồng nhãn hay còn
gọi là điều khiển gói đa cấp). Thực ra chuyển tiếp phân cấp không phải là kỹ
thuật mới; ATM đã cung cấp cơ chế chuyển tiếp 2 mức với khái niệm đường ảo
(VP) và kênh ảo (VC). Tuy nhiên MPLS cho phép các LSP được lồng vào nhau
một cách tùy ý, cung cấp điều khiển gói đa cấp cho việc chuyển tiếp[5].
1.6.6 Khả năng mở rộng (Scalability)
Chuyển mạch nhãn cung cấp một sự tách biệt toàn diện hơn giữa định
tuyến liên miền (inter-domain) và định tuyến nội miền (intra-domain), điều
này cải thiện đáng kể khả năng mở rộng của các tiến trình định tuyến. Hơn
nữa, khả năng mở rộng của MPLS còn nhờ vào FEC (thu gom luồng), và xếp
chồng nhãn để hợp nhất (merging) hoặc lồng nhau (nesting) các LSP. Ngoài
ra, nhiều LSP liên kết với các FEC khác nhau có thể được trộn vào cùng một
LSP. Sử dụng các LSP lồng nhau cũng cải thiện khả năng mở rộng của MPLS.
1.7 Tổng kết chương
Trong các giao thức lớp mạng truyền thống, khi một gói đi từ một router
đến chặng kế tiếp thì quyết định chuyển tiếp phải được đưa ra độc lập ở mỗi
chặng. Việc chọn chặng kế dựa trên việc phân tích header của gói và kết quả
chạy giải thuật định tuyến. Một router xem hai gói là thuộc cùng một luồng
nếu chúng có cùng prefix địa chỉ mạng bằng cách áp dụng luật “longest prefix
match” cho địa chỉ đích của từng gói. Khi gói di chuyển qua mạng, ở mỗi
chặng đến lượt mình sẽ lại kiểm tra gói và gán lại vào một luồng.
Công nghệ chuyển mạch nhãn cho phép thay thế chuyển tiếp gói
truyền thống theo kiểu chặng đến chặng dựa trên địa chỉ đích bằng kỹ thuật
chuyển tiếp hoán đổi nhãn. Kỹ thuật này dựa vào các nhãn có độ dài cố định,
Trang-33-

cải thiện được năng lực định tuyến lớp 3, đơn giản hóa việc chuyển gói, cho
phép dễ dàng mở rộng và đặc biệt là hỗ trợ kỹ thuật lưu lượng.
Trang-34-

Chương 2: ĐỊNH TUYẾN VÀ BÁO HIỆU MPLS


2.1 Định tuyến trong MPLS
MPLS hỗ trợ cả hai kỹ thuật định tuyến: định tuyến từng chặng
(hop-by-hop) và định tuyến ràng buộc (constrain-based routing). Định tuyến
từng chặng cho phép mỗi nút nhận dạng các FEC và chọn chặng kế cho mỗi
FEC một cách độc lập, giống như định tuyến trong mạng IP. Tuy nhiên, nếu
muốn triển khai kỹ thuật lưu lượng với MPLS, bắt buộc phải sử dụng kiểu
định tuyến ràng buộc.

2.1.1 Định tuyến ràng buộc (Constrain-based Routing)


Định tuyến ràng buộc là một phương tiện để thực hiện xử lý tự động hóa
kỹ thuật lưu lượng, khắc phục được các hạn chế của định tuyến theo đích
(destination-based routing). Nó xác định các route không chỉ dựa trên topology
mạng (thuật toán chọn đường ngắn nhất SPF) mà còn sử dụng các độ đo đặc
thù khác như băng thông, trễ, cost và biến động trễ. Giải thuật chọn đường
có khả năng tối ưu hóa theo một hoặc nhiều độ đo này, thông thường người
ta dùng độ đo dựa trên số lượng chặng và băng thông[3].
Để đường được chọn có số lượng chặng nhỏ nhất nhưng phải đảm bảo
băng thông khả dụng trên tất cả các chặng liên kết, quyết định cơ bản như sau:
chọn đường ngắn nhất trong số tất cả các đường có băng thông khả dụng thỏa
mãn yêu cầu.

Hình 20: Một ví dụ định tuyến ràng buộc


Trang-35-

Để minh họa hoạt động của định tuyến ràng buộc, xét cấu trúc mạng
“con cá” kinh điển như hình 20. Giả sử rằng định tuyến ràng buộc sử dụng số
chặng (hop-count) và băng thông khả dụng làm các độ đo. Lưu lượng 600
Kbps được định tuyến trước tiên, sau đó là lưu lượng 500 Kbps và 200
Kbps. Cả 3 loại lưu lượng này đều hướng đến cùng router R4. Ta thấy rằng:
 Vì lưu lượng 600 Kbps được định tuyến trước nên nó đi theo đường
ngắn nhất là R8-R2-R3-R4-R5.Vì băng thông khả dụng là như
nhau trên tất cả các chặng kênh (1 Mbps), nên lưu lượng 600 Kbps
chiếm 60% băng thông.
 Sau đó, vì băng thông khả dụng của đường ngắn nhất không đủ cho cả
2 lưu lượng 600Kbps và 500 Kbps, nên lưu lượng 500 Kbps được định
tuyến đi theo đường mới qua R6 và R7 mặc dù nhiều hơn một chặng so
với đường cũ.
 Với lưu lượng 200 Kbps tiếp theo, vì vẫn còn băng thông khả dụng trên
đường ngắn nhất nên đường này được chọn để chuyển lưu lượng 200
Kbps.
Định tuyến ràng buộc có 2 kiểu online và offline. Kiểu online cho phép các
router tính đường cho các LSP bất kỳ lúc nào. Trong kiểu offline, một server
tính đường cho các LSP theo định kỳ (chu kỳ có thể được chọn bởi nhà quản
trị, thường là vài giờ hoặc vài ngày). Các LSP được báo hiệu thiết lập theo các
đường đã được chọn.

2.1.2 Định tuyến tường minh (Explicit Routing)


Định tuyến tường minh (Explicit Routing) là một tập con của định tuyến
ràng buộc, trong đó sự ràng buộc là đối tượng tuyến tường minh ER (explicit
route)[3].
Tuyến tường minh ER là một danh sách các “nút trừu tượng” (abstract
node) mà một đường chuyển mạch nhãn ràng buộc CR-LSP phải đi qua. Nút
trừu tượng có thể là một nút (địa chỉ IP) hoặc một nhóm nút (như IP prefix
hoặc một AS). Nếu ER chỉ quy định một nhóm trong số các nút mà CR-LSP
đi qua thì nó được gọi là tuyến tường minh thả lỏng (loose ER). Ngược lại,
nếu ER quy định toàn bộ các nút trên CR-LSP thì được gọi là tuyến tường
Trang-36-

minh nghiêm ngặt (strict ER). CR-LSP được mã hóa như là một chuỗi các
ER-Hop (chặng tường minh) chứa trong một cấu trúc Type-Length-Value
ràng buộc (constraint-based route TLV). Mỗi ER-Hop có thể xác định một
nhóm các nút. CR-LSP khi đó bao gồm tất cả các nhóm nút đã được xác định
theo thứ tự xuất hiện trong cấu trúc TLV.

2.2 Các chế độ báo hiệu MPLS


2.2.1 Chế độ phân phối nhãn
MPLS cho phép hai chế độ hoạt động của các LSR để phân phối các ánh
xạ nhãn, đó là phân phối không cần yêu cầu (Downstream Unsolicited) và phân
phối theo yêu cầu (Downstream on Demand). Thuật ngữ downstream ở
đây ngụ ý rằng phía downstream sẽ thực hiện gán kết nhãn và thông báo gán
kết đó cho phía upstream.

2.2.1.1 Phân phối nhãn không cần yêu cầu (Downstream Unsolicited)
Downstream-LSR phân phối các gán kết nhãn đến upstream-LSR mà
không cần có yêu cầu thực hiện việc kết nhãn. Nếu downstream-LSR chính
là chặng kế đối với định tuyến IP cho một FEC cụ thể thì upstream-LSR có thể
sử dụng kiểu kết nhãn này để chuyển tiếp các gói trong FEC đó đến
downstream-LSR.

Hình 21: Phân phối nhãn không cần yêu cầu

2.2.1.2 Phân phối nhãn theo yêu cầu (Downstream on Demand)


Upstream-LSR phải yêu cầu rõ ràng một gán kết nhãn cho một
FEC cụ thể thì downstream-LSR mới phân phối. Trong phương thức này,
downstream-router không nhất thiết phải là chặng kế đối với định tuyến IP
cho FEC đó, điều này rất quan trọng đối với các LSP định tuyến tường minh.
Trang-37-

Hình 22: Phân phối nhãn theo yêu cầu

2.2.2 Chế độ duy trì nhãn


Một upstream-LSR có thể nhận các gán kết nhãn cho cùng một FEC X
từ nhiều downstream-LSR. Có hai chế độ duy trì các gán kết nhãn nhận được là
duy trì nhãn tự do (liberal label retention) và duy trì nhãn bảo thủ (conservative
label retention).

2.2.2.1 Duy trì nhãn tự do (liberal label retention)


Phía upstream (LSR1) lưu giữ tất cả các gán kết nhãn nhận được, bất
chấp việc downstream-LSR có phải là chặng kế đối với định tuyến IP hay
không. Ưu điểm chính của duy trì nhãn tự do là có thể phản ứng nhanh với sự
thay đổi định tuyến vì các gán kết nhãn đã có sẵn. Nhược điểm là LSR phải duy
trì nhiều gán kết nhãn không dùng và có thể gây ra loop định tuyến tạm thời khi
thay đổi định tuyến.

Hình 23: Duy trì nhãn tự do

2.2.2.2 Duy trì nhãn bảo thủ (conservative label retention)


Upstream-LSR hủy tất cả các gán kết nhãn khác, chỉ giữ lại gán kết
nhãn gởi từ downstream-LSR đang là chặng kế hiện hành. Chế độ này có ưu
Trang-38-

điểm là LSR chỉ cần duy trì số gán kết FEC-nhãn ít hơn, nhưng đáp ứng
chậm khi thay đổi định tuyến vì gán kết nhãn mới phải được yêu cầu và phân
phối lại. Đây là chế độ thích hợp cho các LSR chỉ hỗ trợ một số lượng nhãn
hạn chế (như các chuyển mạch ATM)[3].

Hình 24: Duy trì nhãn bảo thủ

2.2.3 Chế độ điều khiển LSP


Khi một FEC ứng với một prefix địa chỉ được phân phối bởi định tuyến
IP, việc thiết lập mối kết hợp giữa các gán kết nhãn tại một LSR có thể thực
hiện theo hai cách sau đây:

2.2.3.1 Điều khiển độc lập (independent control)


Khi mỗi LSR nhận dạng ra một FEC thì nó quyết định gán kết ngay một
nhãn cho FEC đó và công bố luôn gán kết đó cho các đối tác phân phối nhãn
(label distribution peers). Điều này tương tự như định tuyến IP thông
thường, ở đó mỗi router ra quyết định độc lập về nơi cần chuyển gói đi. Điều
khiển độc lập có ưu điểm là thiết lập LSP nhanh vì việc kết nhãn diễn ra song
song giữa nhiều cặp LSR và dòng lưu lượng có thể bắt đầu truyền mà không
cần đợi cho tất cả các gán kết nhãn thiết lập xong.

Hình 25: Điều khiển độc lập


Trang-39-

2.2.3.2 Điều khiển tuần tự (odered control)


Một downstream-LSR thực hiện kết nhãn cho một FEC và thông báo
gán kết đó chỉ nếu nó là LSR lối ra hoặc nếu nó đã nhận được một gán kết nhãn
cho FEC đó từ router hướng downstream của nó. Việc thiết lập LSP tuần tự bắt
đầu ở LSR lối ra và diễn ra nối tiếp theo hướng ngược về LSR lối vào. Các LSP
định tuyến tường minh bắt buộc phải sử dụng kiểu điều khiển tuần tự và quá
trình phân phối nhãn theo chuỗi có thứ tự sẽ tạo ra thời gian trễ trước khi dòng
lưu lượng đi trên LSP có thể bắt đầu. Tuy nhiên, điều khiển tuần tự cung cấp
phương tiện tránh loop và đạt được mức độ thu gom chắc chắn hơn[1].

Hình 26: Điều khiển tuần tự

2.2.4 Các giao thức phân phối nhãn MPLS


Giao thức phân phối nhãn là một tập các thủ tục mà nhờ nó một LSR có
thể thông báo cho một LSR khác biết về các mối gán kết nhãn-FEC mà nó đã
tiến hành. Kiến trúc MPLS không chỉ định một giao thức phân phối nhãn duy
nhất nào, do đó có thể có nhiều lựa chọn, mỗi giao thức có ưu và nhược điểm
riêng. Trong các phần tiếp theo giới thiệu một số giao thức phân phối nhãn
được dùng phổ biến.
Trang-40-

Bảng 1: Một số giao thức phân phối nhãn trong MPLS

2.3 Giao thức phân phối nhãn LDP (Label Distribution


Protocol)
LDP được chuẩn hóa trong RFC 3036, nó được thiết kế để thiết lập và
duy trì các LSP định tuyến không ràng buộc (unconstraint routing). Vùng hoạt
động của LDP có thể là giữa các LSR láng giềng (neighbor) trực tiếp hoặc gián
tiếp[1].

Hình 27: Vùng hoạt động của LDP

2.3.1 Hoạt động của LDP


LDP có 4 chức năng chính là phát hiện LSR láng giềng (Neighbor
discovery), thiết lập và duy trì phiên, quảng bá nhãn (label advertisement) và
thông báo (Notification).Tương ứng với các chức năng trên, có 4 lớp thông
điệp LDP sau đây[1]:
 Discovery: Để trao đổi định kỳ bản tin Hello nhằm loan báo và kiểm
tra một LSR kết nối gián tiếp hoặc trực tiếp.
Trang-41-

 Session: Để thiết lập, thương lượng các thông số cho việc khởi tạo, duy
trì và chấm dứt các phiên ngang hàng LDP. Nhóm này bao gồm bản tin
Initialization, KeepAlive.
 Advertisement: Để tạo ra, thay đổi hoặc xóa các ánh xạ FEC tới nhãn.
Nhóm này bao gồm bản tin Label Mapping, Label Withdrawal, Label
Release, Label Request, Label Request Abort.
 Notification: Để truyền đạt các thông tin trạng thái, lỗi hoặc cảnh báo.
Các thông điệp Discovery được trao đổi trên UDP. Các kiểu thông điệp
còn lại đòi hỏi phân phát tin cậy nên dùng TCP. Trường hợp hai LSR
có kết nối lớp 2 trực tiếp thì thủ tục phát hiện neighbor trực tiếp như
sau:
 Một LSR định kỳ gửi đi bản tin Hello tới các cổng UDP 646 địa chỉ
multicast (tất cả các router trong subnet).
 Tất cả các LSR tiếp nhận bản tin Hello này trên cổng UDP. Đến một
thời điểm nào đó LSR sẽ biết được tất cả các LSR khác mà nó có kết
nối trực tiếp.
 Khi LSR nhận biết được địa chỉ của LSR khác bằng cơ chế này thì nó
sẽ thiết lập kết nối TCP đến LSR đó. Khi đó phiên LDP được thiết lập
giữa 2 LSR.
Phiên LDP là phiên song hướng nên mỗi LSR ở hai đầu kết nối đều có thể
yêu cầu và gửi liên kết nhãn.

Hình 28: Trao đổi thông điệp LDP


Trang-42-

Trong trường hợp hai LSR không có kết nối lớp 2 trực tiếp (neighbor
gián tiếp) thì LSR định kỳ gửi bản tin Hello đến cổng UDP đã biết tại địa chỉ IP
xác định được khai báo khi lập cấu hình. Đầu nhận bản tin này có thể trả lời lại
bằng bản tin Hello khác và việc thiết lập các phiên LDP được thực hiện như
trên.

2.3.2 Cấu trúc thông điệp LDP


Trao đổi thông điệp LDP thực hiện bằng cách gởi các LDP-PDU
(Protocol Data Unit) thông qua các phiên LDP trên kết nối TCP. Mỗi LDP-
PDU có thể mang một hoặc nhiều thông điệp, và các thông điệp này không
nhất thiết phải có liên quan với nhau.

2.3.2.1 LDP PDU


Mỗi PDU của LDP bao gồm một header LDP và theo sau là một hoặc
nhiều thông điệp LDP. Phần header LDP có dạng như sau:

Hình 29: LDP header


PDU Length (2 octet): số nguyên chỉ chiều dài của PDU theo
octet, không tính trường Version và PDU Length. LDP Identifier (6 octet):
xác định không gian nhãn được cấp phát. Bốn octet đầu là giá trị duy nhất toàn
cục nhận dạng LSR, như địa chỉ IP (router ID) được gán cho LSR. Hai octets
sau xác định một không gian nhãn bên trong LSR. Hai octets này được set về 0
cho không gian nhãn “per-platform”.

2.3.2.2 Định dạng thông điệp LDP [1]


Tất cả các thông điệp LDP có cùng format như sau:
Trang-43-

Hình 30: Format thông điệp LDP


Bit U: Bit “Unknown”, luôn là 0 vì đặc tả LDP không có kiểu bản tin
Unknown.
Bảng sau là các giá trị định nghĩa trường Message Type:

Bảng 2: Các loại bản tin LDP


Message Length : Chiều dài của các trường sau Message Length tính
theo octet (gồm Message ID, các tham số bắt buộc và tùy chọn). Message ID
đôi khi được dùng để liên kết một số bản tin với các bản tin khác, ví dụ một
bản tin đáp ứng sẽ có cùng Message ID với bản tin yêu cầu tương ứng. Các
tham số bắt buộc và tùy chọn phụ thuộc vào các loại bản tin được gởi, chúng
thường dùng kiểu mã hóa TLV (Type-Length-Value) . Nói chung, mọi thứ
xuất hiện trong một thông điệp LDP có thể được mã hóa kiểu TLV, tuy nhiên
đặc tả LDP không phải lúc nào cũng sử dụng lược đồ TLV.
Trang-44-

2.3.3 Các bản tin LDP [1]


- Hello : Được trao đổi trong suốt quá trình hoạt động LDP như trình bày ở
trên.
- Initialization : Được gửi khi bắt đầu một phiên LDP giữa 2 LSR để trao đổi
các tham số, các tùy chọn cho phiên. Các tham số này bao gồm:
 Chế độ phân bổ nhãn.
 Các giá trị bộ định thời.
 Phạm vi các nhãn sử dụng trong kênh giữa 2 LSR đó.
Cả 2 LSR đều có thể gửi các bản tin Initialization và LSR nhận sẽ trả lời
bằng KeepAlive nếu các tham số được chấp nhận. Nếu có một tham số nào đó
không được chấp nhận thì LSR trả lời thông báo có lỗi và phiên kết thúc.
- KeepAlive : Được gửi định kỳ khi không còn bản tin nào cần gửi để đảm bảo
cho mỗi thành phần LDP biết rằng thành phần LDP khác đang hoạt động tốt.
Trường hợp không xuất hiện bản tin KeepAlive hay một số bản tin LDP khác
trong khoảng thời gian nhất định thì LSR sẽ xác định đối tác LDP hỏng hoặc
kết nối có sự cố và phiên LDP chấm dứt.
- Label Mapping : Được sử dụng để quảng bá gán kết giữa FEC và nhãn.
- Label Withdrawal : Thực hiện quá trình ngược lại với bản tin Label Mapping.
Nó được sử dụng để xóa bỏ gán kết đã thực hiện trong Label Mapping. Bản
tin này được sử dụng trong trường hợp :
 Khi có sự thay đổi trong bảng định tuyến (thay đổi prefix địa chỉ), lúc đó
LSR không còn nhận ra FEC này nữa.
 Thay đổi trong cấu hình LSR làm tạm dừng việc chuyển nhãn các
gói trong FEC đó.
- Label Release : Được sử dụng bởi LSR khi nhận được chuyển đổi nhãn mà
nó không cần thiết nữa. Điều đó thường xảy ra khi LSR giải phóng nhận thấy
nút tiếp theo cho FEC không phải là LSR quảng bá liên kết nhãn/FEC đó.
- Label Request : Sử dụng trong chế độ hoạt động gán nhãn theo yêu cầu, LSR
sẽ yêu cầu gán nhãn từ LSR kế cận phía downstream bằng bản tin này.
Trang-45-

- Label Request Abort : Nếu bản tin Label Request cần phải hủy bỏ trước khi
được chấp nhận (do nút kế tiếp trong FEC yêu cầu đã thay đổi), thì LSR yêu
cầu sẽ loại bỏ yêu cầu trước đó bằng bản tin Label Request Abort.

2.3.4 LDP điều khiển độc lập và phân phối theo yêu cầu
Ví dụ dưới đây minh họa việc sử dụng bản tin Label Request và Label
Mapping trong chế độ công bố nhãn theo yêu cầu và điều khiển LSP độc lập.
Trình tự thời gian trao đổi các bản tin LDP giữa các đối tác (peer) thiết lập một
LSP từ router lối vào R1 qua R2 rồi đến router lối ra R3 cho một FEC có prefix
“a.b/16” . R1 khởi tạo tiến trình bằng cách yêu cầu một nhãn cho FEC “a.b/16”
từ chặng kế của nó là R2. Vì sử dụng điều khiển độc lập nên R2 trả ngay một
ánh xạ nhãn về cho R1 trước khi R2 nhậnđược ánh xạ nhãn từ phía
downstream là R3. Cả R2 và R3 đáp ứng bằng bản tin Label Mapping, kết quả
là trong FIB của R1 và LFIB của R2, R3 có các entry gán kết nhãn hình thành
nên đường chuyển mạch nhãn LSP[1].

Hình 31: Ví dụ LDP chế độ điều khiển độc lập theo yêu cầu
LDP còn hỗ trợ các chế độ phân phối nhãn khác. Khi cấu hình ở chế độ
công bố không cần yêu cầu (downstream unsolicited), các router sẽ không dùng
Trang-46-

bản tin Label Request. Nếu điều khiển tuần tự (ordered control) được cấu hình
trên mỗi giao diện, các yêu cầu nhãn sẽ làm cho các bản tin Label Mapping
được trả về theo thứ tự từ R3 đến R2, rồi mới từ R2 về R1. Tổng quát, trong
chế độ phân phối theo yêu cầu điều khiển tuần tự, ánh xạ nhãn diễn ra đầu tiên
ở router lối ra, rồi sau đó lần lượt ngược về đến router lối vào.

2.4 Giao thức CR-LDP (Constrain-based routing LDP)


CR-LDP là giao thức mở rộng từ LDP (RFC 3212) nhằm hỗ trợ đặc
biệt cho định tuyến ràng buộc, kỹ thuật lưu lượng (TE) và các hoạt động dự trữ
tài nguyên. Các khả năng của CR-LDP tùy chọn bao gồm thương lượng các
tham số lưu lượng như cấp phát băng thông, thiết lập và cầm giữ quyền ưu tiên.

2.4.1 Mở rộng cho định tuyến ràng buộc


CR-LDP bổ sung thêm các đối tượng Type-Length-Value mới sau đây
(RFC 3212):
 Tuyến tường minh ER (Explicit Route)
 Chặng tường minh ER-Hop (Explicit Route Hop)
 Các tham số lưu lượng
 Sự lấn chiếm (Preemptions)
 Nhận diện LSP (LSPID)
 Ghim tuyến (Route Pinning)
 Lớp tài nguyên (Resource Class)
 CR-LSP FEC
Một số thủ tục mới cũng được bổ sung để hỗ trợ các chức năng cần thiết như:
 Báo hiệu đường (Path signalling)
 Định nghĩa các tham số lưu lượng
 Quản lý LSP (quyền ưu tiên, cam kết quản trị, v.v)
CR-LDP sử dụng cơ chế gán nhãn theo yêu cầu và điều khiển tuần tự.
Một LSP được thiết lập khi một chuỗi các bản tin Label Request lan truyền từ
ingress-LSR đến egress-LSR, và nếu đường được yêu cầu thỏa mãn các ràng
buộc (ví dụ đủ băng thông khả dụng), thì các nhãn mới được cấp phát và phân
phối bởi một chuỗi các bản tin Label Mapping lan truyền ngược về ingress-
Trang-47-

LSR. Việc thiết lập một CR-LSP có thể thất bại vì nhiều lý do khác nhau
và các lỗi sẽ được báo hiệu bằng bản tin Notification[3].

2.4.2 Thiết lập một CR-LSP (Constrain-based routing LSP)


Để thiết lập một LSP theo một con đường định trước, CR-LDP sử dụng
đối tượng tuyến tường minh ER (Explicit Route). ER được chứa trong các bản
tin LABEL.

Hình 32: Thiết lập LSP với CR-LDP


Xét ví dụ trong hình 32. Giả sử LSR A muốn thiết lập một con đường
tường minh là B-C-D. Để thực hiện việc này, LSR A xây dựng đối tượng ER
chứa tuần tự 3 nút trừu tượng là LSR B, LSR C, LSR D. Mỗi nút được
đại diện bằng một địa chỉ IP prefix. LSR A sau đó xây dựng một bản tin
Label Request có chứa đối tượng ER mới tạo. Khi bản tin được tạo xong, LSR
A sẽ xem xét nút trừu tượng đầu tiên trong đối tượng ER là LSR B, tìm kết
nối đến LSR B và gởi bản tin Label Request trên kết nối đó. Khi LSR B nhận
bản tin Label Request, LSR B nhận thấy nó là nút trừu tượng đầu tiên trong
đối tượng ER. LSR B sau đó tìm kiếm nút trừu tượng kế tiếp là LSR C và
tìm kết nối đến LSR C. Sau đó LSR B thay đổi đối tượng ER và gởi bản tin
Label
Xét ví dụ trong hình 32. Giả sử LSR A muốn thiết lập một con đường
tường minh là B-C-D. Để thực hiện việc này, LSR A xây dựng đối tượng ER
chứa tuần tự 3 nút trừu tượng là LSR B, LSR C, LSR D. Mỗi nút được
đại diện bằng một địa chỉ IP prefix. LSR A sau đó xây dựng một bản tin
Label Request có chứa đối tượng ER mới tạo. Khi bản tin được tạo xong, LSR
Trang-48-

A sẽ xem xét nút trừu tượng đầu tiên trong đối tượng ER là LSR B, tìm kết
nối đến LSR B và gởi bản tin Label Request trên kết nối đó. Khi LSR B nhận
bản tin Label Request, LSR B nhận thấy nó là nút trừu tượng đầu tiên trong
đối tượng ER. LSR B sau đó tìm kiếm nút trừu tượng kế tiếp là LSR C và
tìm kết nối đến LSR C. Sau đó LSR B thay đổi đối tượng ER và gởi bản tin
Label

2.4.3 Tiến trình dự trữ tài nguyên

Hình 33: Tiến trình dự trữ tài nguyên


Tiến trình dự trữ tài nguyên như trong hình trên. Khi một nút CD-LDP
nhận được một bản tin Label Request, nó gọi Admission Control để kiểm tra
xem nút này có các tài nguyên được yêu cầu không. Nếu có đủ tài nguyên khả
dụng, Admission Control dự trữ nó bằng cách cập nhật bảng Resource.
Sau đó bản tin Label Request được chuyển tiếp đến nút MPLS kề sau.
Khi nút CR-LDP nhận bản tin Label Mapping, nó lưu thông tin nhãn và
giao diện vào bảng LIB, lưu thông tin CR-LSP được yêu cầu vào bảng cơ
sở thông tin tuyến tường minh ERB (Explicit Route information Base). Rồi nó
gọi Resource Manager để tạo một hàng đợi phục vụ cho CR-LSP được yêu
Trang-49-

cầu, và lưu ServiceID của nó vào bảng ERB. Cuối cùng, nó chuyển tiếp bản tin
LSP Mapping tới nút MPLS kề trước.

2.5 Giao thức RSVP-TE (RSVP Traffic Engineering) [3]


RSVP có một số cơ chế cần thiết để thực hiện báo hiệu phân phối nhãn
nhằm ràng buộc định tuyến. IETF đã chuẩn hóa phần mở rộng kỹ thuật lưu
lượng RSVP-TE, định nghĩa các ứng dụng của RSVP-TE như hỗ trợ phân
phối nhãn theo yêu cầu để cấp phát tài nguyên cho các LSP định tuyến tường
minh. Tổng kết cách dùng RSVP-TE để hỗ trợ tái định tuyến “make-before-
break”, theo dõi đường thực sự được chọn qua chức năng ghi tuyến cũng
như hỗ trợ ưu tiên và lấn chiếm.
Nguyên lý chức năng của RSVP là thiết lập các dự trữ cho luồng gói
đơn hướng. Các bản tin RSVP thường đi theo con đường hop-by-hop của định
tuyến IP nếu không hiện diện tùy chọn tuyến tường minh (explicit route). Các
router hiểu RSVP dọc theo đường có thể chặn và xử lý bất cứ bản tin nào.
RFC 2205 định nghĩa 3 kiểu bản tin RSVP: thiết lập dự trữ (reservation
setup), tear down, và error. RSVP-TE cũng định nghĩa thêm bản tin Hello.

2.5.1 Các bản tin thiết lập dự trữ RSVP [1]


RSVP sử dụng khái niệm dự trữ ở đầu nhận. Trước tiên đầu gửi phát ra
một bản tin PATH nhận diện một luồng và các đặc tính lưu lượng của nó. Bản
tin PATH chứa một session-ID, sender-template, label-request, sender-Tspec
và tùy chọn là đối tượng tuyến tường minh ERO (explicit route object).
Session-ID chứa một địa chỉ IP đích đi kèm một nhận dạng hầm 16 bit (tunnel
ID) để nhận diện một đường hầm LSP. Như đã trình bày ở chương trước, chỉ có
LSP lối vào mới cần biết về FEC được gán vào một đường hầm LSP. Do đó,
không giống như LDP, FEC ánh xạ vào đường hầm LSP không bao gồm
trong bất kỳ bản tin RVSP nào. Đối tượng label-request hỗ trợ chế độ công bố
nhãn theo yêu cầu. Sender-template chứa địa chỉ IP của đầu gởi đi kèm với
một LSP ID có hỗ trợ phương thức “make-before-break” khi thay đổi đường
đi của một đường hầm LSP. Đặc tính lưu lượng Tspec sử dụng tốc độ đỉnh
Trang-50-

(peak rate), thùng thẻ (token bucket) để định nghĩa tốc độ và kích cỡ bùng phát,
đơn vị khống chế tối thiểu (minimum policed unit) và kích thước gói tối đa.
Khi bản tin PATH đi đến đích, bên nhận đáp ứng bằng một bản tin
RESV nếu nó đồng ý khởi tạo việc gán kết nhãn được yêu cầu trong bản tin
PATH. Bản tin RESV được truyền về theo đường ngược chiều với bản tin
PATH bằng cách dùng thông tin chặng kề trước trong bản tin PATH.
RESV cũng chứa cùng session-ID như ở bản tin PATH tương ứng, đối
tượng ghi tuyến tùy chọn (route record) và thông tin lệ thuộc kiểu dự trữ
(reservation style). Kiểu FF (fixed filter) có một nhãn và Tspec được ấn định
cho mỗi cặp sender-receiver. Kiểu SE (shared explicit) ấn định một nhãn khác
nhau cho mỗi sender, nhưng tất cả chúng phải áp dụng cùng một dự trữ luồng
rõ ràng. Đối tượng record-route ghi nhận tuyến đường thực tế được chọn bởi
LSP bắt đầu từ egress dẫn ngược về ingress. Nó có thể được một router
dùng để ghim một tuyến tường minh thả lỏng bằng cách copy tuyến ghi
được trong bản tin RESV sang đối tượng tuyến tường minh ERO trong một
bản tin PATH được gửi theo chiều ngược lại.

2.5.2 Các bản Tear Down, Error và Hello của RSVP-TE [1]
RSVP-TE định nghĩa 2 bản tin dành cho việc giải tỏa LSP là PATH
TEAR và RESV TEAR. Hai bản tin này được gửi theo chiều ngược với bản tin
PATH và RESV tương ứng. Bản tin TEAR xóa bỏ bất kỳ trạng thái đã cài đặt
liên quan đến bản tin PATH hay RESV. Các bản tin TEAR cũng có thể dùng
để xóa các trạng thái đáp ứng cho một lỗi ở bước đầu tiên trong hoạt động tái
định tuyến.
Có các bản tin thông báo lỗi cho bản tin PATH và RESV cũng như bản
tin RESV CONFIRMATION tùy chọn. Các bản tin lỗi cho biết có sự vi
phạm chính sách, mã hóa bản tin hoặc một số sự cố khác. Ví dụ, khi một LSP
thấy rằng nó không thể hỗ trợ Tspec đặc tả trong một bản tin RESV, nó sẽ
không chuyển tiếp bản tin RESV về cho phía upstream, thay vào đó nó tạo ra
một bản tin RESVERR gửi cho phía downstream để xóa bỏ nỗ lực thiết lập
LSP. Tuyến tường minh và các tùy chọn record-route của RSVP-TE có một số
các mã lỗi để phục vụ cho việc debug. RFC 3209 định nghĩa bản tin Hello tùy
Trang-51-

chọn cho RSVP-TE, nó cho phép một LSR phát hiện một neighbor bị lỗi nhanh
hơn khi so với RSVP làm tươi tình trạng hoặc phát hiện lỗi đường truyền bằng
một giao thức định tuyến IP. Điều này khá hữu ích trong việc tái định tuyến
nhanh.

2.5.3 Thiết lập tuyến tường minh điều khiển tuần tự theo yêu cầu
Hình 34 ví dụ việc trao đổi bản tin RSVP-TE sử dụng đối tượng tuyến
tường minh ERO (explicit route object) để cài đặt một LSP đi qua một con
đường không phải là đường ngắn nhất. Router R1 xác định rằng nó sẽ ấn định
FEC “a.b/16” cho một đường hầm LSP, và nó tính ra một tuyến tường minh
R4-R5-R3 để đi đến chặng kế cho FEC đó. R1 khởi tạo việc thiết lập LSP này
bằng cách phát ra một bản tin PATH đến R4 với một ERO, Tspec, sender
template (có chứa địa chỉ của sender) và một đối tượng label request. Mỗi
bản tin RESV liên quan đến đường hầm LSP này đều mang session-ID
và filter-spec nguyên thủy của sender R1 để giữ mối tương quan với nhau. Tiếp
theo, R4 tiếp nhận yêu cầu này và gửi bản tin PATH đến router kế tiếp ghi
trong ERO là R5. Đến lượt mình, R5 gửi bản tin này đến egress-router R3. Tại
đích đến của bản tin PATH, R3 xác định rằng liên kết chặng R3-R5 có thể hỗ
trợ cho yêu cầu và đó là chặng cuối cùng trên đường dẫn cho FEC “a.b/16”. R3
đáp ứng bằng bản tin RESV có chứa ERO, Tspec của dung lượng dự trữ, một
filter spec thỏa mãn bên gửi, và gán một nhãn null ngầm (implicit null) cho
chặng liên kết này. Theo RFC 3031, nhãn null là một quy ước được dùng trong
phân phối nhãn cho phép egress-router (ở đây là R3) báo hiệu cho đối tác
upstream của nó biết rằng đây là chặng áp cuối (penultimate hop) của LSP, do
vậy cần gỡ nhãn đỉnh của stack (xem LFIB của LSR R5). Tiếp theo, R5 thu
nạp bản tin RESV yêu cầu cho chặng R5-R4, ấn định nhãn B và gởi bản tin
RESV đến router kề trước trong ERO là R4. Cuối cùng, R4 chấp nhận yêu cầu,
ấn định nhãn A và gởi bản tin RESV ngược về R1. Đến lúc này, đường LSP
được thiết lập xong và các gói có nhãn cho FEC “a.b/16” được chuyển tiếp qua
đường hầm[6].
Trang-52-

Hình 34: Thiết lập LSP với RSVP-TE


Khác với giao thức LDP, các bản tin RSVP-TE không mang FEC, vì
chỉ duy nhất có R1 cần biết về ánh xạ giữa FEC và đường hầm LSP.

2.5.4 Giảm lượng overhead làm tươi RSVP


RSVP là giao thức trạng thái mềm (soft-state), tiến trình phát một bản
tin PATH và bản tin RESV hồi đáp tương ứng phải được định kỳ làm tươi,
thường khoảng 30s một lần. Phương pháp làm tươi này đề phòng các bản tin bị
mất và trong trường hợp định tuyến từng chặng sẽ tự động chuyển dự trữ tài
nguyên sang đường mới khi có bất kỳ thay đổi định tuyến IP. Tất nhiên, việc
xử lý dành cho khởi tạo các bản tin PATH và RESV lớn hơn nhiều so với việc
làm tươi trạng thái một bản tin đã nhận trước đó, tuy nhiên với một số lượng
lớn các LSP thì việc xử lý làm tươi có ảnh hưởng đáng kể đến hiệu năng.
Một cách để giải quyết là tăng chu kỳ làm tươi, nhưng cũng sẽ làm tăng
độ trễ báo hiệu khi mất bản tin. RFC 2961 đặc tả một giải pháp cho hạn mức xử
lý và vấn đề trễ báo hiệu. Cơ chế này bao gồm việc bó gọn bản tin để giảm tải
xử lý, cũng như các cách để router dễ dàng nhận dạng một bản tin không thay
đổi hơn. Việc hồi báo bản tin cũng được bổ sung để chuyển tải tin cậy bản tin
Trang-53-

RSVP và xử lý trường hợp mất các bản tin PATH TEAR và RESV TEAR vì
hai bản tin này không được làm tươi trong hoạt động RSVP. Cuối cùng, giải
pháp này định nghĩa một bản tin tổng kết (summary) để làm tươi trạng thái mà
không yêu cầu truyền toàn bộ bản tin làm tươi. Các cải tiến này nhằm giảm
lượng overhead làm tươi của RSVP trong mạng MPLS.

2.6 Tổng kết chương


Trong chương này trình bày các chức năng định tuyến và báo hiệu cơ bản
trong mặt phẳng điều khiển MPLS để hỗ trợ tự động hóa việc cấu hình
của mặt phẳng chuyển tiếp. Kiến trúc định tuyến IP được bổ sung chức năng
báo hiệu để thực hiện định tuyến ràng buộc. Chương này đã giới thiệu một số
giao thức báo hiệu MPLS thực hiện phân phối nhãn theo các đặc tính chung
như tuyến tường minh hay tuyến từng chặng, phân phối nhãn theo yêu cầu hay
không cần yêu cầu, điều khiển phân phối nhãn độc lập hay theo trình tự.
Trang-54-

Chương 3: KỸ THUẬT LƯU LƯỢNG TRONG MPLS

3.1 Kỹ thuật lưu lượng (Traffic Engineering)


Kỹ thuật lưu lượng (TE) là quá trình điều khiển cách thức các luồng lưu
lượng đi qua mạng sao cho tối ưu hóa việc sử dụng tài nguyên và hiệu năng của
mạng. Nó ứng dụng các nguyên lý khoa học công nghệ để đo lường, mô hình
hóa, đặc trưng hóa và điều khiển lưu lượng nhằm đạt được các mục tiêu khác
nhau. Khái niệm TE phân biệt với khái niệm kỹ thuật mạng (Network
Engineering). Kỹ thuật mạng liên quan đến việc thiết kế xây dựng topology của
mạng sao cho phù hợp với lưu lượng.
3.1.1 Các mục tiêu triển khai kỹ thuật lưu lượng

3.1.1.1 Phân loại


Các mục tiêu triển khai kỹ thuật lưu lượng có thể phân theo hai hướng sau:
 Hướng lưu lượng (traffic oriented)
 Hướng tài nguyên (resource oriented)
Các mục tiêu hướng lưu lượng liên quan đến việc tăng cường QoS cho các
luồng lưu lượng. Trong mô hình đơn lớp (dịch vụ best-effort), các mục tiêu này
gồm: giảm thiểu mất gói và trễ, tăng tối đa thông lượng (throughput) và tuân
thủ các hợp đồng mức dịch vụ (SLA)... Các mục tiêu hướng lưu lượng bị chặn
thống kê (như thay đổi độ trễ gói đỉnh-đỉnh, tỷ lệ mất gói, trễ truyền tối đa)
cũng rất hữu ích trong mô hình dịch vụ phân biệt (Diffserv).
Các mục tiêu hướng tài nguyên liên quan đến việc tối ưu hóa sử dụng tài
nguyên. Băng thông là một tài nguyên cốt yếu của mạng, do đó chức năng
trọng tâm của kỹ thuật lưu lượng là quản lý hiệu quả tài nguyên băng thông.

3.1.1.2 Bài toán nghẽn


Nghẽn thường xảy ra theo hai cách như sau:
 Khi bản thân các tài nguyên mạng không đủ để cấp cho tải yêu cầu.
 Khi các dòng lưu lượng được ánh xạ không hiệu quả lên các tài nguyên,
làm cho một số tập con tài nguyên trở nên quá tải trong khi số khác lại
rỗi.
Trang-55-

Có thể giải quyết nghẽn bằng các cách:


 Tăng dung lượng hoặc ứng dụng các kỹ thuật điều khiển nghẽn cổ điển
(giới hạn tốc độ, điều khiển luồng, quản trị hàng đợi, điều khiển lịch
trình…)
 Dùng kỹ thuật lưu lượng nếu nghẽn là do cấp phát tài nguyên chưa hiệu
quả.
Đối tượng giải quyết của kỹ thuật lưu lượng là nghẽn kéo dài chứ không
phải nghẽn nhất thời do bùng phát lưu lượng.
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
Lưu lượng có thể được tổ chức xoay quanh một khái niệm gọi là các lớp
dịch vụ (service classes). Các lớp lưu lượng này được định nghĩa theo những
hoạt động sau:
 Quan hệ đồng bộ giữa đầu phát và đầu thu: ám chỉ biến động trễ có thể
chấp
nhận được trên một kết nối.
 Tốc độ bit: cố định hay biến đổi
 Loại dịch vụ: hướng kết nối hay không kết nối
 Các hoạt động điều khiển luồng
 Số thứ tự cho thông tin người sử dụng
 Phân đoạn và tái hợp các PDU (Protocol Data Unit) của người dùng

Lớp Đặc điểm


Lớp A Tốc độ bit cố định
Định hướng kết nối (connection-oriented)
Cần có sự quan hệ về định thời giữa phát và thu
Cho phép một ít mất mát
Lớp B Tốc độ bit thay đổi
Định hướng kết nối
Cần có quan hệ về định thời giữa phát và thu
Cho phép một ít mất mát
Trang-56-

Lớp C Tốc độ bit thay đổi


Định hướng kết nối
Không đòi hỏi sự quan hệ về định thời giữa phát và thu
Không cho phép mất mát
Lớp D Tốc độ bit thay đổi
Không kết nối (connectionless)
Không đòi hỏi sự quan hệ về định thời giữa phát và thu
Không cho phép mất mát

Bảng 3: Các lớp dịch vụ kỹ thuật lưu lượng


3.1.3 Hàng đợi lưu lượng
Nhiều hệ thống (đặc biệt là router) hỗ trợ một số dạng hàng đợi thông
dụng sau:

3.1.3.1 Hàng đợi FIFO (First-in, First-out)


Hàng đợi này truyền gói theo thứ tự, gói đến trước sẽ được truyền trước.

3.1.3.2 Hàng đợi WFQ (Weighted Fair Queuing)


Băng thông rỗi được chia cho các hàng đợi tùy thuộc vào trọng số
(weight) của chúng. Xét ví dụ sau: có 12 luồng lưu lượng A,B,.. N và trọng số
của chúng được đánh số như hình 37, trong đó: có bốn luồng (D, E, F, G) có
trọng số 5, có hai luồng có trọng số 4, còn ở các trọng số khác chỉ có một
luồng.

Tổng trọng số: 8 + 7 + 6 + 5(4) + 4(2) + 3 + 2 +1 = 55. Khi đó mỗi luồng có


trọng số 5 sẽ nhận được 5/55 băng thông, luồng có trọng số thấp nhất (trọng số
1) sẽ nhận được 1/55 băng thông và luồng có trọng số cao nhất (trọng số 8)
nhận được 8/55 băng thông. Tương tự cho các luồng có trọng số khác.
Trang-57-

Hình 35: Nhiều luồng cho mỗi lớp lưu lượng


Trang-58-

3.1.3.3 Hàng đợi CQ (Custom Queuing)

Hình 36: Hàng đợi CQ


CQ cho phép các user chỉ ra phần trăm băng thông khả dụng cho một
giao thức đặc biệt nào đó. Ta có thể định nghĩa tối đa đến 16 hàng đợi. Mỗi
hàng đợi được phục vụ một cách tuần tự theo phương thức round-robin, truyền
phần trăm lưu lượng trên mỗi hàng đợi trước khi chuyển đến hàng đợi kế.
Trang-59-

3.1.3.4 Hàng đợi PQ (Priority Queuing)

Hình 37: Hàng đợi PQ


Tất cả các gói thuộc lớp có mức ưu tiên cao hơn sẽ được truyền trước
bất kỳ gói nào thuộc lớp có mức ưu tiên thấp hơn. PQ cho phép người quản lý
mạng cấu hình bốn thuộc tính lưu lượng là cao (high), thông thường (normal),
trung bình (medium) và thấp (low). Lưu lượng đến được gán vào một trong 4
hàng đợi.
3.1.4 Giải thuật Leaky Bucket và Token Bucket
3.1.4.1 Giải thuật Leaky Bucket
Mô hình Leaky Bucket có thể được diễn tả như sau: bất chấp tốc độ
nước được đổ vào thùng là bao nhiêu, tốc độ dòng nước chảy ra là không đổi
miễn là trong thùng còn nước. Một khi thùng đầy, lượng nước được đổ thêm
vào sẽ bị tràn và mất. Các thông số cần chú ý trong mô hình Leaky Bucket là
kích thước của thùng và tốc độ dòng chảy ra[7].
Mô hình trên có thể áp dụng cho gói. Bất kể lưu lượng tới có tốc độ biến
động như thế nào, lưu lượng ra đều có tốc độ không đổi.
Trang-60-

Hình38: Giải thuật Leaky Bucket

3.1.4.2 Giải thuật Token Bucket


Token Bucket có kích thước B, tốc độ thẻ “chảy” vào thùng không đổi là
p, nghĩa là trong một giây sẽ có thêm p thẻ mới chảy vào thùng. Số lượng thẻ
trong thùng không vượt quá B hay nói cách khác, B là số lượng thẻ tối đa trong
thùng[7].
Trang-61-

Hình39: Giải thuật Token Bucket


Khi có gói đến, G là kích thước của gói, gói được xem là “phù hợp” khi
lượng thẻ trong thùng lớn hơn hay bằng G, đồng thời lượng thẻ trong thùng
được giảm đi G. Ngược lại, khi lượng thẻ trong thùng nhỏ hơn kích thước gói,
gói được xem là vượt mức hay không hợp lệ. Tùy thuộc vào các chính sách
khác nhau mà các gói vượt mức (hay không hợp lệ) được xử lý khác nhau.
Giải thuật Token Bucket có thể được dùng trong việc sửa dạng lưu
lượng (shaping) hay được ứng dụng trong việc thực thi khống chế (policing).
Trong sửa dạng lưu lượng, thuật toán Token Bucket cho phép một ít bùng phát
ở ngõ ra, điều này không có ở thuật toán Leaky Bucket khi mà tốc độ ra là
không đổi. Như vậy Token Bucket cho đáp ứng ra tốt hơn so với Leaky Bucket.
Trong việc thực thi khống chế, Token Bucket có thể được dùng độc lập hay
được dùng phối hợp.
Trang-62-

3.1.5 Giải pháp mô hình chồng phủ (Overlay Model)

Hình 40: Mô hình chồng phủ (Overlay Model)


Một cách tiếp cận phổ biến để bù đắp các thiếu sót của các giao thức
IGP (interior gateway protocols) là sử dụng mô hình chồng phủ (như IP over
ATM hoặc IP over FR). Tất cả các router lớp 3 được kết nối trực tiếp với nhau
bằng một lưới full-mesh các mạch ảo VC. Kỹ thuật lưu lượng được thực hiện ở
lớp 2 (ATM hoặc FR)[1].
Tuy nhiên, mô hình này có nhiều nhược điểm sau đây:
 Tốn kém thêm nhiều thiết bị (các chuyển mạch ATM hoặc FR).
 Quản lý mạng phức tạp hơn: Mạng lớp 2 có các công cụ quản lý riêng
với nhiều tác vụ hỗ trợ kỹ thuật lưu lượng. Đồng thời mạng các router
lớp 3 với giao thức IGP cũng phải được quản lý. Việc quản lý 2 lớp
mạng này không tích hợp được.
 Phát sinh nhiều vấn đề mở rộng đối với IGP do số lượng quá lớn các
neighbor khi kết nối full-mesh để tận dụng các tiện ích cung cấp bởi lớp
2.
 Tốn thêm băng thông cho lượng overhead của ATM hoặc FR (cell tax).
 Không hỗ trợ dịch vụ phân biệt (Diffserv). Mọi dịch vụ phân biệt của IP
đưa xuống (qua AAL5 của ATM) đều trở thành “best-effort”
3.2 MPLS và kỹ thuật lưu lượng
MPLS có ý nghĩa chiến lược đối với kỹ thuật lưu lượng vì nó có thể
cung cấp hầu hết các chức năng hiện có ở mô hình chồng phủ nhưng theo cách
Trang-63-

tích hợp với chi phí thấp. Điều quan trọng là MPLS còn đề xuất khả năng tự
động hóa các chức năng kỹ thuật lưu lượng.
3.2.1 Khái niệm trung kế lưu lượng (traffic trunk)
MPLS giới thiệu khái niệm trung kế lưu lượng để thực hiện các mục tiêu
TE. Trung kế lưu lượng là một khối thu gom (aggregate) các luồng lưu lượng
thuộc cùng lớp, được đặt bên trong một LSP. Trong một số hoàn cảnh có thể
nới lỏng định nghĩa này để cho phép trung kế lưu lưu lượng thu gom lưu lượng
đa lớp.
 Trong mô hình dịch vụ đơn lớp, một trung kế lưu lượng có thể đóng gói
toàn bộ lưu lượng giữa một ingress-router và một egress-router. Trong
trường hợp phức tạp hơn, lưu lượng của các lớp dịch vụ phân biệt được
ấn định vào các trung kế lưu lượng riêng biệt với các đặc tính khác nhau.
 Trung kế lưu lượng là đối tượng có thể định tuyến (tương tự như ATM
VC).
 Trung kế lưu lượng phân biệt với LSP là đường cho trung kế đi xuyên
qua. Trong bối cảnh hoạt động, một trung kế lưu lượng có thể chuyển từ
LSP này sang một LSP mới, hoặc nhiều trung kế lưu lượng cùng đi
chung trên một LSP.
 Trung kế lưu lượng là đơn hướng.

Hình 41: Các trung kế lưu lượng


Trang-64-

3.2.2 Đồ hình nghiệm suy (Induced Graph)


Đồ hình nghiệm suy gần giống như topology ảo trong mô hình chồng
phủ. Nó được ánh xạ trên mạng vật lý thông qua việc lựa chọn các LSP cho các
trung kế lưu lượng[3].
Một đồ hình nghiệm suy gồm một nhóm các nút LSR được kết nối luận
lý với nhau bằng các LSP. Khái niệm này rất quan trọng vì bài toán quản lý
băng thông cơ bản trong một miền MPLS đặt ra chính là làm thế nào để ánh xạ
hiệu quả đồ hình nghiệm suy lên trên topology mạng vật lý. Đồ hình nghiệm
suy được công thức hóa như sau:
Đặt G = (V, E, C) là một đồ hình mô tả topology vật lý của mạng. Trong đó,
V là tập hợp các nút mạng, E là tập hợp các đường liên kết, C là tập hợp các
khả năng và ràng buộc cho E và V. Ta coi G là topology cơ sở.
Đặt H = (U, F, D) là đồ hình MPLS nghiệm suy, trong đó U là tập con thuộc
V gồm một nhóm LSR tại các đầu của LSP. F là tập hợp các LSP. Tham số D
là tập hợp các yêu cầu và ràng buộc cho F. Như vậy, H là một đồ hình trực tiếp
và phụ thuộc vào các đặc tính chuyển tải của G.
3.2.3 Bài toán cơ bản của kỹ thuật lưu lượng trên MPLS
Có ba vấn đề cơ bản liên quan đến kỹ thuật lưu lượng trên MPLS là:
 Ánh xạ các gói lên các lớp chuyển tiếp tương đương (FEC).
 Ánh xạ các FEC lên các trung kế lưu lượng (traffic trunk).
 Ánh xạ các trung kế lưu lượng lên topology mạng vật lý thông qua các
LSP.
Các phần sau của chương sẽ tập trung vào vấn đề thứ ba, tức là tính toán
đường đi tốt nhất qua mạng cho các trung kế lưu lượng sao cho mạng hoạt
động hiệu quả và tin cậy. Đây chính là bài toán ánh xạ đồ hình nghiệm suy H
lên topology mạng cơ sở G.
3.3 Trung kế lưu lượng và các thuộc tính
Để xây dựng và duy trì trung kế lưu lượng, người ta tìm cách mô hình hóa
nó bằng các tham số. Một thuộc tính là một tham số được gán và có ảnh hưởng
đến các đặc trưng hành vi của trung kế lưu lượng. Các thuộc tính có thể được
gán cụ thể thông qua hành động quản trị hoặc được gán ngầm ẩn bởi các giao
Trang-65-

thức bên dưới khi các gói được phân loại và ánh xạ vào FEC tại lối vào miền
MPLS. Thực tế, một trung kế lưu lượng có thể đặc trưng hóa bởi:
 Ingress-LSR và egress-LSR của trung kế lưu lượng
 Tập các FEC được ánh xạ vào trung kế lưu lượng
 Một tập các thuộc tính nhằm xác định các đặc trưng hành vi của trung
kế.
Hai vấn đề cơ bản có ý nghĩa đặc biệt là: (1) Tham số hóa các trung kế lưu
lượng và (2) những quy luật sắp đặt và duy trì đường dẫn cho các trung kế lưu
lượng.
3.3.1 Các hoạt động cơ bản trên trung kế lưu lượng
Là các tiến trình khác nhau xảy ra trong thời gian sống của một trung kế lưu
lượng:
 Establish : Tạo ra một trung kế lưu lượng bằng cách quyết định một
LSP, gán các nhãn MPLS và quan trọng nhất là gán tài nguyên cho trung
kế đó.
 Activate : Làm cho trung kế lưu lượng bắt đầu chuyển dữ liệu bằng cách
dùng một số chức năng định tuyến để đưa lưu lượng vào trung kế.
 Deactivate : Làm cho trung kế lưu lượng ngưng chuyển dữ liệu cũng
bằng cách dùng một chức năng định tuyến để dừng việc đưa lưu lượng
vào trung kế.
 Modify Attributes : Thay đổi các đặc trưng của trung kế lưu lượng,
chẳng hạn như băng thông khả dụng.
 Reroute : Chọn một đường mới cho trung kế lưu lượng (thường là do
một số sự cố trong mạng hoặc khi khôi phục xong sự cố).
 Destroy : Loại bỏ hoàn toàn một trung kế lưu lượng khỏi mạng và thu
hồi tất cả các tài nguyên đã cấp phát cho nó.
3.3.2 Thuộc tính tham số lưu lượng (Traffic Parameter)
Thuộc tính tham số lưu lượng đặc tả băng thông đòi hỏi bởi trung kế lưu
lượng cùng với các đặc trưng lưu lượng khác như tốc độ đỉnh, tốc độ trung
bình, kích thước bùng phát cho phép, v.v... Dưới góc độ kỹ thuật lưu lượng, các
Trang-66-

tham số lưu lượng rất quan trọng vì chúng cho biết các yêu cầu về tài nguyên
của trung kế lưu lượng.
3.3.3 Thuộc tính lựa chọn và quản lý đường (chính sách chọn đường)
Là các tiêu chuẩn lựa chọn và duy trì đường dẫn cho trung kế lưu lượng.
Con đường thực sự được chọn xuyên qua mạng có thể được cấu hình tĩnh bởi
nhà điều hành hoặc được gán động do mạng dựa vào các thông tin từ IGP (như
IS-IS hoặc OSPF). Các thuộc tính cơ bản và các đặc trưng hành vi liên quan
đến chọn đường và quản lý đường cho trung kế lưu lượng được mô tả sau đây:

3.3.3.1 Đường tường minh đặc tả quản trị


Đường tường minh đặc tả quản trị cho một trung kế lưu lượng được cấu
hình bởi nhà điều hành. Một đường gọi là đặc tả toàn bộ nếu chỉ ra tất cả các
chặng yêu cầu giữa hai điểm cuối. Đặc tả một phần là nếu chỉ có một tập con
các chặng trung gian được chỉ thị. Thuộc tính "path preference rule" là một
biến nhị phân chỉ thị đường tường minh được cấu hình là bắt buộc hay không
bắt buộc.

3.3.3.2 Phân cấp các luật ưu tiên cho đa đường


Trong một số hoàn cảnh thực tế, khả năng chỉ định một tập hợp các
đường tường minh đề cử cho một trung kế lưu lượng và định nghĩa phân cấp
các quan hệ ưu tiên giữa các đường. Khi thiết lập đường, các luật ưu tiên được
áp dụng để chọn ra đường thích hợp từ danh sách đề cử. Trong các tình huống
sự cố thì các luật ưu tiên này cũng được dùng để chọn một đường thay thế từ
danh sách đề cử.

3.3.3.3 Thuộc tính Affinity lớp tài nguyên (Resource Class Affinity)
Thuộc tính này cho phép operator thiết lập các chính sách chọn đường
bằng việc bao gồm hay loại trừ một số liên kết nào đó. Mỗi liên kết được gán
một thuộc tính lớp tài nguyên (Resource-Class). Thuộc tính Affinity lớp tài
nguyên có dạng chuỗi bit như sau:
Affinity(32-bit), Mask(32-bit)
Mặt nạ lớp tài nguyên chỉ thị các bit nào trong lớp tài nguyên cần được
kiểm tra. Liên kết được bao hàm khi chọn đường nếu chuỗi Affinity trùng với
Trang-67-

Resource-Class sau khi cùng thực hiện phép AND với mặt nạ. Giá trị default
của mặt nạ là 0x0000FFFF[3].

3.3.3.4 Thuộc tính thích ứng (Adaptivity)


Trong nhiều tình huống cần thiết phải thay đổi động các đường dẫn của
trung kế lưu lượng để đáp ứng với việc thay đổi trạng thái mạng (chủ yếu thay
đổi tài nguyên khả dụng). Quá trình này được gọi là tái tối ưu hóa (re-
optimization). Thuộc tính thích ứng cho biết một trung kế lưu lượng được phép
tái tối ưu hóa hay không. Nếu tái tối ưu hóa bị cấm thì trung kế lưu lượng coi
như được “ghim” vào đường đã thiết lập của nó và không thể tái định tuyến (re-
route) khi có thay đổi trạng thái mạng.

3.3.3.5 Phân phối tải qua nhiều trung kế song song


Khi lưu lượng thu gom giữa hai nút quá lớn không thể tải hết trên một
đường, MPLS có thể tạo ra nhiều trung kế lưu lượng giữa hai nút sao cho mỗi
trung kế chuyển một phần của lưu lượng thu gom. Khi đó cần có một số thuộc
tính cho biết tỉ lệ tương đối của lưu lượng được mang bởi mỗi trung kế. Các
giao thức bên dưới sẽ ánh xạ tải lên các trung kế lưu lượng theo các tỉ lệ được
cho.
3.3.4 Thuộc tính ưu tiên / lấn chiếm (Priority/Preemption)
Thuộc tính ưu tiên có 8 mức (giảm dần từ 0 đến 7) xác định thứ tự thực
hiện chọn đường cho các trung kế lưu lượng. Độ ưu tiên cũng rất quan trọng
khi triển khai cơ chế lấn chiếm (preemption) vì nó có ảnh hưởng đến thứ tự
thiên vị.
Mỗi trung kế lưu lượng được gán một giá trị ưu tiên thiết lập (setup
priority) và một giá trị ưu tiên hiện tại (holding priority). Khi thiết lập trung kế
mới hoặc tái định tuyến, một trung kế có độ ưu tiên thiết lập cao sẽ chèn lấn
một trung kế khác có độ ưu tiên cầm giữ thấp hơn “bật” ra khỏi đường nếu
chúng cạnh tranh tài nguyên. Ngược lại, việc thiết lập một trung kế mới có thể
thất bại nếu băng thông mà nó yêu cầu đang bị chiếm giữ bởi các trung kế khác
có độ ưu tiên cầm giữ cao hơn[3].
Trang-68-

3.3.5 Thuộc tính đàn hồi (Resilience)


Thuộc tính đàn hồi xác định hành vi của trung kế lưu lượng trong tình
huống xảy ra sự cố theo các cơ chế sau:
 Không tái định tuyến trung kế lưu lượng.
 Tái định tuyến qua một đường khả thi có đủ tài nguyên.
 Tái định tuyến qua đường khả dụng bất kỳ bất chấp các ràng buộc tài
nguyên.
 Tổ hợp của các cơ chế nói trên.
3.3.6 Thuộc tính khống chế (Policing)
Thuộc tính khống chế xác định những hoạt động được thực hiện khi một
trung kế lưu lượng không tuân thủ mức dịch vụ đã đặc tả ở các tham số lưu
lượng. Nó cho biết cách xử lý đối với lượng traffic vượt mức dịch vụ (ví dụ
hủy gói hay truyền theo kiểu best-effort). Nói chung, nên luôn luôn khống chế
ở lối vào của mạng để cưỡng bức tuân thủ các hợp đồng mức dịch vụ và giảm
thiểu việc khống chế bên trong lõi mạng.
3.4 Các thuộc tính tài nguyên
3.4.1 Bộ nhân cấp phát cực đại (maximum allocation multiplier)
Là lượng băng thông dự trữ khả dụng tối đa của một liên kết có thể cấp
phát ứng với từng mức ưu tiên thiết lập (setup priority) của các trung kế lưu
lượng.

Hình 42: Một ví dụ băng thông dự trữ cho từng mức ưu tiên
Trang-69-

3.4.2 Lớp tài nguyên (Resource-Class)


Thuộc tính lớp tài nguyên của một liên kết là một chuỗi 32 bit được
dùng kết hợp với thuộc tính Affinity của trung kế lưu lượng để bao gồm hay
loại trừ các liên kết nào đó trên đường của trung kế. Hình dưới đây là một ví dụ
Affinity và lớp tài nguyên 4 bit để tránh một liên kết được đặc tả.

Hình 43: Minh họa cách dùng bit Affinity và Resource-Class


3.4.3 Độ đo TE
Mỗi liên kết có một cost hoặc độ đo để tính toán định tuyến trong hoạt
động của IGP. Độ đo TE là một trọng số quản trị được gán cho các liên kết để
tính toán LSP cho các trung kế lưu lượng. Giá trị độ đo TE mặc định là bằng
IGP cost của liên kết. Router đầu nguồn (head-end) sử dụng các độ đo TE để
định tuyến ràng buộc[3].
3.5 Tính toán đường ràng buộc
3.5.1 Quảng bá các thuộc tính của liên kết
Router tại đầu nguồn (head-end) của một trung kế phải nắm được thông tin
thuộc tính tài nguyên của tất cả các liên kết trong mạng để tính toán đường
LSP. Điều này này chỉ có thể đạt được bằng cách sử dụng các giao thức định
tuyến Link-State (như IS-IS hay OSPF) vì chỉ có kiểu giao thức này mới quảng
bá thông tin về tất cả các liên kết đến tất cả các router. Vì vậy, OSPF và IS-IS
được mở rộng để hỗ trợ MPLS-TE:
 IS-IS có các trường Type-Length-Value mới (kiểu 22 TLV) để đính kèm
các thông tin này trong các thông cáo PDU Link-State của nó.
 OSPF có các định nghĩa thông cáo Link-State mới (kiểu 10 LSA).
Trang-70-

Một khi router đầu nguồn nhận được các thông cáo này thì nó không chỉ
biết được topology mạng mà còn biết được các thông tin tài nguyên khả dụng
của từng liên kết. Điều này rất cần thiết để tính toán các đường thỏa mãn các
đòi hỏi của trung kế lưu lượng.

Hình 44: Băng thông khả dụng ứng với từng mức ưu tiên
Các giao thức IGP sẽ quảng bá các thuộc tính tài nguyên khi dưới các điều
kiện hoặc sự kiện nào đó như:
 Khi liên kết thay đổi trạng thái (ví dụ up, down…)
 Khi lớp tài nguyên của liên kết thay đổi do tái cấu hình nhân công hoặc
trong trường hợp băng thông khả dụng biến động qua các mức ngưỡng
đặt trước.
 Theo định kỳ (dựa vào một timer), router sẽ kiểm tra các thuộc tính tài
nguyên và quảng bá cập nhật thông tin.
 Khi tham gia thiết lập một đường LSP nhưng thất bại. Liên kết D
Các giao thức IGP sẽ quảng bá các thuộc tính tài nguyên khi dưới các điều
kiện hoặc sự kiện nào đó như:
 Khi liên kết thay đổi trạng thái (ví dụ up, down…)
 Khi lớp tài nguyên của liên kết thay đổi do tái cấu hình nhân công hoặc
trong trường hợp băng thông khả dụng biến động qua các mức ngưỡng
đặt trước.
Trang-71-

 Theo định kỳ (dựa vào một timer), router sẽ kiểm tra các thuộc tính tài
nguyên và quảng bá cập nhật thông tin.
 Khi tham gia thiết lập một đường LSP nhưng thất bại.
3.5.2 Tính toán LSP ràng buộc (CR-LSP)
LSP cho một trung kế lưu lượng có thể được khai báo tĩnh hoặc tính
toán động. Việc tính toán sẽ xem xét các tài nguyên khả dụng, các thuộc tính
liên kết và cả các trung kế khác (vì vậy được gọi là tính toán đường ràng buộc).
Kết quả của việc tính toán này là tìm ra một chuỗi các địa chỉ IP đại diện cho
các chặng trên đường LSP giữa đầu nguồn và đầu đích của trung kế lưu lượng.
Sau đó, thực hiện báo hiệu LSP và hoàn thành việc thiết lập đường bằng các
giao thức báo hiệu cho MPLS như RSVP-TE[3].
Tiến trình tính toán đường ràng buộc luôn luôn được thực hiện tại
đầu nguồn trung kế lưu lượng và được kích hoạt do:
 Một trung kế mới xuất hiện
 Một trung kế đang tồn tại nhưng thiết lập LSP thất bại
 Tái tối ưu hóa một trung kế đang tồn tại.
3.5.3 Giải thuật chọn đường
Việc chọn đường cho một trung kế lưu lượng sử dụng trọng số quản trị (TE
cost) của mỗi liên kết riêng biệt. Trọng số quản trị này mặc nhiên là bằng độ đo
IGP của liên kết. Giải thuật chọn đường ràng buộc theo các bước sau:
 Cắt bỏ các liên kết có resource-class bị loại do phép tính Affinity ra khỏi
topology.
 Cắt bỏ các liên kết không có đủ băng thông dự trữ theo yêu cầu của
trung kế.
 Chạy giải thuật Dijktra để tìm ra đường có tổng TE-cost nhỏ nhất trên
phần topology còn lại.
Sau khi thực hiện các bước trên mà vẫn còn nhiều đường ứng cử cho LSP
(nhiều nhiều đường có cùng tổng độ đo TE) thì tiêu chuẩn thứ tự chọn lựa như
sau:
 Đường có băng thông tối thiểu cao nhất
 Đường có số chặng nhỏ nhất
Trang-72-

 Chọn lựa ngẫu nhiên


Khi đường LSP được tính xong, RSVP được dùng để dành trước băng
thông thực sự, để phân phối các nhãn cho đường và hoàn thành việc thiết lập
đường LSP.
3.5.4 Ví dụ về chọn đường cho trung kế lưu lượng
Xét ví dụ chọn đường LSP cho một trung kế lưu lượng (tunnel) thiết lập
giữa R1 (đầu nguồn) và R6 (đầu đích). Yêu cầu của trung kế lưu lượng như
sau:
 Băng thông đòi hỏi ở mức ưu tiên 3 là 30 Mbps
 Các bit Affinity lớp tài nguyên là 0010 với mặt nạ là 0011, tức là chỉ
thực hiện kiểm tra trên hai bit thấp.
Kết nối R4-R3 cần được loại trừ khỏi đường LSP, do vậy chuỗi bit
resource-class của được đặt là 0011. Khi các bit Affinity lớp tài nguyên của
trung kế lưu lượng được so sánh với các bit resource-class là không trùng nên
kết nối R4-R3 bị loại như được chỉ ra trên hình 45.

Hình 45: Xem xét các ràng buộc khống chế


Tham số tiếp theo được kiểm tra trong quá trình tính toán đường ràng
buộc là TE cost (trọng số quản trị) của mỗi liên kết mà đường hầm khả năng đi
Trang-73-

qua. Nếu không xét tài nguyên thì đường R1-R4-R6 có tổng cost thấp nhất là
30. Tất cả các đường khả thi khác đều có tổng cost cao hơn.
Khi tài nguyên được đưa vào tính toán, thấy rằng trên đường ngắn nhất
không có đủ băng thông thỏa mãn các đòi hỏi của trung kế lưu lượng (đòi hỏi
30 Mbps trong khi chỉ có 20 Mbps khả dụng). Kết quả là kết nối R4-R6 cũng bị
loại khỏi phép tính đường LSP.

Hình 46: Xem xét tài nguyên khả dụng

Sau khi loại bỏ các liên kết không thỏa mãn các đòi hỏi của trung kế lưu
lượng, kết quả có hai đường LSP là: R1-R2-R3-R6 và R1-R5-R6. Cả hai đường
đều có tổng cost là 40, để chọn một đường phải giải quyết bằng luật “tie-
break”.
Trang-74-

Hình 47: Chọn đường tốt nhất


Trước tiên, băng thông tối thiểu trên đường được so sánh. Sau khi so
sánh, vẫn còn cả hai đường vì chúng đều cung cấp ít nhất 50 Mbps băng thông.
Tiếp theo, luật số chặng nhỏ nhất trên đường LSP được áp dụng. Vì đường R1-
R5-R6 có số chặng nhỏ hơn nên cuối cùng nó được chọn và quá trình tính toán
ràng buộc kết thúc.
3.5.5 Tái tối ưu hóa (Re-optimization)
Các đặc trưng và trạng thái mạng biến động theo thời gian. Ví dụ, các tài
nguyên mới trở nên khả dụng, các tài nguyên bị lỗi được tái kích hoạt, các tài
nguyên đã cấp phát được thu hồi lại. Do vậy, các đường của trung kế lưu lượng
đã thiết lập tối ưu trước đó có thể không còn tối ưu nữa. Để duy trì mạng luôn
luôn ở trạng thái tối ưu nhất, các trung kế lưu lượng phải được tái tối ưu hóa
(re-optimization)[3].
Tái tối ưu hóa được thực hiện theo chu kỳ. Sau những khoảng thời gian nhất
định, MPLS-TE thực hiện kiểm tra đường tối ưu nhất cho các đường hầm LSP.
Nếu xuất hiện đường cho LSP tốt hơn đường hiện dùng thì:
 Trước tiên, router đầu nguồn cố gắng báo hiệu thiết lập LSP mới tốt
hơn,
 Nếu thành công, thay thế đường LSP cũ bằng đường LSP mới tốt hơn.
Trang-75-

Tái tối ưu hóa phải không được gây ra sai hỏng dịch vụ. Để thực hiện điều
này, đường LSP hiện có phải được duy trì cho đến khi LSP mới được thiết lập
xong và chuyển trung kế lưu lượng từ đường cũ sang đường mới. Sau đó,
đường LSP cũ mới được giải tỏa. Khái niệm này gọi là “make before break”.
3.6 Bảo vệ và khôi phục đường
Các cơ chế bảo vệ và khôi phục đường trong MPLS cung cấp một dịch vụ
tin cậy cho việc chuyển tải lưu lượng trong mạng MPLS và tái định tuyến lưu
lượng qua một đường chuyển mạch nhãn LSP. Trong phần này, ta có một vài
khái niệm sau:
 Đường làm việc: Là đường chuyển tải trung kế lưu lượng trước khi xảy
ra lỗi. Đây là đường được bảo vệ bởi cơ chế khôi phục.
 Đường khôi phục: Là đường mà trung kế lưu lượng sẽ được tái định
tuyến sau khi xảy ra lỗi, được thiết lập để bảo vệ cho đường làm việc.
 PSL (Path Switch LSR): Là LSR đứng trước vị trí lỗi trên đường làm
việc chịu trách nhiệm chuyển mạch hoặc tái tạo lưu lượng sang đường
khôi phục.
 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.
Trang-76-

3.6.1 Phân loại các cơ chế bảo vệ khôi phục

3.6.1.1 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 hoàn toàn[3].
Sửa chữa cục bộ cũng nhằm bảo vệ khi có sự cố liên kết 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 liên kết: để bảo vệ một liên kết trên đường làm việc. Nếu một
lỗi xảy ra trên liên kết này thì đường khôi phục sẽ nối liền giữa PSL và
PML ở hai đầu liên kết lỗi. Đường khôi phục và đường làm việc tách rời
nhau đối với liên kết đượ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 liên kết 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.2 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[3].
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 đã
Trang-77-

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ề liên kết 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 48: 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
Trang-78-

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 49: 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.
Trang-79-

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ố liên kết 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 liên kết 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 50: 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ố liên kết 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.
Trang-80-

Hình 51: 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 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 phương pháp đã đượ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.
Trang-81-

Chương 4: MÔ PHỎNG MPLS-TE VÀ ĐÁNH GIÁ


4.1 Phương pháp và công cụ mô phỏng
4.1.1 Phương pháp phân tích
Có hai phương pháp để phân tích nghiên cứu lưu lượng trong một mạng:
 Mô hình hóa bằng phương pháp toán học
 Mô phỏng bằng phần mềm trên máy tính
Trong đề tài này, học viên chọn phương pháp mô phỏng trên máy tính với
NS-2 (Network Simulator v.2). NS-2 là phần mềm mã nguồn mở, mô phỏng
các sự kiện rời rạc nhằm mục đích nghiên cứu mạng, nó hỗ trợ các giao thức
mạng như là TCP, UDP, hoạt động của những tài nguyên mạng như FPT,
Telnet, Web, CBR và VBR, các cơ chế quản lý hàng đợi router như Drop Tail,
RED và CBQ, các thuật toán định tuyến... NS-2 được viết bằng C++ và OTcl.

Hình 52: Dữ liệu đầu vào và kết xuất của NS


Để thiết lập và chạy một mạng mô phỏng, người dùng phải viết một tập
lệnh OTcl Script và khởi động một lịch trình sự kiện, thiết lập cấu hình mạng
sử dụng các đối tượng mạng và các hàm chức năng trong thư viện, chỉ cho tài
nguyên lưu lượng biết khi nào thì bắt đầu và kết thúc việc truyền gói thông qua
lập biểu.
Khi mô phỏng kết thúc, NS-2 sẽ xuất ra một hay nhiều file text, ở đó có
chứa các dữ liệu kết quả mô phỏng chi tiết nếu chúng ta yêu cầu trong tập lệnh
Tcl. Các file này lại là dữ liệu đầu vào cho một chương trình hiển thị mô phỏng
Trang-82-

trực quan gọi là Network Animator (NAM). Các số liệu kết quả mô phỏng cũng
được dùng để vẽ các đồ thị phân tích bằng chương trình XGraph theo các yêu
cầu nghiên cứu.
4.1.2 Chuẩn bị công cụ mô phỏng
NS-2 được thiết kế để chạy trong môi trường Unix. Tuy nhiên, ta vẫn có
thể cài đặt NS-2 trong Windows bằng cách dùng thêm chương trình Cygwin.
Học viên đã thử thực hiện cài đặt NS-2 trên Linux Ubuntu 9.04 và trên
Windows XP với Cygwin v1.5.24, cả hai môi trường này đều cho kết quả tốt.
Các công tác chuẩn bị đã thực hiện:
 Cài đặt gói phần mềm ns-allinone-2.32. tại website
http://nsnam.isi.edu/nsnam . Trong gói này đã bao gồm ns-2.32, nam-
1.13, otcl-1.13 và tclcl-1.19.
4.2 Nội dung và kết quả mô phỏng
Để thuận tiện trong việc thực hiện mô phỏng và đánh giá, tất cả các bài
mô phỏng trong đề tài này đều thống nhất sử dụng một topology mạng gồm 10
nút router như trong hình dưới đây:

Hình 53: Topology vật lý mạng thực hiện 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 liên kết 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).
Sau đây là nội dung và kết quả các bài mô phỏng mà học viên đã thực
hiện. Mã nguồn OTcl Script của các bài mô phỏng này có trong phần phụ lục
của luận văn.
Trang-83-

4.2.1 Mô phỏng mạng IP không hỗ trợ MPLS


4.2.1.1 Mô hình
Topology như hình 55, trong đó tất cả các nút đều là router IP thông
thường không hỗ trợ MPLS (được đặt tên tương ứng từ R0 đến R10).
Có 2 nguồn lưu lượng (src1 và src2) được tạo ra và gắn vào nút R0.
Tương ứng có 2 đích lưu lượng (sink1 và sink2) gắn vào nút R10. Mỗi nguồn
phát luồng lưu lượng với tốc độ 0,9 Mbps, kích thước gói 600B.

4.2.1.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:
 Thời điểm 0,5s : Luồng 1 (src1 – sink1) bắt đầu truyền
 Thời điểm 2,0s : Luồng 2 (src2 – sink2) bắt đầu truyền
 Thời điểm 5,0s : Cả 2 luồng ngưng truyền
Kết quả:
 Luồng 1: Truyền 843 gói, mất 244 gói, tỉ lệ mất gói: 28,9%
 Luồng 2: Truyền 559 gói, mất 240 gói, tỉ lệ mất gói: 42,9%

Hình 54: Kết quả băng thông nhận được ở bài 1

4.2.1.3 Nhận xét


Mạng IP sử dụng giải thuật định tuyến chọn đường ngắn nhất, do vậy cả
2 luồng lưu lượng đều đi theo con đường là 1_3_5_7_9. Băng thông trên đường
này không đủ cho cả hai luồng, do vậy tất yếu xảy ra nghẽn. Kết quả trực quan
trong cửa sổ NAM cho thấy cả hai luồng đều bị rớt gói tại router R3. Trong khi
Trang-84-

đó, các đường khác có đủ băng thông nhưng lại không được sử dụng (hình 57).
Đây chính là vấn đề sử dụng tài nguyên không hiệu quả trong mạng IP.

Hình 55: Mô phỏng trực quan bài 1 trong cửa sổ NAM


4.2.2 Mô phỏng định tuyến ràng buộc trong mạng MPLS

4.2.2.1 Mô hình
Topology như hình 55, 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ó 3 nguồn lưu lượng (src1, src2, src3) được tạo ra và gắn vào nút R0.
Tương ứng có 3 đích lưu lượng (sink1, sink2, sink3) gắn vào nút R10. Mỗi
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.2.2.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:
 Lần lượt thực hiện định tuyến ràng buộc và thiết lập 4 LSP có ID tương
ứng là 1100, 1200, 1300 và 1400 với yêu cầu BW=0,8 Mbps cho mỗi
đường.
 Thời điểm 0,5s : Luồng 1 (src1 – sink1) bắt đầu truyền trên LSP_1100
 Thời điểm 1,0s : Luồng 2 (src2 – sink2) bắt đầu truyền trên LSP_1200
 Thời điểm 1,5s : Luồng 3 (src3 – sink3) bắt đầu truyền trên LSP_1300
Trang-85-

 Thời điểm 5,0s : Cả 3 luồng lưu lượng ngưng truyền.


Kết quả định tuyến ràng buộc là các tuyến tường minh ER tìm thấy như sau:
 LSP_1100: ER= 1_3_5_7_9
 LSP_1200: ER= 1_2_4_6_8_9
 LSP_1300: ER= 1_3_4_6_5_7_8_9
 LSP_1400: ER= NO PATH ==> LSP_1400 sẽ không được thiết lập.
Kết quả truyền các luồng:
 Luồng 1: Truyền 750 gói, mất 0 gói
 Luồng 2: Truyền 666 gói, mất 0 gói
 Luồng 3: Truyền 583 gói, mất 0 gói

Hình 56: Kết quả băng thông nhận được ở bài 2


Trang-86-

Hình 57: Mô phỏng trực quan bài 2 trong cửa sổ NAM

Hình 58: Xuất nội dung bảng LIB ở các LSR ra màn hìn console
Trang-87-

4.2.2.3 Nhận xét


Định tuyến ràng buộc tự động chọn đường tốt nhất có đủ băng thông yêu
cầu cho các CR-LSP, như vậy đường được chọn không nhất thiết phải là đường
ngắn nhất. Nếu không có đủ băng thông, CR-LSP sẽ không được thiết lập (như
trường hợp của LSP_1400), đây chính là cách ngăn ngừa tắc nghẽn và đảm bảo
QoS. Kết quả trực quan trong cửa sổ NAM cho thấy ba luồng mặc dù cùng xuất
phát từ R0 và đến đích tại R10 nhưng mỗi luồng đi theo một đường khác nhau
và đảm bảo không bị rớt gói. Điều này cho thấy hiệu quả sử dụng tài nguyên
được nâng cao nhờ kỹ thuật lưu lượng.
Qua theo dõi nội dung cơ sở dữ liệu nhãn LIB của các LSR xuất ra trên màn
hình console, ta thấy có việc sử dụng nhãn ứng với từng LSP được thiết lập.
4.2.3 Mô phỏng hoạt động lấn chiếm (Preemption) với các độ ưu tiên

4.2.3.1 Mô hình
Topology như hình 55, 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ó 2 nguồn lưu lượng (src1, src2) được tạo ra và gắn vào nút R0. Tương
ứng có 2 đích lưu lượng (sink1, sink2) gắn vào nút R10. Mỗi 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.2.3.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:
 Thời điểm 0,5s : Luồng 1 (src1 – sink1) bắt đầu truyền trên LSP_1100
(được thiết lập theo đường tường minh ER=1_3_5_7_9, ràng buộc
BW=0,8 Mbps, có độ ưu tiên thiết lập SPrio=7 và độ ưu tiên nắm giữ
HPrio=5)
 Thời điểm 1,5s : Luồng 2 (src2 – sink2) bắt đầu truyền trên LSP_1200
(được thiết lập theo đường tường minh ER=1_2_4_6_5_7_9, ràng buộc
BW=0,8 Mbps, có độ ưu tiên thiết lập SPrio=5 và độ ưu tiên nắm giữ
HPrio=4)
 Thời điểm 3,5s : Luồng 2 ngưng truyền.
Trang-88-

 Thời điểm 5,0s : Luồng 1 ngưng truyền.


Kết quả truyền các luồng:
 Luồng 1: Truyền 750 gói, mất 149 gói, tỉ lệ mất gói: 19,8%
 Luồng 2: Truyền 333 gói, mất 0 gói, tỉ lệ mất gói: 0%

Hình 59: Kết quả băng thông nhận được ở bài 3

Hình 60: Mô phỏng trực quan bài 3 trong cửa số NAM

4.2.3.3 Nhận xét


Luồng 1 đi trên LSP_1100 được thiết lập trước theo ER=1_3_5_7_9 và
có độ ưu tiên nắm giữ HPrio=6. Luồng 2 đi trên LSP_1200 được thiết lập sau
Trang-89-

theo ER=1_2_4_6_5_7_9. Như vậy, hai luồng lưu lượng cạnh tranh băng thông
trên kết nối LSR7-LSR9 do kết nối này không đủ băng thông yêu cầu cho cả
hai LSP. Vì LSP_1200 có độ ưu tiên thiết lập Sprio=5 cao hơn HPrio=6 của
LSP_1100 nên luồng 2 được đảm bảo cấp đủ băng thông theo yêu cầu là 0,8
Mbps. Trong bài mô phỏng, ta không quy định tái định tuyến sang đường khác
cho luồng 1 khi LSP_1100 bị lấn chiếm nên từ đây, luồng 1 được truyền theo
kiểu best-effort, nghĩa là tận dụng lượng băng thông 0,2 Mbps còn lại trên kết
nối.
Với hoạt động lấn chiếm (preemption), các trung kế lưu lượng có độ ưu tiên
nắm giữ thấp phải nhường tài nguyên cho các trung kế có độ ưu tiên thiết lập
cao. Kết quả trực quan trong cửa sổ NAM cho thấy chỉ có luồng 1 bị rớt gói tại
LSR7 để đảm bảo băng thông yêu cầu cho luồng 2 (hình 62).
4.2.4 Mô phỏng khôi phục đường theo cơ chế Makam

4.2.4.1 Mô hình
Topology như hình 55, 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.2.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)
 Thiết lập đường bảo vệ toàn cục: LSP_1200 (ER=1_2_4_6_8_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 : Kết nối 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 57 gói, tỉ lệ mất gói: 7,59%
Trang-90-

Hình 61: Kết quả băng thông nhận được ở bài 4

Hình 62 Đường đi của lưu lượng trước thời điểm sự cố


Trang-91-

Hình 63: Đường đi của lưu lượng sau thời điểm sự cố (Makam)

4.2.4.3 Nhận xét


Khi kết nối giữa LSR5-LSR7 bị đứt, LSR5 phát một bản tin FIS về
LSR1. Sau khi LSR1 nhận được thông điệp này, nó sẽ chuyển luồng lưu lượng
từ đường làm việc sang đường bảo vệ toàn cục đã thiết lập. Do thông điệp
thông báo phải mất một khoảng thời gian mới đến được LSR1 nên trong thời
gian này, các gói vẫn còn được truyền trên đường dẫn có liên kết bị hỏng và sẽ
bị mất. Đây chính là nhược điểm của cơ chế bảo vệ Makam.
4.2.5 Mô phỏng khôi phục đường theo cơ chế Haskin (Reverse
Backup)

4.2.5.1 Mô hình
Như mô hình bài trước ở mục 4.2.4.1.

4.2.5.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)
 Thiết lập đường bảo vệ toàn cục: LSP_1200 (ER=1_2_4_6_8_9)
 Thiết lập đường reverse backup: LSP_1300 (ER=9_7_5_3_1_L1200 )
 Thời điểm 0,5s : Luồng 1 (src1 – sink1) bắt đầu truyền trên LSP_1100
Trang-92-

 Thời điểm 2,0s : Kết nối 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 5 gói, tỉ lệ mất gói: 0,66%

Hình 64: Kết quả băng thông nhận được ở bài 5

Hình 65: Đường đi của lưu lượng sau thời điểm sự cố (Haskin)

4.2.5.3 Nhận xét


Cơ chế bảo vệ này khắc phục được nhược điểm mất gói của cơ chế
Makam. Kết quả trực quan trong cửa sổ NAM (hình 67) cho thấy luồng khi đến
Trang-93-

LSR5 được chuyển ngược trở lại LSR1 để đi sang đường bảo vệ. Tuy nhiên, độ
trễ sẽ tăng lên do đường đi của lưu lượng dài hơn.
4.2.6 Mô phỏng khôi phục đường theo cơ chế Shortest-Dynamic

4.2.6.1 Mô hình
Như mô hình bài trước ở mục 4.2.4.1.

4.2.6.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 : Kết nối 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 66: Kết quả băng thông nhận được ở bài 6


Trang-94-

Hình 67: Đường đi của lưu lượng sau thời điểm sự cố (Shortest-Dynamic)

4.2.6.3 Nhận xét


Cơ chế Shortest-Dynamic thuộc loại sửa chữa cục bộ bảo vệ liên kết.
Kết quả trực quan trong cửa sổ NAM (hình 69) cho thấy khi kết nối 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 liên kết 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ị mất.
4.2.7 Mô phỏng khôi phục đường theo cơ chế Simple-Dynamic

4.2.7.1 Mô hình
Như mô hình bài trước ở mục 4.2.4.1.
4.2.7.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:
 Đường làm việc: ER=1_3_5_7_9
 Thời điểm 0,5s : Luồng 1 (src1 – sink1) bắt đầu truyền trên đường làm
việc
Trang-95-

 Thời điểm 2,0s : Kết nối 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 66 gói, tỉ lệ mất gói: 8,8%

Hình 68: Kết quả băng thông nhận được ở bài 7

Hình 69: Đường đi của lưu lượng sau thời điểm sự cố (Simple-Dynamic)
Trang-96-

4.2.7.3 Nhận xét


Cơ chế Simple-Dynamic thuộc loại sửa chữa cục bộ, có thể dùng cho
bảo vệ liên kết hoặc bảo vệ nút. Kết quả trực quan trong cửa sổ NAM (hình 71)
cho thấy khi kết nối LSR5-LSR7 bị đứt, LSR5 tự động định tuyến và báo hiệu
thiết lập LSP_9999 ngắn nhất nối giữa LSR5 và Egress, ở đây là LSR9 (đi theo
đường 5_6_8_9). Trong thời gian chờ thiết lập tuyến “đường tránh” LSP_9999,
các gói trên đường làm việc bị mất.
4.3 Tổng kết chương
Trong chương này, học viên báo cáo các bài mô phỏng đã thực hiện để
làm rõ cơ chế thực hiện kỹ thuật lưu lượng của 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
minh họa trong một số ví dụ. Các bài trong phần thực hành này được thực hiện
với phần mềm nguồn mở NS-2. Các file OTcl Scripts thực hiện các bài mô
phỏng trình bày trong phần phụ lục của luận văn này.
Trang-97-

KẾT LUẬN
Hiện nay MPLS là một giải pháp hàng đầu để giải quyết nhiều vấn đề
trong mạng như: tốc độ, khả năng mở rộng mạng, quản lý QoS và điều phối luu
lượng. MPLS là một công nghệ kết hợp tốt nhất giữa định tuyến lớp 3 và
chuyển mạch lớp 2 cho phép chuyển tải các gói rất nhanh trong mạng lõi và
định tuyến tốt ở mạng biên bằng cách dựa vào nhãn.
Luận văn đã trình bày được những khái niệm cơ sở sử dụng trong
chuyển mạch nhãn đa giao thức, từ đó nghiên cứu những nguyên lý hoạt động
cơ bản của MPLS và khả năng thực hiện kỹ thuật lưu lượng của nó. Bài toán cơ
bản của kỹ thuật lưu lượng trong MPLS là làm thế nào để á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, tối ưu hóa việc sử dụng tài nguyên, chống tắc nghẽn và tăng cường
QoS. Đặc biệt, đề tài tập trung nhiều vào các khía cạnh như:
Các yêu cầu của kỹ thuật lưu lượng trong chuyển mạch nhãn đa giao
thức.
Các cơ chế bảo vệ và khôi phục lưu lượng sử dụng trong MPLS.
Xây dựng các kịch bản mô phỏng từ các khái niệm ban đầu đến các
cơ chế được áp dụng trong kỹ thuật lưu lượng nhằm đưa ra các đánh giá dựa
trên các số liệu cụ thể. Điều này đặc biệt hữu ích khi học viên chưa có điều
kiện để tiếp cận và kiểm chứng trên hệ thống mạng trục IP/MPLS thực đang
hoạt động.
Tuy nhiên, kỹ thuật lưu lượng là một lĩnh vực rộng, đây cũng là bài toán
khó đặt ra cho bất kỳ một công nghệ truyền dẫn hoặc chuyển mạch mới nào. Vì
những lý do khách quan và chủ quan, đề tài khó tránh khỏi những thiếu sót, cụ
thể là:
Một số khái niệm, thuật ngữ mới chưa được thống nhất khi dịch
thuật.
Chưa đề cập nhiều đến quản lý QoS, Diffserv trong MPLS.
Chưa đề cập sâu đến ứng dụng MPLS trong mạng riêng ảo (VPN) là
một trong những công nghệ đang được ứng dụng rất nhiều trong các hệ
thống mạng hiện nay.
Trang-98-

Phần mềm mô phỏng mạng NS-2 rất khó can thiệp một cách đầy đủ
mà thường chỉ kế thừa, sử dụng tập lệnh và các module của nó cung cấp.
Vì vậy NS-2 chưa mô phỏng đầy đủ các hoạt động của một thiết bị thật
sự, do đó các số liệu kết quả thu được chỉ có độ tin cậy tương đối.
Qua đề tài này, học viên mong muốn nắm bắt được nền tảng kiến thức
về công nghệ MPLS, đặc biệt là ứng dụng của nó trong lĩnh vực kỹ thuật lưu
lượng. Hiện tại, MPLS vẫn thuộc loại chuyển mạch điện. Tuy nhiên, hướng
phát triển tiếp theo của MPLS là GMPLS (Generalized MPLS), trong đó áp
dụng ý tưởng chuyển mạch nhãn vào chuyển mạch quang, xem các bước sóng
quang như là nhãn. Công nghệ mới luôn luôn phát triển không ngừng và có tính
kế thừa, vì vậy việc nghiên cứu, cập nhật kiến thức để làm chủ thiết bị mạng
lưới là hết sức cần thiết.
Trang-99-

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] John Evans, Clarence Filsfils (Morgan Kaufmann (2007) "Deploying


IP and MPLS QoS for Multiservice Networks: Theory and Practice"

[8] The NS Manual (VINT Project 05/2007)

[9] Website: http://nsnam.isi.edu/nsnam


[10] Website:http://w4.siemens.de/ct/en/technologies/ic/beispiele/mpls
[11] Website: http://nile.wpi.edu/NS
Trang-100-

PHỤ LỤC: MÃ NGUỒN CÁC BÀI MÔ PHỎNG


Bai1.tcl
##############################################################
# BAI 1: MO PHONG MANG IP KHONG HO TRO MPLS #
##############################################################
# 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 bai1.nam w]
$ns namtrace-all $nf
# Tao cac file de luu du lieu cho xgraph
set f1 [open luong_1 w]
set f2 [open luong_2 w]
# So do ket noi mang
#

# Khai bao 10 nut mang IP thong thuong (co ten tu R0 --> R10)
foreach i "0 1 2 3 4 5 6 7 8 9 10" {
set R$i [$ns node]
}
# Khai bao link: nodes bw delay queue
$ns duplex-link $R0 $R1 3Mb 10ms DropTail
$ns duplex-link $R1 $R3 2Mb 30ms SFQ
$ns duplex-link $R3 $R5 1Mb 30ms SFQ
$ns duplex-link $R5 $R7 2Mb 30ms SFQ
$ns duplex-link $R7 $R9 1Mb 30ms SFQ
$ns duplex-link $R9 $R10 3Mb 10ms DropTail
$ns duplex-link $R1 $R2 1Mb 30ms SFQ
$ns duplex-link $R2 $R4 1Mb 30ms SFQ
$ns duplex-link $R4 $R6 2Mb 30ms SFQ
$ns duplex-link $R6 $R8 1Mb 30ms SFQ
$ns duplex-link $R8 $R9 2Mb 30ms SFQ
$ns duplex-link $R3 $R4 1Mb 30ms SFQ
$ns duplex-link $R5 $R6 1Mb 30ms SFQ
$ns duplex-link $R7 $R8 1Mb 30ms SFQ
# Ve dang so do mang
$ns duplex-link-op $R0 $R1 orient right
$ns duplex-link-op $R1 $R3 orient right
$ns duplex-link-op $R3 $R5 orient right
$ns duplex-link-op $R5 $R7 orient right
$ns duplex-link-op $R7 $R9 orient right
$ns duplex-link-op $R9 $R10 orient right
$ns duplex-link-op $R1 $R2 orient 0.333
$ns duplex-link-op $R2 $R4 orient right
$ns duplex-link-op $R4 $R6 orient right
$ns duplex-link-op $R6 $R8 orient right
$ns duplex-link-op $R8 $R9 orient 1.667
$ns duplex-link-op $R3 $R4 orient 0.333
$ns duplex-link-op $R5 $R6 orient 0.333
$ns duplex-link-op $R7 $R8 orient 0.333
# Ghi chu
$ns duplex-link-op $R1 $R3 label " 2M "
$ns duplex-link-op $R3 $R5 label " 1M "
Trang-101-

$ns duplex-link-op $R5 $R7 label " 2M "


$ns duplex-link-op $R7 $R9 label " 1M "
$ns duplex-link-op $R1 $R2 label " 1M "
$ns duplex-link-op $R2 $R4 label " 1M "
$ns duplex-link-op $R4 $R6 label " 2M "
$ns duplex-link-op $R6 $R8 label " 1M "
$ns duplex-link-op $R8 $R9 label " 2M"
$ns duplex-link-op $R3 $R4 label " 1M "
$ns duplex-link-op $R5 $R6 label " 1M "
$ns duplex-link-op $R7 $R8 label " 1M "
$ns duplex-link-op $R3 $R5 queuePos 1.5
$R0 label "Nguon"
$R10 label "Dich"
#----------------------------------------------------------------------
# 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 sink2 f1 f2
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 bw2 [$sink2 set bytes_]
set now [$ns now]
puts $f1 "$now [expr $bw1/$time*8/1000000]"
puts $f2 "$now [expr $bw2/$time*8/1000000]"
# Reset gia tri bytes_ cua sink
$sink1 set bytes_ 0
$sink2 set bytes_ 0
#Dinh thoi goi lai ham record sau chu ky $time
$ns at [expr $now+$time] "record"
}
#----------------------------------------------------
# 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 xuat tong so packet nhan duoc o cac sink
proc recv-pkts {} {global sink1 sink2
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 " Luong 2 da truyen [$sink2 set expected_] goi, mat [$sink2 set
nlost_] goi, ti le mat goi la [string range [expr [$sink2 set
nlost_]*100.0/[$sink2 set expected_]] 0 3] */*"
puts $msg
$ns trace-annotate $msg
}
#----------------------------------------------------
# Thu tuc dong file va the hien ket qua khi ket thuc mo phong
Trang-102-

proc finish {} {
global ns nf f1 f2
$ns flush-trace
close $nf
close $f1
close $f2
exec xgraph luong_1 luong_2 -M -nb -bg white -fg black -zg black \
-geometry 500x230 -y "BW (Mbps)" -x "Time (sec)" \
-t "Bai 1: Mang IP khong ho tro MPLS" -tf "helvetica-12" &
exec nam -r 8ms bai1.nam &
exit 0
}
#----------------------------------------------------
# Tao ra sink1, sink2 gan voi nut R10 (day la noi thu nhan traffic)
set sink1 [new Agent/LossMonitor]
set sink2 [new Agent/LossMonitor]
$ns attach-agent $R10 $sink1
$ns attach-agent $R10 $sink2
# Tao ra nguon luu luong src1, src2 gan voi nut R0 bang cach
# goi ham attach-expoo-traffic. Ca 2 luong co goi size=700B, rate=0.8bps
set src1 [attach-expoo-traffic $R0 $sink1 600B 0ms 0ms 0.9Mb ]
$src1 set fid_ 100
$ns color 100 red
set src2 [attach-expoo-traffic $R0 $sink2 600B 0ms 0ms 0.9Mb ]
$src2 set fid_ 200
$ns color 200 green
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 1: MO PHONG HOAT DONG MANG IP KHONG HO TRO MPLS \n"
$ns at 0.0 "record"
$ns at 0.5 "$ns trace-annotate {Luong 1: BW=0.9M (Start=0.5 stop=5.0)}"
$ns at 0.5 "$src1 start"
$ns at 2.0 "$ns trace-annotate {Luong 2: BW=0.9M (Start=2.0 stop=5.0)}"
$ns at 2.0 "$src2 start"
$ns at 2.5 "$ns trace-annotate {Ca 2 luong cung di tren duong ngan nhat ==> Su
dung BW khong hieu qua !}"
$ns at 5.0 "$src1 stop"
$ns at 5.0 "$src2 stop"
$ns at 5.5 "recv-pkts"
$ns at 5.5 "finish"
$ns run

Bai2.tcl
###############################################################
# BAI 2: MO PHONG DINH TUYEN RANG BUOC TRONG MPLS DOMAIN #
# Duong rang buoc duoc tinh toan tu dong #
###############################################################
# 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 bai2.nam w]
$ns namtrace-all $nf
# Tao cac file de luu du lieu cho xgraph
set f1 [open luong_1 w]
set f2 [open luong_2 w]
set f3 [open luong_3 w]
# So do ket noi mang
Trang-103-

#
# 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: nodes bw delay queue
$ns duplex-link $R0 $LSR1 3Mb 10ms DropTail
$ns duplex-link $LSR1 $LSR3 2Mb 30ms CBQ
$ns duplex-link $LSR3 $LSR5 1Mb 30ms CBQ
$ns duplex-link $LSR5 $LSR7 2Mb 30ms CBQ
$ns duplex-link $LSR7 $LSR9 1Mb 30ms CBQ
$ns duplex-link $LSR9 $R10 3Mb 10ms DropTail
$ns duplex-link $LSR1 $LSR2 1Mb 30ms CBQ
$ns duplex-link $LSR2 $LSR4 1Mb 30ms CBQ
$ns duplex-link $LSR4 $LSR6 2Mb 30ms CBQ
$ns duplex-link $LSR6 $LSR8 1Mb 30ms CBQ
$ns duplex-link $LSR8 $LSR9 2Mb 30ms CBQ
$ns duplex-link $LSR3 $LSR4 1Mb 30ms CBQ
$ns duplex-link $LSR5 $LSR6 1Mb 30ms CBQ
$ns duplex-link $LSR7 $LSR8 1Mb 30ms CBQ
# 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"
Trang-104-

$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
# cfg-cbq-on-all-mpls-nodes {sbts_bw hbts_bw rt_bw st_bw}
$ns cfg-cbq-on-all-mpls-nodes 0.1 0.05 0.8 0.05
# Gan luong traffic co fid vao dich vu SBTS (Simple Best-effort)
$ns bind-flowid-to-SBTS 0
$ns bind-flowid-to-SBTS 100
$ns bind-flowid-to-SBTS 200
$ns bind-flowid-to-SBTS 300
# 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
$ns collect-resource-info 4
#----------------------------------------------------------------------
# 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 sink2 sink3 f1 f2 f3
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 bw2 [$sink2 set bytes_]
set bw3 [$sink3 set bytes_]
set now [$ns now]
puts $f1 "$now [expr $bw1/$time*8/1000000]"
puts $f2 "$now [expr $bw2/$time*8/1000000]"
puts $f3 "$now [expr $bw3/$time*8/1000000]"
# Reset gia tri bytes_ cua sink
$sink1 set bytes_ 0
$sink2 set bytes_ 0
$sink3 set bytes_ 0
#Dinh thoi goi lai ham record sau chu ky $time
$ns at [expr $now+$time] "record"
}
#----------------------------------------------------
# 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 dinh tuyen va thiet lap duong rang buoc voi: LSP-id, igress, egress,
BW, Setup_Prio, Holding_Prio
proc constraint-routing { lspid sLSR dLSRid bw SPrio HPrio } {
set ns [Simulator instance]
set sLSRmodule [$sLSR get-module "MPLS"]
# Chon duong rang buoc theo thuoc tinh BW
Trang-105-

set er [$sLSRmodule constraint-based-routing $dLSRid $bw]


if {$er != -1} {
set msg " [string range [$ns now] 0 3]s: Ket qua dinh tuyen
LSP_$lspid: ER=$er. Bao hieu CR-LDP voi SPrio/HPrio=$SPrio/$HPrio ..."
puts $msg
$ns trace-annotate $msg
# Thiet lap CR-LSP: {fec er lspid TRate Bucket_Size Packet_Size
SPrio HPrio}
$sLSRmodule setup-crlsp $dLSRid $er $lspid $bw 3000B 600B
$SPrio $HPrio
} else {
set msg " [string range [$ns now] 0 3]s: Ket qua dinh tuyen
LSP_$lspid: ER= NO PATH !"
puts $msg
$ns trace-annotate $msg
}
}
#----------------------------------------------------
# Thu tuc sau thong bao ER/CR-LSP da thiet lap de goi luu luong
proc notify-erlsp-setup {node lspid} {
global src1 src2 src3
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
}
1200 {
$module bind-flow-erlsp 10 200 $lspid
}
1300 {
$module bind-flow-erlsp 10 300 $lspid
}
default {
puts " Error!"
exit 1
}
}
}
proc notify-erlsp-fail {node status lspid tr} {
set msg " Node=LSR[$node id] : status=$status lspid=$lspid tr=$tr"
puts $msg
$ns trace-annotate $msg
}
#----------------------------------------------------
# Thu tuc xuat tong so packet nhan duoc o cac sink
proc recv-pkts {} {
global sink1 sink2 sink3
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 " Luong 2 da truyen [$sink2 set expected_] goi, mat [$sink2 set
nlost_] goi, ti le mat goi la [string range [expr [$sink2 set
nlost_]*100.0/[$sink2 set expected_]] 0 3] */*"
puts $msg
$ns trace-annotate $msg
set msg " Luong 3 da truyen [$sink3 set expected_] goi, mat [$sink3 set
nlost_] goi, ti le mat goi la [string range [expr [$sink3 set
nlost_]*100.0/[$sink3 set expected_]] 0 3] */*"
Trang-106-

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 f3
$ns flush-trace
close $nf
close $f1
close $f2
close $f3
exec xgraph luong_1 luong_2 luong_3 -M -nb -bg white -fg black -zg black \
-geometry 500x230 -y "BW (Mbps)" -x "Time (sec)" \
-t "Bai 2: Dinh tuyen rang buoc trong MPLS" -tf "helvetica-12" &
exec nam bai2.nam &
exit 0
}
#----------------------------------------------------
# Tao ra sink1, sink2 va sink3 gan voi nut R10 (day la noi thu nhan traffic)
set sink1 [new Agent/LossMonitor]
set sink2 [new Agent/LossMonitor]
set sink3 [new Agent/LossMonitor]
$ns attach-agent $R10 $sink1
$ns attach-agent $R10 $sink2
$ns attach-agent $R10 $sink3
# Tao ra nguon luu luong src1, src2 va src3 gan voi nut R0 bang cach
# goi ham attach-expoo-traffic. Ca 3 luong co goi size=600B, rate=0.8Mbps
set src1 [attach-expoo-traffic $R0 $sink1 600B 0 0 0.8M ]
$src1 set fid_ 100
$ns color 100 red
set src2 [attach-expoo-traffic $R0 $sink2 600B 0 0 0.8M ]
$src2 set fid_ 200
$ns color 200 green
set src3 [attach-expoo-traffic $R0 $sink3 600B 0 0 0.8M ]
$src3 set fid_ 300
$ns color 300 blue
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 2: MO PHONG DINH TUYEN RANG BUOC TRONG MPLS DOMAIN \n"
$ns at 0.0 "record"
# Chon duong, bao hieu: {lspid sLSR dLSRid bw SPrio HPrio }
$ns at 0.201 "constraint-routing 1100 $LSR1 9 0.8M 7 7 "
$ns at 0.501 "$ns trace-annotate {Luong 1: BW=0.8M (start=0.5 stop=5.0) su dung
LSP_1100}"
$ns at 0.501 "$src1 start"
$ns at 0.601 "constraint-routing 1200 $LSR1 9 0.8M 7 7 "
$ns at 1.001 "$ns trace-annotate {Luong 2: BW=0.8M (start=1.0 stop=5.0) su dung
LSP_1200}"
$ns at 1.001 "$src2 start"
$ns at 1.001 "constraint-routing 1300 $LSR1 9 0.8M 7 7 "
$ns at 1.501 "$ns trace-annotate {Luong 3: BW=0.8M (start=1.5 stop=5.0) su dung
LSP_1300}"
$ns at 1.501 "$src3 start"
$ns at 2.001 "constraint-routing 1400 $LSR1 9 0.8M 7 7 "
$ns at 5.0 "[$LSR1 get-module "MPLS"] lib-dump"
$ns at 5.0 "[$LSR3 get-module "MPLS"] lib-dump"
$ns at 5.0 "[$LSR5 get-module "MPLS"] lib-dump"
$ns at 5.0 "[$LSR7 get-module "MPLS"] lib-dump"
$ns at 5.0 "[$LSR9 get-module "MPLS"] lib-dump"
$ns at 5.001 "$src1 stop"
$ns at 5.001 "$src2 stop"
$ns at 5.001 "$src3 stop"
$ns at 5.5 "recv-pkts"
$ns at 5.5 "finish"
$ns run
Trang-107-

Bai3.tcl
#######################################################################
# BAI 3: MO PHONG HOAT DONG LAN CHIEM (PREEMPTION) TRONG MIEN MPLS #
#######################################################################
# 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 bai3.nam w]
$ns namtrace-all $nf
# Tao cac file de luu du lieu cho xgraph
set f1 [open luong_1 w]
set f2 [open luong_2 w]
# So do ket noi mang
#

# 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: nodes bw delay queue
$ns duplex-link $R0 $LSR1 3Mb 10ms DropTail
$ns duplex-link $LSR1 $LSR3 2Mb 30ms CBQ
$ns duplex-link $LSR3 $LSR5 1Mb 30ms CBQ
$ns duplex-link $LSR5 $LSR7 2Mb 30ms CBQ
$ns duplex-link $LSR7 $LSR9 1Mb 30ms CBQ
$ns duplex-link $LSR9 $R10 3Mb 10ms DropTail
$ns duplex-link $LSR1 $LSR2 1Mb 30ms CBQ
$ns duplex-link $LSR2 $LSR4 1Mb 30ms CBQ
$ns duplex-link $LSR4 $LSR6 2Mb 30ms CBQ
$ns duplex-link $LSR6 $LSR8 1Mb 30ms CBQ
$ns duplex-link $LSR8 $LSR9 2Mb 30ms CBQ
$ns duplex-link $LSR3 $LSR4 1Mb 30ms CBQ
$ns duplex-link $LSR5 $LSR6 1Mb 30ms CBQ
$ns duplex-link $LSR7 $LSR8 1Mb 30ms CBQ
# 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
Trang-108-

# 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 "
$ns duplex-link-op $LSR7 $LSR9 queuePos 1.5
$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
# cfg-cbq-on-all-mpls-nodes {sbts_bw hbts_bw rt_bw st_bw}
$ns cfg-cbq-on-all-mpls-nodes 0.1 0.05 0.8 0.05
# Gan luong traffic co fid vao dich vu SBTS (Simple Best-effort)
$ns bind-flowid-to-SBTS 0
$ns bind-flowid-to-SBTS 100
$ns bind-flowid-to-SBTS 200
# 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
$ns collect-resource-info 4
#----------------------------------------------------------------------
# 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 sink2 f1 f2
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 bw2 [$sink2 set bytes_]
set now [$ns now]
puts $f1 "$now [expr $bw1/$time*8/1000000]"
puts $f2 "$now [expr $bw2/$time*8/1000000]"
# Reset gia tri bytes_ cua sink
$sink1 set bytes_ 0
$sink2 set bytes_ 0
#Dinh thoi goi lai ham record sau chu ky $time
$ns at [expr $now+$time] "record"
}
#----------------------------------------------------
# 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
Trang-109-

$ns connect $source $sink


return $source
}
#----------------------------------------------------
# Thu tuc sau thong bao ER/CR-LSP da thiet lap de chuyen luu luong
proc notify-erlsp-setup {node lspid} {
global src1 src2
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
}
1200 {
$module bind-flow-erlsp 10 200 $lspid
}
default {
puts " Error!"
exit 1
}
}
}
proc notify-erlsp-fail {node status lspid tr} {
set msg " Node=LSR[$node id] : status=$status lspid=$lspid tr=$tr"
puts $msg
$ns trace-annotate $msg
}
#----------------------------------------------------
# Thu tuc xuat tong so packet nhan duoc o cac sink
proc recv-pkts {} {
global sink1 sink2
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 " Luong 2 da truyen [$sink2 set expected_] goi, mat [$sink2 set
nlost_] goi, ti le mat goi la [string range [expr [$sink2 set
nlost_]*100.0/[$sink2 set expected_]] 0 3] */*"
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 luong_2 -M -nb -bg white -fg black -zg black \
-geometry 500x250 -y "BW (Mbps)" -x "Time (sec)" \
-t "Bai 3: Hoat dong lan chiem (Preemption)" -tf "helvetica-12" &
exec nam -r 2ms bai3.nam &
exit 0
}
#----------------------------------------------------
# Tao ra sink1, sink2 va sink3 gan voi nut R10 (day la noi thu nhan traffic)
set sink1 [new Agent/LossMonitor]
set sink2 [new Agent/LossMonitor]
$ns attach-agent $R10 $sink1
Trang-110-

$ns attach-agent $R10 $sink2


# Tao ra 2 nguon luu luong src1 va src2 gan voi nut R0 bang cach
# goi ham attach-expoo-traffic. Ca 2 luong co goi 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
set src2 [attach-expoo-traffic $R0 $sink2 600B 0 0 0.8M ]
$src2 set fid_ 200
$ns color 200 green
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 3: MO PHONG HOAT DONG LAN CHIEM (PREEMPTION) TRONG MPLS\n"
$ns at 0 "record"
$ns at 0.2 "$ns trace-annotate {Bao hieu thiet lap LSP_1100, ER=1_3_5_7_9, Do uu
tien: SPrio/HPrio=7/5}"
$ns at 0.2 "[$LSR1 get-module "MPLS"] setup-crlsp 9 1_3_5_7_9 1100 0.8M 3000B
600B 7 5 "
$ns at 0.5 "$ns trace-annotate {Luong 1: BW=0.8M (start=0.5 stop=5.0) su dung
LSP_1100}"
$ns at 0.5 "$src1 start"
$ns at 1.1 "$ns trace-annotate {Bao hieu thiet lap LSP_1200, ER=1_2_4_6_5_7_9,
Do uu tien: SPrio/HPrio=4/3}"
$ns at 1.1 "[$LSR1 get-module "MPLS"] setup-crlsp 9 1_2_4_6_5_7_9 1200 0.8M
3000B 600B 4 3 "
$ns at 1.5 "$ns trace-annotate {Luong 2: BW=0.8M (start=1.5 stop=3.5) su dung
LSP_1200}"
$ns at 1.5 "$src2 start"
$ns at 1.6 "$ns trace-annotate {LSP_1100 (HPrio=5) bi lan chiem boi LSP_1200
(SPrio=4), Luong 1 bay gio tro thanh best-effort !}"
$ns at 3.5 "$src2 stop"
$ns at 3.5 "$ns trace-annotate {3.50s: Luong 2 truyen xong, giai phong LSP_1200
!}"
$ns at 3.7 "[$LSR1 get-module "MPLS"] send-crldp-release-msg 1200"
$ns at 5.0 "$src1 stop"
$ns at 5.5 "recv-pkts"
$ns at 5.5 "finish"
$ns run

Bai4.tcl
#################################################################
# BAI 4: KHOI PHUC DUONG BANG TAI DINH TUYEN TOAN CUC #
# (MO HINH MAKAM) #
#################################################################
# 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 bai4.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
#
Trang-111-

# 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
#----------------------------------------------------------------------
Trang-112-

# 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
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
Trang-113-

$ns trace-annotate $msg


set module [$node get-module "MPLS"]
switch $lspid {
1100 {
$module bind-flow-erlsp 10 100 $lspid
}
1200 {
$module reroute-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 4: Khoi phuc duong theo co che Makam" -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 4: Bieu do so thu tu packet theo thoi gian" -tf "helvetica-12"
&
exec nam -r 2ms bai4.nam &
exit 0
}
#----------------------------------------------------
# Tao ra sink1 gan voi nut R10 (day la noi thu nhan traffic)
set sink1 [new Agent/LossMonitor]
Trang-114-

$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: MAKAM
$ns enable-reroute notify-prenegotiated
[$LSR3 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
[$LSR5 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
[$LSR7 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 4: KHOI PHUC DUONG BANG TAI DINH TUYEN TOAN CUC (MAKAM)\n"
$ns at 0.00 "record"
$ns at 0.00 "seq-record 600 800k 5.5"
# Thiet lap LSP lam viec
$ns at 0.15 "$ns trace-annotate {Bao hieu thiet lap duong lam viec: LSP_1100,
ER=1_3_5_7_9 }"
$ns at 0.15 "[$LSR1 get-module "MPLS"] setup-erlsp 9 1_3_5_7_9 1100"
# Thiet lap LSP bao ve
$ns at 0.15 "$ns trace-annotate {Bao hieu thiet lap duong bao ve: LSP_1200,
ER=1_2_4_6_8_9 }"
$ns at 0.15 "[$LSR1 get-module "MPLS"] setup-erlsp 9 1_2_4_6_8_9 1200"
$ns at 0.50 "$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.50 "$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

Bai5.tcl
########################################################################
# BAI 5: KHOI PHUC DUONG THEO CO CHE DU PHONG DAO (REVERSE BACKUP) #
# (MO HINH HASKIN) #
########################################################################
# 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 bai5.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
#

# Khai bao 2 nut IP (R0,R10) va 9 nut MPLS (LSR1 --> LSR9)


set R0 [$ns node]
Trang-115-

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 {} {
Trang-116-

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"]
Trang-117-

switch $lspid {
1100 {
$module bind-flow-erlsp 10 100 $lspid
}
1200 {
$module reroute-lsp-binding 1100 $lspid
}
1300 {
[$LSR3 get-module "MPLS"] reroute-lsp-binding 1100 $lspid
[$LSR5 get-module "MPLS"] reroute-lsp-binding 1100 $lspid
[$LSR7 get-module "MPLS"] reroute-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 500x230 -y "BW (Mbps)" -x "Time (sec)" \
-t "Bai 5: Khoi phuc duong theo co che Haskin" -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 5: Bieu do so thu tu packet theo thoi gian" -tf "helvetica-12"
&
exec nam -r 2ms bai5.nam &
exit 0
}
Trang-118-

#----------------------------------------------------
# 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: HASKIN
$ns enable-reroute drop
[$LSR3 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
[$LSR5 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
[$LSR7 get-module "MPLS"] set-protection-lsp 0.7 0.01 1100
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 5: KHOI PHUC DUONG CO CHE REVERSE BACKUP (HASKIN) \n "
$ns at 0.0 "record"
$ns at 0.0 "seq-record 600 800k 5.5"
# Thiet lap LSP lam viec
$ns at 0.1 "$ns trace-annotate {Bao hieu thiet lap duong lam viec: LSP_1100,
ER=1_3_5_7_9 }"
$ns at 0.1 "[$LSR1 get-module "MPLS"] setup-erlsp 9 1_3_5_7_9 1100”
# Thiet lap LSP bao ve
$ns at 0.1 "$ns trace-annotate {Bao hieu thiet lap duong bao ve: LSP_1200,
ER=1_2_4_6_8_9 }"
$ns at 0.1 "[$LSR1 get-module "MPLS"] setup-erlsp 9 1_2_4_6_8_9 1200”
# Thiet lap LSP du phong dao (reverse backup)
$ns at 0.3 "$ns trace-annotate {Bao hieu thiet lap duong reverse backup:
LSP_1300, ER=9_7_5_3_1_L1200 }"
$ns at 0.3 "[$LSR9 get-module "MPLS"] setup-erlsp 9 9_7_5_3_1_L1200 1300”
$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

Bai6.tcl
######################################################################
# BAI 6: 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
Trang-119-

# 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"
Trang-120-

$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
Trang-121-

$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
Trang-122-

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

Bai7.tcl
#######################################################################
# BAI 7: KHOI PHUC DUONG THEO CO CHE SIMPLE-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 bai7.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
Trang-123-

# 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"
Trang-124-

$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
Trang-125-

$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 module [$node get-module "MPLS"]
switch $lspid {
9999 { # LSP_9999 tu dong chon duong vong den egress
set msg " [string range [$ns now] 0 3]s: Tunnel LSP_$lspid
(Ingress=LSR[$node id]) tu dong chon duong ngan nhat den Egress !"
puts $msg
$ns trace-annotate $msg
}
default {
puts " Error!"
exit 1
}
}
}
#----------------------------------------------------
# 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 7: Khoi phuc duong theo co che Simple-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 7: Bieu do so thu tu packet theo thoi gian" -tf "helvetica-12" &
exec nam -r 2ms bai7.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: SIMPLE-DYNAMIC
Trang-126-

$ns enable-reroute simple-dynamic


[$LSR5 get-module "MPLS"] set-protection-flow 0.1 0.01 10 -1
[$LSR1 get-module "MPLS"] enable-data-driven
# Bat dau mo phong
exec clear >@ stdout
puts "\n BAI 7: KHOI PHUC DUONG THEO CO CHE SIMPLE-DYNAMIC \n "
$ns at 0.0 "record"
$ns at 0.0 "seq-record 600 800k 5.5"
$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

You might also like