指导IP报文从源地址发送到目的的路径信息,也可以理解成为通过相互连接的网络把数据包从源地址移动到目标地点的过程。
1.路由功能(寻址功能):路由表的建立、维护、查找
2.交换功能:路由器的交换功能与以太网交换机执行的交换功能不同,路由器的交换功能是在网络之间转发分组数据的过程,包括从接受端口收到数据帧、解封装、对数据包做出相应处理、根据目的网络查找路由表、决定转发端口、以及做新的数据链路层封装过程。
3.隔离广播、指定访问规则:路由器阻止广播的通过,并且可以通过设置访问控制列表(ACL)来对流量进行控制。
4.异种网络互联:支持不同的数据链路层协议,连接异种网络
5.子网间的速率匹配:路由器有多个端口,不同的端口具有不同的速率,路由器需要利用缓存及流控协议进行速率适配。
1.路由表
display ip routing-table //查看路由表
路由表中包含的关键项:
1.Destination:目的地址
2.Mask:网络掩码
3.proto:即protocol,指用来生成、维护路由的协议或者方式方法,如RIP(路由信息协议)、OSPF(开放式最短路径优先)、ISIS(中间系统到中间系统)、BGP(边界网关协议)......
4.Pre:即preference,指本条路由加入IP路由表的优先级
5.Cost:路由开销
6.NextHop:指下一跳IP地址,说明IP报文所经由的下一个设备。
7.interface:指输出端口,说明IP报文将从路由器的那个端口转发。
与路由器直连的网段的路由条目。直连路由不需要特别配置,只需要在路由器端口上设置IP地址,然后由链路层发现即可。在路由表中,直连路由的Proto字段显示为Direct,路由的优先级为0,路由开销COST为0。
进入对应端口:interface g/0/0/1
ip address 192.168.1.1 24
系统管理员手工设置的路由称为静态路由,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络拓扑的改变而改变。
优点:不占用网络带宽和系统资源,安全。
缺点:当网络故障发生后,静态路由不会自动修正,必须有管理员的介入,需要网络管理员逐条配置,不能自动根据网络状态变化做出相应的调整。
在路由表中,静态路由的Proto字段显示为Static,默认情况下,路由器优先级Pre为60,路径开销Cost为0.
display ip routing-table
指由动态路由协议发现的路由。当网络拓扑十分复杂时,手工配置路由的工作量大而且容易出现错误,这时就可用动态路由协议,让其自动发现和修改路由,无需人工维护,但动态路由协议开销大,配置复杂。网络中存在多种路由协议,如RIP、OSPF、ISIS等,各协议都有其各自的特点和应用环境。
通过display ip routing-table查看路由表可以发现,动态路由的Proto字段显示了各路由协议的名称,路由优先级Pre和路径开销Cost根据路由协议的不同而各不相同。
(1)默认路由
默认路由是一种特殊路由,其网络地址和子网掩码全部都为0
生成方式:
手工配置静态方式配置默认路由
某些动态路由在边界路由器上也可以生成默认路由
当路由器收到一个目的地址在路由表中查找不到数据包时,会将数据包转发给默认路由指向下一条跳,如果路由表中不存在默认路由,那么该报文将被丢弃,并向源端返回一个ICMP报文,报告该目的地址或者网址不可达。在路由器上,使用命令“display ip routing-table"可以查看当前是否设置了默认路由。
(2)主机路由
主机路由,顾名思义就是针对主机的路由条目,通常用于控制到达某台主机的路径。主机路由的特点是其子网掩码为32位。
黑洞路由是一条指向NULL0的路由条目,NULL0是一个虚拟端口,特点是永远开启,不可关闭。凡是匹配黑洞路由的协议,都将在此路由器上被终结,且不会向源端通告信息。
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
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上找到一个类似的问题
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano