Trang chủ / Network / OSPF từ cơ bản đến nâng cao: Kiến trúc, Area, LSA và cấu hình thực chiến

Network

OSPF từ cơ bản đến nâng cao: Kiến trúc, Area, LSA và cấu hình thực chiến

OSPF từ cơ bản đến nâng cao: Kiến trúc, Area, LSA và cấu hình thực chiến
04/09/202622 phút đọc

OSPF là gì?

OSPF (Open Shortest Path First) là giao thức định tuyến động thuộc nhóm link-state, chạy trực tiếp trên IP (protocol number 89), được chuẩn hoá bởi IETF (RFC 2328 cho OSPFv2 — IPv4, RFC 5340 cho OSPFv3 — IPv6). OSPF là IGP (Interior Gateway Protocol) — dùng để định tuyến bên trong một hệ thống tự trị (Autonomous System), khác với BGP là EGP dùng giữa các AS với nhau.

Khác với các giao thức distance-vector như RIP hay EIGRP (theo kiểu "nghe hàng xóm nói rồi tin"), OSPF hoạt động theo nguyên lý mỗi router tự xây bản đồ toàn mạng rồi tự tính đường đi ngắn nhất — nhờ vậy hội tụ nhanh hơn, tránh được loop, và mở rộng tốt hơn cho mạng lớn nếu thiết kế đúng.

Tiêu chíDistance-vector (RIP, EIGRP)Link-state (OSPF, IS-IS)
Thông tin trao đổiRouter chia sẻ bảng định tuyến (đã tính sẵn) cho hàng xómRouter chia sẻ trạng thái các liên kết (LSA) cho toàn vùng
Góc nhìn mạngMỗi router chỉ biết "hàng xóm nói gì"Mỗi router có bản đồ đầy đủ của area (link-state database)
Thuật toán tính đườngBellman-FordDijkstra (SPF — Shortest Path First)
Tốc độ hội tụChậm hơn, dễ đếm-đến-vô-cựcNhanh, gần như tức thời khi có sự kiện
Tài nguyênNhẹ CPU/RAM hơnTốn CPU/RAM hơn (giữ toàn bộ LSDB + chạy SPF)

Thuật toán Dijkstra (SPF) — vì sao OSPF hội tụ nhanh và chọn đúng đường

Mỗi router OSPF xây một Link-State Database (LSDB) — về bản chất là một đồ thị có trọng số: đỉnh là router, cạnh là liên kết với "cost". Khi LSDB đã đồng bộ giữa tất cả router trong area, mỗi router tự chạy thuật toán Dijkstra lấy chính mình làm gốc, tính ra cây đường đi ngắn nhất (SPT — Shortest Path Tree) tới mọi router/mạng khác. Kết quả SPT được đưa vào bảng định tuyến IP.

Điểm quan trọng: vì mọi router trong cùng area dùng chung một LSDB, nên dù chạy Dijkstra độc lập, kết quả về topology mà từng router "nhìn thấy" là nhất quán — đây là lý do OSPF không bị loop tạm thời kiểu distance-vector.


Router ID, Cost và các khái niệm nền tảng

Router ID (RID)

Mỗi router OSPF cần một Router ID — định danh 32-bit dạng IPv4 (vd 1.1.1.1), duy nhất trong toàn bộ domain OSPF. Thứ tự chọn RID mặc định:

  1. RID được cấu hình thủ công (router-id) — luôn ưu tiên cao nhất.
  2. IP cao nhất trong các interface loopback.
  3. IP cao nhất trong các interface vật lý đang up.

Khuyến nghị thực chiến: luôn đặt RID thủ công bằng loopback ổn định (vd 1.1.1.1), không phụ thuộc interface vật lý — tránh trường hợp RID đổi khi cáp rớt, gây router phải bầu lại DR/BDR và flush LSA không cần thiết.

Topology OSPF đơn area với cost trên từng liên kết

Cost (chi phí metric)

OSPF dùng cost làm metric, tính theo công thức:

Cost = Reference Bandwidth / Interface Bandwidth

Reference bandwidth mặc định trên Cisco IOS là 100 Mbps — nghĩa là link Gigabit và link 100 Mbps đều ra cost = 1 (vì công thức làm tròn xuống tối thiểu 1), không phân biệt được trên mạng hiện đại nhiều 10G/40G/100G. Đây là lý do luôn phải chỉnh lại reference bandwidth khi triển khai thực tế:

router ospf 1
 auto-cost reference-bandwidth 100000   ! quy về 100 Gbps làm chuẩn

