Định tuyến

Trong ngành mạng máy tính, định tuyến (tiếng Anh: "routing" hay "routeing") là quá trình chọn lựa các đường đi trên một mạng máy tính để gửi dữ liệu qua đó. Việc định tuyến được thực hiện cho nhiều loại mạng, trong đó có mạng điện thoại, liên mạng, Internet, mạng giao thông.

Routing chỉ ra hướng, sự di chuyển của các gói (dữ liệu) được đánh địa chỉ từ mạng nguồn của chúng, hướng đến đích cuối thông qua các node trung gian; thiết bị phần cứng chuyên dùng được gọi là router (bộ định tuyến). Tiến trình định tuyến thường chỉ hướng đi dựa vào bảng định tuyến, đó là bảng chứa những lộ trình tốt nhất đến các đích khác nhau trên mạng. Vì vậy việc xây dựng bảng định tuyến, được tổ chức trong bộ nhớ của router, trở nên vô cùng quan trọng cho việc định tuyến hiệu quả.

Routing khác với bridging (bắc cầu) ở chỗ trong nhiệm vụ của nó thì các cấu trúc địa chỉ gợi nên sự gần gũi của các địa chỉ tương tự trong mạng, qua đó cho phép nhập liệu một bảng định tuyến đơn để mô tả lộ trình đến một nhóm các địa chỉ. Vì thế, routing làm việc tốt hơn bridging trong những mạng lớn, và nó trở thành dạng chiếm ưu thế của việc tìm đường trên mạng Internet.

Các mạng nhỏ có thể có các bảng định tuyến được cấu hình thủ công, còn những mạng lớn hơn có topo mạng phức tạp và thay đổi liên tục thì xây dựng thủ công các bảng định tuyến là vô cùng khó khăn. Tuy nhiên, hầu hết mạng điện thoại chuyển mạch chung (public switched telephone network - PSTN) sử dụng bảng định tuyến được tính toán trước, với những tuyến dự trữ nếu các lộ trình trực tiếp đều bị nghẽn. Định tuyến động (dynamic routing) cố gắng giải quyết vấn đề này bằng việc xây dựng bảng định tuyến một cách tự động, dựa vào những thông tin được giao thức định tuyến cung cấp, và cho phép mạng hành động gần như tự trị trong việc ngăn chặn mạng bị lỗi và nghẽn.

Định tuyến động chiếm ưu thế trên Internet. Tuy nhiên, việc cấu hình các giao thức định tuyến thường đòi hỏi nhiều kinh nghiệm; đừng nên nghĩ rằng kỹ thuật nối mạng đã phát triển đến mức hoàn thành tự động việc định tuyến. Cách tốt nhất là nên kết hợp giữa định tuyến thủ công và tự động.

Những mạng trong đó các gói thông tin được vận chuyển, ví dụ như Internet, chia dữ liệu thành các gói, rồi dán nhãn với các đích đến cụ thể và mỗi gói được lập lộ trình riêng biệt. Các mạng xoay vòng, như mạng điện thoại, cũng thực hiện định tuyến để tìm đường cho các vòng (ví dụ như cuộc gọi điện thoại) để chúng có thể gửi lượng dữ liệu lớn mà không phải tiếp tục lặp lại địa chỉ đích.

Định tuyến IP truyền thống vẫn còn tương đối đơn giản vì nó dùng cách định tuyến bước kế tiếp (next-hop routing), router chỉ xem xét nó sẽ gửi gói thông tin đến đâu, và không quan tâm đường đi sau đó của gói trên những bước truyền còn lại. Tuy nhiên, những chiến lược định tuyến phức tạp hơn có thể được, và thường được dùng trong những hệ thống như MPLS, ATM hay Frame Relay, những hệ thống này đôi khi được sử dụng như công nghệ bên dưới để hỗ trợ cho mạng IP.

== Các kiểu định tuyến ==
=== Thuật toán vector ===
Thuật toán này dùng thuật toán Bellman-Ford. Phương pháp này chỉ định một con số, gọi là chi phí (hay trọng số), cho mỗi một liên kết giữa các node trong mạng. Các node sẽ gửi thông tin từ điểm A đến điểm B qua đường đi mang lại tổng chi phí thấp nhất (là tổng các chi phí của các kết nối giữa các node được dùng).

