OSPF là gì? Giao thức định tuyến link-state và cách tính cost

Sơ đồ các trạng thái trao đổi cơ sở dữ liệu của OSPF: Exchange, Loading và Full kèm các gói LS Request, LS Update và LS Ack

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.

Sơ đồ tiến trình hình thành lân cận OSPF qua giao thức Hello, đi từ trạng thái Down tới Init, 2-Way và ExStart

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.

  1. 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.
  2. Đồ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.
  3. 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
Ví dụ Router-LSA loại 1 của OSPF liệt kê các interface của router, địa chỉ mạng kèm chi phí tính theo băng thông tham chiếu

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
Sơ đồ các trạng thái trao đổi cơ sở dữ liệu của OSPF: Exchange, Loading và Full kèm các gói LS Request, LS Update và LS Ack

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

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Kubernetes là gì: Hệ điều phối container và kiến trúc cụm

Kubernetes là hệ điều phối mã nguồn mở dành cho container, thường được gọi tắt là K8s. Nó cho phép tự động hoá việc triển khai, mở rộng và quản…

Xem thêm
Sơ đồ xếp chồng kiến trúc WebGPU: GPU vật lý → API gốc → triển khai trình duyệt → GPUAdapter → GPUDevice

WebGPU là gì? Chuẩn đồ hoạ và tính toán GPU cho trình duyệt

WebGPU là một giao diện lập trình web cho phép JavaScript sử dụng trực tiếp GPU của máy người dùng, cả để dựng hình lẫn để tính toán song song….

Xem thêm

Thực tế tăng cường AR là gì? Nguyên lý và ứng dụng thực tế

Thực tế tăng cường AR là gì? Nguyên lý và ứng dụng thực tế Thực tế tăng cường (Augmented Reality – AR) là công nghệ lớp đồ họa số lên…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất