一、路由器工作原理
1.什么是路由器?
路由器的定义:是实现网络互连设备,工作在网络层
路由器的功能:
路由和转发
1)可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的最佳传输路径),这个过程称为路由;
2)将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转发。
路由器的作用:
· 实现网络互连,为分组数据提供转发。
· 子网间速率适配
· 隔离子网
· 隔离广播域
· 指定访问规则
· 不同类型的网络互联:
路由器经常会收到以某种类型的数据链路帧封装的数据包,当转发这种数据包时,路由器可能需要将其封装为另一种类型的数据链路帧。数据链路封装取决于路由器接口的类型及其连接的介质类型。
2.什么叫路由?
路由就是数据包从源主机到目标主机的转发过程,如图所示:

3.什么是路由表:路由表就是路由器中维护的路由条目的集合,路由器根据路由表来做传输路径的选择
如上图图所示:路由器A和B是经过配置的路由在他们的路由表中就保存了相应的网段和接口,如果主机1.1要发送数据包给主机3.1:
(1)因为IP地址不在同一网段,主机就会将数据包发送给本网段的网关路由器A。
(2)路由器A接收到数据包,查看数据包IP首部中的目标IP地址,在查找自己的路由表。数据包的目标IP地址是3.1.属于3.0网段路由器A在路由表中查到3.0网段转发的接口是S0接口。于是,路由器就将数据包从S0接口转发出去。
(3)每个路由器但是按这个步骤去转发数据的,直到到达了路由器B,用同样的方法,从E0口转发出去,主机3.1接受到这个数据包。
同网段和不同网段主机通信的区别就在于。同网段直接查找主机,而不同网段需要将数据包发送给网关。
4.路由器和交换机的区别?
交换机是查看MAC地址表的,路由器是查看路由表的。交换机如果没有在MAC地址表中找到自己想要的,它就要进行区域泛洪,而路由器如果在路由表中找不到对应的条目会直接丢弃数据包,并返回一个不可到达的信息。他不会发送广播,所以路由器有隔离广播域的功能而交换机所在的网络内部就是一个广播域,他只在本区域泛洪,不会泛红到路由器外面;且交换机工作在二层,根据MAC地址表转发数据帧,路由器工作在三层,根据路由表转发数据包,交换机一般工作在据域网内,而路由器工作在广域网。
5.路由器转发数据包的封装过程

上图路由器转发数据的封装过程如下:
(1)源IP192.168.1.2 目的ip 192.168.2.2
源MAC11-11 目的MAC 22-22
先ARP广播解析出E0MAC地址。进行第一封装
(2)先解封装,查看数据包的目的IP,查询路由表,确定转发路径,给路由器B
先ARP广播解析出路由器BE1MAC地址。进行第二封装源IP192.168.1.2目的ip192.168.2.2源MAC33-33目的MAC 44-44
(3)先解封装,查看数据包的目的IP为自己的直连网段,通过E0发给主机B
先ARP广播解析出主机B的MAC地址。进行第三封装源IP192.168.1.2目的ip192.168.2.2源MAC 55-55 目的MAC 66-66
(4)数据包送到主机B,一路解封装送到应用层
总结:路由器封装的过程IP地址不变MAC地址变
二、静态路由和默认路由的配置
1.什么是直连路由,静态路由和动态路由呢?
第一是通过数据链路层自动发现,这种类型的路由就是直连路由;
第二是手工配置的路由条目,这种类型的路由就是静态路由;
第三是通过动态路由选择协议学习,这种类型的路由就是动态路由。
2. 实验一
实验原理 :
静态路由是用户或者网络管理员手工配置的路由信息,当网络的拓扑结构或者链路状态发生改变的时候,需要管理员手动修改路由信息。静态路由不适合大型的网络环境,当网络的拓扑结构和链路状态发生改变的时候,网络管理员需要做大量的调整,且无法感知错误的发生,不宜排错。
默认路由是一种特殊的路由,当路由表中与数据包的目的地址没有匹配的表项时,数据包根据默认路由条目进行转发。在末梢网络中,默认路由可以大大简化路由器配置,减轻网络管理员的工作负担。可以负载均衡和路由备份 局域网和因特网互联互通的时候使用。
实验目的:
掌握配置静态路由的方法
掌握配置静态路由下一跳的方法
掌握配置静态路由连通性的方法
掌握配置默认路由的方法
掌握配置默认路由的方法
掌握简单网络中部署静态路由时的故障排除方法
掌握简单的网络优化方法。
实验拓扑:

先配置两台主机的ip地址,子网掩码和网关地址:

然后配置出三个路由器接口对应的网段用命令ip address:

然后我们把R1,R2,R3要到达的子网号和下一跳连通 使用命令ip-route-static

最后我们就可以打开主机的命令行测试有没有ping通显示丢包为o就代表我们实验成功了:

实验中我们可以用tracert来查看每个网段的连通性这样便于我们查找错误:

我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
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
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的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
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我知道全局变量$!包含最新的异常对象,但我对下面的语法感到困惑。谁能帮助我理解以下语法?rescue$! 最佳答案 此构造可防止异常停止您的程序并使堆栈跟踪冒泡。它还会将该异常作为值返回,这很有用。a=get_me_datarescue$!在此行之后,a将保存请求的数据或异常。然后您可以分析该异常并采取相应措施。defget_me_dataraise'Nodataforyou'enda=get_me_datarescue$!puts"Executioncarrieson"pa#>>Executioncarrieson#>>#更现实的