Phải cấu hình giống nhau trên toàn bộ router trong domain — nếu không, việc tính cost bị lệch giữa các router dẫn đến định tuyến bất đối xứng (asymmetric routing).

Cost cũng có thể set thủ công trên từng interface, override công thức:

interface GigabitEthernet0/1
 ip ospf cost 20

Gói tin và tiến trình bắt tay OSPF

5 loại gói tin OSPF

LoạiTênChức năng
Type 1HelloPhát hiện & duy trì láng giềng, thoả thuận tham số
Type 2DBD (Database Description)Tóm tắt nội dung LSDB để so sánh
Type 3LSR (Link State Request)Yêu cầu LSA cụ thể còn thiếu
Type 4LSU (Link State Update)Gửi LSA thật sự (có thể chứa nhiều LSA)
Type 5LSAckXác nhận đã nhận LSU (đảm bảo tin cậy)

Gói Hello và điều kiện kết bạn (neighbor)

Gói Hello được gửi định kỳ (mặc định 10s trên mạng broadcast/point-to-point, 30s trên NBMA) tới địa chỉ multicast 224.0.0.5 (AllSPFRouters). Nếu không nhận Hello sau Dead Interval (mặc định gấp 4 lần Hello Interval — tức 40s), láng giềng bị coi là down.

Hai router chỉ trở thành neighbor khi các tham số sau khớp nhau:

  • Area ID của interface
  • Hello Interval / Dead Interval
  • Area type (stub flag, NSSA flag...)
  • Subnet mask (trên mạng broadcast)
  • Authentication type & password (nếu bật)
  • MTU khớp — nếu không khớp, đứng ở trạng thái ExStart mãi (kẹt exchange DBD)

7 trạng thái láng giềng (Neighbor State Machine)

Down → Init → 2-Way → ExStart → Exchange → Loading → Full
  1. Down — chưa nhận Hello nào.
  2. Init — đã nhận Hello, nhưng chưa thấy RID của mình trong đó.
  3. 2-Way — đã thấy RID của mình trong Hello của láng giềng → quan hệ hai chiều được xác nhận. Trên mạng multi-access, DR/BDR election xảy ra ở đây. DROTHER-DROTHER dừng ở 2-Way, không tiến tiếp.
  4. ExStart — thoả thuận ai làm "master" trong quá trình trao đổi DBD (dựa trên RID cao hơn).
  5. Exchange — trao đổi gói DBD, mỗi bên biết láng giềng có LSA gì.
  6. Loading — gửi LSR để xin các LSA còn thiếu, nhận về qua LSU.
  7. Full — LSDB đã đồng bộ hoàn toàn giữa hai router — adjacency đầy đủ.

Lưu ý: 2-Way không phải là Full. Trên mạng multi-access, phần lớn cặp DROTHER-DROTHER chỉ dừng ở 2-Way — đây là hành vi bình thường, không phải lỗi.


Bầu chọn DR/BDR trên mạng Multi-access

Bầu chọn DR/BDR trên multi-access segment

Trên mạng broadcast (Ethernet) hoặc NBMA, nếu N router cùng full-mesh adjacency với nhau, số lượng adjacency sẽ là N(N-1)/2 — bùng nổ traffic LSA không cần thiết khi N lớn. OSPF giải quyết bằng cách bầu ra:

  • DR (Designated Router) — điểm trung tâm, mọi router khác chỉ cần Full adjacency với DR.
  • BDR (Backup Designated Router) — dự phòng nóng, thay thế ngay nếu DR chết, tránh phải bầu lại từ đầu.
  • DROTHER — các router còn lại, chỉ 2-Way với nhau, Full với DR/BDR.

Nhờ đó, tổng số adjacency Full giảm còn khoảng 2N thay vì N(N-1)/2, và mọi thay đổi LSA chỉ cần gửi tới DR/BDR (multicast 224.0.0.6 — AllDRouters) rồi DR flood lại cho DROTHER qua 224.0.0.5.

Quy tắc bầu chọn

  1. Router có OSPF priority cao nhất trên interface đó thắng làm DR (mặc định priority = 1; đặt 0 = không bao giờ tham gia bầu chọn).
  2. Nếu priority bằng nhau → Router ID cao nhất thắng.
  3. Không preemptive: nếu một router có priority/RID cao hơn xuất hiện sau khi DR đã được bầu, nó không giành lại DR — chỉ trở thành DROTHER bình thường. Muốn "ép" lại phải reset process OSPF hoặc down/up interface trên toàn bộ segment.
