Các giao thức định tuyến nhóm trạng thái kết nối (link-state) định nghĩa nội dung và cấu trúc dữ liệu để mô tả hệ thống mạng và định nghĩa các tiến trình trong đó các router trao đổi các thông tin chi tiết về sơ đồ mạng. Thuật ngữ trạng thái kết nối “link-state” muốn ám chỉ đến yếu tố là thông tin về sơ đồ mạng bao gồm từng kết nối dữ liệu, cùng với trạng thái hoạt động của từng kết nối. Tất cả các dữ liệu sẽ hình thành nên một cơ sở dữ liệu trạng thái kết nối (link-state database - LSDB).
Mỗi router chạy giao thức link-state áp dụng thuật toán Dijkstra vào cơ sở dữ liệu để tính toán đường đi tốt nhất về từng mạng con. Chương này chia nhỏ chủ đề về OSPF thành ba phần chính:
OSPF định nghĩa năm kiểu thông điệp mà router có thể dùng để trao đổi LSA. Tiến trình các LSA được trao đổi không ảnh hưởng bởi việc OSPF dùng đơn vùng hay đa vùng, vì vậy phần này chỉ khảo sát OSPF đơn vùng.
1.Định danh Router chạy OSPF
Trước khi một router chạy OSPF có thể gửi bất kỳ một thông điệp OSPF nào, nó phải chọn một danh xưng duy nhất dài 32 bit dạng thập phân được gọi là OSPF router identifier (RID). Các router của Cisco dùng thứ tự các bước như sau để chọn RID trong OSPF. Router chỉ chuyển sang bước kế tiếp nếu bước trước đó không xác định được RID.
Bước 2 và bước 3 xem xét đến các cổng hiện có để chọn RID khi tiến trình OSPF được bắt đầu. Router xem xét thay đổi OSPF RID khi tiến trình OSPF được khởi động lại hoặc khi ta cấu hình thay đổi RID. Nếu một RID thay đổi, các router còn lại trong cùng một vùng cũng sẽ phải thực hiện lại phép tính SPF mới. Nếu RID được cấu hình tĩnh bằng lệnh router-id, và nếu lệnh đó không thay đổi, RID của router đó cũng sẽ không bao giờ thay đổi.
Vì những lý do này, nhiều người thiết lập RID bằng lệnh router-id và dùng một sơ đồ đánh số rõ ràng để giúp nhận dạng một router bằng RID của nó.
2.Trở thành láng giềng, trao đổi cơ sở dữ liệu và trờ thành liền kề
OSPF đóng gói trực tiếp năm kiểu thông điệp OSPF khác nhau bên trong gói tin IP, dùng giao thức IP 89, theo bảng 10.1:
Các thông điệp này cho phép các router tìm ra sự hiện diện của các router khác (Hello), học các thông điệp LSA nào bị mất trong cơ sở dữ liệu LSDB, truy vấn và trao đổi một cách tin cậy các LSA (LSR/LSU), giám sát các láng giềng khi có bất kỳ sự thay đổi nào trong sơ đồ mạng (Hello). Chú ý rằng chính các LSA không phải là các thông điệp OSPF. Một LSA là một cấu trúc dữ liệu, được lưu giữ bên trong một LSDB của router và được trao đổi bên trong những thông điệp LSU.
Khi một kết nối nào đó được bật lên, router chạy OSPF đầu tiên trở thành láng giềng dùng các thông điệp Hello. Ở thời điểm đó, chúng trao đổi các thông tin về sơ đồ mạng dùng bốn loại thông điệp OSPF khác. Hình 10.1 chỉ ra tiến trình tổng quát giữa hai router.
Hình trên mô tả tiến trình tổng thể của các thông điệp, cùng với các trạng thái trên từng router. Một router chạy OSPF lưu giữ trạng thái của từng láng giềng, liệt kê trạng thái từng láng giềng trong kết quả của lệnh show ip ospf neighbor. Các trạng thái này thay đổi khi các router nhận các thông điệp khác nhau. Trong ví dụ này, các láng giềng cố định ở trạng thái đầy đủ (full-state), nghĩa là nó hình thành quan hệ đầy đủ khi tiến trình hoàn tất.
Trở thành láng giềng, tiến trình Hello
Các thông điệp Hello trong OSPF thực hiện ba chức năng chính:
Để tìm ra những router láng giềng, OSPF lắng nghe những thông điệp Hello được gửi đến 224.0.0.5. Đây là địa chỉ multicast tượng trưng cho tất cả các router chạy OSPF, trên bất cứ cổng nào đã bật OSPF. Các gói Hello sẽ lấy nguồn từ địa chỉ chính trên cổng, nói cách khác, Hello không dùng địa chỉ phụ. (Router chạy OSPF sẽ quảng bá các địa chỉ phụ nhưng nó sẽ không gửi Hello từ những địa chỉ này và không bao giờ hình thành mối quan hệ dùng địa chỉ phụ.
Khi hai router tìm ra nhau thông qua các gói Hello, các router thực hiện các phép kiểm tra các thông số như sau:
Chức năng thứ ba của Hello là để duy trì liên lạc giữa những láng giềng. Các láng giềng gửi Hello ở mỗi chu kỳ gọi là hello interval; nếu router không nhận được Hello trong khoảng thời gian hết hạn (dead interval) sẽ làm cho router tin rằng láng giềng của nó đã lỗi. Khoảng thời gian hello mặc định bằng 10 giây trên những cổng LAN và 30 giây trong những đường T1 hoặc đường thấp hơn T1. Thời gian hết hạn mặc định bằng bốn lần thời gian hết hạn.
Ví dụ dưới đây liệt kê vài lệnh OSPF cơ bản liên quan đến tiến trình thiết lập quan hệ láng giềng thông qua các gói Hello, và thời gian hết hạn.
Các thông điệp debug dưới đây hiển thị rằng router này không đồng ý về khoảng thời gian hello và thời gian hết hạn trên router 10.1.111.4; Ký tự “C” và “R” có nghĩa là đã được cấu hình và “nhận” một cách tương ứng, nghĩa là router này dùng 30/120 cho khoảng thời gian hello/hết hạn và các router khác đang cố gắng dùng 10/40.
Dưới đây là các khoảng thời gian hello và thời gian hết hạn được liệt kê cho một cổng.
Theo kết quả dưới đây, R1 có một láng giềng trên cổng s0/0.100 trong trạng thái đầy đủ, nghĩa là router đã hoàn thành quá trình trao đổi LSDB. Chú ý rằng thông số thời gian hết hạn đang đếm xuống trong trường hợp này là từ 2 phút. Giá trị 1:58 nghĩa là R1 nhận thông điệp Hello lần cuối từ láng giềng 10.1.111.6 cách đây 2 giây.
Phát tán các phần đầu của LSA tới láng giềng
Khi hai router nhận Hello và việc kiểm tra các thông số đã thành công, các router không gửi ngay các gói tin chứa LSA. Thay vào đó, từng router sẽ tạo và gửi các gói tin mô tả cơ sở dữ liệu DD (hoặc thỉnh thoảng còn gọi là DBD) trong đó chứa header của từng LSA.
Header sẽ bao gồm đủ thông tin để nhận ra duy nhất LSA. Ban đầu, các router trao đổi một danh sách của tất cả các LSA mà nó biết. Bước kế tiếp trong tiến trình là để một router yêu cầu một phiên bản mới của bất kỳ một LSA không xác định nào.
Thông điệp DD dùng một tiến trình khôi phục lỗi đơn giản trong OSPF. Mỗi gói tin DD chứa vài LSA được gán một chỉ số tuần tự duy nhất. Bên nhận sẽ xác nhận một gói tin DD nhận được bằng cách gửi một gói tin DD tương tự ngược về nơi gửi. Bên gửi dùng kích thước cửa sổ bằng một gói tin, sau đó chờ công nhận trước khi gửi gói tin DD kế tiếp.
Yêu cầu, Nhận và công nhận LSA
Khi tất cả các LSA đã được trao đổi dùng gói tin DD, từng router có một danh sách của các LSA của router láng giềng. Dùng thông tin này, một router cần yêu cầu một bản sao đầy đủ của từng LSA không có trong LSDB của nó. Để biết một láng giềng có một hoặc nhiều bản sao của một LSA đặc biệt, một router xem xét chỉ số tuần tự của LSA trong LSDB của nó và so sánh với chỉ số đó của cùng LSA được từ gói tin DD.
Mỗi chỉ số tuần tự LSA được tăng mỗi khi LSA thay đổi. Vì vậy nếu một router nhận được một header của LSA trong một gói tin DD có chỉ số tuần tự mới hơn (so sánh với LSA trong LSDB), router đó biết rằng láng giềng đã có LSA mới hơn.
Ví dụ, R1 gửi cho R2 một LSA kiểu LSA 1 trong đó mô tả chính R1, với chỉ số tuần tự là 0x80000004. Nếu cơ sở dữ liệu của R2 đã có LSA đó nhưng có chỉ số tuần tự là 0x80000003, thì R2 sẽ biết rằng nó cần hỏi R1 gửi bản sao mới nhất (chỉ số tuần tự là 0x80000004) của LSA đó.
Chú ý rằng các LSA mới bắt đầu với chỉ số tuần tự 0x80000001, tăng lên dần và sau đó quay ngược về 0x7FFFFFFF. Nếu LSA có chỉ số tuần tự là 0x80000000, LSA đó phải được phát tán lại trên toàn mạng.
Router dùng các gói tin LSR để yêu cầu một hoặc nhiều LSA trả lời bằng gói tin LSU, trong đó chứa một hoặc nhiều LSA. Khi tiến trình là hoàn tất, các router sẽ vào trạng thái quan hệ thiết lập đầy đủ. Trong trạng thái này, hai router đã trao đổi toàn bộ cơ sở dữ liệu, giúp cho hai router có các phiên bản giống nhau của LSDB cho cả hai router đó.
Tiến trình LSR/LSA dùng một giao thức tin cậy có hai tuỳ chọn để công nhận gói tin. Đầu tiên, một LSU có thể xác nhận bằng cách gửi lại cùng một LSU ngược về bên router gửi. Hoặc là, một router có thể gửi ngược lại một LSAck để công nhận gói tin, trong đó chứa một danh sách các LSA.
Ở cuối của tiến trình, hai router có thể trao đổi các cơ sở dữ liệu LSDB. Kết quả là các LSDB sẽ giống nhau. Ở thời điểm này, các router có thể chạy thuật toán Dijkstra tính toán đường đi ngắn nhất (Shortest Path First - SPF) một cách độc lập để tính ra đường đi tốt nhất từ nó.
3. Router được lựa chọn trên LAN
OSPF tối ưu tiến trình phát tán LSA trên những mạng đa truy cập bằng cách dùng khái niệm router được lựa chọn (designated router - DR). Nếu không có khái niệm DR, từng cặp router có cùng mạng phải thiết lập quan hệ đầy đủ. Từng cặp router phải trao đổi trực tiếp các cơ sở dữ liệu LSDB với nhau. Trên một LAN chỉ có sáu router, nếu không có DR, sẽ có 15 cặp quan hệ giữa router và 15 bản khác nhau của cơ sở dữ liệu đầy đủ được phát tán. OSPF dùng DR (và DR dự phòng gọi là BDR) trên một LAN hay những mạng đa truy cập khác. Tiến trình phát tán thông qua DR, giảm thiểu đáng kể những trao đổi LSA không cần thiết.
DR có một trong những chức năng chính bên cạnh cải tiến hiệu suất của LSA. Các DR tạo ra các LSA loại 2 tượng trưng cho mạng con. Các kiểu LSA sẽ được mô tả trong phần kế tiếp.
Phần kế tiếp mô tả tiến trình bầu chọn DR/BDR trên LAN, sau đó mô tả các kiểu mạng OSPF và cách nó ảnh hưởng đến việc phát tán trên môi trường Frame Relay như thế nào.
Tối ưu bầu chọn DR trên LAN
Hình 10.2 mô tả cách tối ưu tiến trình phát tán của DR khi gửi gói tin DD trên LAN.
Những router không phải là DR (bao gồm cả BDR) gửi các gói tin DD đến DR theo địa chỉ 224.0.0.6, đây là địa chỉ multicast của tất cả các router được chọn làm DR. DR sau đó sẽ công nhận các gói DD bằng cách gửi DD theo kiểu unicast. Router DR sẽ phát tán một gói tin DD mới đến tất cả các OSPF router theo địa chỉ 224.0.0.5.
Hình 10.2 mô tả ba bước chính, nhưng các router không phải là DR cũng cần phải xác nhận gói tin DD đã được gửi trong bước 3. Thông thường, quá trình xác nhận diễn ra bởi các router khác. Từng router sẽ gửi trả lời bằng gói tin unicast DD. Trong một mạng không có DR, các gói tin DD và LSU thường được gửi đến địa chỉ 224.0.0.5 là địa chỉ tất cả các router đang chạy OSPF.
Ví dụ dưới đây mô tả kết quả của lệnh show ip ospf neighbor trên R1. Chú ý rằng R1 đang trong trạng thái thiết lập quan hệ đầy đủ với R2, là router DR với OSPF RID 8.8.8.8. R1 cũng trong trạng thái quan hệ với S1, BDR, OSPF RID 7.7.7.7. Tuy nhiên R1 trong trạng thái 2-Way với R2, RID 2.2.2.2.
Khi một DR được dùng trên một kết nối, các router sẽ đóng vai trò là DR, BDR hoặc không là cả hai. Một router không là DR hoặc BDR được gọi là DROther. DR và BDR hình thành quan hệ đầy đủ với tất cả các router láng giềng khác trên kết nối, vì vậy nó đạt trạng thái quan hệ đầy đủ khi tiến trình trao đổi cơ sở dữ liệu là hoàn tất.
Tuy nhiên, hai láng giềng cùng là DROther không có quan hệ đầy đủ với nhau. Các router này dừng lại ở trạng thái 2WAY. Việc dừng lại ở trạng thái 2WAY là bình thường, nó chỉ đơn giản có nghĩa là các thông số Hello đã giống nhau nhưng các router không cần thiết xử lý trao đổi gói tin DD, bởi vì điều này không cần thiết khi đã có một DR tồn tại.
Để mô tả sự việc một vài router láng giềng không trao đổi trực tiếp DD và các gói LSU, OSPF thực hiện một sự khác biệt giữa hai thuật ngữ láng giềng (neighbor) và quan hệ đầy đủ (adjacent):
Bầu chọn DR trên LAN
Nếu một DR được bầu chọn, tiến trình bầu chọn diễn ra sau khi router đã trở thành láng giềng nhưng trước khi nó gửi gói tin DD và đạt được trạng thái ExStart. Khi một OSPF router đạt được trạng thái 2WAY với láng giềng đầu tiên trên một cổng, nó đã nhận ít nhất một gói tin Hello từ láng giềng đó. Nếu thông điệp Hello chứa thông tin là DR có địa chỉ 0.0.0.0, nghĩa là chưa có bầu chọn được DR, router sẽ phải chờ để bầu chọn DR. Điều này thường xảy ra sau một sự cố trên LAN. Các router chạy OSPF phải chờ với mục đích cho phép tất cả các router trên mạng đó một cơ hội để hoàn thành quá trình khởi động sau khi gặp một sự cố hoặc một sự thay đổi trên mạng. Điều này là cần thiết để tất cả các router có thể tham gia và bầu chọn DR, nếu khác đi, router đầu tiên được kích hoạt OSPF sẽ luôn trở thành DR. Khoảng thời gian phải chờ được gọi là thời gian chờ, được gán bằng giá trị như thời gian hết hạn.
Tuy nhiên, nếu router nhận được thông điệp Hello đã xác định RID của DR, nó sẽ không chờ trước khi bắt đầu tiến trình bầu chọn. Điều này thường diễn ra khi một router mất kết nối của nó trên LAN nhưng những router khác vẫn còn và tiếp tục hoạt động. Trong trường hợp này, các router mới kết nối vào mạng sẽ không cố gắng bầu chọn DR mới, mà nó sẽ giả sử các DR được liệt kê trong gói tin Hello là DR hiện hành. Tiến trình bầu chọn tạo ra khả năng có nhiều tình huống những router trở thành DR hay BDR.
Một cách tổng quát, các luật sau được dùng để mô tả tiến trình bầu chọn DR/BDR:
Mỗi router chạy giao thức link-state áp dụng thuật toán Dijkstra vào cơ sở dữ liệu để tính toán đường đi tốt nhất về từng mạng con. Chương này chia nhỏ chủ đề về OSPF thành ba phần chính:
- Phần đầu mô tả chi tiết các dữ liệu được trao đổi như thế nào.
- Phần thứ hai mô tả thiết kế của OSPF và nội dung của LSDB, trong đó bao gồm các kiểu LSA khác nhau. Phần thứ hai này mô tả cả thiết kế và cấu trúc LSDB bởi vì các chọn lựa thiết kế ảnh hưởng trực tiếp đến kiểu LSA được truyền giữa các phần khác nhau của mạng OSPF.
- Phần thứ ba mô tả các chi tiết cấu hình của OSPF cho chương này, mặc dù đã có vài chủ đề cấu hình đã được nêu ra trong hai phần đầu.
OSPF định nghĩa năm kiểu thông điệp mà router có thể dùng để trao đổi LSA. Tiến trình các LSA được trao đổi không ảnh hưởng bởi việc OSPF dùng đơn vùng hay đa vùng, vì vậy phần này chỉ khảo sát OSPF đơn vùng.
1.Định danh Router chạy OSPF
Trước khi một router chạy OSPF có thể gửi bất kỳ một thông điệp OSPF nào, nó phải chọn một danh xưng duy nhất dài 32 bit dạng thập phân được gọi là OSPF router identifier (RID). Các router của Cisco dùng thứ tự các bước như sau để chọn RID trong OSPF. Router chỉ chuyển sang bước kế tiếp nếu bước trước đó không xác định được RID.
- Bước 1: Sử dụng RID được cấu hình bằng câu lệnh router-id trong chế độ router ospf.
- Bước 2: Sử dụng địa chỉ IP cao nhất trong bất kỳ cổng loopback nào đang trong tình trạng hoạt động tốt cả vật lý và giao thức (up/up).
- Bước 3: Sử dụng địa chỉ IP cao nhất trên bất kỳ cổng nào không phải là loopback và trong tình trạng hoạt động tốt cả vật lý và giao thức (up/up).
- Cổng mà từ đó RID được chọn ra không nhất thiết phải so trùng với một câu lệnh network. Nói cách khác, cổng đó không bắt buộc phải chạy OSPF.
- OSPF không phải quảng bá một tuyến đi đến địa chỉ mạng của RID.
- RID không cần thiết phải đến được trong từng bảng định tuyến.
Bước 2 và bước 3 xem xét đến các cổng hiện có để chọn RID khi tiến trình OSPF được bắt đầu. Router xem xét thay đổi OSPF RID khi tiến trình OSPF được khởi động lại hoặc khi ta cấu hình thay đổi RID. Nếu một RID thay đổi, các router còn lại trong cùng một vùng cũng sẽ phải thực hiện lại phép tính SPF mới. Nếu RID được cấu hình tĩnh bằng lệnh router-id, và nếu lệnh đó không thay đổi, RID của router đó cũng sẽ không bao giờ thay đổi.
Vì những lý do này, nhiều người thiết lập RID bằng lệnh router-id và dùng một sơ đồ đánh số rõ ràng để giúp nhận dạng một router bằng RID của nó.
2.Trở thành láng giềng, trao đổi cơ sở dữ liệu và trờ thành liền kề
OSPF đóng gói trực tiếp năm kiểu thông điệp OSPF khác nhau bên trong gói tin IP, dùng giao thức IP 89, theo bảng 10.1:
Thông điệp | Mô tả |
Hello | Được dùng để tìm ra các router láng giềng, chuyển một quan hệ láng giềng sang trạng thái 2 bước (2-way), sau đó hello giúp giám sát trả lời của láng giềng trong trường hợp láng giềng bị lỗi. |
Mô tả cơ sở dữ liệu (DD hoặc DBD) |
Được dùng để trao đổi các bản sơ lược của từng LSA tiêu biểu trong giai đoạn ban đầu để router có thể biết một danh sách của các LSA của láng giềng. |
Yêu cầu trạng thái kết nối (LSR) |
Một gói tin chỉ ra một hoặc nhiều LSA được gửi ra bởi một router yêu cầu các router láng giềng của nó cung cấp các chi tiết đầy đủ về LSA. |
Cập nhật trạng thái kết nối (LSU) |
Một gói tin chứa các chi tiết đầy đủ, thường được gửi để trả lời cho một thông điệp LSR. |
Công nhận trạng thái đường truyền (LSAck) |
Được gửi để xác nhận việc nhận một LSU. |
Bảng 10.1: Các thông điệp của OSPF
Các thông điệp này cho phép các router tìm ra sự hiện diện của các router khác (Hello), học các thông điệp LSA nào bị mất trong cơ sở dữ liệu LSDB, truy vấn và trao đổi một cách tin cậy các LSA (LSR/LSU), giám sát các láng giềng khi có bất kỳ sự thay đổi nào trong sơ đồ mạng (Hello). Chú ý rằng chính các LSA không phải là các thông điệp OSPF. Một LSA là một cấu trúc dữ liệu, được lưu giữ bên trong một LSDB của router và được trao đổi bên trong những thông điệp LSU.
Khi một kết nối nào đó được bật lên, router chạy OSPF đầu tiên trở thành láng giềng dùng các thông điệp Hello. Ở thời điểm đó, chúng trao đổi các thông tin về sơ đồ mạng dùng bốn loại thông điệp OSPF khác. Hình 10.1 chỉ ra tiến trình tổng quát giữa hai router.
Hình 10.1: Tiến trình trao đổi các thông điệp
Hình trên mô tả tiến trình tổng thể của các thông điệp, cùng với các trạng thái trên từng router. Một router chạy OSPF lưu giữ trạng thái của từng láng giềng, liệt kê trạng thái từng láng giềng trong kết quả của lệnh show ip ospf neighbor. Các trạng thái này thay đổi khi các router nhận các thông điệp khác nhau. Trong ví dụ này, các láng giềng cố định ở trạng thái đầy đủ (full-state), nghĩa là nó hình thành quan hệ đầy đủ khi tiến trình hoàn tất.
Trở thành láng giềng, tiến trình Hello
Các thông điệp Hello trong OSPF thực hiện ba chức năng chính:
- Tìm ra những router chạy OSPF khác trên cùng một mạng chung.
- Kiểm tra sự tương thích trong các thông số cấu hình.
- Giám sát tình trạng của láng giềng để phản ứng nếu láng giềng bị lỗi.
Để tìm ra những router láng giềng, OSPF lắng nghe những thông điệp Hello được gửi đến 224.0.0.5. Đây là địa chỉ multicast tượng trưng cho tất cả các router chạy OSPF, trên bất cứ cổng nào đã bật OSPF. Các gói Hello sẽ lấy nguồn từ địa chỉ chính trên cổng, nói cách khác, Hello không dùng địa chỉ phụ. (Router chạy OSPF sẽ quảng bá các địa chỉ phụ nhưng nó sẽ không gửi Hello từ những địa chỉ này và không bao giờ hình thành mối quan hệ dùng địa chỉ phụ.
Khi hai router tìm ra nhau thông qua các gói Hello, các router thực hiện các phép kiểm tra các thông số như sau:
- Các router phải vượt qua tiến trình xác thực.
- Các router phải trong cùng địa chỉ mạng chính, phải có cùng mặt nạ mạng con.
- Phải trong cùng vùng OSPF.
- Phải có cùng kiểu vùng OSPF.
- Không có trùng RID.
- Thời gian gửi gói tin Hello và thời gian hết hạn phải bằng nhau.
Chức năng thứ ba của Hello là để duy trì liên lạc giữa những láng giềng. Các láng giềng gửi Hello ở mỗi chu kỳ gọi là hello interval; nếu router không nhận được Hello trong khoảng thời gian hết hạn (dead interval) sẽ làm cho router tin rằng láng giềng của nó đã lỗi. Khoảng thời gian hello mặc định bằng 10 giây trên những cổng LAN và 30 giây trong những đường T1 hoặc đường thấp hơn T1. Thời gian hết hạn mặc định bằng bốn lần thời gian hết hạn.
Ví dụ dưới đây liệt kê vài lệnh OSPF cơ bản liên quan đến tiến trình thiết lập quan hệ láng giềng thông qua các gói Hello, và thời gian hết hạn.
Các thông điệp debug dưới đây hiển thị rằng router này không đồng ý về khoảng thời gian hello và thời gian hết hạn trên router 10.1.111.4; Ký tự “C” và “R” có nghĩa là đã được cấu hình và “nhận” một cách tương ứng, nghĩa là router này dùng 30/120 cho khoảng thời gian hello/hết hạn và các router khác đang cố gắng dùng 10/40.
Code:
[INDENT][SIZE=14px][FONT=Tahoma]R1# debug ip ospf hello OSPF hello events debugging is on Jan 12 06:41:20.940: OSPF: Mismatched hello parameters from 10.1.111.4 Jan 12 06:41:20.940: OSPF: Dead R 40 C 120, Hello R 10 C 30 Mask R 255.255.255.0 C 255.255.255.0[/FONT][/SIZE][/INDENT]
Code:
[INDENT][SIZE=14px][FONT=Tahoma]R1# show ip ospf int s 0/0.100 Serial0/0.100 is up, line protocol is up Internet Address 10.1.111.1/24, Area 0 Process ID 1, Router ID 1.1.1.1, Network Type NON_BROADCAST, Cost: 64 Transmit Delay is 1 sec, State DR, Priority 1 Designated Router (ID) 1.1.1.1, Interface address 10.1.111.1 No backup designated router on this network Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5 ! Lines omitted for brevity[/FONT][/SIZE][/INDENT]
Code:
[INDENT][SIZE=14px][FONT=Tahoma]R1# sh ip ospf neighbor 6.6.6.6 Neighbor 6.6.6.6, interface address 10.1.111.6 In the area 0 via interface Serial0/0.100 Neighbor priority is 0, State is FULL, 8 state changes DR is 10.1.111.1 BDR is 0.0.0.0 Poll interval 120 Options is 0x42 Dead timer due in 00:01:58 Neighbor is up for 00:17:22 ! Lines omitted for brevity[/FONT][/SIZE][/INDENT]
Khi hai router nhận Hello và việc kiểm tra các thông số đã thành công, các router không gửi ngay các gói tin chứa LSA. Thay vào đó, từng router sẽ tạo và gửi các gói tin mô tả cơ sở dữ liệu DD (hoặc thỉnh thoảng còn gọi là DBD) trong đó chứa header của từng LSA.
Header sẽ bao gồm đủ thông tin để nhận ra duy nhất LSA. Ban đầu, các router trao đổi một danh sách của tất cả các LSA mà nó biết. Bước kế tiếp trong tiến trình là để một router yêu cầu một phiên bản mới của bất kỳ một LSA không xác định nào.
Thông điệp DD dùng một tiến trình khôi phục lỗi đơn giản trong OSPF. Mỗi gói tin DD chứa vài LSA được gán một chỉ số tuần tự duy nhất. Bên nhận sẽ xác nhận một gói tin DD nhận được bằng cách gửi một gói tin DD tương tự ngược về nơi gửi. Bên gửi dùng kích thước cửa sổ bằng một gói tin, sau đó chờ công nhận trước khi gửi gói tin DD kế tiếp.
Yêu cầu, Nhận và công nhận LSA
Khi tất cả các LSA đã được trao đổi dùng gói tin DD, từng router có một danh sách của các LSA của router láng giềng. Dùng thông tin này, một router cần yêu cầu một bản sao đầy đủ của từng LSA không có trong LSDB của nó. Để biết một láng giềng có một hoặc nhiều bản sao của một LSA đặc biệt, một router xem xét chỉ số tuần tự của LSA trong LSDB của nó và so sánh với chỉ số đó của cùng LSA được từ gói tin DD.
Mỗi chỉ số tuần tự LSA được tăng mỗi khi LSA thay đổi. Vì vậy nếu một router nhận được một header của LSA trong một gói tin DD có chỉ số tuần tự mới hơn (so sánh với LSA trong LSDB), router đó biết rằng láng giềng đã có LSA mới hơn.
Ví dụ, R1 gửi cho R2 một LSA kiểu LSA 1 trong đó mô tả chính R1, với chỉ số tuần tự là 0x80000004. Nếu cơ sở dữ liệu của R2 đã có LSA đó nhưng có chỉ số tuần tự là 0x80000003, thì R2 sẽ biết rằng nó cần hỏi R1 gửi bản sao mới nhất (chỉ số tuần tự là 0x80000004) của LSA đó.
Chú ý rằng các LSA mới bắt đầu với chỉ số tuần tự 0x80000001, tăng lên dần và sau đó quay ngược về 0x7FFFFFFF. Nếu LSA có chỉ số tuần tự là 0x80000000, LSA đó phải được phát tán lại trên toàn mạng.
Router dùng các gói tin LSR để yêu cầu một hoặc nhiều LSA trả lời bằng gói tin LSU, trong đó chứa một hoặc nhiều LSA. Khi tiến trình là hoàn tất, các router sẽ vào trạng thái quan hệ thiết lập đầy đủ. Trong trạng thái này, hai router đã trao đổi toàn bộ cơ sở dữ liệu, giúp cho hai router có các phiên bản giống nhau của LSDB cho cả hai router đó.
Tiến trình LSR/LSA dùng một giao thức tin cậy có hai tuỳ chọn để công nhận gói tin. Đầu tiên, một LSU có thể xác nhận bằng cách gửi lại cùng một LSU ngược về bên router gửi. Hoặc là, một router có thể gửi ngược lại một LSAck để công nhận gói tin, trong đó chứa một danh sách các LSA.
Ở cuối của tiến trình, hai router có thể trao đổi các cơ sở dữ liệu LSDB. Kết quả là các LSDB sẽ giống nhau. Ở thời điểm này, các router có thể chạy thuật toán Dijkstra tính toán đường đi ngắn nhất (Shortest Path First - SPF) một cách độc lập để tính ra đường đi tốt nhất từ nó.
3. Router được lựa chọn trên LAN
OSPF tối ưu tiến trình phát tán LSA trên những mạng đa truy cập bằng cách dùng khái niệm router được lựa chọn (designated router - DR). Nếu không có khái niệm DR, từng cặp router có cùng mạng phải thiết lập quan hệ đầy đủ. Từng cặp router phải trao đổi trực tiếp các cơ sở dữ liệu LSDB với nhau. Trên một LAN chỉ có sáu router, nếu không có DR, sẽ có 15 cặp quan hệ giữa router và 15 bản khác nhau của cơ sở dữ liệu đầy đủ được phát tán. OSPF dùng DR (và DR dự phòng gọi là BDR) trên một LAN hay những mạng đa truy cập khác. Tiến trình phát tán thông qua DR, giảm thiểu đáng kể những trao đổi LSA không cần thiết.
DR có một trong những chức năng chính bên cạnh cải tiến hiệu suất của LSA. Các DR tạo ra các LSA loại 2 tượng trưng cho mạng con. Các kiểu LSA sẽ được mô tả trong phần kế tiếp.
Phần kế tiếp mô tả tiến trình bầu chọn DR/BDR trên LAN, sau đó mô tả các kiểu mạng OSPF và cách nó ảnh hưởng đến việc phát tán trên môi trường Frame Relay như thế nào.
Tối ưu bầu chọn DR trên LAN
Hình 10.2 mô tả cách tối ưu tiến trình phát tán của DR khi gửi gói tin DD trên LAN.
Hình 10.2: Quá trình bầu chọn DR trên mạng LAN
Những router không phải là DR (bao gồm cả BDR) gửi các gói tin DD đến DR theo địa chỉ 224.0.0.6, đây là địa chỉ multicast của tất cả các router được chọn làm DR. DR sau đó sẽ công nhận các gói DD bằng cách gửi DD theo kiểu unicast. Router DR sẽ phát tán một gói tin DD mới đến tất cả các OSPF router theo địa chỉ 224.0.0.5.
Hình 10.2 mô tả ba bước chính, nhưng các router không phải là DR cũng cần phải xác nhận gói tin DD đã được gửi trong bước 3. Thông thường, quá trình xác nhận diễn ra bởi các router khác. Từng router sẽ gửi trả lời bằng gói tin unicast DD. Trong một mạng không có DR, các gói tin DD và LSU thường được gửi đến địa chỉ 224.0.0.5 là địa chỉ tất cả các router đang chạy OSPF.
Ví dụ dưới đây mô tả kết quả của lệnh show ip ospf neighbor trên R1. Chú ý rằng R1 đang trong trạng thái thiết lập quan hệ đầy đủ với R2, là router DR với OSPF RID 8.8.8.8. R1 cũng trong trạng thái quan hệ với S1, BDR, OSPF RID 7.7.7.7. Tuy nhiên R1 trong trạng thái 2-Way với R2, RID 2.2.2.2.
Code:
[INDENT][SIZE=14px][FONT=Tahoma]R1# sh ip ospf neighbor fa 0/0 Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 1 2WAY/DROTHER 00:00:35 10.1.1.2 FastEthernet0/0 7.7.7.7 1 FULL/BDR 00:00:38 10.1.1.3 FastEthernet0/0 8.8.8.8 1 FULL/DR 00:00:34 10.1.1.4 FastEthernet0/0[/FONT][/SIZE][/INDENT]
Tuy nhiên, hai láng giềng cùng là DROther không có quan hệ đầy đủ với nhau. Các router này dừng lại ở trạng thái 2WAY. Việc dừng lại ở trạng thái 2WAY là bình thường, nó chỉ đơn giản có nghĩa là các thông số Hello đã giống nhau nhưng các router không cần thiết xử lý trao đổi gói tin DD, bởi vì điều này không cần thiết khi đã có một DR tồn tại.
Để mô tả sự việc một vài router láng giềng không trao đổi trực tiếp DD và các gói LSU, OSPF thực hiện một sự khác biệt giữa hai thuật ngữ láng giềng (neighbor) và quan hệ đầy đủ (adjacent):
- Láng giềng: hai router có chung kết nối lớp 2, trao đổi Hello và các gói tin Hello phải giống nhau.
- Quan hệ đầy đủ: hai router đã hoàn tất tiến trình trao đổi DD và LSU trực tiếp với nhau.
Bầu chọn DR trên LAN
Nếu một DR được bầu chọn, tiến trình bầu chọn diễn ra sau khi router đã trở thành láng giềng nhưng trước khi nó gửi gói tin DD và đạt được trạng thái ExStart. Khi một OSPF router đạt được trạng thái 2WAY với láng giềng đầu tiên trên một cổng, nó đã nhận ít nhất một gói tin Hello từ láng giềng đó. Nếu thông điệp Hello chứa thông tin là DR có địa chỉ 0.0.0.0, nghĩa là chưa có bầu chọn được DR, router sẽ phải chờ để bầu chọn DR. Điều này thường xảy ra sau một sự cố trên LAN. Các router chạy OSPF phải chờ với mục đích cho phép tất cả các router trên mạng đó một cơ hội để hoàn thành quá trình khởi động sau khi gặp một sự cố hoặc một sự thay đổi trên mạng. Điều này là cần thiết để tất cả các router có thể tham gia và bầu chọn DR, nếu khác đi, router đầu tiên được kích hoạt OSPF sẽ luôn trở thành DR. Khoảng thời gian phải chờ được gọi là thời gian chờ, được gán bằng giá trị như thời gian hết hạn.
Tuy nhiên, nếu router nhận được thông điệp Hello đã xác định RID của DR, nó sẽ không chờ trước khi bắt đầu tiến trình bầu chọn. Điều này thường diễn ra khi một router mất kết nối của nó trên LAN nhưng những router khác vẫn còn và tiếp tục hoạt động. Trong trường hợp này, các router mới kết nối vào mạng sẽ không cố gắng bầu chọn DR mới, mà nó sẽ giả sử các DR được liệt kê trong gói tin Hello là DR hiện hành. Tiến trình bầu chọn tạo ra khả năng có nhiều tình huống những router trở thành DR hay BDR.
Một cách tổng quát, các luật sau được dùng để mô tả tiến trình bầu chọn DR/BDR:
- Bất kỳ router nào có độ ưu tiên OSPF của nó được gán từ 1-255 có thể thử trở thành DR bằng cách đặt giá trị RID của chính nó vào trường DR của gói tin Hello.
- Router kiểm tra gói tin Hello nhận được, so sánh với độ ưu tiên của các router khác, RID và kiểm tra xem các láng giềng khác có khai báo để trở thành DR hay không.
- Nếu một gói Hello nhận được trên một router khai báo một DR tốt hơn, router sẽ ngừng việc khai báo chính nó là DR và công nhận ứng cử viên tốt hơn đó nên là DR.
- Tiêu chuẩn đầu tiên để một router được xem là “tốt hơn” là router có độ ưu tiên cao nhất.
- Nếu độ ưu tiên bằng nhau, router có RID cao hơn thì tốt hơn.
- Router không khai báo là DR, nhưng với một độ ưu tiên cao hơn những router còn lại (hoặc RID cao hơn) sẽ trở thành BDR.
- Nếu một router xuất hiện sau quá trình bầu chọn, hoặc nếu router hiện hành sửa đổi độ ưu tiên của nó, router sẽ không chiếm quyền các DR hiện hành và không đóng vai trò là DR (hoặc BDR).
- Khi DR được bầu chọn, và DR bị lỗi, router BDR sẽ trở thành DR và một cuộc bầu chọn mới được tổ chức để tìm ra BDR. Khi DR đã được bầu chọn, quá trình phát tán LSA tiếp tục như đã mô tả trước đây.
Link phần 2: Giao thức định tuyến OSPF (phần 2)