Edu DaLatHub
  • Trang chủ
  • Flutter
  • WordPress Plugin
  • GoLang
  • ReactJS
  • NodeJS
  • Networking
    • Basic Networking
      • ARP
      • ICMP
      • TCP/UDP
    • Routing & Switching
      • RIP
      • OSPF
      • EIGRP
      • Redistribution
      • TSHOOT
      • WAN
Liên hệ

  • By  Nguyễn Văn Huy Dũng
  • 0 comments
  • Tháng Một 13, 2022

RIP – Distance Vector Routing Protocol

Nội dung
  • Giao thức Distance Vector
RIP là giao thức thuộc định tuyến Distance vector và là giao thức định tuyến động đơn giản nhất để chúng ta có thể tìm hiểu. Để bắt đầu, chúng ta sẽ tìm hiểu cách hoạt động của distance vector. Vậy distance vector có nghĩa là gì?
  • Distance: khoảng cách là bao nhiêu? trong định tuyến (routing), chúng ta sử dụng khái niệm metric để đo giá trị khoảng cách này.
  • Vector: Hướng của gói tin? Trong định tuyến chúng ta cần phải quan tâm tới interface nào hay địa chỉ IP của next-hop router mà gói tin cần tới.
Một ví dụ trên thực tế mà các bạn có thể gặp trên thực tế, bạn đi tới một thành phố và không biết đường đi ở thành phố này. Tuy nhiên, khi đến các ngã ba, ngã tư… bạn co thể thấy các bảng chỉ dẫn cho bạn biết những tuyến đường đi tới đâu và khoảng cách bao xa (kilomet). Đó cũng chính là cách làm việc của giao thức định tuyến chạy distance vector.

Một ví dụ khác khi bạn đi trên đường cao tốc thì cũng sẽ có các biển chỉ dẫn về đường đi:

Nói như vậy thì bạn cũng đã có thể hình dung ra cách làm việc của giao thức Distance vector

Giao thức Distance Vector

Trong hình trên, chúng ta có ba router và chúng sẽ được cấu hình để chạy giao thức dạng distance vector (ở ví dụ này là giao thức RIP). Ban đầu, các router xây dựng một bảng định tuyến (routing table) mặc định với dữ liệu từ các interface mà nó đang có kết nối (directly connected interface). Bạn có thể thấy các thông tin vè bảng định tuyến của các router này như hình trên. Màu đỏ là viết tắt của các interface và màu xanh lá là giá trị metric. RIP (distance vector) sử dụng khái niệm hop count để tính metric, hop count được tính bằng số router mà gói tin cần phải đi qua trước khi tới được đích.

Bây giờ, chúng ta sẽ enable giao thức định tuyến distance vector trên các router, vậy điều gì sẽ xảy ra? Các router này sẽ tiến bắt đầu gửi toàn bộ thông tin về bảng định tuyến của mình cho các router láng giềng của nó. Router Spade sẽ gửi toàn bộ thông tin định tuyến của mình cho Router Hearts. Router Hearts sẽ gửi toàn bộ thông tin bảng định tuyến của mình cho router Clubs và ngược lại.

Nếu router chưa có thông tin về bất ký tuyến đường nào trong bảng định tuyến của mình, router sẽ tự động them thông tin đó vào bảng định tuyến của mình:

Giờ hãy nhìn vào router Spade, bạn có thể thấy là router đã học thông tin về mạng 192.168.23.0/24 và mạng 3.3.3.0/24 từ router Hearts và ta có thể thấy là hai thông ti n này đều có thông tin interface là fa1/0, điều này có nghĩa là hai mạng này muốn tới được sẽ thông qua interface fa1/0 (đó là vector) và bạn cũng có thể thấy metric (hop count – đó là distance) cho những mạng này trên router Spade.

Mạng 192.168.23.0/24 có giá trị hop count là 1, mạng 3.3.3.0/24 có giá trị hop count là 2.

Tương tự với cách làm trên, router Hearts và router Clubs sẽ thêm các thông tin về các mạng như thông tin bạn có thể thấy trên hình vẽ trên.

Cứ định kỳ 30s, các router sẽ gửi toàn bộ bảng định tuyến của mình cho các router láng giềng để các router đó cập nhật lại bảng định tuyến theo cách làm mà chúng ta đã biết ở phần trên.

Cho đến thời điểm này, mọi việc vẫn diễn ra bình thường, các router đã biết thông tin về các mạng và như thế các host ở các mạng này đã có thể kết nối được với nhau. Tuy nhiên, giao thức Distance vector có cách hoạt động khá đơn giản, chính vì vậy, nếu chỉ sử dụng các làm việc như trên thì giao thức distance vector có một số vấn đề và lỗi, chúng ta sẽ được thấy trong ví dụ sau:

