- Bài 1 : Mạng và Mô hình tham chiếu
- Bài 2 : Chi tiết các lớp trong Mô hình tham chiếu – Application và Transport
- Bài 3 : Chi tiết các lớp trong Mô hình tham chiếu – Network
- Bài 4 : Chi tiết các lớp trong Mô hình tham chiếu – Data Link và Physical
- Bài 5 : Giới thiệu về Router
- Bài 6 : Nguyên lý hoạt động của Switch
- Bài 7 : Định tuyến tĩnh
- Bài 8 : Một số giao thức mạng – ARP
- Bài 9 : Một số giao thức mạng – DHCP
- Bài 10 : Một số giao thức mạng – ICMP
- Bài 11 : Tổng quan về định tuyến động
- Bài 12 : Giao thức định tuyến OSPF
OSPF – Open Shortest Path First, là một giao thức định tuyến link – state điển hình. Đây là một giao thức được sử dụng rộng rãi trong các mạng doanh nghiệp có kích thước lớn (tất nhiên, hoàn toàn có thể sử dụng được trên các mạng vừa và nhỏ).
Một số đặc điểm chính của giao thức OSPF:
- OSPF là một giao thức link – state điển hình. Mỗi router khi chạy giao thức sẽ gửi thông tin trạng thái đường link của nó cho tất cả các router trong vùng (area). Sau một thời gian trao đổi, các router sẽ đồng nhất được bảng cơ sở dữ liệu trạng thái đường link (Link State Database – LSDB) với nhau, mỗi router đều có được “bản đồ mạng” của cả vùng. Từ đó mỗi router sẽ chạy giải thuật Dijkstra tính toán ra một cây đường đi ngắn nhất (Shortest Path Tree) và dựa vào cây này để xây dựng nên bảng định tuyến.
- OSPF có AD = 110.
- Metric của OSPF được tính dựa vào bandwidth trên các cổng chạy OSPF dọc tuyến đường đến đích.
- OSPF chạy trực tiếp trên nền IP, có protocol – id là 89.
- OSPF là một giao thức chuẩn quốc tế, được định nghĩa trong RFC – 2328.
Ta cùng review hoạt động của OSPF thông qua các bước hoạt động như sau:
- Bầu chọn Router – ID.
- Thiết lập quan hệ láng giềng (neighbor).
- Trao đổi LSDB và tính toán xây dựng bảng định tuyến.
1. Bầu chọn Router – ID
Đầu tiên, khi một router chạy OSPF, nó phải thiết lập một giá trị dùng để định danh duy nhất cho nó trong cộng đồng các router chạy OSPF. Giá trị này được gọi là Router – ID.
Router – ID của router chạy OSPF có định dạng của một địa chỉ IPv4. Mặc định, tiến trình OSPF trên mỗi router sẽ tự động bầu chọn giá trị Router – ID là địa chỉ IPv4 cao nhất trong các interface đang active, ưu tiên cổng loopback.
Ta cùng làm rõ ý này thông qua một ví dụ:

Hình 1 – Bầu chọn Router – ID (1).
Khi cho router R tham gia OSPF (xem hình 1), router R phải bầu chọn ra một “nick name” để định danh cho nó trong cộng đồng các router chạy OSPF. Vì “nick name” này có định dạng của một địa chỉ IP nên R sẽ lấy một trong các địa chỉ IP trên nó để làm Router – ID. Như đã nói ở trên, chỉ địa chỉ của các interface đang active, tức là ở trạng thái up/up (status up, line protocol up) mới được tham gia bầu chọn. Ta thấy trên hình 1, chỉ có hai cổng F0/0 và F0/1 của R là up/up nên router R sẽ chỉ xem xét hai địa chỉ trên hai cổng này là 192.168.1.1 và 192.168.2.1 để xây dựng Router – ID. Để xác định trong hai địa chỉ này, địa chỉ nào là cao hơn, R tiến hành so sánh hai địa chỉ này theo từng octet từ trái sang phải, địa chỉ nào có octet đầu tiên lớn hơn được xem là lớn hơn. Ta thấy, với cách so sánh này, địa chỉ 192.168.2.1 được xem là lớn hơn địa chỉ 192.168.1.1 nên nó sẽ được sử dụng để làm Router – ID. Vậy R sẽ tham gia OSPF với giá trị “nick name” – Router ID là 192.168.2.1.
Ta cũng thấy trong 3 địa chỉ xuất hiện ở trên hình 1, địa chỉ 203.162.4.1 của cổng serial S0/1/0 trên router R là lớn nhất nhưng vì cổng này down nên không được tham gia bầu chọn.
Tiếp theo, cũng ví dụ trên nhưng lần này trên router R có thêm các interface loopback (hình 2):

Hình 2 – Bầu chọn Router – ID (2).
Tương tự như trên, khi ta bật OSPF trên router R, R xúc tiến việc bầu chọn Router – ID. Vì lần này có các interface loopback nên R sẽ bỏ qua, không xem xét các địa chỉ của các interface vật lý. Hai địa chỉ của hai interface loopback 1 và 2 sẽ được so sánh để chọn ra Router – ID cho router R, và ta thấy rõ ràng 2.2.2.2 > 1.1.1.1 nên router R sẽ chọn 2.2.2.2 làm Router – ID khi tham gia OSPF. Từ hình 2, ta thấy, 2.2.2.2 không phải là địa chỉ IP cao nhất trên router, nhưng vì tiến trình OSPF ưu tiên cổng loopback nên các địa chỉ trên các cổng loopback sẽ được xem xét trước. Điều này được giải thích là sẽ đem lại sự ổn định cho tiến trình OSPF vì interface loopback là loại interface luận lý không bao giờ down trừ khi người quản trị shutdown interface này.
Có một cách khác để thiết lập giá trị Router – ID cho router là sử dụng câu lệnh “router-id” để thiết lập thủ công giá trị này trên router:
Router(config)#router ospf 1 Router(config-router)#router-id A.B.C.D |
Lưu ý rằng, với cách này, giá trị của Router – ID được thiết lập không nhất thiết phải là một địa chỉ IP có sẵn trên router mà có thể là một địa chỉ IP tùy ý được chọn bởi người quản trị.
Bên cạnh đó, nếu tiến trình OSPF đã chạy và đã có được Router – ID từ trước, mà người quản trị lại muốn đổi lại giá trị này bằng cách dùng câu lệnh cấu hình thủ công vừa nêu, thì sau khi thiết lập giá trị mới, người quản trị phải khởi động lại tiến trình OSPF thì giá trị Router – ID mới mới được thiết lập. Câu lệnh khởi động lại tiến trình OSPF:
Router#clear ip ospf process Reset ALL OSPF processes? [no]: yes → Ta chọn "Yes" |
Sau khi đã có được Router – ID, tiến trình OSPF sẽ chuyển qua bước tiếp theo là thiết lập quan hệ láng giềng với các router kết nối trực tiếp với nó. Chúng ta khảo sát bước tiếp theo của hoạt động OSPF: Thiết lập quan hệ láng giềng.
2. Thiết lập quan hệ láng giềng
Bước tiếp theo, sau khi đã chọn xong Router – ID, router chạy OSPF sẽ gửi ra tất cả các cổng chạy OSPF một loại gói tin được gọi là gói tin Hello. Gói tin này được gửi multicast theo địa chỉ dành riêng cho OSPF là 224.0.0.5, đến tất cả các router chạy OSPF khác trên cùng phân đoạn mạng. Mục đích của gói tin Hello là giúp cho router tìm kiếm láng giềng, thiết lập và duy trì mối quan hệ này. Gói tin Hello được gửi theo định kỳ mặc định 10s/lần.

