首先我们先来聊聊RIP协议是如何工作的。
首先是网络拓扑,依旧是我的协议原理探寻实验系列的基本套路拓扑(一字长蛇阵),
R1、R2、R3 三台路由器 一字直连。
完成如下拓扑环境之后,我们开始配置 RIP协议,我们现在R1 和R2间配置 同时在R1和R2的链路上抓包。
先把R2 的F0/0 shutdown掉。(因为GNS 是在环回口上实现虚拟设备间的接口桥接,所以存在一个bug 当一条链路上的一端端口donwn,掉另一端的接口是感知不到还是处于up状态)
R1(config)#router rip
R1(config-router)#no auto-summary
R1(config-router)#version 2
R1(config-router)#net 111.111.111.111
R1(config-router)#net 12.12.12.0
然后我们从wirshark上抓到两个数据包
NA的时候我们都学过,路由器的接口被rip宣告之后就会立刻想邻居发送路由请求报文,同时将自己的路由表发送出去。
抓包的报文摘要提示一个是response也就是应答报文,一个是requset也就是请求报文。
应该是一个是发送路由,一个是请求路由的报文。
我们先看发送路由的报文。
报文类型 2(响应报文)
内容是
前缀
掩码
下一跳
开销值
———————— 没什么毛病。
111.111.111.1111/32 网段就在我身边,就一条,找111.111.111.111的包裹交给我我立马就能转交给他。百分百可靠。
我们在看requset也就是请求报文。
报文结构 和应答报文是一样的。
报文代码类型为1也就是请求
下面那坨的结构和应答一样都。
address not specified 未指定地址, ,显然这个字段没填充任何内容。
掩码是0.0.0.0
开销值是16
开销值是16 !!!!!!!!
我们都知道RIP协议路由最大最大传递15跳,超过则不可达。
这个报文按内容的角度来理解就是 我R1去往任何未知的网段都是16跳也就是不可达的。
再翻译翻译就是我R1什么地方都去不了,兄嘚您看着办吧。
动态路由协议用来干啥的,不就是为了共享路由的。
路由器兄弟们加入组织不就是为了共享路由互帮互助一起完成数据报文的转发业务么?
人人为我,我为人人啊。
路由器R2收到R1的那充满彷徨绝望的说自己哪都去不了的求救信息,自然责无旁贷看看自己的路由表,能去哪些地方,把这些信息告诉R1,并附上有偿服务的报价。
以上就是rip启动的时候 向邻居请求路由的过程。
Response,requset两种报文除了代码类型字段不一样之外,内容并无差异。
完全没有为向邻居请求完整路由表专门设计一个包含“请求完整路由表”内容的消息报文。
而是在Response的 IP和掩码 字段直接留空,开销改成16跳来暗示rip邻居设备,我想要你的路由表。
接下来是路由撤销报文的探寻测试
我们先把R1的lo0口直接shutdown关闭,模拟R1丢失了111.111.111.111的路由。
R1(config)#int lo0
R1(config-if)#shutdown
然后继续抓包
正常的逻辑应该是R1向邻居扩散一条 报文一个是向邻居通过自己这条路由失效了,同时发送一条查询报文问邻居去往111.111.111.111 你有道么?
继续抓了一坨报文,好像没有什么摘要信息是和撤销和查询有关的。
继续看细节。
R1 向R2发送了条 通告 消息,告诉R2 去往111 我需要16跳,也就是我离111,太远了,去不了,您自个看着办吧。
好像和前面请求路由表的套路一样。现在只是变成了明确的目的地址。
R2收到这条消息后,回看自己的路由表,尼玛,不就是你告诉我去往111找你收一块代送费么? 你小子骗我,老子先记着去111的数据包先不往你R1这发了, 我找R3去问问这事,去往111 看他能不能搞定,不过我之前和R3承诺过去往111可以找我,干脆的也学R1那个骗子一样,向R3发了条通告 去往111.经由我这需要16跳,让他自己体会,反正R1是这么告诉的。
R3收到后,一声日你仙人板板。发现没地方继续找了,原话奉还。 让R2自己看着办,R2一看没辙,回头告诉R1 我这去往111也要16跳。
最后一页是总结
RIP协议没有单独的去为以下这些需求去专门开发设计通信消息报文
向邻居请求整张路由表、
通知邻居撤销自己通告给它的路由、
向邻居查询指定的路由信息、
向邻居通告,你向我查询的路由我没有。
而是巧妙的利用常规的路由通告消息报文结构结合一个不可达的开销值(16)用一句,
那地方太远了要16跳,要不要把去往那地方的东西给我,你自己看着办。
大家互相耍赖的方式完成了路由的信息共享。
而高级距离矢量路由协议EIGRP也是类似的, 指定的路由查询报文和最终响应目的不可达的报文都是这种不明确告诉你我要干啥,你自己看着办的耍赖机制。
以下是eigrp的查询报文 (响应的报文我就不放了)
4294967295/256*10=167,772,159.96微秒, 1秒等于10^6微秒。 167.7秒
光速是30万KM/秒 30W*167=5010万公里。 呵呵地球和火星距离最近的时候是5565万公里,兄嘚你所要去的目的地址大概在火星上。