Nếu như interface fa1/0 trên router Clubs xảy ra sự cố, điều này làm cho bảng định tuyến của router Clubs bị thay đổi, mạng 3.3.3.0/24 sẽ bị đánh dấu là down.

Và cứ mỗi 30s thì các router của chúng ta sẽ gửi toàn bộ bảng định tuyến của mình sang cho router láng giềng và lúc này, khi router Hearts gửi toàn bộ bảng định tuyến của mình sang cho  router Clubs. Vậy điều gì sẽ xảy ra?

Router Clubs sẽ nhận được một bảng cập nhật từ router Hearts, trong bảng cập nhật này mang thông tin về mạng 3.3.3.0/24 với hop count bằng 1. Lúc này router Clubs thấy rằng hop count của mạng 3.3.3.0/24 là 1 sẽ tốt hơn là giá trị down mà nó đang đánh dấu trong bảng định tuyến. Vì vậy, router Clubs sẽ thêm thông tin này vào bảng định tuyến của mình.

Ít giây sau, router Clubs sẽ gửi thông tin bảng định tuyến của mình cho láng giềng của mình, ở đây là router Hearts. Router Hearts sẽ xử lý thông tin nhận được như sau:

“Tôi có thể đi đến được mạng 3.3.3.0/24 bằng cách thông qua router Clubs với giá trị hop count sẽ bằng 1. Tôi nhận được thông tin định tuyến từ router Clubs và giá trị hop count lại bằng 2… Tôi thấy có sự thay đổi thông tin và nhiệm vụ của tôi là cập nhật lại thông tin bảng định tuyến của mình!!!!”.

Như vậy router Heart sẽ cập nhật lại giá trị hop count của mạng 3.3.3.0/24 là 3 vì thông tin hop count nhận được là 2 và nó phải cộng thêm 1 trước khi cập nhật.

Ngay sau đó, router Hearts sẽ gửi bảng định tuyến của mình sang cho router Spade, router Spade cũng sẽ cập nhật lại bảng định tuyến của mình.

Bạn có thấy điều gì đang xảy ra ở đây? Các router sẽ tiếp tục gửi ra các bảng cập nhật về bảng định tuyến và giá trị hop count này sẽ tang tới vô cùng (infinity).

Vậy chuyện gì sẽ xảy ra nếu chúng ta gửi một gói tin tới mạng 3.3.3.0/24?

Hãy nhìn vào bảng định tuyến của router Hearts và router Clubs, chúng ta có một vòng lặp định tuyến (routing loop). Đó là một sự cố không hề tốt cho hệ thống mạng, IP packet có một trường TTL(Time to Live) để có thể ngăn chặn việc một gói tin loop mãi mãi như Ethernet frame.

Để ngăn chặn việc cập nhật giá trị hop count tới vô cùng thì chúng ta sử dụng một giá trị maximum cho hop count. Đối với giao thức định tuyến RIP thì giá trị hop count tối đa là 16. 16 ở đây có thể hiểu là không thể truy cập tới (unreachable), vì vậy hop count tối đa mà RIP có thể sử dụng là 15.

Vấn đề chúng ta gặp phải ở trên là counting to infinity – đếm đến vô hạn.

Chúng ta còn có phương pháp nào khác được dùng để ngăn chặn vấn đề counting to infinity? Trong ví dụ trên, chúng ta thấy rằng router Clubs quảng bá mạng 3.3.3.0/24 thì phải thông qua router Hearts. Vậy có cần thiết việc nếu như router Hearts quảng bá thông tin về mạng này lại cho router Clubs?

Nó quả thật giống như một trò đùa vậy, giống với việc bạn lại nói về một câu chuyện cho người vừa mới kể câu chuyện đó cho bạn vậy… nó thật sự không hiệu quả.

Trong định tuyến, chúng ta sử dụng một luật được quy định như sau: những gì mà bạn học được từ láng giềng (neighbor) thì sẽ không được quảng bá ngược lại. Chúng ta gọi luật đó là split horizon.

Còn có một vấn đề nữa khi chúng ta có một mạng gặp sự cố (ví dụ như là mạng 3.3.3.0/24 như hình trên), khi có một sự thay đổi trong bảng định tuyến thì router sẽ ngay lập tức gửi ra một triggered update cho router láng giềng.

