草庐IT

静态路由(全)

魏大橙 2024-04-09 原文

目录

前言

静态路由

静态路由配置

环回路由Loopback

等开销负载均衡

​编辑浮动路由

静态路由手工汇总

缺省路由

路由黑洞以及路由环路的产生以及解决方案


前言

路由器隔离隔离广播域,连接不同的网段,不同网段之间用户通信通过路由器进行数据转发过程称为路由,而路由器转发依靠表项称为路由表 

产生路由方式:

1.直连路由:直连接口所在网段自动生成。直连路由产生条件:1.接口有IP地址 2.接口双up

2.静态路由:由网络管理员手工配置生成路由条目(路由可以严格控制,资源占用比较少,但对于网络结构复杂的做法比较繁琐并且容易出错,无法自适应网络变化)

3.动态路由:   通过运行动态路由协议学习到的路由(可以自适应网络变化,对于网络结构复杂的配置简单,但是资源占用比较多)

路由表:

Preference :优先权,描述路由优先级,数值范围0-255,数值越小越优。不同路由学习方式默认优先级不同

Cost :开销值, 用于在优先级相同情况下选路比较,数值越小越优,不同路由学习方式开销值计算方式不同

路由查询规则:1.最长匹配   2.递归查询

查看路由器通哪些网段时可使用此命令查看:

静态路由

静态路由使用环境:适用于网络结构简单稳定性高的小型网络。

静态路由配置

以下都根据此图来做示范以及讲解,不懂基本配置的可以参考VRP系统(视图介绍以及基本命令)

什么是出接口、下一跳?(理解为主,语言水平有限)

答:以R1为参考系的话,它的出接口就是R1的GE0/0/0口(当R1要把数据传给别人时,用自己的接口来传送数据),当R1要把数据传到23.1.1.0网段时,需要先把数据给R2,这时R2为下一跳路由器,而R2的GE0/0/1口(12.1.1.2)为下一跳地址

R1要到23.1.1.0网段进行通信

出接口做法:适用于点对点型网络结构(两个路由器之间不能添加其他路由器,比如两个路由器之间有PPP点对点协议时,它们就是点对点网络结构)

注意:在思科中若是非点对点网络使用出接口做法数据可以通信,但是在华为中非点对点网络结构中使用出接口,路由条目可以加表,但是不能通信

查看:

 

在出接口做法中,我们可以看到我们的下一跳地址是自己本身的地址

发现:在此题中,当我们去ping23.1.1.1时会发现ping不通,因为它们不是点对点结构(两个路由器之间没有点对点协议(PPP))

所以只能加路由条目,但不能进行通信

下一跳做法:适用于非点对点型网络结构

  

查看:

 发现:在此题中,我们在使用下一跳做法时,可以发现我们可以ping通23.1.1.1,但无法ping通23.1.1.2

在分析前,我们先理解一下通信的概念,通信是指能够去也可以回 即双向可通

分析:

在R1发送给23.1.1.1数据包时,原地址为12.1.1.1,目标地址为23.1.1.1

在R1发送给23.1.1.2数据包时,原地址为12.1.1.1,目标地址为23.1.1.2

因为我们配置了到23.1.1.0网段的静态路由,所以我们的数据包可以到达23.1.1.1和23.1.1.2,而23.1.1.1是R2的一个接口,因此R2可以通过它与12.1.1.1的直连路由进行收到R1数据包的回复,但23.1.1.2它可以收到数据包,可是由于没有从23.1.1.2回到23.1.1.1的路由,因此它无法进行回复,导致ping不通

解决方案:在R3中添加回去的静态路由(下一跳做法)

 

出接口加下一跳做法:适合所有静态路由环境,即写了出接口做法又写了下一跳做法(比较中庸)

下一跳做法就是在静态路由中加上出接口后再加上下一跳地址

补充:在现在的网络中对于这三种做法没有特别大的效率差距,只是说有些时候某种做法更适合那种环境,因为有些做法在那种环境中不能达到某些优化的效果

环回路由Loopback

Loopback接口是虚拟接口,是一种纯软件性质的虚拟接口,模拟一个单独的网段

任何送到该接口的网络数据报文都会被认为是送往设备自身的。大多数平台都支持使用这种接口来模拟真正的接口。这样做的好处是虚拟接口不会像物理接口那样因为各种因素的影响而导致接口被关闭

Loopback接口和其他物理接口比较,Loopback接口的优点:

  1. 1.Loopback接口状态永远是up的,即使没有配置地址。这是它的一个非常重要的特性。
  2. 2.Loopback接口可以配置地址,而且可以配置全1的掩码,可以节省宝贵的地址空间。
  3. 3.Loopback接口不能封装任何链路层协议。

对于目的地址不是loopback口,下一跳接口是loopback口的报文,路由器会将其丢弃。对于CISCO路由器来说,可以配置[no] ip unreachable命令,来设置是[否]发送icmp不可达报文,对于VRP来说,没有这条命令,缺省不发送icmp不可达报文 

环回接口可创建数目:

环回接口的创建以及配置地址:

 查看:

 ​​​​

 

 题:使R1的环回接口可以ping通R3的环回接口

 1、配置1.1.1.1到3.3.3.3的静态路由(下一跳做法):