interface GigabitEthernet0/0
 ip ospf priority 255   ! ưu tiên tuyệt đối làm DR

Lưu ý thiết kế: point-to-point link (serial, hoặc Ethernet cấu hình ip ospf network point-to-point) không có khái niệm DR/BDR — vì chỉ có 2 router trên link, không cần điểm trung tâm.


Thiết kế đa vùng — Area và LSA

Một domain OSPF chỉ chạy đơn area vẫn hoạt động tốt ở quy mô nhỏ, nhưng khi mạng lớn dần, toàn bộ router phải chạy SPF lại mỗi khi có bất kỳ thay đổi nào — dù thay đổi đó xảy ra ở một nhánh xa tít. Giải pháp: chia domain thành nhiều area, giới hạn phạm vi flood LSA và phạm vi chạy lại SPF.

Thiết kế OSPF đa vùng

Quy tắc bắt buộc: Area 0 là backbone

  • Area 0 (hay 0.0.0.0) luôn là backbone, mọi area khác bắt buộc phải kết nối trực tiếp vào Area 0.
  • Router nằm giữa Area 0 và một area khác gọi là ABR (Area Border Router) — giữ LSDB riêng cho từng area nó tham gia, và tóm tắt (summarize) route giữa các area bằng Type-3 LSA.
  • Router có ít nhất một interface chạy giao thức ngoài OSPF (BGP, static redistribute...) gọi là ASBR (Autonomous System Boundary Router) — phát Type-5 LSA (External) mang route ngoại lai vào domain OSPF.

Nếu một area không thể kết nối vật lý trực tiếp tới Area 0 (ví dụ do topology WAN lịch sử), dùng virtual link để "kéo dài" backbone một cách logic qua một area trung gian (transit area):

Virtual link nối Area 2 qua Area 1

! Trên R2 (ABR giữa Area0-Area1), RID của R3 là 3.3.3.3
router ospf 1
 area 1 virtual-link 3.3.3.3

! Trên R3 (ABR giữa Area1-Area2), RID của R2 là 2.2.2.2
router ospf 1
 area 1 virtual-link 2.2.2.2

Virtual link chỉ nên dùng làm giải pháp tạm thời khi khắc phục sự cố hoặc trong giai đoạn chuyển đổi thiết kế — không nên coi là kiến trúc lâu dài vì phụ thuộc vào area trung gian còn sống.

6 loại LSA quan trọng nhất

TypeTênAi phát sinhPhạm vi flood
1Router LSAMọi routerTrong area
2Network LSADR trên mạng multi-accessTrong area
3Summary LSA (network)ABRGiữa các area
4Summary LSA (ASBR)ABRGiữa các area, cho biết "đường tới ASBR"
5External LSAASBRToàn domain (trừ stub/NSSA)
7NSSA External LSAASBR trong NSSATrong NSSA, ABR dịch thành Type-5 khi thoát ra

Các loại Area đặc biệt

Loại AreaNhận Type-3Nhận Type-5 (External)Default route thay thế
StandardKhông
StubABR bơm route mặc định 0.0.0.0/0
Totally Stubby (Cisco proprietary)❌ (trừ default)ABR bơm route mặc định
NSSA❌ (nhưng cho phép redistribute nội bộ qua Type-7)Tuỳ chọn
Totally NSSA❌ (trừ default)ABR bơm route mặc định

Cấu hình ví dụ cho area 1 là Totally Stubby:

router ospf 1
 area 1 stub no-summary   ! "no-summary" cấu hình trên ABR mới thành totally stubby

Với NSSA (cho phép area vẫn có ASBR riêng redistribute route nội bộ, nhưng không nhận External từ nơi khác đổ vào):

router ospf 1
 area 2 nssa

Ứng dụng thực tế: area chi nhánh chỉ có 1-2 uplink về HQ nên đặt Stub/Totally Stub — giảm mạnh kích thước LSDB, giảm tải CPU trên router biên vốn thường là thiết bị nhỏ. Area nào có kết nối ra ngoài riêng (VD chi nhánh có link Internet cục bộ, cần redistribute static) thì dùng NSSA.


Cấu hình OSPF cơ bản trên Cisco, Juniper và Huawei

Cùng một kịch bản để dễ đối chiếu: router R1 (RID 1.1.1.1) có uplink 10.0.12.0/24 chạy OSPF về phía backbone (area 0) và một LAN nội bộ 10.0.1.0/24 chỉ cần quảng bá route, không cần gửi Hello ra phía host (passive).

Cisco IOS