Triggered update sẽ chứa thông tin về mạng mới gặp sự cố và mang giá trị infinite metric (16 là giới hạn cho giao thức RIP). Việc gửi gói tin mang thông tin cập nhật của một mạng với giá trị infinite metric được gọi là route poisoning.

Để đảm bảo rằng router Clubs không update thông tin về mạng 3.3.3.0/24 thì router Hearts sẽ gửi ra một gói tin poison reverse để phản hồi lại cho router đã gửi gói tin route poison cho mình (router Clubs). Như vậy là router Clubs sẽ đánh dấu mạng 3.3.3.0/24 có metric bằng 16.

Vậy nó có vi phạm luật split horizon mà chúng ta vừa mới nói tới: “không quảng bá lại các thông tin mà bạn đã học được từ nơi bạn học được nó”.

“Route poisoning không ảnh hưởng bởi luật split horizon”

Còn một điều nữa chúng ta cần phải quan tâm tới khi chúng ta làm việc với giao thức distance vector. Khi router Hearts và Spade xác định được rằng mạng 3.3.3.0/24 có sự thay đổi về metric, cả hai sẽ khởi động một bộ đếm gọi là holddown timer. Holddown timer sẽ thực hiện đếm lùi trong khoảng 180s để đợi một số thông tin sau:
  • Nếu như router nhận được một thông tin mới về một mạng (ví dụ là mạng 3.3.3.0/24) từ một router khác với cùng hoặc giá trị metric “tệ hơn” (cao hơn) giá trị mà router đang có thì nó sẽ bỏ qua giá trị đó.
  • Nếu như router nhận được một thông tin mới về một mạng (ví dụ là mạng 3.3.3.0/24) từ một router khác có giá trị metric tốt hơn (thấp hơn), router sẽ dừng bộ đếm holddown timer và cập nhập thông tin mới này (metric) vào bảng địh tuyến của mình.
  • Nếu như trong khoảng thời gian holddown mà router không nhận được thông tin mới nào về mạng này thì nó sẽ xóa thông tin của mạng này ra khỏi bảng định tuyến.
Trên đây là một số kiến thức cơ bản về giao thức định tuyến Distance Vector mà đại diện là giao thức RIP. Trên thực tế, giao thức RIP có hai version (phiên bản) là RIP Version 1 và version 2. Hai version này có một số điểm khác biệt:
RIP Version 1 Version 2
Class Classful Classless
Addressing Type Broadcast Multicast 224.0.0.9
Support manual summaries No Yes
Authentication support No Yes

RIPv1 chỉ hỗ trợ dạng địa chỉ Classful, vì thế trong các gói tin update của mình thì RIPv1 không gửi kèm Subnet mask đi kèm với địa chỉ mạng, ngược lại thì RIPv2 có gửi kèm Subnet mask đi kèm với địa chỉ mạng. Chính vì vậy nếu cấu hình RIPv1 dễ xảy ra lỗi nếu như bạn phải cấu hình với các địa chỉ mạng con đã được chia.

RIPv1 gửi tất cả các gói tin update của mình sử dụng địa chỉ broadcast, khác với RIPv2 sử dụng địa chỉ IP multicast (224.0.0.9) (Đôi khi cũng có thể là địa chỉ IP unicast).

Đó là hầu hết những kiến thức liên quan tới giao thức định tuyến Distance Vector mà điển hình là giao thức RIP.

Bạn có thể xem thêm phần cấu hình về giao thức RIP trên router của Cisco ở phần sau.

“CCNA Routing – Network Lesson”

NGUYỄN VĂN HUY DŨNG

Cấu hình RIP
Tags:
Networking, RIP, Routing & Switching

Leave a Comment Cancel Reply

Your email address will not be published.*

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

Don’t compare yourself with anyone in this world…if you do so, you are insulting yourself.

Bill Gates

When something is important enough, you do it even if the odds are not in your favor.

Elon Musk

Bài viết mới

  • Lorem Ipsum Sample Content123
  • Lorem Ipsum Sample Content
  • Hello world
  • Hello world
  • Hello world
  • Wide area networks (Phần 2)
  • Wide area networks (Phần 1)
  • Redistribution (Phần Cuối)
  • Redistribution (Phần 1)
  • OSPF – Open Shortest Path First (Phần Cuối)

Nơi chia sẻ về tin công nghệ, các kinh nghiệm lập trình. Xây dựng các khoá đào tạo lập trình, mạng, tin học văn phòng...

Thông tin liên hệ

  • 2/9 Phạm Ngũ Lão, Phường 3, Đà Lạt
  • 0865802659
  • info@dalathub.com

Copyright @ 2022 Edu DaLatHub