Thuật toán hoạt động với những hành động rất đơn giản. Khi một node khởi động lần đầu, nó chỉ biết các node kề trực tiếp với nó, và chi phí trực tiếp để đi đến đó (thông tin này, danh sách của các đích, tổng chi phí của từng node, và bước kế tiếp để gửi dữ liệu đến đó tạo nên bảng định tuyến, hay bảng khoảng cách). Mỗi node, trong một tiến trình, gửi đến từng "hàng xóm" tổng chi phí của nó để đi đến các đích mà nó biết. Các node "hàng xóm" phân tích thông tin này, và so sánh với những thông tin mà chúng đang "biết"; bất kỳ điều gì cải thiện được những thông tin chúng đang có sẽ được đưa vào các bảng định tuyến của những "hàng xóm" này. Đến khi kết thúc, tất cả node trên mạng sẽ tìm ra bước truyền kế tiếp tối ưu đến tất cả mọi đích, và tổng chi phí tốt nhất.

Khi một trong các node gặp vấn đề, những node khác có sử dụng node hỏng này trong lộ trình của mình sẽ loại bỏ những lộ trình đó, và tạo nên thông tin mới của bảng định tuyến. Sau đó chúng chuyển thông tin này đến tất cả node gần kề và lặp lại quá trình trên. Cuối cùng, tất cả node trên mạng nhận được thông tin cập nhật, và sau đó sẽ tìm đường đi mới đến tất cả các đích mà chúng còn tới được.

=== Thuật toán trạng thái kết nối ===
Khi áp dụng các thuật toán trạng thái kết nối, mỗi node sử dụng dữ liệu cơ sở của nó như là một bản đồ của mạng với dạng một đồ thị. Để làm điều này, mỗi node phát đi tới tổng thể mạng những thông tin về các node khác mà nó có thể kết nối được, và từng node góp thông tin một cách độc lập vào bản đồ. Sử dụng bản đồ này, mỗi router sau đó sẽ quyết định về tuyến đường tốt nhất từ nó đến mọi node khác.

Thuật toán đã làm theo cách này là Dijkstra, bằng cách xây dựng cấu trúc dữ liệu khác, dạng cây, trong đó node hiện tại là gốc, và chứa mọi noded khác trong mạng. Bắt đầu với một cây ban đầu chỉ chứa chính nó. Sau đó lần lượt từ tập các node chưa được thêm vào cây, nó sẽ thêm node có chi phí thấp nhất để đến một node đã có trên cây. Tiếp tục quá trình đến khi mọi node đều được thêm.

Cây này sau đó phục vụ để xây dựng bảng định tuyến, đưa ra bước truyền kế tiếp tốt ưu, ... để từ một node đến bất kỳ node khác trên mạng.

=== So sánh các thuật toán định tuyến ===
Các giao thức định tuyến với thuật toán vector tỏ ra đơn giản và hiệu quả trong các mạng nhỏ, và đòi hỏi ít (nếu có) sự giám sát. Tuy nhiên, chúng không làm việc tốt, và có tài nguyên tập hợp ít ỏi, dẫn đến sự phát triển của các thuật toán trạng thái kết nối tuy phức tạp hơn nhưng tốt hơn để dùng trong các mạng lớn. Giao thức vector kém hơn với rắc rối về đếm đến vô tận.

Ưu điểm chính của định tuyến bằng trạng thái kết nối là phản ứng nhanh nhạy hơn, và trong một khoảng thời gian có hạn, đối với sự thay đổi kết nối. Ngoài ra, những gói được gửi qua mạng trong định tuyến bằng trạng thái kết nối thì nhỏ hơn những gói dùng trong định tuyến bằng vector. Định tuyến bằng vector đòi hỏi bảng định tuyến đầy đủ phải được truyền đi, trong khi định tuyến bằng trạng thái kết nối thì chỉ có thông tin về "hàng xóm" của node được truyền đi. Vì vậy, các gói này dùng tài nguyên mạng ở mức không đáng kể. Khuyết điểm chính của định tuyến bằng trạng thái kết nối là nó đòi hỏi nhiều sự lưu trữ và tính toán để chạy hơn định tuyến bằng vector.

== Giao thức được định tuyến và giao thức định tuyến ==
Sự nhầm lẫn thường xảy ra giữa "giao thức được định tuyến" và "giao thức định tuyến" ("routed protocols" và "routing protocols").

=== Giao thức được định tuyến (routed protocols hay routable protocols) ===
Một giao thức đã được định tuyến là bất kỳ một giao thức mạng nào cung cấp đầy đủ thông tin trong địa chỉ tầng mạng của nó để cho phép một gói tin được truyền đi từ một máy chủ (host) đến máy chủ khác dựa trên sự sắp xếp về địa chỉ, không cần biết đến đường đi tổng thể từ nguồn đến đích. Giao thức đã được định tuyến định nghĩa khuôn dạng và mục đích của các trường có trong một gói. Các gói thông thường được vận chuyển từ hệ thống cuối đến một hệ thống cuối khác. Hầu như tất cả giao thức ở tầng 3 các giao thức khác ở các tầng trên đều có thể được định tuyến, IP là một ví dụ. Nghĩa là gói tin đã được định hướng (có địa chỉ rõ ràng)giống như lá thư đã được ghi địa chỉ rõ chỉ còn chờ routing (tìm đường đi đến địa chỉ đó)

