
OSPF (Open Shortest Path First) là giao thức định tuyến nội bộ tiêu chuẩn cho mạng doanh nghiệp và nhà cung cấp dịch vụ Internet. Thay vì dùng vector khoảng cách như RIP, OSPF chia mạng thành các vùng, mỗi router tạo bản đồ trạng thái liên kết hoàn chỉnh của toàn vùng rồi chạy thuật toán Dijkstra để tìm đường ngắn nhất tới mọi đích. Giao thức chạy trực tiếp trên IP với số giao thức 89, dùng multicast để trao đổi gói Hello và cập nhật trạng thái lân cận, nên hội tụ rất nhanh khi mạng thay đổi.

OSPF hoạt động như thế nào
Mỗi router chạy OSPF duy trì một cơ sở dữ liệu trạng thái liên kết (LSDB) gồm toàn bộ trạng thái liên kết trong vùng của nó. Quy trình vận hành gồm ba giai đoạn chính: tìm hàng xóm, đồng bộ LSDB và tính toán đường đi.
- Gửi và nhận gói Hello: trên mỗi interface, router gửi gói Hello định kỳ, mặc định mỗi 10 giây, tới địa chỉ multicast 224.0.0.5. Hai router trở thành hàng xóm khi nhận được Hello của nhau và các tham số phải khớp: mã vùng, cấu hình xác thực và giá trị hello/dead interval.
- Đồng bộ LSDB qua bốn loại gói: sau khi đạt trạng thái 2-Way, các router bắt đầu trao đổi mô tả cơ sở dữ liệu (DBD), yêu cầu phần dữ liệu còn thiếu (LSR), gửi bản cập nhật (LSU) và xác nhận bằng gói Link State Ack. Kết thúc bước này, LSDB của hai router giống hệt nhau.
- Chạy thuật toán Dijkstra: khi LSDB đã đồng bộ, router tính cây đường ngắn nhất xuất phát từ chính nó rồi cài các tuyến tốt nhất vào bảng định tuyến.
Điểm mấu chốt là OSPF không cập nhật định kỳ mà chỉ phát tán khi có thay đổi: một link hỏng, một cost đổi hay một router mới xuất hiện sẽ sinh ra một LSA mới và được phát tán khắp vùng. Chỉ những router thực sự thay đổi LSDB mới chạy lại Dijkstra, nên thời gian hội tụ thường dưới một giây.
Năm loại LSA và phạm vi phát tán
Link State Advertisement (LSA) là đơn vị thông tin được phát tán trong OSPF. Mỗi LSA có một bộ đếm tuổi tăng dần từ 0 tới độ tối đa, sau đó bị gỡ khỏi mạng. Ba trường đầu của LSA quyết định loại và phạm vi phát tán, tức LSA chỉ lan trong một vùng hay toàn bộ hệ thống tự trị (AS).
| Loại | Tên | Ý nghĩa | Phạm vi |
|---|---|---|---|
| 1 | Router-LSA | Mỗi router tự phát một LSA, liệt kê các link của chính nó kèm cost tương ứng. | Một vùng |
| 2 | Network-LSA | Chỉ router chỉ định (DR) trên mạng broadcast hoặc NBMA phát, liệt kê các router kết nối vào mạng đó. | Một vùng |
| 3 | Summary-LSA | Router biên vùng (ABR) phát, mô tả đường đi tới một mạng nằm ở vùng khác. | Một vùng |
| 4 | Summary-LSA tới ASBR | ABR phát, mô tả đường đi tới một router biên AS (ASBR) nằm ở vùng khác. | Một vùng |
| 5 | AS-external-LSA | ASBR phát, mô tả đường đi ra ngoài AS, ví dụ đường mặc định hoặc đường nạp lại từ BGP. | Toàn bộ AS |

Cách tính cost và phân vùng
RFC 2328 quy định cost phải là số nguyên dương và để người quản trị tự cấu hình, không đặt công thức cụ thể. Thông lệ phổ biến của các nhà sản xuất thiết bị là chia băng thông tham chiếu cho băng thông của interface:
cost = băng thông tham chiếu / băng thông của interface
Với băng thông tham chiếu mặc định 100 Mbps, một interface 1 Gbps sẽ có cost bằng 0,1 và được làm tròn thành 1 vì cost không được nhỏ hơn 1. Nhờ vậy link nhanh hơn luôn có cost thấp hơn và được ưu tiên khi tính đường ngắn nhất.
Mọi vùng OSPF đều phải liên thông với vùng xương sống có mã 0.0.0.0. Nếu một vùng không nối trực tiếp được vào vùng xương sống, người quản trị dùng virtual link để tạo đường đi ảo qua một vùng trung gian. Ba kiểu vùng phổ biến gồm:
- Vùng thường: nhận mọi loại LSA từ 1 đến 5, phù hợp vùng lõi của hạ tầng.
- Vùng stub: không nhận LSA loại 5, ABR tiêm vào một đường mặc định để thay thế, tiết kiệm bộ nhớ cho thiết bị yếu.
- Vùng NSSA: vùng stub nhưng vẫn nhận LSA loại 7, ABR chuyển chúng thành loại 5 khi phát ra vùng khác, dùng cho router biên của ISP.
So sánh OSPF với RIP, IS-IS và BGP
| Tiêu chí | OSPF | RIP | IS-IS | BGP |
|---|---|---|---|---|
| Kiểu định tuyến | Trạng thái liên kết | Vector khoảng cách | Trạng thái liên kết | Vector đường đi |
| Thuật toán | Dijkstra | Bellman-Ford | Dijkstra | So sánh thuộc tính đường đi |
| Đơn vị đo | Cost tự cấu hình | Số chặng, tối đa 15 | Metric | Thuộc tính đường đi |
| Cách cập nhật | Khi có thay đổi | Định kỳ mỗi 30 giây | Khi có thay đổi | Khi có thay đổi |
| Phạm vi | Trong một AS | Trong một AS | Trong một AS | Giữa các AS và trong một AS |
| Xác thực | Không, mật khẩu, MD5 | Không | Không | MD5 |
| Thời gian hội tụ | Vài giây | Vài phút | Vài giây | Vài phút |
| Lớp truyền | IP số 89 | UDP cổng 520 | CLNS | TCP cổng 179 |

