jjzjj

路由选择协议(一) RIP协议

做一只大熊猫 2024-06-16 原文

在介绍路由协议(RIP、OSPF、BGP)之前会向大家介绍补充一些基本的概念,以便能够更容易的理解本文。
废话不多说我们开始!

一、自治系统

  1. 自治系统(Autonomous system)通俗的讲就是我们把全球互联网分成若干个区域,每个区域由一定数量的路由器组成且每个区内部使用相同的内部网管协议协议(RIP或OSPF)去通信,而在区域之间进行通信会使用外部外部网关协议(BGP)去通信。
  2. 为什么要分自治域呢?不分可以吗?答案是不行的。分自治域主要有两个原因:
    1. 因特网非常庞大,而我们的路由器的路由表存储的信息将十分庞大,而且在路由器之间交换的信息也将十分庞大,会占据大量的带宽。
    2. 许多单位不想让别人了解本公司自治域内的网络的使用的具体协议细节,但是又希望连接到因特网中。

路由选择协议概览

定 义

我们首先会想什么是路由选择协议(O_o)??

  1. 它是一种网络层协议,通过协议规定路由器之间进行通信来分享和维护自己的路由表中的信息。
  2. 维护了路由表信息之后,就可以确定最佳的路由选择路径。
  3. 路由器之间的信息分享可以了解非直连网络的状态,当网络状态发什么变化的时候,路由表中的信息也应该相应的更新。

分 类



有了上面的分基础知识之后,下面会具体讲一讲每种具体的协议思想、过程、内容、报文格式等。

RIP协议

简介

  1. 路由信息协议RIP(Routing Information Protocol) :是一种内部网关协议,它是基于距离矢量算法的路由协议,利用跳数来作为到达某个网络的路由选择标准。

  2. 主要适用于规模较小的网络(当跳数为16时表示目的网络不可达)、可靠性要求较低的网络,可以通过不断的交换信息让路由器动态的适应网络连接的变化,这些信息包括每个路由器可以到达哪些网络,这些网络有多远等。

RIP协议和谁交换、交换什么、多久交换一次

  1. 当前路由器仅和相邻的路由器进行信息交换。
  2. 路由器交换的信息是自己的路由表中的信息(把自己的路由表中的信息封装成RIP报文)
  3. 每30s交换一次路由信息,然后路由器根据信息去更新路由表。如果超过180s没有收到邻居路由器的通告,则判定邻居没了,把通过邻居作为下一跳的路由给删除掉。

RIP报文格式

在学校RIP报文更新的过程前,我们先学习一下RIP报文的格式,如下图

注意:从上图我们可以看出RIP协议是应用层协议,使用UDP发送数据

RIP更新过程

  1. 刚开始每个路由器只知道到直接连接网络的距离(距离为1),接着每个路由器会和它的邻居路由器进行交换信息,更新自己的路由表

  1. 当路由器1与它的邻居路由器2进行信息沟通时,会把自己的路由表封装成数据报发给路由器2,路由器2接收到数据报后(可以认为是接受到了对方的路由表了但是不太严谨),会根据对方的路由表中的信息距离向量算法来更新自己的路由表项。

    • 距离向量算法
    1. 当路由器1发来RIP报文中的所有表项后,报表项中的“下一跳路由路”修改位路由器1,并把“距离”字段 + 1
    2. 对修改后的RIP报文中的每一个表项,进行一下步骤:
      (1) 若路由器2,没有某个网络(如网络1),则把该表项填入自己的路由表
      (2) 若路由器2有某个网络,则查看自己路由表中的下一跳路由器地址:
      . . 若下一跳是路由器1,则用收到的项目去替换自己路由表中的项目
      . . 若下一跳不是路由器1,如果原来距离比从路由器1走距离更远的话我们就更新表项,否则不做处理
  2. 经过若干次更新后,所有的路由器都会知道在本自治系统中任何一个网络的最短距离和下一跳的路由器地址。即达到**“收敛状态”**

RIP协议的缺点

  1. 只适用于小规模网络,因为当目的网络的距离(跳数)大于等于16时,路由器认为网络不可达。

  2. RIP协议在进行消息分享时,是把路由表中的所有表项都封装层RIP报文发送出去,占用的带宽比较大

  3. RIP协议好消息传的快,坏消息传的慢,当网络较好的时候能够即时的维护网络状态,但是当我们的网络出现的故障时,可能出现网络中的故障信息不能即时传递。

  4. RIP使用“跳数”作为最优距离并非总是最优路径,


从上面的分析中我们可知RIP,有一大堆缺点,那么我们要怎么解决的呢?别担心,这些问题都会再我们下一片文章中讲解的OSPF协议给解决掉。

有关路由选择协议(一) RIP协议的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  3. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  4. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  7. ruby-on-rails - 如何在 Rails 中设置路由的默认格式? - 2

    路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  9. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  10. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

随机推荐