Cisco dùng mô hình network <địa chỉ> <wildcard> area <id> — khai báo theo dải mạng ở process OSPF, không khai trực tiếp trên từng interface:

router ospf 1
 router-id 1.1.1.1
 network 10.0.12.0 0.0.0.255 area 0
 network 10.0.1.0 0.0.0.255 area 0
 passive-interface default
 no passive-interface GigabitEthernet0/0
!
interface GigabitEthernet0/0
 ip ospf cost 10
 ip ospf priority 255
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 <shared-secret>

Kiểm tra:

show ip ospf neighbor          ! xem trạng thái láng giềng, DR/BDR
show ip ospf interface brief   ! area, cost, trạng thái interface
show ip ospf database          ! xem toàn bộ LSDB
show ip route ospf             ! route học được qua OSPF
show ip protocols              ! timer, redistribution, filter đang áp dụng

Lưu ý về passive-interface: luôn set passive-interface default rồi mở lại từng interface uplink cần chạy OSPF — thói quen này ngăn OSPF vô tình gửi Hello ra interface LAN/WAN không kiểm soát (rủi ro bảo mật + router lạ tự kết neighbor).

Juniper (Junos)

Junos đi ngược lại: OSPF được kích hoạt trực tiếp trên từng interface dưới area, không có kiểu network statement dò dải mạng như Cisco — vì vậy khai thiếu interface là lỗi hay gặp nhất khi mới chuyển từ Cisco sang:

set interfaces ge-0/0/0 unit 0 family inet address 10.0.12.1/24
set interfaces ge-0/0/1 unit 0 family inet address 10.0.1.1/24

set routing-options router-id 1.1.1.1

set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 metric 10
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 priority 255
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 authentication md5 1 key "<shared-secret>"

set protocols ospf area 0.0.0.0 interface ge-0/0/1.0 passive

Kiểm tra:

show ospf neighbor              # láng giềng, DR/BDR
show ospf interface brief       # area, cost, trạng thái interface
show ospf database              # LSDB
show route protocol ospf        # route học được qua OSPF
show ospf overview               # tổng quan area, SPF run gần nhất

Lưu ý: passive trong Junos vẫn quảng bá subnet của interface vào OSPF (giống Cisco passive-interface) nhưng không gửi Hello — không nhầm với việc tắt hẳn OSPF trên interface.

Huawei (VRP)

VRP gần giống Junos ở chỗ cấu hình cost/priority/authentication ngay trên interface, nhưng vẫn giữ kiểu network theo area như Cisco ở phần khai báo area:

interface GigabitEthernet0/0/0
 ip address 10.0.12.1 255.255.255.0
 ospf cost 10
 ospf dr-priority 255
 ospf authentication-mode md5 1 cipher <shared-secret>
#
interface GigabitEthernet0/0/1
 ip address 10.0.1.1 255.255.255.0
#
ospf 1 router-id 1.1.1.1
 area 0.0.0.0
  network 10.0.12.0 0.0.0.255
  network 10.0.1.0 0.0.0.255
  silent-interface GigabitEthernet0/0/1

Kiểm tra:

display ospf peer                          # láng giềng, DR/BDR
display ospf interface                     # area, cost, trạng thái interface
display ospf lsdb                          # LSDB
display ip routing-table protocol ospf     # route học được qua OSPF
display ospf brief                         # tổng quan process

Lưu ý: silent-interface trên Huawei tương đương passive-interface của Cisco — router-id trên VRP có thể khai ở ospf <process-id> router-id <id> (theo từng process, thường dùng khi chạy multi-instance) hoặc ở global router id <id> trong system-view.

Bảng so sánh nhanh cú pháp

Việc cần làmCisco IOSJuniper (Junos)Huawei (VRP)
Đặt Router IDrouter-id 1.1.1.1 (trong router ospf)set routing-options router-id 1.1.1.1ospf 1 router-id 1.1.1.1
Bật OSPF trên mạng/interfacenetwork <net> <wildcard> area 0set protocols ospf area 0 interface ge-0/0/0.0network <net> <wildcard> (trong area)
Không gửi Hello ra LANpassive-interface <if>... interface <if> passivesilent-interface <if>
Chỉnh costip ospf cost <n>... interface <if> metric <n>ospf cost <n> (trên interface)
Chỉnh priority DRip ospf priority <n>... interface <if> priority <n>ospf dr-priority <n>
Bật xác thực MD5ip ospf message-digest-key ...... interface <if> authentication md5 ...ospf authentication-mode md5 ...
Xem láng giềngshow ip ospf neighborshow ospf neighbordisplay ospf peer
Xem LSDBshow ip ospf databaseshow ospf databasedisplay ospf lsdb
Xem route học đượcshow ip route ospfshow route protocol ospfdisplay ip routing-table protocol ospf

