TÌM HIỂU VỀ ROUTING LOOP Routing loop là gì? gì? Một routing loop là m ột tình trạng trong đó một packet đượ c chuyển đi chuyển lại qua một vài router mà không bao gi ờ tới được đích đến của nó. Một routing loop có th ể xảy ra khi hai hay nhi ều router chia s ẻ thông tin định tuyến sai: rằng có tồn tại một đường đi được đến một mạng unreachable. Một routing loop có th ể là k ết quả của:
Định tuyến tĩnh sai. Cấu hình route redistribution sai ( redistribution là một quá trình xử lý thông tin định tuyến từ một routing protocol này sang một routing protocol khác, được được đề cập đến ở CCNP) CCNP). Bảng định tuyến chưa đúng không được cập nhật do hội tụ chậm trong một mạng thay đổi. Cấu hình sai hoặc không cài discard route.
Do tính đơn giản của mình thì distance vector d ễ xảy ra routing loop hơn so vớ i link state.
Cái giá củ củ a routing loop ? Routing loop có th ể dẫn tớ i những tình trạng sau:
Làm hao bandwidth.
Làm căng thẳng CPU của router do các looping packet. Làm tăng nguy cơ mất các update packet dẫn đến nhiều loop xảy ra hơn nữa. Packets có thể mất tiêu trong các “black holes”.
Cách tránh routing loop Để tránh routing loop thì m ột vài phương pháp đã đượ c thêm vào thu ật toán distance vector như sau:
Triggered updates: Router không nh ất thiết phải đợi đến một khoảng thờ i gian nh ất định để gửi cập nhật nữa. Thay vào đó mộ t triggered update s ẽ đượ c gửi đi ngay lập tức khi router phát hi ện một thay đổi nào đó trong topology hay trong thông tin định tuyến ( từ một router khác). Triggered updates không c ần gửi toàn bộ bảng định tuyến mà chỉ gửi những con đường thay đổ i. Một triggered update có th ể đượ c tạo ra khi:
Interface thay đổi sang up hay down. Một con đường đi vào hay thoát khỏi trạng thái unreachable. Một con đường mới được thêm vào bản định tuyến.
Maximum metric value :
Trong ví dụ này giả sử rằng router C đến network 1 thông qua router B và qua 3 hop.
Router D đến network 1 thông qua router A v ớ i 2 hop. Khi network 1 ch ết :
Router E gửi thông báo cho Router A.
Router A
ngưng không gửi packet đến network 1.
Nhưng Routers B, C, và D tiếp tực gửi do chưa biết về cái chết của network 1
Router A g ửi update. Routers B và D nhận đượ c update và qua Router A.
ngưng định tuyến tớ i network 1
Tuy nhiên, Router C v ẫn chưa hay tin về cái chết.
Đối vớ i router C, network 1 v ẫn đến đượ c qua router B.
Router C g ửi thông tin update này cho D : Router C: Network 1 : 4 hops qua Router C
Thông thườ ng thì D sẽ bỏ qua update này vì nó có đườ ng khác tốt hơn là đi đến network 1 thông qua A v ới 2 hop. Nhưng vì đường đó giờ đã unreachable nên D s ẽ chấp nhận thông tin v ề con đườ ng tốt hơn nhưng không chính xác này từ C. Vậy đến lúc này D có th ể đi đến network 1 thông qua C v ớ i 4 hop. Router D sau đó thông báo tin này đế n A. Tương tự A nhận thông tin này và A nghĩ là mình có thể đi đến network 1 thông qua D v ớ i 5 hop. A update thông tin này cho B và E. Khi B nhận được thông tin này nó nghĩ: “Hên quá! Đang đị nh báo cho C biết là network 1 ch ết thì gi ờ đi đượ c qua A v ớ i 6 hop rồi”. B gửi update này cho C. C nhận đượ c update nó tin r ằng mình v ẫn đi được đến network 1 thông qua B nhưng bây giờ là 7 hop.
Đến lượ c C gửi thông tin c ập nhật sai này cho D
Vậy là một routing loop đượ c tạo ra. Routing loop này làm phát sinh m ột vấn đề đượ c gọi là “Count to infinity”. Giải pháp cho v ấn đề này là định nghĩa mộ t giá trị metric tối đa. Ví dụ như trong RIP giá tr ị này là 15. Trướ c khi gửi thông tin c ập nhật thì metric ( hop count) được tăng lên 1. Khi giá trị metric đến network nào đó là 16 tức là đã quá số metric tối đa thì router biế t là mình s ẽ không định tuyến được đến network đó. Và thông tin cập nhật mà nó gửi cho hàng xóm cũng sẽ có metric là 16 đối với con đườ ng này.
Route poisoning: Phương pháp này sẽ đánh dấu các tuyến đườ ng không thể tới đích trong routing update và g ửi tớ i router khác. Nh ững tuyến đườ ng không thể tớ i đượ c sẽ đượ c đánh dấu vớ i metric lớ n nhất. trong giao th ức RIP, giá tr ị này là 16.
Split horizon Trong split horizon, m ột router sẽ những thông điệp định tuyến khác nhau trên những interface khác nhau. M ột router không g ửi tất cả thông tin của bảng định tuyến của nó cho láng gi ềng. Nếu một router h ọc đượ c về một network từ một hàng xóm c ủa nó thì nó s ẽ không gắn thông tin v ề network đó trong gói tin update nó gửi cho ông hàng xóm đó. Xem xét ví d ụ sau: 10.1.1.0/24 .1
RTA
10.1.2.0/24 .2
.1
s0
s0
e0
e0
Routing Table Net.
Hops Ex-Int
10.1.1.0/24 10.1.2.0/24
0 0
10.1.3.0/24
RTB
.1
e0 s0
Routing Table Net.
Hops Ex-Int
10.1.2.0/24 10.1.3.0/24
Routing Update
0 0
Routing Update
Next-hop Net.
Hops Address
10.1.1.0/24 10.1.2.0/24
1 10.1.1.1 1 10.1.1.1
Next-hop Net.
10.1.1.0/24 10.1.2.0/24 10.1.3.0/24
Hops Ex-Int
0 0 1
e0 s0 10.1.2.2
Hops Address
10.1.2.0/24 10.1.3.0/24
Routing Table Net.
s0 e0
1 10.1.2.2 1 10.1.2.2
Routing Table Net.
10.1.2.0/24 10.1.3.0/24 10.1.1.0/24
Hops Ex-Int
0 0 1
s0 e0 10.1.2.1
Bảng định tuyến của Router A và Router B sau khi h ội tụ như hình trên.
Hãy xem xét điều gì xảy ra khi network 10.1.3.0/24 b ị chết:
Trước khi RTB kịp gửi update cho RTA là 10.1.3.0 bị chết thì nó đã nhận được update theo định kì từ RTA. RTB nhận thấy nó có thể đi được đến 10.1.3.0/24 thông qua RTA. Tuy con đường này tới 2 hop nhưng nó vẫn tốt hơn là trạng thái unreachable đang có nên nó chấp nhận thông tin sai này.
RTB bây giờ forward tất cả các gói tin đến 10.1.3.0 tới RTA ở 10.1.2.1
RTA nhận các gói tin này và forward trở lại RTB ở 10.2.2.2 RTB sau đó lại chuyển trở lại cho RTA. Và cứ thế các gói tin sẽ bị blackholed trong cái routing loop này. Cũng trong lúc đó khi các router cập nhật lại bảng định tuyến của mình , các metric cũng sẽ tăng dần cho đến khi đạt 16.Khi đến 16 thì RTA và RTB đểu đánh dấu 10.1.3.0/24 là unreachable và sẽ drop những gói tin nào muốn đến đường mạng này. Tuy nhiên vấn đề routing loop có thể được xử lý triệt để hơn nếu chúng ta
enable split horizon trên interface serial 0.
Khi enable split horizon ( mặc định), RTA sẽ không gửi cho RTB thông tin về 10.1.3.0/24 bởi vì nó học được thông tin này từ RTB và RTB sẽ khôn g gửi thông tin về 10.1.1.0/24 tới RTA bởi vì lý do tương tự. Khi RTB nhận thấy 10.1.3.0/24 bị chết:
Nó đặt đường này vào trạng thái hold -down trong bảng định tuyến
của nó. RTB ngay lập tức gửi ra một triggered update về mỗi con đường này với metric 16. RTA nhận được triggered update và đặt con đường tới 10.1.3.0/24 vào trạng thái hold -down. Chú ý rằng RTA không bao giờ gửi routing update về 10.1.3.0/24 cho RTB vì split horizon được bật.
Nhiều giao thức định tuyến như RIP hay IGRP sử dụng loại split horizon này ( metric 16). Loại này được gọi là split horizon với poison reverse. Split horizon với poison reverse có nghĩa là thay vì không quảng bá lại thông tin cho người cung cấp thông tin đó thì router vẫn quảng bá lại, tuy nhiên, với metric là 16, làm cho nguồn bỏ qua con đường này. Bởi vì người ta nhận
thấy rằng kêu một router bỏ qua một con đường nào đó thì tốt hơn là không nói gì với nó về con đường đó. Mặt trái của vấn đề này là nó làm cho kích thước của các update packet tă ng lên vì ta nay thêm luôn các đường này.
Holddown timers
Chức năng chính của holddown timers là để tránh việc distance vector làm xảy ra các routing loop trong kho ảng thờ i gian có s ự thay đổi trong mạng. Luật là :”Một khi một con đườ ng bị đánh dấu là unreachable thì nó ph ải ở trong trạng thái đó trong mộ t khoảng thờ i gian đủ để tất cả các router nh ận đượ c thông tin v ề cái network b ị chết này. Nói cách khác, chúng ta ch ỉ đạo cho các router để cho các tin đồn nhảm lắng xuống trướ c khi nhận đượ c sự thật ( Zinin, Cisco IP routing) ” Khoảng thờ i gian một router ở trong trạng thái này đượ c quyết định bớ i holddown timer. Holddown timer có th ể tránh đượ c vấn đề count to infinity x ảy ra. Khi một router nh ận đượ c một update t ừ một làng giềng của nó rằng một đườ ng mạng nào ở phía trướ c không th ể tới đượ c ( inaccessible) thì router đó sẽ đánh dấu con đườ ng là inaccessible và b ắt đầu một hold-down timer.
Trong thờ i gian hold-down n ếu nó nhận đượ c thông tin c ập nhật thì:
Nếu từ cùng người hàng xóm đã gửi cho nó: router biết là mạng đã được phục hồi nên router sẽ đánh dấu network trở lại là accessible và bỏ hold-down timer. Nếu từ một người hàng xóm khác với metric nhỏ hơn là metric được ghi nhớ lại thì router sẽ đánh dấu network trở lại là accessible và bỏ hold-down timer.
Nếu từ một người hàng xóm khác với metric lớn hơn là metric được ghi nhớ lại thì router sẽ bỏ qua thông tin này và tiếp tục hold-down time. Việc bỏ qua các update với metric dỡ hơn trong thời gian hold down là để giúp cho những thay đổi có đủ thời gian đến được tất cả
các router. Holddown timer không nh ững giúp cho m ạng tránh đượ c routing loop trong những khoảng thờ i gian xảy ra sự thay đổi trong mạng mà còn giúp ổn định phần nào đối vớ i những mạng có những flapping routes ( nh ững con đườ ng up rồi lại down rồi lại up rồi lại down n ữa)
IP và TTL
Khi một gói tin đượ c tạo ra thì trường TTL đượ c gán cho một con số. Con số này đượ c giảm xuống khi đi qua mỗ i router. Khi con s ố này bằng 0 thì gói tin bị drop. Việc này tránh cho các gói tin đi long vòng hoài trong mạ ng.
Nguồ n : http://ccnaanswers-khim.blogspot.com/2011/04/what-is-routing-loop.html Ch. 6– Routing Theory – Part 2 ,CCNA Semester 2, Originally by Rick Graziani, Instructor Modified by Prof. Yousif