CHƯƠNG 3 GIAO THỨC OSPF
3.5 Thiết lập mối quan hệ thân mật (Adjacency)
Các Neighbor trong các mạng Point to Point, Point to Multipoint, và liên kết ảo luôn thiết lập Adjacency với nhau trừ phi các tham số trong các gói Hello của chúng không phù hợp.
Trong các mạng quảng bá và NBMA, DR và BDR sẽ thiết lập Adjacency với tất cả các Neighbor còn các DRother sẽ không thiết lập Adjacency với các DRother khác.
Quá trình xây dựng Adjacency sử dụng ba loại gói OSPF sau: 1. Gói mô tả cơ sở dữ liệu DD (loại 2).
2. Gói yêu cầu trạng thái liên kết (loại 3). 3. Gói cập nhật trạng thái liên kết (loại 4).
Gói DD đặc biệt quan trọng trong quá trình xây dựng Adjacency. Các gói DD sẽ chứa Header của các LSA trong cơ sở dữ liệu trạng thái liên kết của Router gốc. Router nhận sẽ nhận các gói DD và kiểm tra các Header này để quyết định xem liệu nó đã có bản copy mới nhất của LSA trong cơ sở dữ liệu của nó. Ngoài ra gói DD còn chứa ba cờ được sử dụng để quản lí quá trình xây dựng Adjacency. Ba cờ đó là:
1. Bit I (Initial bit): I = 1 chỉ ra rằng gói DD đầu tiên gửi.
2. Bit M (More bit): M = 1 chỉ ra rằng đây không phải gói DD cuối cùng được gửi. 3. Bit MS (Master/Slave bit): MS = 1 chỉ ra rằng gói DD được gửi từ Router là
Master.
Khi cuộc đàm phán Master/Slave bắt đầu ở trạng thái Exstart, cả hai Neighbor sẽ cùng yêu cầu trở thành Master bằng cách gửi một gói DD rỗng với bit MS = 1. Neighbor có Router ID thấp hơn sẽ là Slave và truyền trở lại gói DD có MS = 0 và số trình tự DD được lập theo số trình tự của Master. Gói DD này sẽ là gói DD đầu tiên chứa các bản tóm tắt LSA. Khi cuộc đàm phán Master/Slave hoàn thành, trạng thái Neighbor sẽ chuyển sang Exchange.
Đồ án tốt nghiệp Chương 3. Giao thức OSPF
Ở trạng thái Exchange, các Neighbor sẽ tiến hành đồng bộ cơ sở dữ liệu của chúng. Danh sách tóm tắt cơ sở dữ liệu được ghi cùng với các Header của tất cả các LSA trong cơ sở dữ liệu của Router. Các gói DD chứa danh sách các Header của các LSA được gửi tới Neighbor.
Nếu một Router thấy rằng Neighbor của nó có một LSA không có trong cơ sở dữ liệu của nó, hoặc rằng Neighbor có bản copy của một LSA (đã biết) mới hơn, nó đặt LSA này vào danh sách yêu cầu trạng thái liên kết. Sau đó nó gửi gói yêu cầu trạng thái liên kết để yêu cầu bản copy của LSA này. Các gói cập nhật trạng thái liên kết vận chuyển các LSA được yêu cầu. Khi nhận được các LSA yêu cầu, Router sẽ xoá Header của các LSA nhận được khỏi danh sách yêu cầu trạng thái liên kết.
Tất cả các LSA gửi đi trong gói cập nhật trạng thái liên kết phải được xác nhận. Do vậy, các LSA đã được truyền được ghi vào danh sách truyền lại trạng thái liên kết. Khi một LSA được xác nhận, nó sẽ được xoá khỏi danh sách này. LSA có thể được xác nhận theo hai cách:
• Xác nhận rõ ràng: Khi nhận được gói xác nhận trạng thái liên kết chứa LSA
Header.
• Xác nhận ngầm: Khi nhận được gói cập nhật trạng thái liên kết chứa phiên bản
LSA giống với phiên bản đã gửi. (Cả hai LSA đều mới hơn các LSA khác).
Master điều khiển quá trình đồng bộ và đảm bảo chỉ có gói DD được truyền đi vào thời điểm đó. Khi Slave nhận một gói DD từ Master, Slave xác nhận việc này bằng cách gửi một gói DD có cùng số trình tự tới Master. Nếu Master không nhận được xác nhận của gói này trong khoảng thời gian RxmtInterval, nó sẽ gửi tiếp bản copy của gói đó đến Slave.
Slave gửi các gói DD chỉ để đáp lại các gói DD mà nó nhận từ Master. Nếu gói DD nhận được có số trình tự mới, Slave gửi gói DD có cùng số trình tự với gói này. Nếu số trình tự của gói nhận được giống với gói xác nhận trước đó, gói xác nhận được truyền lại.
• Nếu vẫn còn các mục trong danh sách yêu cầu trạng thái liên kết, Router sẽ chuyển trạng thái của Neighbor sang trạng thái Loading.
• Nếu danh sách yêu cầu trạng thái là rỗng, Router sẽ chuyển trạng thái của
Neighbor sang trạng thái Full.
Master biết rằng quá trình đồng bộ đã hoàn tất khi nó gửi tất cả các gói DD cần thiết để diễn tả đầy đủ cơ sở dữ liệu trạng thái liên kết của nó tới Slave và nhận được gói DD với bit M = 0. Slave biết rằng quá trình đồng bộ đã hoàn tất khi nó nhận được gói DD có bit M = 0 và gửi một gói DD xác nhận có bit M = 0. Hình dưới đây chỉ ra ví dụ về một quá trình đồng bộ cơ sở dữ liệu cùng với sự chuyển đổi trạng thái Neighbor.
RT1 RT2
Hello (DR = 0.0.0.0, Neighbors Seen = 0) Hello (DR = RT2, Neighbors Seen = RT1)
DD (Seq = x, I = 1, M = 0, MS = 1) DD (Seq = y + n, I = 0, M = 0, MS = 0) DD (Seq = y + n, I = 0, M = 0, MS = 1) DD (Seq = y + 1, I = 0, M = 1, MS = 0) DD (Seq = y + 1, I = 0, M = 1, MS = 1) DD (Seq = y, I = 0, M = 1, MS = 0) DD (Seq = y, I = 1, M = 1, MS = 1) LS Request LS Request LS Update LS Update Down Down Init Exstart Exstart Exchange Exchange Loading Full Full
Đồ án tốt nghiệp Chương 3. Giao thức OSPF
Quá trình đồng bộ cơ sở dữ liệu ở hình trên gồm các bước sau:
1. RT1 được kích hoạt trong mạng đa truy nhập và gửi một gói Hello. Do nó chưa biết được về một Neighbor nào, nên trường Neighbor của gói là rỗng, trường DR và BDR được lập bằng 0.0.0.0.
2. RT2 nhận được gói Hello từ RT1, nó tạo một cấu trúc dữ liệu Neighbor cho RT1 và chuyển trạng thái của RT1 thành Init. RT2 gửi một gói Hello chứa Router ID của RT1 trong trường Neighbor và địa chỉ giao diện của nó trong trường DR.
3. Khi nhận được gói Hello từ RT2, RT1 sẽ biết được Router ID của mình. RT1 tạo một cấu trúc dữ liệu Neighbor cho RT2 và chuyển trạng thái của RT2 sang trạng thái Exstart để chuẩn bị cho việc đàm phán Master/Slave. Sau đó nó tạo một gói DD rỗng (không chứa các Header của các LSA) có số trình tự là x, bit I = 1 (chỉ ra rằng đây là gói DD đầu tiên của RT1), bit M = 1 ( chỉ ra rằng đây không phải là gói DD cuối cùng), bit MS = 1 (chỉ ra rằng RT1 muốn là Master).
4. RT2 chuyển trạng thái của RT1 sang trạng thái Exstart trong lúc nhận gói DD. Sau đó nó gửi một gói DD phản hồi có số trình tự là y. RT2 có Router ID cao hơn RT1 nên nó đặt bit MS = 1. Do gói DD này dùng cho quá trình đàm phán Master/Slave nên nó cũng rỗng như gói đầu tiên.
5. RT1 chấp nhận RT2 là Master và chuyển trạng thái của RT2 sang Exchange. RT1 tạo một gói DD có số trình tự bằng y, bit MS = 0 (chỉ ra rằng nó là Slave). Gói này sẽ chứa các LSA Header từ danh sách tóm tắt trạng thái liên kết của RT1.
6. RT2 chuyển trạng thái của RT1 sang trạng thái Exchange trong khi nhận gói DD của RT1. Nó gửi một gói DD chứa các LSA Header từ danh sách tóm tắt trạng thái liên kết của nó và tăng số trình tự DD lên y + 1 .
7. RT1 gửi một gói xác nhận với số trình tự là y + 1 tới RT2. Quá trình cứ tiếp tục như vậy. Khi RT2 gửi gói DD với các LSA Header cuối cùng trong danh sách tóm tắt trạng thái liên kết của nó, nó đặt bit M = 0.
8. RT1nhận được gói cuối cùng này và biết rằng quá trình Exchange đã hoàn tất. Khi này nó đã có các khoản mục cần thiết trong danh sách yêu cầu trạng thái liên kết của nó. Nó chuyển RT2 sang trạng thái Loading và gửi gói xác nhận chứa các LSA Header cuối cùng của nó.
9. Khi nhận được gói DD cuối cùng này của RT1, RT2 chuyển trạng thái của RT1 sang Full vì nó không còn khoản mục nào trong danh sách yêu cầu trạng thái liên
10. RT1 gửi các gói yêu cầu trạng thái liên kết và RT2 gửi các gói cập nhật trạng thái liên kết có chứa các LSA yêu cầu cho đến khi danh sách yêu cầu trạng thái liên kết của RT1 rỗng. Sau đó RT1 sẽ chuyển trạng thái của RT2 sang Full.
3.6 Tràn lụt
Toàn bộ cấu hình mạng OSPF có thể được mô tả như là một nhóm các Router liên kết với nhau bởi các Adjacency logic. Để định tuyến qua cấu hình logic này, mỗi node phải có một “bản đồ nhận dạng” cấu hình. Bản đồ này gọi là cơ sở dữ liệu cấu hình.
A B C D E F G A B D E C F G
Cơ sở dữ liệu cấu hình thường được gọi là cơ sở dữ liệu trạng thái liên kết. Nó bao gồm tất cả các LSA mà Router nhận được. Sự thay đổi trong cấu hình mạng sẽ được diễn tả như là sự thay đổi trong một hay nhiều LSA. Tràn lụt là quá trình các gói LSA (mới và cả
Hình 3.7 Các Router liên kết với nhau bởi các liên kết số liệu được mô tả như là một nhóm các node liên kết với nhau bởi các Adjacency
Đồ án tốt nghiệp Chương 3. Giao thức OSPF
LSA đã thay đổi) được gửi qua mạng để đảm bảo cơ sở dữ liệu của mỗi node được cập nhật và duy trì sự đồng nhất với các node khác.
Quá trình tràn lụt sử dụng hai loại gói OSPF sau:
• Gói cập nhật trạng thái liên kết (loại 4).
• Gói xác nhận trạng thái liên kết (loại 5).
Mỗi gói cập nhật và xác nhận trạng thái liên kết có thể mang nhiều LSA. Các LSA được tràn lụt qua liên mạng, nhưng các gói cập nhật và xác nhận chỉ được truyền giữa hai node thông qua Adjacency.
Update LSA 1 LSA 2 LSA 3 LSA 4
Trong mạng Point to Point: Các gói cập nhật được gửi tới địa chỉ multicast AllSPFRouters (224.0.0.5).
Trong mạng Point to Multipoint và liên kết ảo: Các gói cập nhật được truyền Unicast tới địa chỉ giao diện của các Neighbor kế cận.
Trong mạng quảng bá: Các DRother chỉ tạo Adjacency với DR và BDR. Do đó các gói cập nhật được gửi tới địa chỉ AllDRoter (224.0.0.6). Sau đó DR sẽ phát Multicast các gói cập nhật tới tất cả các Router kế cận trong mạng sử dụng địa chỉ AllSPFRouter và các Router nay đến lượt mình sẽ gửi LSA ra tất cả các giao diện khác chạy OSPF của nó.
Drother (224.0.0.5) Drother (224.0.0.5) Drother (224.0.0.5) BDR (224.0.0.6) DR (224.0.0.6) (a) Drother (224.0.0.5) Drother (224.0.0.5) Drother (224.0.0.5) BDR (224.0.0.6) DR (224.0.0.6) (b) Update Update Update Update Update Drother (224.0.0.5) Drother (224.0.0.5) Drother (224.0.0.5) BDR (224.0.0.6) DR (224.0.0.6) (c) Update Update Update Update Update 3.6.1 Tràn lụt tin cậy sử dụng xác nhận
Mỗi LSA được truyền đi phải được xác nhận. Có hai kiểu xác nhận là: Xác nhận tuyệt đối
và xác nhận rõ ràng.
Đồ án tốt nghiệp Chương 3. Giao thức OSPF
Xác nhận tuyệt đối: Xác nhận tuyệt đối việc đã nhận một LSA bằng cách gửi một gói cập nhật chứa một LSA giống hệt trở lại node nguồn. Xác nhận tuyệt đối sử dụng hiệu quả trong trường hợp Neighbor đang có ý định gửi cập nhật về node gốc.
Xác nhận rõ ràng: Bằng cách gửi gói xác nhận trạng thái liên kết có chứa các LSA Header đủ để nhận dạng các LSA.
Khi LSA được gửi, một phiên bản của LSA được lưu trong danh sách truyền lại trạng thái liên kết. LSA được truyền lại theo chu kì cho đến khi nhận được xác nhận hoặc khi Adjacency bị huỷ bỏ. Các gói cập nhật trạng thái liên kết chứa các LSA truyền lại luôn phát theo kiểu unicast đối với mọi kiểu mạng.