静态路由:管理员手动输入路由器命令管理
动态路由:根据拓扑或流量改变而自动调整
RIP路由协议的优点和缺点:
RIP协议(距离矢量路由选择协议)的优缺点:
(1)优点:对于小型网络,RIP就所占带宽而言开销小,易于配置、管理和实现。
(2)缺点:当有多个网络时会出现环路问题。环路问题的解决需要消耗一定的时间和带宽。采用RIP协议,其网络内部所经过的链路数不能超过15,这使得RIP协议不适于大型网络。
优点:配置简单(易于配置、管理和实现,适用于小型网络)
缺点:不适合大型网络、每隔30秒发送一次,会占用带宽、浪费资源。最大跳数为15条,只适合小型网络。当有多个网络时会出现环路问题。
(当有多个网络时会出现环路问题,其网络内部所经过的链路数不能超过15所以不适于大型网络)
版本1版本2的共同点和区别
版本二:管理距离(120)
解决环路的五个机制


自治系统是通用管理域中的网络的集合。
内部网关协议在自治系统中工作。(在某一个自治系统内采用的协议)(RIPv2、EIGRP、OSPF)
外部网关协议连接不同的自治系统。(最典型的为BGP)


(距离:通过跳数来判断到达路由有多远)(矢量:方向,目标)
路由器定期将路由表的副本传递给邻居路由器并累计距离矢量。
RIP是一个典型的距离矢量路由协议
1、首先路由器学习到直连网段
路由器开始运行RIP,当路由器的更新周期30秒到了的时候,会向邻居发送路由表
Metric:度量值,衡量一条路由好坏的值。发送路由表时Metric值会加1
学习路由时,会学习最佳路由,将Metric值小的路由放到路由表当中(Metric值就是跳数)
RIP的工作原理:
首先:在路由器上运行rip路由协议
#router rip 开启RIP路由协议
#network 10.0.0.0****告诉对方自己连了几个网络
#network 20.0.0.0
其次:在每个路由器上配置完成后,每隔30秒钟会向邻居路由器发送自己的路由表。Metric会加1,路由器根据Metric值选择一条最优路由添加到路由表。
R 10.0.0.0 20.0.0.0 Metric值为1(20.0.0.0虽然是直连的,但是是学习过来的,所以Metric值为1,发现是自己直连的就删除学习过来的20.0.0.0)
形成路由表并实现网络通信的过程称为收敛时间。(收敛时间越快越好)

为什么会形成环路?
不一致的路由条目:计数至无穷大和路由环路
1、计数到无穷大
每个节点都会维护从自身到每个可能的目的网络的距离
(1)计数至无穷大的解决方案:定义最大跳数(15跳)(超过15跳目标就不回答了)
设置跳数限制以防止无限环路
2、路由环路
前往网络 10.4.0.0 的数据包在路由器B和 C 之间来回传递(环路)。
路由环路的解决方案:水平分割(从某个路由器学到的路由条目就不再发回去了)
向原始信息的来源方向返回路由信息毫无用处。
3、路由环路的解决方案:路由毒化和毒性逆转
C:当4.0断开后,路由器将已经断开的路由的距离通告为无穷大。并立刻开启触发更新,向B发送更新包。
B:收到更新包后,将4.0路由标记为“可能已断开”,忽略水平分割,进行毒性逆转,向C发送路由信息,告诉C可能已断开。

4、路由环路的解决方案:抑制计时器
路由器为网络中的“可能有故障”状态保留条目(保留一段时间,每隔30秒不发送了),以便为其它路由器重新计算拓扑更改留出时间。
5、路由环路的解决方案:触发更新
路由表发生变化时,路由器发送更新。
小结:在RIP中解决路由环路的办法有定义最大跳数;水平分割;路由毒化与毒性逆转;抑
制计时器;触发更新。
RIP v1❤
发送路由更新时不携带子网掩码(只管你是A类、B类还是C类的),宣告主类网络,属于有类路由协议
发送路由更新时,目标地址为广播地址:255.255.255.255
RIP v2❤
发送路由更新时携带子网掩码,属于无类路由协议
发送路由更新时,目标地址为组播地址:224.0.0.9
广播:发给所有
组播:发给一组(部分)
GNS3的使用方法:
Edit ->IOS image->加载解压的IOS文件的c7200…->save
路由器点上面的绿色按钮开机
路由器->右键->console进入配置行
错误:205-VM: unable to enable NIO for slot 0/16
出错原因是在设备启动后才添加连接。解决:先添加连接再启动。
路由器->右键->configure->选中路由器名称->Slots->添加端口

