Monday, January 24, 2011

Distance Vector-Routing loop

Phần 1 đã giới thiệu về DV. Phần này sẽ nói về việc routing loop, nguyên nhân và các biện pháp ngăn ngừa routing loop

1.Routing loop là gì?

Như đã giới thiệu, giao thức DV khi cập nhật sẽ gửi toàn bộ thông tin về routing table và gói tin cập nhật này được gửi theo kiểu broadcast, thời gian định kỳ là 30s. Cần lưu ý rằng, việc update này là định kỳ sau mỗi 30s Điều này dẫn đến việc các routers không được cập nhật đầy đủ thông tin hiện tại cùng nhau. Việc này là nguyên nhân chính dẫn đến việc bị loop(vòng lặp vô hạn). Routing loop có thể gây sụp đổ toàn bộ hệ thống, làm cho router ko có cái nhìn chính xác về toàn mạng, làm sai quá trình routing.



Thử xét một ví dụ để thấy rõ hơn việc loop


Với mô hình mạng trên, ta giả sử rằng tất cả các router đã được routing và biết  thông  tin về Network 5 thông qua routerE. Khi Network 5 có vấn đề và bị down, nó sẽ nói cho routerC biết và không routing các packet đến Network5 thông qua routerE nữa.Nhưng các routers A,B,D thì hoàn toàn ko biết gì hết, chúng vẫn tiếp tục việc routing và update cho nhau.RouterC cũng sẽ gửi qua routerB, nói rằng Network5 đã down và không routing đến Network5 nữa, nhưng routerA,D thì vẫn chưa biết việc này. Với chúng, hiện tại vẫn có một route đến Network5 với metric là 3.
Vấn đề ở đây là, sau mỗi 30s, routerA sẽ update thông tin và thông tin của nó . Như vậy, routing table của routerA cũng nói lên rằng, routerA có thể route được các packet đến các đích nằm trong routing table của nó, tất nhiên là bao gồm cả thông tin là "vẫn có route để đến được network5". Khi routerB,D nhận được thông tin này, chúng sẽ lại "update" thông tin của routerA vào trong routing table của mình, khi đó, nó sẽ hiểu rằng  "nếu có packet nào muốn đến network5 thì cứ route đến routerA để routerA xử lý tiếp".
Như vậy, nếu có packet nào đến network5 thì tống đến routerA, trong routerA thì lại nói là đưa packet đến routerB,D...cuối cùng sẽ tạo nên một vòng lặp(loop) vô hạn.

Việc routing loop là hoàn toàn có hại cho hệ thống mạng. Vậy cách để chống lại việc loop này như thế nào?


2.Các cách phòng chống routing loop.

2.1.Route Poisoning

Thuật ngữ "route poisoning" ám chỉ việc vẫn tiếp tục quảng bá route bị down nhưng với một thông tin "giả mạo" về metric. Thông tin này được gọi là "infinity"(nôm na là vô tận).Khi nhận được một route với giá trị metric là infinity thì router sẽ tự biết đc rằng, route đó đã down. Với mỗi giao thức DV khác nhau thì có cách xác định giá trị infinity khác nhau. Riêng đối với RIP thì giá trị đó là 16.

Ta thử xét một ví dụ về việc route poisoning:

Hình trên mô tả việc route poisoning. Ta xem xét trường hợp 2 router sử dụng giao thức RIP. Trên R2, port fa0/1 đã down và không thể route các packets đến 172.30.22.0/24(Lưu ý rằng, khi nhận infinity là 16, khi ta show ip route thì giao thức RIP sẽ ko hiển thị giá trị metric mà hiển thị "possibly down"). Lúc này, việc xử lý sẽ tuần tự như sau:


  1. .Port fa0/1 của R2 down
  2. .R2 sẽ loại bỏ thông tin của connected route 172.30.22.0/24 ra khỏi routing table của nó.
  3. .R3 sẽ quảng bá cho R1(router láng giềng) thông tin cập nhật mới là route đến 172.30.22.0/24 có metric là 16-ngang mức với infinity.
  4. .R1 cập nhật thông tin mới với infinity metric về route đến 172.16.22.0 và vẫn giữ trong routing table cho đến khi route đó được xóa khỏi routing table.
 2.2.Split Horizon

Thuật ngữ này nói về một quy tắc trong DV. Quy tắc đó là:"KHÔNG được phép gửi lại thông tin routing theo hướng mà nó đã đc nhận". Nói cách khác, routing protocol phân biệt xem interface A nào đó đã nhận thông tin về route B nào đó. Khi đã xác định được, nó sẽ không quảng bá lại thông tin về route B đó thông qua interface A đã đc xác định.