Hình 3 – Các router gửi gói tin hello.
Có nhiều thông tin được hai router kết nối trực tiếp trao đổi với nhau qua gói tin Hello. Trong các loại thông tin được trao đổi, có năm loại thông tin sau bắt buộc phải match với nhau trên hai router để chúng có thể thiết lập được quan hệ láng giềng với nhau:
- Area – ID.
- Hello timer và Dead timer.
- Hai địa chỉ IP đấu nối phải cùng subnet (một vài trường hợp còn yêu cầu cùng cả subnet – mask).
- Thỏa mãn các điều kiện xác thực.
- Cùng thiết lập Stub hoặc NSSA.
Ta cùng phân tích từng thông số đã nêu ở trên.
Area – ID
Nguyên tắc hoạt động của OSPF là mỗi router phải ghi nhớ thông tin trạng thái đường link của toàn bộ hệ thống mạng chạy OSPF rồi từ đó thực hiện tính toán định tuyến dựa trên dữ liệu này. Để giảm tải bộ nhớ cũng như tải tính toán cho mỗi router và giảm thiểu lượng thông tin định tuyến cần trao đổi, sơ đồ chạy OSPF được chia thành nhiều vùng (area); các router sẽ được cho tham gia hoạt động OSPF trên các vùng khác nhau, router tham gia vùng nào chỉ cần phải ghi nhớ và tính toán với topology của vùng mà nó ở trong đó.
Chúng ta cùng xem xét một ví dụ về phân vùng OSPF trong hình 4 dưới đây:

Hình 4 – Kiến trúc phân vùng trong OSPF.
Trong sơ đồ ví dụ ở hình 4, ta thấy topology được chia thành 3 vùng được đánh số là 0, 1 và 2 (Area 0, Area 1 và Area 2). Các router được sắp xếp để tham gia vào 3 vùng này khi chạy định tuyến OSPF. Nguyên tắc của việc phân vùng là thực hiện phân vùng trên link của router chứ không phải bản thân router. Do đó, trong sơ đồ hình 4 ở trên:
- Các router R1, R2, R3 có tất cả các link của chúng được gán vào Area 0 nên chúng hoàn toàn tham gia vào Area 0, chúng được gọi là các internal router của Area 0. Như đã trao đổi ở trên, các router này chỉ cần phải ghi nhớ thông tin đường link – và theo đó là topology mạng – của vùng 0 (Area 0) rồi tính toán trên topo ấy, chúng không cần phải học thông tin đường link của các vùng khác.
- Router R6 vì tất cả các link của nó đều được gán vào Area 1 nên nó tham gia hẳn vào Area 1. Router R6 chỉ phải ghi nhớ và tính toán trên bản đồ mạng của vùng 1.
- Tương tự, router R7 với các link của nó hoàn toàn thuộc về vùng 2 nên nó chỉ cần ghi nhớ bản đồ mạng của vùng 2 và tính toán định tuyến trên bản đồ này.
- Hai router R4 và R5 là hai router đặc biệt, chúng vừa có link tham gia vùng này lại vừa có link tham gia vùng kia. Những router như vậy được gọi là các router ABR – Area Border Router, chúng tham gia chạy OSPF trên nhiều vùng và vì vậy sẽ phải ghi nhớ bản đồ mạng của tất cả các vùng mà chúng tham gia. Đây là loại router rất quan trọng trong kiến trúc OSPF đa vùng.
Ở ví dụ trên hình 4, router ABR R4 vừa tham gia Area 0 (do có link được gán vào Area 0), vừa tham gia Area 1 (do có link được gán vào Area 1), nên sau khi hội tụ, nó sẽ có thông tin topology của cả hai area 0 và 1 và phải xử lý tính toán trên cả hai area này. Tương tự như thế, router ABR R5 tham gia cả hai vùng 0 và 2 nên sẽ phải ghi nhớ và xử lý tính toán trên cả hai topology của vùng 0 và vùng 2. Các router ABR phải chịu hao tốn tài nguyên nhiều hơn các router thông thường khác.
Ta thấy cách tổ chức như trên rõ ràng tiết kiệm tài nguyên cho các router. Ngoài ra, cách tổ chức này còn cô lập được những bất ổn vào trong một vùng: khi có một link nào đó trên một router up/down, sự kiện này chỉ lan truyền trong nội bộ một vùng và gây ra sự tính toán lại định tuyến của các router trong vùng ấy chứ không ảnh hưởng đến các router thuộc vùng khác.
Trong ví dụ trên, ta thấy mỗi vùng (area) được định danh bởi một con số, số định danh này được gọi là Area – ID. Area – ID có thể được hiển thị dưới dạng một số tự nhiên hoặc dưới dạng của một địa chỉ IP. Ví dụ: Area 0 có thể được biểu diễn là Area 0.0.0.0, Area 1 có thể được biểu diễn là Area 0.0.0.1,… Một nguyên tắc bắt buộc trong phân vùng OSPF là nếu chia thành nhiều vùng thì phải tồn tại một vùng mang số hiệu là 0 – Area 0, Area 0 còn được gọi là Backbone Area và mọi vùng khác phải kết nối về vùng 0 thông qua một router ABR.
Khi hai router láng giềng kết nối với nhau qua một link, chúng phải thống nhất với nhau về Area – ID của link này. Cả hai router phải gán cùng một số Area – ID cho link kết nối giữa chúng với nhau. Nếu điều này bị vi phạm, chúng sẽ không thể thiết lập được quan hệ láng giềng thông qua link này và do đó không bao giờ có thể trao đổi được thông tin định tuyến qua link. Vì vậy, đây là điều kiện thứ nhất trong việc thiết lập quan hệ láng giềng: thống nhất về Area – ID trên link kết nối.
Hello timer và Dead timer
Hello timer là khoảng thời gian định kỳ gửi gói tin hello ra khỏi một cổng chạy OSPF. Khi một router nhận được hello từ láng giềng, nó sẽ khởi động Dead timer. Nếu sau khoảng thời gian được chỉ ra trong Dead timer mà router không nhận được gói tin hello từ láng giềng, nó sẽ coi như láng giềng này không còn và sẽ xóa mọi thông tin mà nó học được từ láng giềng. Ngược lại, cứ mỗi lần nhận được gói tin hello từ láng giềng, Dead timer lại được reset. Giá trị mặc định của hello – timer và dead – timer là 10s và 40s. Ta có thể hiệu chỉnh các giá trị này trên cổng chạy OSPF bằng cách sử dụng câu lệnh:
R(config-if)#ip ospf {hello-interval | dead-interval} seconds
|
Để hai router thiết lập được quan hệ láng giềng với nhau, cặp giá trị này bắt buộc phải khớp nhau trên hai router ở hai đầu của đường link.
Cùng subnet
Hai địa chỉ đấu nối nhau giữa hai router bắt buộc phải cùng subnet thì hai router này mới có thể thiết lập quan hệ láng giềng với nhau. Nếu đường link kết nối giữa hai router là một đường link multi – access (ví dụ: Ethernet), hai địa chỉ này còn bắt buộc phải cùng cả subnet – mask để có thể thiết lập neighbor.
Thỏa mãn authentication
Trong trường hợp để tăng cường tính bảo mật của hoạt động trao đổi thông tin định tuyến, chúng ta thực hiện cài đặt các password trên hai router hai đầu đường link. Yêu cầu bắt buộc là hai password này phải khớp nhau ở hai đầu để hai router có thể thiết lập neighbor (tất nhiên!). Cấu hình xác thực sai có thể dẫn đến không thiết lập neighbor được giữa hai router từ đó dẫn đến không trao đổi được thông tin định tuyến.
Stub/NSSA Area
Trong kiến trúc đa vùng của OSPF có một số loại vùng đặc biệt gọi là vùng Stub hoặc vùng NSSA. Những loại area đặc biệt này, khi được sử dụng đúng vị trí sẽ giúp giảm thiểu đáng kể lượng thông tin định tuyến cần trao đổi và xử lý giữa các router. Khi ta cho một router tham gia vùng stub hoặc NSSA, nó chỉ có thể thiết lập quan hệ láng giềng với một router khác mà cũng tham gia vùng stub hoặc NSSA.
Chủ đề các kiểu area đặc biệt của OSPF sẽ được trình bày trong một chuyên đề khác. Trong mục này, chủ đề này chỉ được giới thiệu như một điều kiện để thiết lập neighbor giữa hai router.
Sau khi cả năm điều kiện nêu trên đã được thỏa mãn, hai router sẽ thiết lập với nhau một session OSPF gọi là quan hệ láng giềng và được ký hiệu là 2 – WAY. Khi các router đã thiết lập được quan hệ 2 – WAY với nhau, chúng bắt đầu thực hiện trao đổi thông tin trong bảng cơ sở dữ liệu trạng thái đường link (LSDB – Link State Database) cho nhau. Việc trao đổi này được lan ra toàn mạng và cuối cùng mỗi router đều có được trạng thái đường link của mọi router trong mạng, từ đó chúng thực hiện tính toán trên cơ sở dữ liệu trạng thái đường link này và xây dựng bảng định tuyến.
Tiếp theo, chúng ta cùng đi qua bước kế tiếp của hoạt động OSPF: trao đổi thông tin trong LSDB sau khi đã thiết lập xong quan hệ láng giềng.
3. Trao đổi LSDB
LSDB – Link State Database – Bảng cơ sở dữ liệu trạng thái đường link là một bảng dữ liệu trên router tập hợp thông tin trạng thái đường link của mọi router trong vùng. Ta có thể coi LSDB là một “tấm bản đồ mạng” mà router sẽ căn cứ vào đó để tính toán định tuyến. LSDB phải hoàn toàn giống nhau giữa các router cùng vùng. Các router sẽ không trao đổi với nhau cả một bảng LSDB mà sẽ trao đổi với nhau từng đơn vị thông tin gọi là LSA – Link State Advertisement. Các đơn vị thông tin này lại được chứa trong các gói tin cụ thể gọi là LSU – Link State Update mà các router thực sự trao đổi với nhau. Lưu ý: LSA không phải là một loại gói tin mà chỉ là một bản tin. LSU mới thực sự là gói tin và nó chứa đựng các bản tin này.
Việc trao đổi thông tin diễn ra rất khác nhau tùy theo thể loại của đường link nối giữa hai router. Có hai kiểu trao đổi thông tin cơ bản ứng với hai loại đường link là Point – to – Point và Broadcast Multiaccess.
Point – to – point
Loại link point – to – point điển hình là kết nối serial điểm – điểm chạy giao thức HDLC hoặc PPP nối giữa hai router (hình 5).