选择上面的abc显示端口
配置RIPV1(默认情况下就是版本1):
开启路由器断开(no shutdown)
给路由器端口设置IP地址
给R3设置回环地址3.3.3.3
R1(config)#router rip
R1(config-router)#version 1
R1(config-router)#network 12.1.1.0
ver
R2(config-router)#network 12.1.1.0
R2(config-router)#network 23.1.1.0
R3(config-router)#network 23.1.1.0
R3(config-router)#network 3.3.3.3
#show ip route
R表示RIP路由协议学习的路由条目
R 3.0.0.0/8 [120(路由协议的优先级,数值越低,优先级越高)/2(Metric跳数)] via 12.1.1.1(通过这个接口出去的)
配置RIPV2:(可以根据子网掩码长度来判断它是哪个网络)
R1(config)#router rip
R1(config-router)#version 2
#**clear ip route *** 清空路由表(让它重新学习)
R1(config)#router rip
R1(config-router)#network 12.1.1.0
R1(config-router)#no auto-summary 关闭自动汇总
#clear ip route *
R1(config-router)#network 12.1.1.0 7
#show ip route
RIP版本1版本2默认不兼容(给路由器一个设置为版本1,另一个设置为版本2,它们是不能互相学习)
版本2的路由器靠近版本1的接口上设置接收和发送版本1(两个路由器做一个就行)
R1(config)#int f0/1
R2(config-if)#ip rip send version 1
R2(config-if)#ip rip receive version 1
CCNA手册
被动路由(在接口上禁用运行rip):
只接收,不发送,路由器学习其他路由器的路由条目,别的路由器不能学习他路由条目
R3#router rip
#passive-interface f0/1
自动汇总(按IP地址汇总成的主类网络)

手动汇总:(汇总成一个相对较小的网络)
在R3左边的接口上告诉一个IP地址(172.16.0.0/20)
开启RIP协议:R1(config)#router rip
关闭自动汇总:R1(config-router)#no auto-summary
进入se0/0(出口)接口:R1(config)#interface se0/0
在接口下进行汇总:R1(config-if)#ip summary-address rip 172.16.0.0 255.255.252.0
单播更新:
补充:要会看路由表,【120/1】其中rip的管理距离是120, 跳数为1
过滤路由(R1只接受R2、R3不接收R4)
RIPV2产生默认路由:
掌握第一种方法就行
给出口路由配置静态路由
出口路由需要手动配置
RIPv2认证(RIPV1没有认证机制):
RIP的认证:基于端口的认证
两种方式:
明文
密文
R1(config)#key chain ccie1(钥匙链名称)
#key 1 (第一把钥匙)
#key-string ccie123 (这把钥匙对应的密码)
R1(config)#int f0/0
#ip rip authentication mode md5 (开启认证,认证的过程通过MD5加密)
#ip rip authentication key-chain ccie
R1#show ip route(认证通过了才能学得它的网络)
过滤路由:(在需要对某一个网络进行保护的时候)(要用到ACL)
配置ACL:匹配需要过滤的路由条目
禁止进in 出out
R2(config)#access-list 1 deny 172.16.3.0 0.0.0.255(这里要用反掩码,255.255.255.255-掩码值=反掩码值,为0的部分精确匹配)
ACL配置了会默认拒绝所有
#access-list 1 permit any 除了上面的拒绝其余的都允许
在rip进程中配置过滤:
R3(config)#router rip
#distribute-list 1 out
R1#show ip route
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
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上找到一个类似的问题
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h