Hình trên mô tả các bước về việc Split horizon
  1. .R1 gửi thông tin update cho R2
  2. .R2 gửi lại thông tin cho R1
  3. .Port fa0/1 của R2 down
  4. .R2 sẽ loại bỏ thông tin về 172.30.22.0/24 trong routing table
  5. .R2 gửi thông tin cập nhật về 172.30.22.0/24 với infinity metric.
  6. .R1 cập nhật thông tin về route 172.30.22.0/24, tạm thời vẫn lưu lại trong routing table, đợi xử lý sau.
  7. .R1 tiếp tục gửi thông tin cập nhật về cho R2 nhưng vì splite horizon nên không kèm theo thông tin về route 172.30.22.0/24
2.3.Poison Reverse và Triggered Update 

Đây là 2 cách khác để chống loop trong DV.2 cách này sẽ tìm mọi cách để thông báo về việc route nào đó bị down, trong thời gian sớm nhất có thể.
  • +Triggered Update:Khi một route down, ko cần phải đợi đến lần cập nhật định kỳ tiếp theo mà gửi ngay lập tức một thông tin cập nhật liệt kê các route bị poisoned.
  • +Poison reverse:Khi nhận được thông tin về một route bị down, sẽ gửi lại một route đã bị poisoned.
Hình trên cho ta một cái nhìn hình dung về 2 phương pháp chống loop này.

  1. .Port fa0/1 của R2 down
  2. .R2 ngay lập tức gửi thông tin về thành phần đã thay đổi là thông tin về route đến 172.30.22.0/24, tất nhiên route này đã bị poisoned.
  3. .R1 cũng ngay lập tức gửi lại cho R2 biết thông tin về route trên, cũng với thông tin đã bị poisoned. Đây chính là reverse poison.
  4. .Trong lần cập nhật định kỳ, R2 sẽ quảng bá toàn bộ thông tin về routing table, nhưng thông tin trong đó đã bị poisoned với đúng hiện trạng.
  5. .Tương tự với R1, trong lần cập nhật tiếp theo, cũng sẽ gửi một thông tin đúng về hiện trạng của toàn bộ mạng.
2.4.Holddowns

Thuật ngữ này ám chỉ việc:Khi một route bị coi là đã down, thì sẽ giữ nó trong một thời gian để router chắc chắn rằng, route này thực sự down.
Qúa trình holddown nói cho 1 router biết để loại bỏ toàn bộ thông tin về route đang bị coi là down trong một khoảng thời gian gọi là holddown timer.  Có thể được tóm tắt:
Sau khi nhận thông tin về một route bị down, bắt đầu quá trình đếm holddown timer cho route đó. Cho đến khi khoảng thời gian đó hết, sẽ không chấp nhận bất cứ thông tin nào về route đó. Các thông tin từ router đã quảng bá về route này có thể đc chấp nhận sau khi hết khoảng thời gian holddown. 

Hình dưới cho ta một ví dụ về Holddown
  1. .Port fa0/1 của R2 down
  2. .Ngay lập tức, R2 quảng bá thông tin mới này cho các routers láng giềng về route bị down, đồng thời cũng poison route này.
  3. .R3 nhận đc thông tin poisoned từ R2, R3 sẽ đưa route đó với metric là 16. Đồng thời, R3 sẽ bắt đầu đếm một khoảng thời gian-holddow timer dành cho route đó(mặc định với RIP là 180s).
  4. .Gỉa sử trước khi bước 2 xảy ra, R1 đã gửi một thông tin về route 172.30.22.0/24 đó về R3 với metric là 2 như bình thường.
  5. .R1 nhận được thông tin update của R2 sẽ đặt route kia vào routing table với metric là 16.
  6. .R3 nhận đc thông tin update từ R1(step4) rằng vẫn có thể đến 172.30.22.0/24 với metric = 2.Nhưng bởi vì  thông tin này ko phải từ R2- nơi đầu tiên quảng bá thông tin về route bị down cho R3 biết, nên thông tin mới này sẽ bị R3 loại bỏ.


Kết thúc quá trình, mỗi router đều có trong bảng route các thông tin đúng, tránh bị loop.


=====End=====

7 comments:

  1. Bài viết rất hữu ích. Mình đang tự học CCNA-CCNP, rất cám ơn bài viết của bạn. Mình có thể hỏi nick ym của bạn đc ko, mình còn nhiều thắc mắc muốn nhờ bạn giải đáp. Bạn có thể add nick ym của mình: hoangnhut_ok@yahoo.com

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Mình không thể hiểu được
    Vì Sau 1 chu kỳ cập nhật, RE sẽ nhận được 2 thông tin
    RC gửi đến
    RN5 (Router ngoài nối với Net 5) gửi đến

    Vậy tại sao RE lại cập nhật net5 down thay vì chuyển hướng cho RC

    Tương tự RC cũng không cập nhật chuyển hướng tới RB mà cập nhật RE (nhận định Net 5 down)

    Nếu theo lý thuyết:
    RA gửi net5 sống cho RB
    RC gửi net5 chết cho RB

    => RB quyết định chuyển hướng qua RA
    (Tại sao bên trên không chuyển hướng, ở đây lại chuyển hướng?

    ReplyDelete