Hình 5 – Trao đổi LSDB trên kết nối point – to – point.
Trong trường hợp này, hai router láng giềng sẽ ngay lập tức gửi toàn bộ bảng LSDB cho nhau qua kết nối point – to – point và chuyển trạng thái quan hệ từ 2 – WAY sang một mức độ mới gọi là quan hệ dạng FULL. Quan hệ Full qua một kết nối serial point – to – point được ký hiệu là FULL/ –.
Broadcast Multiaccess
Một đường link broadcast multiaccess điển hình chính là đường link Ethernet LAN (hình 6).

Hình 6 – Broadcast Multiaccess.
Việc trao đổi LSDB diễn ra hoàn toàn khác trong kiểu data link này. Trên Ethernet link, mỗi router đều kết nối trực tiếp với nhau và đều thiết lập quan hệ 2 – WAY với nhau. Tuy nhiên, các router sẽ không trao đổi trực tiếp với nhau mà sẽ tiến hành trao đổi thông tin thông qua một router đầu mối gọi là DR – Designated Router. Trên mỗi kết nối Multi – access, một DR router được bầu ra; một router khác sẽ được bầu làm Backup DR (BDR) để dự phòng cho DR trong trường hợp DR down; các router còn lại đóng vai trò là DROther.
Nguyên tắc đặt ra như sau: các router DROther khi trao đổi thông tin định tuyến sẽ không gửi trực tiếp cho nhau mà sẽ gửi lên cho DR và BDR. Sau đó router DR này sẽ forward lại thông tin xuống cho các router DROther khác. Khi các router gửi thông tin lên cho DR và BDR, chúng sẽ sử dụng địa chỉ multicast 224.0.0.6 còn khi DR forward lại thông tin xuống các router khác, nó sử dụng địa chỉ 224.0.0.5. Nhắc lại, các DROther không trao đổi trực tiếp với nhau. Chúng ta cùng xem xét một ví dụ trong hình 7 dưới đây:

Hình 7 – Hoạt động trao đổi thông tin thông qua DR.
Trên hình 7:
- Các router R1, R2, R3 và R4 chạy OSPF với nhau, cùng kết nối vào một đường link multi access là một switch Ethernet. Các router này sau khi thiết lập quan hệ láng giềng với nhau từng đôi một qua đường link này thì thực hiện bầu chọn ra các router DR và BDR. Giả thiết rằng, R1 được bầu chọn làm DR, R3 được bầu làm BDR, hai router còn lại R2 và R4 đóng vai trò là DROther.
- Router R2 – là một router DROther có thông tin đường link cần gửi đến các router khác trên link multi access, nó sẽ thực hiện gửi theo phương thức multicast dữ liệu này đến địa chỉ 224.0.0.6. Địa chỉ multicast 224.0.0.6 là địa chỉ nhóm của các router DR và BDR, nên chỉ các router này mới tiếp nhận thông tin đường link. Hoạt động gửi thông tin này được thể hiện bằng mũi tên màu đỏ trên hình vẽ 7.
- Cùng tiếp nhận thông tin, nhưng chỉ router DR R1 mới thực hiện forward lại thông tin nhận được xuống các router khác bằng địa chỉ multicast 224.0.0.5 (được thể hiện bằng mũi tên màu xanh). Router BDR R3 không hành động gì, chỉ đứng đó để dự phòng vai trò DR cho R1.
- Kết quả cuối cùng, mọi router kết nối vào link multi access đều nhận được thông tin trạng thái đường link từ router R2. Các router khác cũng thực hiện tiến trình tương tự để gửi thông tin đường link của mình cho các router còn lại để đạt được kết quả là tất cả các router đều có LSDB giống hệt nhau.
Về quan hệ giữa các cặp router lúc này, ta thấy như sau:
- Các DROther không bao giờ trao đổi thông tin với nhau nên quan hệ giữa chúng mãi mãi chỉ dừng lại ở mức độ 2 – WAY. Thực hiện show bảng neighbor trên các router DROther sẽ thấy rằng các router này hiển thị tình trạng quan hệ với nhau là 2 – WAY/DROther.
- Các DROther có trao đổi dữ liệu với DR và BDR nên trong bảng neighbor của các router DROther, các router DR và BDR sẽ hiện ra với quan hệ dạng full: FULL/DR và FULL/BDR. Ngược lại, các router DR và BDR cũng thấy tình trạng quan hệ của các router DROther với chúng là FULL/DROther.
Như vậy, router DR đóng một vai trò rất quan trọng trên môi trường Multiaccess: đó là router điều phối thông tin trên môi trường này. Vậy router nào sẽ được chọn làm DR? Ta có nguyên tắc bầu chọn DR và BDR cho một môi trường multi – access như sau:
- Trên mỗi cổng đấu nối multi – access của mỗi router đều có một giá trị gọi là priority. Giá trị priority này nằm trong dải từ 0 đến 255 và được trao đổi giữa các router trong các gói tin hello. Router nào nắm giữ giá trị priority cao nhất sẽ được bầu chọn làm DR, priority cao nhì làm BDR, còn lại sẽ là DROther. Giá trị priority mặc định trên các cổng router là bằng 1. Lưu ý rằng nếu router mang giá trị priority bằng 0 sẽ không tham gia vào tiến trình bầu chọn DR và BDR, nó luôn luôn đảm nhận vai trò là DROther.
- Trong trường hợp giá trị priority bằng nhau (ví dụ để mặc định bằng 1 hết, không cấu hình gì thêm), router nào có Router – ID cao nhất sẽ làm DR, Router – ID cao nhì sẽ làm BDR, còn lại làm DROther. Ta nói Router – ID là tie – breaker của Priority.
Có một số lưu ý cho việc bầu chọn DR và BDR như sau:
- Nếu ta cấu hình một router nhận giá trị priority bằng 0, router này sẽ không tham gia vào tiến trình bầu chọn DR và BDR, nó luôn luôn là DROther. Chúng ta phải lưu ý điều này vì nếu chúng ta cấu hình cho tất cả các router đấu nối vào môi trường multi – access giá trị priority = 0 thì sẽ không có router nào chịu làm DR cho môi trường này! Lỗi này dẫn đến lỗi trong định tuyến.
- Luật bầu chọn DR là non – preempt: khi một DR hoặc BDR đã được bầu chọn xong, nếu router mới tham gia vào môi trường multi – access có priority hay Router – ID cao hơn router DR/BDR nó cũng không thể chiếm quyền của DR/BDR hiện tại. Chỉ khi nào DR/BDR hiện tại down, router khác mới có cơ hội tranh quyền DR/BDR.
- Chúng ta không được nhầm lẫn kết nối Ethernet nối 2 router là một kết nối point – to – point, kết nối này vẫn được xem là Multi – access. Trong trường hợp này, một router sẽ làm DR, một làm BDR, không có DROther (hình 8).