Chủ đề nâng cao

Redistribution vào OSPF

Khi đưa route từ giao thức khác (static, BGP, EIGRP...) vào OSPF, router thực hiện trở thành ASBR và OSPF không tự học metric gốc — phải khai báo metric mặc định, nếu không mọi route redistribute nhận metric mặc định rất thấp (20 cho E2), dễ gây định tuyến sai lệch:

router ospf 1
 redistribute static subnets metric 100 metric-type 1
 default-metric 50
  • E1 — cost tích luỹ = cost redistribute + cost nội bộ OSPF từ router đến ASBR (giống metric IGP thật).
  • E2 (mặc định) — chỉ giữ nguyên cost redistribute, bỏ qua cost nội bộ đến ASBR — nguy hiểm khi có 2 ASBR, dễ chọn nhầm đường xa hơn vì cost nội bộ không được tính.

Timer tuning & Fast convergence

Giảm Hello/Dead Interval giúp phát hiện sự cố nhanh hơn, đổi lại tốn CPU/băng thông hơn:

interface GigabitEthernet0/0
 ip ospf hello-interval 1
 ip ospf dead-interval 4

Tốt hơn cho hội tụ dưới giây trên mạng đòi hỏi cao (data center, core network) là dùng BFD (Bidirectional Forwarding Detection) — phát hiện lỗi ở tầng dưới trong vài chục ms, rồi báo ngay cho OSPF thay vì chờ Dead Interval:

interface GigabitEthernet0/0
 ip ospf bfd
router ospf 1
 bfd all-interfaces

LSA Throttling & SPF Throttling

Trên mạng lớn hoặc không ổn định, nhiều sự kiện link flap liên tiếp có thể khiến router chạy SPF liên tục, tốn CPU. Cisco cung cấp exponential backoff timer:

router ospf 1
 timers throttle spf 50 200 5000     ! start 50ms, tăng dần tới max 5s
 timers throttle lsa all 50 200 5000

Stub Router / Graceful Shutdown

Khi cần bảo trì router mà không muốn traffic đổ dồn đột ngột sang nó rồi lại rớt khi nó xuống hẳn, có thể tạm quảng bá cost cực cao cho mọi route nội bộ (Max metric router LSA — RFC 3137) để traffic tự động né trước:

router ospf 1
 max-metric router-lsa on-startup 300

Authentication

Chống router giả mạo kết nối vào domain OSPF, nên bật MD5 hoặc tốt hơn là SHA (qua key-chain) trên mọi interface tham gia OSPF, đặc biệt các segment có thể bị truy cập vật lý:

interface GigabitEthernet0/0
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 <shared-secret>

OSPFv3 (IPv6) — khác biệt chính so với OSPFv2

  • Chạy theo interface, không theo network statement như OSPFv2.
  • Router ID/Area ID vẫn là số 32-bit dạng IPv4, kể cả khi mạng thuần IPv6 (không có IPv4 để tự chọn → phải cấu hình thủ công).
  • Hỗ trợ nhiều instance OSPFv3 trên cùng một link (address family).
  • LSA type 8/9 mới (Link LSA, Intra-Area-Prefix LSA) thay cho việc mang prefix trực tiếp trong Router LSA như v2.
interface GigabitEthernet0/0
 ipv6 ospf 1 area 0

Bảng tổng hợp so sánh nhanh

Khái niệmGhi nhớ nhanh
MetricCost = Reference BW / Interface BW — luôn chỉnh auto-cost reference-bandwidth
Hello/Dead10s/40s (broadcast, P2P) · 30s/120s (NBMA)
Multicast224.0.0.5 AllSPFRouters · 224.0.0.6 AllDRouters
DR/BDRChỉ có trên multi-access; point-to-point không cần
Area 0Bắt buộc là trung tâm, mọi area khác nối trực tiếp hoặc qua virtual-link
Stub vs NSSAStub chặn hoàn toàn External; NSSA cho phép ASBR nội bộ redistribute
E1 vs E2E1 cộng dồn cost nội bộ, E2 (mặc định) thì không

Bài viết thuộc chuyên mục Network — tiếp theo sẽ là loạt bài về BGP cơ bản và so sánh OSPF với EIGRP/IS-IS trong thiết kế mạng doanh nghiệp.