结果分析:我们可以看到ping不通,这是因为R1把数据传给R2后,R2没有到达3.3.3.3的路由(题目中三个路由器是全网通的)

2、配置R2到3.3.3.3的静态路由(下一跳做法):

 

等开销负载均衡

等开销负载均衡是指到达同一目标网段,存在多条路由条目,存在两条或两条以上的路由优先级值和开销值都是最优的(优先级值和开销值一致),则这几条路径执行负载均衡(在ping中就是这条路由发个包再下一条路由再发个包,轮流发)

问题:假如上图的两条路由的速度为1000Mbps和100Mbps的话,由于负载均衡(两条路由轮流输送数据)会导致最高的数据传输效率也只能达到200Mbps

解决方案:可以将高速路由设置为主路由,低速路由设置为备用路由(设置路由的优先级,静态路由默认优先级值为60,可以把低速路由的优先级值设置为100)

浮动路由

浮动路由是静态路由支持手工指定优先级,可以通过配置目的地址/掩码相同、优先级不同、下一跳不同的静态路由,实现转发路径的备份。浮动路由是主路由的备份,保证链路故障时提供备份路由。主路由下一跳可达时该备份路由不会出现在路由表。

静态路由手工汇总

将多条路由汇总成一条路由表示(将多个子网汇总成一个网段作为配置路由的目标地址)

目的:1.减少路由条目数量,减小路由表,加快查表速度 2.增加网络稳定性

缺省路由

缺省路由是一种特殊的路由,当报文没有在路由表中找到匹配的具体路由表项时才使用的路由。如果报文的目的地址不能与路由表的任何目的地址相匹配,那么该报文将选取缺省路由进行转发。

缺省路由在路由表中的形式为0.0.0.0/0(这个代表所有网段),缺省路由也被叫做默认路由。

理解:当设备中设有缺省路由(使用下一跳地址来确定缺省路由指向哪个设备)时,那么在进行数据转发时在路由表中没有目标地址时,会调用缺省路由并进行转发(当上图的RTA的没有前往的192.168.2.0的路由时,由于设置了缺省路由,导致RTA也是可以ping通的)

缺省路由一般用在边界设备

路由黑洞以及路由环路的产生以及解决方案

在路由汇总过程(汇总时不严谨,把不属于的网段也包含进去)中会出现路由黑洞(传过去的数据包没有对于的路由条目前往导致丢弃),当路由汇总与缺省路由同时出现可能会导致产生路由环路(数据无限循环传递,直到三层数据包结构中的Time to Live为零时丢弃数据)

解决方案:在手工汇总的路由器上手工添加一条指向null 0 的路由防止路由环路的产生。

有关静态路由(全)的更多相关文章

  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-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

  5. 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个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  6. ruby - cucumber 的路由问题 - 2

    我正在使用rails3和cucumber,除了这个小问题,一切都很顺利GivenIamonthe"editautomobile"pageNoroutematches{:controller=>"automobiles",:action=>"edit"}(ActionController::RoutingError)现在路径在paths.rb中设置为edit_automobile_path在routes.rb中我有汽车作为资源,我搭建了它所以请告诉我我遗漏了什么,清楚地定义了路线并且匹配,因为我运行了rake路线并看到了路线。请指出正确的方向 最佳答案

  7. ruby - Rails 路由 : Giving default values for path helpers - 2

    有什么方法可以为url/path助手提供默认值吗?我有一个可选范围环绕我的所有路线:#config/routes.rbFoo::Application.routes.drawdoscope"(:current_brand)",:constraints=>{:current_brand=>/(foo)|(bar)/}do#...allotherroutesgohereendend我希望用户能够使用这些URL访问网站:/foo/some-place/bar/some-place/some-place为了方便起见,我在我的ApplicationController中设置了一个@current

  8. ruby-on-rails - 将 Rails 路由助手作为类方法添加到类中 - 2

    我如何将像“root_path”这样的Rails路由助手作为类方法添加到像my_model.rb这样的类中?所以我的课是这样的:ClassMyModeldefself.fooreturnself.root_pathendendMyModel.foo以上不起作用,因为ClassMyModel不响应root_path这是我所知道的:我可以使用includeRails.application.routes.url_helpers,但这只会将模块的方法添加为实例方法我试过扩展Rails.application.routes.url_helpers但它没用请随时给我上课:)

  9. ruby-on-rails - 获取 ActionController::RoutingError(当尝试使用 AngularJS 将数据发布到 Rails 服务器时,没有路由匹配 [OPTIONS] "/users" - 2

    尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg

  10. ruby-on-rails - 在条件路由期间未在 Rails 3 中设置 request.subdomain - 2

    我正在尝试根据RyanBatesscreencastonsubdomains在Rails3中设置子域.但是它对我不起作用。我有以下设置:#routes.rbconstraints(Subdomain)doget'devices'=>'devices#all'end#lib/subdomain.rbclassSubdomaindefself.matches?(request)#binding.pryrequest.subdomain.present?&&request.subdomain=="admin"endend加载urladmin.localhost:3000/devices应该将

随机推荐