Hình 8 – Đây là môi trường Multi – access dù chỉ có 2 router.
Sau khi hoàn thành xong thao tác trao đổi LSDB, mỗi router trong vùng đều đã có được bảng cơ sở dữ liệu trạng thái đường link của mọi router trong vùng, hay nói một cách khác, mỗi router đã có được “tấm bản đồ mạng” của cả vùng. Dựa trên LSDB này, các router sẽ chạy giải thuật Dijkstra để xây dựng một cây đường đi tối ưu đến mọi đích đến trong mạng với gốc cây chính là router ấy. Từ cây này, router xây dựng lên bảng định tuyến của mình, hoàn tất quá trình xây dựng bảng định tuyến.
Tính toán metric với OSPF
Nhắc lại rằng, metric là một giá trị định lượng mà các giao thức sẽ thực hiện gán cho các tuyến đường khi tính toán định tuyến để đo đạc độ tốt của tuyến đường ấy: đường đi nào có metric nhỏ nhất, đường đi ấy sẽ được xem là tốt nhất và được cài vào bảng định tuyến để sử dụng. Khi làm việc với các giao thức định tuyến, một yêu cầu quan trọng là chúng ta phải nắm được cách thức tính toán metric cho các tuyến đường của giao thức đang sử dụng. Làm được điều này, chúng ta có thể hiểu được cách router chọn đường cài vào bảng định tuyến; dự đoán được đường đi của dữ liệu trong mạng; và khi cần, có thể hiệu chỉnh trên các router để bẻ lại đường đi của dữ liệu theo yêu cầu đặt ra.
Phần tiếp theo sẽ trình bày về cách thức tính metric cho các tuyến đường với giao thức định tuyến OSPF. Chúng ta cùng xem xét một ví dụ:

Hình 9 – Ví dụ về tính toán metric trong OSPF.
Trong ví dụ hình 9, ba router R1, R2 và R3 chạy định tuyến OSPF với nhau. Kết quả cuối cùng của hoạt động định tuyến là mạng LAN 192.168.3.0/24 của R3 sẽ được cập nhật vào bảng định tuyến của router R1. Chúng ta sẽ cùng tính toán metric mà OSPF gán cho tuyến đường từ R1 đi đến mạng 192.168.3.0/24 thông qua hai router R2 và R3.
Trước hết, khi một cổng của router tham gia định tuyến OSPF, nó sẽ được OSPF gán cho một giá trị OSPF cost trên cổng, giá trị này sẽ được dùng để tính toán metric cho các tuyến đường đi ngang qua cổng ấy. OSPF cost trên một cổng được tính ra từ giá trị bandwidth trên cổng theo công thức sau đây:
OSPF cost = 108 / Bandwidth
Trong công thức này, giá trị Bandwidth sẽ có đơn vị là bps, chúng ta cần lưu ý điều này để đổi đơn vị cho đúng khi thực hiện tính toán. Để xác định giá trị bandwidth trên một cổng, chúng ta có thể sử dụng lệnh sau đây với Cisco IOS:
R#show interfaces tên_cổng |
Ví dụ, để xác định giá trị bandwidth của cổng F0/0 trên router R1, người quản trị có thể gõ lệnh:
R1#show interfaces f0/0 FastEthernet0/0 is up, line protocol is up Hardware is Gt96k FE, address is 0021.a03b.d828 (bia 0021.a03b.d828) Internet address is 192.168.12.1/24 MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec, reliability 255/255, txload 1/255, rxload 1/255 (...) |
Kết quả show ở trên cho thấy cổng F0/0 của router R1 có bandwidth là 100000Kbps, hay 100 Mbps. Tiếp theo, để tính OSPF cost trên cổng, ta đưa giá trị bandwidth này vào công thức ở trên (ta nhớ đổi ra đơn vị Bps: 100 Mbps = 100000 Kbps = 108 Bps):
OSPF cost của cổng F0/0 = 108 / 108 = 1
Như vậy, giá trị OSPF cost của một cổng Fast Ethernet sẽ được tính là bằng 1. Giá trị này sẽ được tham gia vào tính toán metric OSPF của tuyến đường có đi ngang qua cổng F0/0 vừa nêu.
Để tiện lợi cho việc tính metric OSPF, các tài liệu của Cisco thường cung cấp một bảng tính sẵn giá trị OSPF cost của một số loại interface tiêu biểu:
| Loại interface | Bandwidth | OSPF cost |
| Ethernet | 10 Mbps | 10 |
| Fast Ethernet | 100 Mbps | 1 |
| Giga Ethernet | 1 Gbps | 1 |
| Serial | 1,544 Mbps | 64 |
| Loopback | 5 Gbps | 1 |
Bảng 1 – Giá trị OSPF cost của một số loại interface tiêu biểu.
Khi tính toán các giá trị OSPF cost cho các cổng, Cisco IOS sẽ thực hiện một số quy tắc như sau khi thực hiện phép chia:
- Nếu kết quả của phép chia là một số thập phân lớn hơn hoặc bằng 1, phần thập phân sẽ được chặt bỏ, chỉ giữ lại phần nguyên. Ví dụ: khi tính OSPF cost trên cổng serial, kết quả phép chia sẽ là 64,7… nhưng được bỏ đi phần thập phân và để giá trị là 64.
- Nếu kết quả của phép chia nhỏ hơn 1, làm tròn thành 1. Ví dụ: bandwidth trên các cổng Giga Ethernet và Loopback nếu đổi ra Bps sẽ lớn hơn số bị chia 108 dẫn đến kết quả của phép chia sẽ nhỏ hơn 1, các giá trị kết quả này sẽ đều được làm tròn thành 1.
Một điểm lưu ý quan trọng khác chúng ta cần ghi nhớ là: giá trị bandwidth trên cổng chỉ là tốc độ quy ước mà IOS gán cho cổng ấy để phục vụ cho các hoạt động của router trên cổng (như định tuyến, QoS,…) chứ không phải tốc độ thực trên cổng. Ví dụ: nếu một cổng Fast Ethernet kết nối vào một đường truyền 50 Mbps thì tốc độ thực của nó chỉ được 50 Mbps trong khi giá trị bandwidth trên cổng sẽ vẫn được Cisco IOS thiết lập là 100 Mbps. IOS không thực hiện đo đạc tốc độ thực trên một cổng, nó chỉ sử dụng giá trị tốc độ lý thuyết của loại cổng đó cho các hoạt động của mình.
Để giá trị bandwidth trên cổng phản ánh đúng tốc độ thực trên cổng, chúng ta có thể hiệu chỉnh lại giá trị này bằng lệnh “bandwidth”:
R(config-if)#bandwidth Giá_trị_muốn_điều_chỉnh_thành |
Với ví dụ vừa nêu, để IOS đem tốc độ thực 50 Mbps áp dụng vào tính toán metric OSPF thay vì là dùng tốc độ lý thuyết, ta sử dụng lệnh vừa nêu:
R(config)#interface f0/0 R(config-if)#bandwidth 50000 |
(Đơn vị của tham số trong lệnh bandwidth là Kbps nên 50 Mbps được đổi thành 50000 Kbps).
Chúng ta trở lại với việc tính toán metric OSPF cho một tuyến đường. Cách làm như sau: để tính metric OSPF cho một tuyến đường từ một router đến một mạng đích, ta đi từ router đang xét đến mạng đích ấy và thực hiện cộng dồn OSPF cost của các interface gặp được trên đường đi theo quy tắc khi đi ra khỏi một cổng thì cộng cost trên cổng ấy, khi đi vào một cổng thì không cộng cost trên cổng ấy (nói gọn là: đi ra thì cộng, đi vào thì không cộng).
Chúng ta cùng xem xét ví dụ đã đề cập ở hình 9 ở trên, bây giờ được trình bày lại trong hình 10 tiếp theo đây:

