Tại sao BGP lại cần có split horizon?
Vậy split horizon để làm gì? Chống loop, BGP lại cần phải chống loop ư??
BGP có một cơ chế gần như split horizon trong distance vector protocol đó là Khi một BGP speaker nhận 1 bản tin update từ iBGP, nó sẽ ko quảng bá bản tin update đó sang các iBGP khác
Bài toán loop như sau: Một router A nhận bản tin update từ eBGP, nếu nó gửi qua cho iBGP cho router B, và router B lại gửi cho router C; kết nối eBGP của router A tự nhiên đứt, router C chưa kịp cập nhật từ router A, đã nhận update từ router B, và thế là loop (ko khác gì trường hợp của RIP hay IGRP)
EIGRP cũng là giao thức distance vector, nhưng với thuật toán DUAL hoàn toàn xác định được đâu là loop đâu là route dùng được. Trong khi BGP hoạt động trên phạm vi toàn cầu, scale quá lớn để nó quan tâm tới từng interface. VÌ thế “split horizon” ảnh hưởng đối với cả AS
Ngoài ra, khi 1 router chạy BGP nhận update qua iBGP, attribute của route ko thay đổi, AS-Path ko đổi, next-hop là router eBGP cũng ko đổi. Đó là lý do ko nên chạy vừa chạy đồng thời EGP và IGP trong cùng 1 AS. Đó cũng cho thấy, khi chạy BGP, chỉ có connected peer mới hiểu thực sự về 1 route, vì lẽ đó, nên BGP được xây dựng sao cho mọi peer trong AS có thể tự hiểu được đâu là tuyển iBGP/eBGP chúng có thể tới. Như thế, ta sẽ ko phải lo lắng xây dựng cho BGP thêm 1 thuật toán phức tạp (như DUAL) để nó chọn route nữa; bởi vì BGP vốn đã quá phức tạp rồi…
Vì thế, chúng ta ko nên quan niệm BGP cũng như là 1 giao thức distance vector, mà nên là path vector. Khác nhau ở chỗ, IGP hoạt động với network/metric/cost… trong khi BGP quan tâm tới network/AS-path kia…
BGP is simple in that it sees a route with a long AS path as a less-preferred route
Quay lại bài toán trên, ta thấy rằng, nếu vậy trong 1 AS, ta phải kết nối full mess cho các AS peer, cộng với khả năng mở rộng, sẽ có rất nhiều session cho mỗi router. Giả sử trong 1 AS có n node, ta sẽ cần tới n*(n-1)/2 session. Áp lực dồn lên phần cứng là quá lớn, giải pháp được nghĩ tới là sử dụng confederation và route-reflector…
Mời các bạn cùng thảo luận tiếp ý với phần trình bày của bạn ilikeeyelife vừa rồi
Vậy split horizon để làm gì? Chống loop, BGP lại cần phải chống loop ư??
BGP có một cơ chế gần như split horizon trong distance vector protocol đó là Khi một BGP speaker nhận 1 bản tin update từ iBGP, nó sẽ ko quảng bá bản tin update đó sang các iBGP khác
Bài toán loop như sau: Một router A nhận bản tin update từ eBGP, nếu nó gửi qua cho iBGP cho router B, và router B lại gửi cho router C; kết nối eBGP của router A tự nhiên đứt, router C chưa kịp cập nhật từ router A, đã nhận update từ router B, và thế là loop (ko khác gì trường hợp của RIP hay IGRP)
EIGRP cũng là giao thức distance vector, nhưng với thuật toán DUAL hoàn toàn xác định được đâu là loop đâu là route dùng được. Trong khi BGP hoạt động trên phạm vi toàn cầu, scale quá lớn để nó quan tâm tới từng interface. VÌ thế “split horizon” ảnh hưởng đối với cả AS
Ngoài ra, khi 1 router chạy BGP nhận update qua iBGP, attribute của route ko thay đổi, AS-Path ko đổi, next-hop là router eBGP cũng ko đổi. Đó là lý do ko nên chạy vừa chạy đồng thời EGP và IGP trong cùng 1 AS. Đó cũng cho thấy, khi chạy BGP, chỉ có connected peer mới hiểu thực sự về 1 route, vì lẽ đó, nên BGP được xây dựng sao cho mọi peer trong AS có thể tự hiểu được đâu là tuyển iBGP/eBGP chúng có thể tới. Như thế, ta sẽ ko phải lo lắng xây dựng cho BGP thêm 1 thuật toán phức tạp (như DUAL) để nó chọn route nữa; bởi vì BGP vốn đã quá phức tạp rồi…
Vì thế, chúng ta ko nên quan niệm BGP cũng như là 1 giao thức distance vector, mà nên là path vector. Khác nhau ở chỗ, IGP hoạt động với network/metric/cost… trong khi BGP quan tâm tới network/AS-path kia…
BGP is simple in that it sees a route with a long AS path as a less-preferred route
Quay lại bài toán trên, ta thấy rằng, nếu vậy trong 1 AS, ta phải kết nối full mess cho các AS peer, cộng với khả năng mở rộng, sẽ có rất nhiều session cho mỗi router. Giả sử trong 1 AS có n node, ta sẽ cần tới n*(n-1)/2 session. Áp lực dồn lên phần cứng là quá lớn, giải pháp được nghĩ tới là sử dụng confederation và route-reflector…
Mời các bạn cùng thảo luận tiếp ý với phần trình bày của bạn ilikeeyelife vừa rồi
Comment