Các giao thức ở tầng 2 như Ethernet là những giao thức không định tuyến được, vì chúng chỉ chứa địa chỉ tầng liên kết, không đủ để định tuyến: một số giao thức ở tầng cao dựa trực tiếp vào đây mà không có thêm địa chỉ tầng mạng, như NetBIOS, cũng không định tuyến được.

=== Giao thức định tuyến (routing protocols) ===
Giao thức định tuyến được dùng trong khi thi hành thuật toán định tuyến để thuận tiện cho việc trao đổi thông tin giữa các mạng, cho phép các router xây dựng bảng định tuyến một cách linh hoạt. Trong một số trường hợp, giao thức định tuyến có thể tự chạy đè lên giao thức đã được định tuyến: ví dụ, BGP chạy đè trên TCP: cần chú ý là trong quá trình thi hành hệ thống không tạo ra sự lệ thuộc giữa giao thức định tuyến và đã được định tuyến.

Danh sách các giao thức định tuyến

- Giao thức định tuyến trong
- Router Information Protocol (RIP)
- Open Shortest Path First (OSPF)
- Intermediate System to Intermediate System (IS-IS)
- Hai giao thức sau đây thuộc sở hữu của Cisco, và được hỗ trợ bởi các router Cisco hay những router của những nhà cung cấp mà Cisco đã đăng ký công nghệ:
-  Interior Gateway Routing Protocol (IGRP)
-  Enhanced IGRP (EIGRP)
- Giao thức định tuyến ngoài
- Exterior Gateway Protocol (EGP)
- Border Gateway Protocol (BGP)
- Constrained Shortest Path First (CSPF)

== Thông số định tuyến (Routing metrics) ==
Một thông số định tuyến bao gồm bất kỳ giá trị nào được dùng bởi thuật toán định tuyến để xác định một lộ trình có tốt hơn lộ trình khác hay không. Các thông số có thể là những thông tin như băng thông (bandwidth), độ trễ (delay), đếm bước truyền, chi phí đường đi, trọng số, kích thước tối đa gói tin (MTU - Maximum transmission unit), độ tin cậy, và chi phí truyền thông. Bảng định tuyến chỉ lưu trữ những tuyến tốt nhất có thể, trong khi cơ sở dữ liệu trạng thái kết nối hay topo có thể lưu trữ tất cả những thông tin khác.

Router dùng tính năng phân loại mức tin cậy (administrative distance -AD) để chọn đường đi tốt nhất khi nó "biết" hai hay nhiều đường để đến cùng một đích theo các giao thức khác nhau. AD định ra độ tin cậy của một giao thức định tuyến. Mỗi giao thức định tuyến được ưu tiên trong thứ tự độ tin cậy từ cao đến thấp nhất có một giá trị AD. Một giao thức có giá trị AD thấp hơn thì được tin cậy hơn, ví dụ: OSPF có AD là 110 sẽ được chọn thay vì RIP có AD là 120.

Bảng sau đây cho biết sự sắp xếp mức tin cậy được dùng trong các router Cisco

== Các lớp giao thức định tuyến ==
Dựa vào quan hệ của các dòng router với các hệ thống tự trị, có nhiều lớp giao thức định tuyến như sau:

- Giao thức định tuyến trong mạng Ad-hoc xuất hiện ở những mạng không có hoặc ít phương tiện truyền dẫn.
- Interior Gateway Protocols (IGPs) trao đổi thông tin định tuyến trong một AS. Các ví dụ thường thấy là:
- IGRP (Interior Gateway Routing Protocol)
- EIGRP (Enhanced Interior Gateway Routing Protocol)
- OSPF (Open Shortest Path First)
- RIP (Routing Information Protocol)
- RSMLT
- IS-IS (Intermediate System to Intermediate System)

"Chú ý:" theo nhiều tài liệu của Cisco, EIGRP không phân lớp như giao thức trạng thái kết nối.

- Exterior Gateway Protocols (EGPs) định tuyến giữa các AS. EGPs gồm:
- EGP (giao thức cũ để nối mạng Internet trước đây, bây giờ đã lỗi thời)
- BGP (Border Gateway Protocol: phiên bản hiện tại, BGPv4, có từ khoảng năm 1995)