Hình 10 – Tính toán metric từ R1 đến mạng 192.168.3.0/24.
Trong ví dụ này, để tính metric của tuyến đường đi từ R1 đến mạng 192.168.3.0/24 của R3, ta tiến hành di chuyển từ R1 đến mạng đích theo lộ tuyến mà ta muốn tính metric (xem hình 10). Ta thấy rằng trong quá trình di chuyển, ta sẽ đi ra khỏi các cổng: F0/0 của R1, S0/1/0 của R2 và F0/0 của R3; do đó, metric tính được sẽ là tổng của giá trị OSPF cost trên các cổng vừa nêu. Thực hiện tra cứu bảng OSPF cost ở trên (bảng 1) cho các cổng tương ứng, ta có được metric tính được sẽ là: 1 + 64 + 1 = 66. Vậy, nếu thực hiện hiển thị bảng định tuyến của router R1, ta sẽ thấy giá trị metric được liệt kê cho tuyến đường đi đến mạng đích 192.168.3.0/24 với next – hop là router R2 sẽ là 66.
Trong ví dụ vừa rồi, chỉ có một tuyến đường duy nhất để đi từ router R1 đến mạng 192.168.3.0/24, việc tính metric chỉ để giải thích kết quả xuất hiện trong bảng định tuyến. Chúng ta xem xét tiếp một ví dụ khác, nhưng lần này có nhiều tuyến đường đi đến cùng một mạng đích, và việc nắm được cách thức tính metric sẽ giúp chúng ta dự đoán được kết quả định tuyến của các router và từ đó nắm được đường đi của dữ liệu khi phải qua các router ấy.

Hình 11 – Ví dụ thứ 2 về tính metric.
Trong ví dụ thứ 2 về tính toán metric được trình bày trên hình 11 ở trên, ta thấy lần này có hai tuyến đường đi từ R1 đến mạng 192.168.3.0/24: một tuyến đường đi thông qua hai router R2 và R3, một tuyến đường khác đi thông qua hai router R4 và R3. Sơ đồ này cũng cho các router chạy OSPF để cập nhật thông tin định tuyến và câu hỏi đặt ra là tiến trình OSPF trên R1 sẽ chọn tuyến đường nào trong hai tuyến đường vừa nêu để đưa vào bảng định tuyến làm đường đi chính thức đến mạng 192.168.3.0/24. Để trả lời câu hỏi này, chúng ta áp dụng nguyên tắc về chọn đường dựa trên metric: đường đi nào có metric nhỏ hơn, đường đó tốt hơn và sẽ được chọn.
Áp dụng cách thức tính metric như đã trình bày trước đó, ta tính được:
- Metric cho tuyến đường theo next – hop R2 sẽ là: cost trên F0/0 của R1 + cost trên S0/1/0 của R2 + cost trên F0/0 của R3 = 1 + 64 + 1 = 66.
- Metric cho tuyến đường theo next – hop R4 sẽ là: cost trên F0/1 của R1 + cost trên F0/1 của R4 + cost trên F0/0 của R3 = 1 + 1 + 1 = 3.
Rõ ràng, metric đi theo hướng R4 nhỏ hơn metric đi theo hướng R2 và vì thế router R1 sẽ cài đường đi theo hướng R4 vào bảng định tuyến làm đường đi chính thức cho đích đến 192.168.3.0/24: mọi luồng dữ liệu đi đến các địa chỉ của mạng 192.168.3.0/24 sẽ được router R1 chuyển đi theo output interface nối đến R4. Ta xác định được là dữ liệu đi tới mạng 192.168.3.0/24 sẽ phải di chuyển qua chuỗi các router R1 – R4 – R3.
Như vậy, nắm được cách thức tính metric của một giao thức định tuyến, người quản trị có thể dự đoán được tuyến đường di chuyển của các luồng dữ liệu khi hệ thống mạng đang chạy giao thức định tuyến ấy. Điều này rất quan trọng trong công việc quản trị hạ tầng mạng.
Trên đây, chúng ta đã khảo sát qua hoạt động của giao thức định tuyến OSPF. Trong phần tiếp theo, chúng ta sẽ cùng xem xét cách cấu hình cơ bản OSPF trên Cisco IOS.
4. Cấu hình OSPF trên Cisco IOS
Wildcard – mask
Thủ tục cấu hình OSPF trên Cisco IOS đòi hỏi phải sử dụng tham số wildcard – mask trong câu lệnh cấu hình. Do đó, chúng ta sẽ trao đổi sơ lược về tham số này.
Giả sử ta muốn thu thập một nhóm các địa chỉ IP nào đó, Cisco IOS cho phép ta viết một biểu thức gồm hai biến số để đáp ứng yêu cầu này: Wildcard – mask và IP tham chiếu.
Wildcard – mask là một dãy nhị phân dài 32 bit được sử dụng kèm với một địa chỉ IP gọi là IP tham chiếu để lọc ra các địa chỉ IP muốn thu thập theo nguyên tắc như sau:
- Bit nào của địa chỉ IP tham chiếu tương ứng với bit 0 của wildcard – mask thì được giữ cố định.
- Bit nào của địa chỉ IP tham chiếu tương ứng với bit 1 của wildcard – mask thì được tự do thay đổi giá trị của nó.
Giữ cố định một số bit của địa chỉ IP tham chiếu và cho chạy tự do một số bit khác của địa chỉ này, chúng ta sẽ thu được các địa chỉ IP mong muốn.
Ta cùng xem xét một số ví dụ để làm rõ định nghĩa vừa nêu.
Ví dụ 1:
Ta cần lấy ra dải IP 192.168.1.0/24. Ta nhận thấy rằng mọi địa chỉ IP của mạng 192.168.1.0/24 mà ta đang quan tâm đều có 3 byte đầu luôn luôn được giữ cố định là “192”, “168” và “1”; byte thứ 4 sẽ chạy tự do từ “0” đến “255”. Do đó, ta sẽ viết một cặp IP tham chiếu và wildcard – mask để lấy toàn bộ dải này như sau:
192.168.1.0 ← IP tham chiếu 0.0.0.255 ← Wildcard – mask |
Rất rõ ràng, mọi bit nằm trong 3 byte đầu của IP tham chiếu đều tương ứng với các bit 0 của wildcard – mask nên sẽ được giữ cố định và vì vậy 3 byte đầu sẽ luôn luôn là “192”, “168” và “1”; các bit thuộc byte thứ 4 đều tương ứng với các bit 1 của wildcard – mask nên sẽ được chạy tự do dẫn đến byte này có quyền lấy bất cứ giá trị nào trong dải từ 0 đến 255. Như vậy, với cặp IP tham chiếu và wildcard – mask này, Cisco IOS hiểu rằng ta đang đề cập đến tất cả các địa chỉ của dải IP từ 192.168.1.0 đến 192.168.1.255, tức là các địa chỉ của mạng 192.168.1.0/24.
Ví dụ 2:
Ta cần thu thập các địa chỉ của mạng 192.168.1.128/25. Tương tự như trên, ta sẽ xem thử các địa chỉ của dải IP cần thu thập này sẽ có những bit nào giống nhau, được giữ nguyên và những bit nào khác biệt, chạy tự do:
- Ta thấy rằng, 3 byte đầu của các địa chỉ thuộc subnet 192.168.1.128/25 luôn là “192”, “168” và “1” nên địa chỉ IP tham chiếu được chọn cũng phải có 3 byte đầu tiên là “192”, “168” và “1” đồng thời các byte này phải được giữ cố định không cho thay đổi.
- Tiếp theo, ta phân tích byte thứ 4 của các địa chỉ và thấy rằng bit đầu tiên của byte thứ 4 luôn giữ cố định là “1”; 7 bit còn lại được cho chạy tự do. (Định dạng nhị phân của byte thứ 4 là “1xxxxxxx” – bit đầu luôn là “1”, 7 bit kế tiếp chạy tự do).
Từ phân tích trên, ta chọn cặp IP tham chiếu và wildcard – mask như sau:
192.168.1.128 ← IP tham chiếu 0.0.0.127 ← Wildcard – mask |
Với biểu thức này, mọi bit nằm trong 3 byte đầu của IP tham chiếu đều tương ứng với các bit 0 của wildcard – mask nên sẽ được giữ cố định và vì vậy 3 byte đầu sẽ luôn luôn là “192”, “168” và “1”.
Tiếp theo, trong byte thứ 4 của wildcard – mask, bit đầu tiên có giá trị là 0, 7 bit kế tiếp có giá trị là 1 (127 đổi ra nhị phân là “01111111”) và byte thứ 4 của IP tham chiếu có bit đầu tương ứng với bit 0 của wildcard – mask nên được giữ cố định, 7 bit sau tương ứng với các bit 1 của wildcard – mask nên được thả cho chạy tự do, và vì thế ta thu được các giá trị của byte thứ 4 trong IP tham chiếu sẽ chạy từ 128 đến 255 (10000000 đến 11111111).
Như vậy, với cặp IP tham chiếu và wildcard – mask này, Cisco IOS hiểu rằng ta đang đề cập đến tất cả các giá trị của dải IP từ 192.168.1.128 đến 192.168.1.255, tức là các địa chỉ của mạng 192.168.1.128/25.
Cách tính toán IP tham chiếu và wildcard – mask bằng cách phân tích nhị phân các địa chỉ IP như đã trình bày trong hai ví dụ ở trên đúng với định nghĩa đặt ra nhưng sẽ gây khó khăn khi cần phải tính nhanh. Do đó, để đơn giản cho việc xác định wildcard – mask, ta có thể sử dụng một “mẹo” tính nhẩm:
- wildcard mask = 255.255.255.255 – subnet mask.
- IP tham chiếu là một địa chỉ IP bất kỳ trong dải IP cần thu thập.
Ví dụ:
Với ví dụ 1 ở trên, ta thấy mạng 192.168.1.0/24 có subnet – mask là 255.255.255.0, wildcard – mask được xác định bằng cách lấy giá trị “255.255.255.255” trừ đi subnet – mask:
255.255.255.255 - 255.255.255.0 ================= 0.0.0.255 |
Sau khi xác định xong wildcard – mask, ta lấy IP tham chiếu là một địa chỉ IP bất kỳ nằm trong dải IP 192.168.1.0/24 là hoàn tất công việc. Để đơn giản, ta có thể lấy luôn địa chỉ 192.168.1.0 làm IP tham chiếu. Ta có kết quả đạt được cũng giống như phân tích nhị phân nhưng nhanh và dễ tính toán hơn nhiều:
192.168.1.0 ← IP tham chiếu 0.0.0.255 ← Wildcard – mask |
Với ví dụ 2 ở trên, ta cũng làm tương tự. Subnet 192.168.1.128/25 có subnet – mask tương ứng với “/25” là “255.255.255.128”. Lấy giá trị “255.255.255.255” trừ đi subnet – mask đã nêu ta thu được wildcard – mask:
255.255.255.255 - 255.255.255.128 ================== 0.0.0.127 |
Tiếp theo, ta lấy một địa chỉ bất kỳ trong subnet 192.168.1.128/25 để làm IP tham chiếu. Để tiện lợi, ta có thể lấy luôn địa chỉ mạng 192.168.1.128 và có được biểu thức như mong muốn:
192.168.1.128 ← IP tham chiếu 0.0.0.127 ← Wildcard – mask |
Cấu hình OSPF
Sau khi đã nắm được khái niệm về wildcard – mask, chúng ta tiếp tục đi vào cách thức cấu hình giao thức định tuyến OSPF trên router Cisco. Để dễ hình dung, cấu hình OSPF trên router Cisco sẽ được phân tích thông qua một ví dụ (hình 12).