Tám trạng thái của một quan hệ lân cận
Quá trình lập quan hệ lân cận đi qua tám trạng thái, mô tả chi tiết trong RFC 2328:
- Down: trạng thái khởi đầu, hoặc xuất hiện khi router ngừng nhận được gói Hello.
- Attempt: chỉ xuất hiện trên mạng NBMA, router đã cấu hình địa chỉ đích cụ thể và đang gửi Hello unicast.
- Init: đã nhận Hello từ đối phương nhưng chưa xác nhận hai chiều.
- 2-Way: mỗi bên đã thấy Router ID của bên kia trong danh sách lân cận của gói Hello. Đây là điều kiện đủ để hai router trở thành hàng xóm trên mạng broadcast, và DR/BDR được bầu ở bước này.
- ExStart: bắt đầu trao đổi LSDB, router có Router ID cao hơn làm bên chủ trì.
- Exchange: trao đổi gói mô tả LSDB để hai bên biết ai có gì và ai đang thiếu gì.
- Loading: gửi và nhận các LSA còn thiếu để đồng bộ LSDB.
- Full: LSDB đã đồng bộ hoàn toàn, quan hệ lân cận hoạt động bình thường.
Chỉ khi đạt trạng thái Full, router mới dùng LSA của hàng xóm để tính đường. Với link point-to-point, hai router thường đi thẳng từ 2-Way tới Full, bỏ qua các bước DR/BDR không cần thiết.
Cấu hình tối thiểu và lỗi thường gặp
Khởi động OSPF cần đúng hai việc: định danh tiến trình OSPF bằng một router ID duy nhất trong AS, rồi khai báo các interface nằm trong vùng nào. Trên Linux với FRR hay Quagga, ví dụ cấu hình tối thiểu trông như sau:
router ospf ospf router-id 1.1.1.1 network 10.0.0.0/24 area 0 network 192.168.1.0/24 area 1
Những lỗi làm quan hệ lân cận đứng yên ở Init hoặc 2-Way thường gặp gồm:
- Router ID trùng nhau trong cùng một AS, khiến hai router không thừa nhận nhau.
- Mã vùng lệch nhau ở hai đầu một link, ví dụ một bên ghi area 0 còn bên kia ghi area 1.
- Hello interval hoặc dead interval không khớp, mặc định là 10 giây và 40 giây.
- Khác biệt MTU giữa hai đầu khiến gói LSA bị bỏ qua trong quá trình đồng bộ LSDB.
- Xác thực lệch nhau: một bên bật xác thực, bên kia để mặc định không xác thực.
- Khai báo mạng bao trùm cả interface loopback chưa muốn chạy OSPF, làm phát sinh nhiều quan hệ lân cận hơn dự kiến.
OSPFv2 và OSPFv3 khác nhau ở đâu
OSPFv3 là bản hỗ trợ IPv6, được đặc tả trong RFC 5340. Không chỉ thay địa chỉ IPv4 bằng IPv6, giao thức còn thay đổi khá nhiều điểm cốt lõi:
- Chạy trên từng liên kết chứ không phải từng mạng con, nên khái niệm mặt nạ mạng biến mất khỏi gói Hello.
- Quá trình hình thành hàng xóm dùng địa chỉ link-local IPv6 trong dải fe80::/10, không còn địa chỉ unicast trong gói Hello.
- Các trường địa chỉ bị gỡ khỏi LSA và gói Hello, đồng thời tính năng xác thực cũng bị gỡ khỏi giao thức vì bảo mật do tầng IPv6 đảm nhiệm.
- Thêm hai loại LSA mới: Link-LSA mô tả địa chỉ link-local và Intra-Area-Prefix-LSA mô tả các tiền tố IPv6.
- Loại 3 và 4 được đổi tên thành Inter-Area-Prefix-LSA và Inter-Area-Router-LSA, còn loại 5 trở thành AS-External-LSA với định dạng chuẩn hóa tiền tố.
Dù cấu trúc LSA thay đổi, nguyên lý cốt lõi vẫn giữ nguyên: mọi router dựng LSDB của vùng rồi chạy Dijkstra. Nhờ đó kỹ sư vẫn chuyển cấu hình giữa hai bản mà không phải học lại từ đầu.
Tóm tắt
OSPF là giao thức định tuyến trạng thái liên kết tiêu chuẩn, nổi bật ở tốc độ hội tụ theo sự kiện, khả năng mở rộng bằng hệ thống vùng và cơ chế chọn đường dựa trên cost. Vì chỉ phát tán khi topology thay đổi và chỉ router có LSDB thay đổi mới chạy lại Dijkstra, OSPF tiêu thụ rất ít CPU so với các giao thức vector khoảng cách. Các lớp vùng stub, NSSA, xác thực MD5 và virtual link giúp OSPF thích nghi với nhiều mô hình mạng, từ hạ tầng doanh nghiệp nhiều chi nhánh cho tới lõi của nhà cung cấp dịch vụ Internet.
Nguồn: RFC 2328, RFC 5340, RFC 1058, RFC 4271, RFC 5709, Wikipedia: Open Shortest Path First