Hình 12 – Ví dụ cấu hình OSPF.
Trong ví dụ ở trên, chúng ta có một sơ đồ giả lập một mạng doanh nghiệp có 3 chi nhánh (đại diện bởi 3 router R1, R2 và R3). Mỗi chi nhánh có một mạng LAN (LAN 1, LAN 2, LAN 3) với quy hoạch IP cho các user thuộc các mạng LAN này là 172.16.x.0/24, với x là số hiệu của router tương ứng. Bên cạnh đó, các chi nhánh được kết nối với nhau bởi các đường truyền WAN: một đường Metro Ethernet kết nối đồng thời cả 3 chi nhánh (nối giữa các cổng E0/0 của các router) và một đường leased – line point – to – point kết nối hai chi nhánh R1 và R3 (nối giữa các cổng S1/0 của chúng). Nhiệm vụ của chúng ta là cấu hình OSPF trên các router đảm bảo mọi địa chỉ trên sơ đồ thấy nhau.
Để cấu hình cho một router chạy OSPF, chúng ta thực hiện hai bước:
- Bước 1: Bật tiến trình định tuyến trên router.
- Bước 2: Cho các interface thích hợp trên router tham gia vào tiến trình định tuyến vừa kích hoạt. Các interface thích hợp là:
- Các interface nối đến các router khác mà sẽ chạy định tuyến với router đang xét.
- Các interface nối đến các mạng đầu cuối (mạng LAN, loopback) mà ta muốn quảng bá thông tin cho các router còn lại trong hệ thống.
Ta không cho các interface của router mà đấu nối ra các mạng bên ngoài mạng doanh nghiệp (ví dụ: kết nối đến partner) hoặc kết nối đi Internet tham gia vào hoạt động định tuyến.
Với bước 1, ta sử dụng câu lệnh:
R(config)#router ospf Process-ID R(config-router)# |
Trong đó, Process – ID là số hiệu của tiến trình OSPF trên router, số hiệu này có thể lấy giá trị trong dải từ 1 đến 65535. Số hiệu này chỉ có ý nghĩa nội bộ trên mỗi router nên các router khác nhau có thể sử dụng các tiến trình OSPF mang các giá trị Process – ID khác nhau. Tuy nhiên, để dễ dàng hơn cho hoạt động quản lý, chúng ta chỉ nên sử dụng một giá trị Process – ID thống nhất giữa các router. Trong ví dụ này, giá trị này được sử dụng là 1 trên tất cả các router của ví dụ.
Với OSPF, để thực hiện bước 2, chúng ta có hai cách cấu hình.
- Cách 1: Trong mode “config-router” của tiến trình OSPF, ta sử dụng lệnh “network…” kèm theo một dải IP có chứa địa chỉ IP của cổng để đưa cổng này vào tiến trình OSPF. Dải IP trong câu lệnh “network” được lấy bằng cách sử dụng biểu thức gồm một địa chỉ IP tham chiếu cùng với một wildcard – mask như đã trình bày trong mục về wildcard – mask đã trình bày ở trên. Ta cũng nhớ rằng, với OSPF, các interface sẽ phải tham gia vào một area nào đó nên ta còn phải chỉ ra cổng đó sẽ thuộc về area nào bằng tham số “area” trong câu lệnh.
- Cách 2: Chúng ta không sử dụng lệnh “network…” trong mode “config-router” mà sẽ vào mode “config-if” của từng cổng để đưa chúng tham gia OSPF một cách tường minh bằng lệnh “ip ospf process-id area area-id“.
Khi cấu hình theo cách 2, ta có thể không cần phải kích hoạt trực tiếp tiến trình OSPF bằng lệnh “router ospf process-id” mà tiến trình này sẽ được kích hoạt luôn khi ta gõ lệnh trên các cổng của router để cho các cổng này tham gia OSPF.
Tiếp theo đây là cấu hình OSPF trên các router của ví dụ hình 12 theo các bước đã nêu ra ở trên.
Trên router R1:
R1(config)#router ospf 1 R1(config-router)#network 192.168.1.0 0.0.0.7 area 0 R1(config-router)#network 192.168.1.8 0.0.0.3 area 0 R1(config-router)#network 172.16.1.0 0.0.0.255 area 0 R1(config-router)#network 10.0.0.1 0.0.0.0 area 0 R1(config-router)#exit |
Trên router R2:
R2(config)#router ospf 1 R2(config-router)#network 192.168.1.2 0.0.0.0 area 0 R2(config-router)#network 172.16.2.1 0.0.0.0 area 0 R2(config-router)#network 10.0.0.2 0.0.0.0 area 0 R2(config-router)#exit |
Trên router R3:
R3(config)#interface range e0/0 - 1,lo0 R3(config-if-range)#ip ospf 1 area 0 R3(config-if-range)#exit R3(config)#interface s1/0 R3(config-if)#ip ospf 1 area 0 R3(config-if)#exit |
Ta thấy rằng trong cấu hình ở trên, hai router R1 và R2 sử dụng phương pháp cấu hình OSPF theo cách 1: sử dụng lệnh “network…” để đưa các cổng liên quan tham gia OSPF, còn router R3 sử dụng cách 2 là dùng lệnh bật OSPF trực tiếp trên các cổng.
Ta cùng xem xét chi tiết trên các router.
Với R1, chẳng hạn, để cho cổng E0/0 của nó tham gia vào OSPF, R1 sử dụng lệnh “network…” kèm theo một biểu thức với IP tham chiếu và wildcard – mask, biểu thức này sẽ lấy ra một dải IP chứa IP của cổng E0/0 và như vậy cổng E0/0 sẽ được đưa vào OSPF. Ta có thể lấy bất kỳ dải nào cũng được miễn là nó có chứa địa chỉ IP cổng E0/0, và để đơn giản ta lấy luôn địa chỉ mạng trên cổng: 192.168.1.0/29. Do đó, biểu thức viết ra sẽ là “192.168.1.0 0.0.0.7” và lệnh đầy đủ để bật OSPF trên cổng E0/0 sẽ là:
R1(config-router)#network 192.168.1.0 0.0.0.7 area 0 → Tham gia Area 0, lấy được dải IP 192.168.1.0/29 chứa địa chỉ cổng E0/0 (192.168.1.1) |
Như vậy, với lệnh này, cổng E0/0 của R1 sẽ được tham gia OSPF 1 Area 0.
Ta có thể phân tích tương tự đối với các lệnh của R1 để cho các cổng còn lại tham gia OSPF.
Nếu như router R1 thực hiện dùng lệnh “network” tham chiếu đến dải IP là cả một địa chỉ mạng trên cổng để đưa cổng tham gia vào OSPF thì trên router R2, dải địa chỉ chứa IP của mỗi cổng được thu hẹp lại tối đa, chỉ bao gồm đúng một địa chỉ IP trên cổng ấy. Trên router R2, tất cả các wildcard – mask được sử dụng đều là “0.0.0.0” và lệnh “network” tham chiếu đến chính xác địa chỉ IP trên từng interface để đưa interface ấy tham gia vào OSPF. Ví dụ, với interface E0/0:
R2(config-router)#network 192.168.1.2 0.0.0.0 area 0 → Tham gia Area 0, lấy chính xác địa chỉ 192.168.1.2 trên cổng E0/0 |
Ta thấy, biểu thức thu thập IP bằng IP tham chiếu và wildcard – mask chỉ lấy đúng 1 địa chỉ, là địa chỉ chính xác trên cổng E0/0, và thế là cổng E0/0 được tham gia định tuyến. Dải địa chỉ bao gồm địa chỉ của cổng như vậy được thu hẹp lại chỉ còn đúng một địa chỉ trên cổng mà thôi.
Ta có thể dùng wildcard – mask lấy các dải IP để cho các cổng tham gia OSPF theo cách nào ở trên cũng được, tuy nhiên, nếu dùng theo cách của R2 (lấy chính xác địa chỉ IP trên cổng) thì cấu hình sẽ tường minh hơn và sẽ không bị lấy nhầm sang interface khác (khi mà lỡ lấy ra một dải IP quá rộng, bao trùm luôn cả IP của các cổng khác), khiến cho xuất hiện những interface không mong muốn cũng được đưa vào định tuyến.
Nếu trên các router R1 và R2 sử dụng cách 1 thì trên router R3 lại sử dụng cách 2 là bật OSPF tường minh trên từng cổng. Ta thấy rằng trên router R3 ta không cần phải activate OSPF trước (bằng lệnh “router ospf 1”), cũng không cần phải tính toán wildcard – mask để lấy ra các dải IP chứa IP của các cổng, mà muốn cho cổng nào chạy OSPF, chỉ cần lên cổng đó và bật OSPF lên thôi. Do đó, cấu hình OSPF theo cách 2 này cũng là một phương pháp được ưa chuộng, và trong nhiều tình huống được sử dụng nhiều hơn cách 1.
Sau khi cấu hình xong OSPF trên các router, chúng ta kiểm tra kết quả cấu hình.
Đầu tiên, chúng ta kiểm tra bảng định tuyến của các router:
R1#show ip route ospf
(...)
Gateway of last resort is not set
10.0.0.0/32 is subnetted, 3 subnets
O 10.0.0.2 [110/11] via 192.168.1.2, 00:01:06, Ethernet0/0
O 10.0.0.3 [110/11] via 192.168.1.3, 00:01:16, Ethernet0/0
172.16.0.0/16 is variably subnetted, 4 subnets, 2 masks
O 172.16.2.0/24 [110/20] via 192.168.1.2, 00:01:06, Ethernet0/0
O 172.16.3.0/24 [110/20] via 192.168.1.3, 00:01:16, Ethernet0/0
R2#show ip route ospf
(...)
10.0.0.0/32 is subnetted, 3 subnets
O 10.0.0.1 [110/11] via 192.168.1.1, 00:01:20, Ethernet0/0
O 10.0.0.3 [110/11] via 192.168.1.3, 00:01:20, Ethernet0/0
172.16.0.0/16 is variably subnetted, 4 subnets, 2 masks
O 172.16.1.0/24 [110/20] via 192.168.1.1, 00:01:20, Ethernet0/0
O 172.16.3.0/24 [110/20] via 192.168.1.3, 00:01:20, Ethernet0/0
192.168.1.0/24 is variably subnetted, 3 subnets, 3 masks
O 192.168.1.8/30 [110/74] via 192.168.1.3, 00:01:20, Ethernet0/0
[110/74] via 192.168.1.1, 00:01:20, Ethernet0/0
R3#show ip route ospf
(...)
10.0.0.0/32 is subnetted, 3 subnets
O 10.0.0.1 [110/11] via 192.168.1.1, 00:01:23, Ethernet0/0
O 10.0.0.2 [110/11] via 192.168.1.2, 00:01:23, Ethernet0/0
172.16.0.0/16 is variably subnetted, 4 subnets, 2 masks
O 172.16.1.0/24 [110/20] via 192.168.1.1, 00:01:23, Ethernet0/0
O 172.16.2.0/24 [110/20] via 192.168.1.2, 00:01:23, Ethernet0/0
|
Kết quả show cho thấy các địa chỉ mạng trên sơ đồ đều đã được cập nhật đầy đủ trong bảng định tuyến của các router.
Chúng ta sẽ cùng diễn giải các tham số trong một dòng thông tin của bảng định tuyến (ta thường gọi là một route), ví dụ, xét route 172.16.3.0/24 trong bảng định tuyến của R1:
O 172.16.3.0/24 [110/20] via 192.168.1.3, 00:01:16, Ethernet0/0 |
Trong route này:
- Ký tự “O” đầu dòng cho biết route này được cập nhật bởi giao thức định tuyến OSPF.
- “172.16.3.0/24”: Địa chỉ mạng đích.
- [110/20]: Giá trị bên trái dấu “/” (“110”) chính là AD của giao thức đã tạo nên route này – OSPF; giá trị bên phải dấu “/” (“20”) là metric của route để đi đến mạng 172.16.3.0/24.
- “via 192.168.1.3”: Địa chỉ IP của next – hop router, là router kế tiếp trên đường đi đến đích.
- “00:01:16”: Khoảng thời gian mà route được thêm vào bảng định tuyến.
- “Ethernet0/0”: Outbound interface của route, đây là cổng mà router sẽ chuyển dữ liệu đi ra khỏi router để đi tiếp.
Sau khi bảng định tuyến trên các router đã đầy đủ, chúng ta kiểm chứng rằng các mạng LAN trên các router đã có thể đi đến nhau được:
R1#ping 172.16.2.1 source 172.16.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.2.1, timeout is 2 seconds: Packet sent with a source address of 172.16.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms R1#ping 172.16.3.1 source 172.16.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds: Packet sent with a source address of 172.16.1.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms R2#ping 172.16.3.1 source 172.16.2.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds: Packet sent with a source address of 172.16.2.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms |
Đến đây, cấu hình định tuyến đã được hoàn thành và đáp ứng được yêu cầu đặt ra về tính liên thông giữa các mạng LAN.
Tiếp theo, chúng ta thực hiện kiểm tra thêm một số thông tin khác của hoạt động định tuyến trên các router.
Đầu tiên, chúng ta hiển thị bảng neighbor trên các router để quan sát các thông tin về láng giềng của chúng:
R1#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.0.0.3 0 FULL/ - 00:00:38 192.168.1.10 Serial1/0 10.0.0.2 1 FULL/BDR 00:00:38 192.168.1.2 Ethernet0/0 10.0.0.3 1 FULL/DR 00:00:33 192.168.1.3 Ethernet0/0 R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.0.0.1 1 FULL/DROTHER 00:00:35 192.168.1.1 Ethernet0/0 10.0.0.3 1 FULL/DR 00:00:39 192.168.1.3 Ethernet0/0 R3#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.0.0.1 0 FULL/ - 00:00:39 192.168.1.9 Serial1/0 10.0.0.1 1 FULL/DROTHER 00:00:32 192.168.1.1 Ethernet0/0 10.0.0.2 1 FULL/BDR 00:00:31 192.168.1.2 Ethernet0/0 |
Ta thấy rằng, các router đều đã thiết lập quan hệ láng giềng đầy đủ qua các đường link kết nối giữa chúng. Ta quan sát một vài thông số trong mỗi bảng neighbor:
- Trong bảng neighbor, mỗi router láng giềng được định danh bằng giá trị Router – ID của chúng (cột “Neighbor ID”).
- Ta cũng để ý đến trạng thái của các láng giềng ở cột “State”: trạng thái của láng giềng trên cổng serial của router luôn là “FULL/-“; trạng thái các láng giềng trên cổng Ethernet có thể là “FULL/DR”, “FULL/BDR” hoặc “FULL/DROTHER” tùy vào vai trò của chúng trên đường link multiaccess kết nối 3 router. Điều này đúng với lý thuyết về sự khác biệt trong hoạt động của OSPF trên hai loại đường link point – to – point và multiaccess.
- Cột “Dead Time” cho biết khoảng thời gian tối đa còn lại để nhận được gói tin Hello từ neighbor tương ứng. Giá trị này sẽ bắt đầu đếm ngược từ 40s (chính là giá trị Dead time mặc định được sử dụng trên các interface) cho đến khi nào nhận được gói tin Hello từ neighbor thì sẽ reset lại thành 40s và đếm ngược tiếp… Vì Hello time mặc định là 10s (cứ 10s neighbor lại gửi hello một lần) nên nếu hoạt động này không bị gián đoạn thì giá trị Dead time sẽ được reset về 40s liên tục sau mỗi 10s. Nếu chúng ta quan sát thấy giá trị này tụt xuống dưới 30s thì nhiều khả năng đường link nối đến neighbor hoặc bản thân neighbor đang xảy ra vấn đề và chúng ta cần thực hiện các tác vụ kiểm tra, troubleshoot.
- Cuối cùng là cột “Address”, chính là địa chỉ IP của các neighbor (lưu ý phân biệt với Router – ID của các neighbor trong cột “Neighbor ID”).
Bên cạnh việc kiểm tra thông tin về các neighbor đã thiết lập quan hệ láng giềng (OSPF session), chúng ta còn có thể kiểm tra thông tin OSPF trên các cổng của router bằng lệnh “show ip ospf interface Tên_cổng_muốn_kiểm_tra“. Ví dụ, chúng ta xem xét thông tin về OSPF trên cổng E0/0 của R1:
R1#show ip ospf interface e0/0
Ethernet0/0 is up, line protocol is up
Internet Address 192.168.1.1/29, Area 0, Attached via Network Statement
Process ID 1, Router ID 10.0.0.1, Network Type BROADCAST, Cost: 10
Topology-MTID Cost Disabled Shutdown Topology Name
0 10 no no Base
Transmit Delay is 1 sec, State DROTHER, Priority 1
Designated Router (ID) 10.0.0.3, Interface address 192.168.1.3
Backup Designated router (ID) 10.0.0.2, Interface address 192.168.1.2
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
oob-resync timeout 40
Hello due in 00:00:02
Supports Link-local Signaling (LLS)
Cisco NSF helper support enabled
IETF NSF helper support enabled
Index 3/3, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 0, maximum is 1
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 2, Adjacent neighbor count is 2
Adjacent with neighbor 10.0.0.2 (Backup Designated Router)
Adjacent with neighbor 10.0.0.3 (Designated Router)
Suppress hello for 0 neighbor(s)
|
Ta thấy, kết quả show cung cấp cho chúng ta rất nhiều thông tin, trong đó:
- Cổng E0/0 này đang được gán vào Area 0, thuộc về tiến trình OSPF 1 (Process ID 1).
- Router đang xét có Router – ID là 10.0.0.1 (Router ID 10.0.0.1).
- Giá trị OSPF cost trên cổng là 10 (Cost: 10).
- Trạng thái của R1 trên cổng E0/0 là DROther (State DROTHER), OSPF priority trên cổng đang nhận giá trị mặc định là 1 (Priority 1).
- Ta cũng có thể biết được thông tin về các router láng giềng đang đóng vai trò DR và BDR trên data – link nối đến cổng E0/0:
- Router DR có Router – ID là 10.0.0.3, địa chỉ là 192.168.123.3 (Designated Router (ID) 10.0.0.3, Interface address 192.168.1.3).
- Router BDR có Router – ID là 10.0.0.2, địa chỉ là 192.168.123.2 (Backup Designated router (ID) 10.0.0.2, Interface address 192.168.1.2).
- Giá trị Hello time và Dead time được sử dụng trên cổng E0/0 là 10s và 40s (Hello 10, Dead 40).
Một câu lệnh show khác cũng thường được sử dụng để thu thập thông tin về giao thức định tuyến trên router: show ip protocols. Ví dụ, trên R1:
R1#show ip protocols
(...)
Routing Protocol is "ospf 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 10.0.0.1
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
10.0.0.1 0.0.0.0 area 0
172.16.1.0 0.0.0.255 area 0
192.168.1.0 0.0.0.7 area 0
192.168.1.8 0.0.0.3 area 0
Routing Information Sources:
Gateway Distance Last Update
10.0.0.2 110 00:50:14
10.0.0.3 110 00:50:24
Distance: (default is 110)
|
Ta thấy, kết quả show của lệnh này cũng cung cấp cho chúng ta nhiều thông tin hữu ích về cấu hình và hoạt động của OSPF trên router.
Đến đây, chúng ta đã đi qua các đặc điểm cơ bản của giao thức định tuyến OSPF, cách thức cấu hình và kiểm tra thông tin cơ bản của OSPF. Bài viết đến đây cũng đã kết thúc nội dung về giao thức định tuyến OSPF.