IRDP
:icmp router discovery protocol icmp
路由器发现协议
用
icmp
的路由器通告和请求报文。
主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。
ICMP请求报文格式,这个由于没有接主机所以没有测试发现。
ICMP通告报文格式
路由器在一份报文中可以通告多个地址。
地址数指的是报文中所含的地址数。---------通告几个ip出去。
地址项大小指的是每个路由器地址32 bit字的数目,始终为2。----包含地址+优先级
生存期指的是通告地址有效的时间(秒数)。默认为1800秒,30分钟。
接下来是一对或多对I P地址和优先级。I P地址必须是发送路由器的某个地址。优先级是一个有符号的32 bit整数,指出该I P地址作为默认路由器地址的优先等级,这是与子网上的其他路由器相比较而言的。值越大说明优先级越高。优先级为0 x 80000000说明对应的地址不能作为默认路由器地址使用,尽管它也包含中通告报文中。优先级的默认值一般为0。
-2147483648----2147483647 ,默认为0
优先级32位,0x80000000=-2147483648 0x7fffffff=2147483647
最高位为1代表负数,然后慢慢往上+,0x80000001=-2147483647 0xffffffff=-2147483648+2147483647=-1
当路由器启动时,它定期在所有广播或多播传送接口上发送通告报文。准确地说,这些通告报文不是定期发送的,而是随机传送的,以减小与子网上其他路由器发生冲突的概率。一般每两次通告间隔4 5 0秒和6 0 0秒。一份给定的通告报文默认生命周期是3 0分钟。
使用生命周期域的另一个时机是当路由器上的某个接口被关闭时。在这种情况下,路由器可以在该接口上发送最后一份通告报文,并把生命周期值设为0。即路由器接口关闭时,会先发送最后一份通告报文,并把生命周期值设置为0,这时主机就不会再把这台主机当默认路由器了。
在接口手工down前。
除了定期发送主动提供的通告报文以外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。
主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次。一旦接收到一个有效的通告报文,就停止发送请求报文。
主机也监听来自相邻路由器的通告报文。这些通告报文可以改变主机的默认路由器。另外,如果没有接收到来自当前默认路由器的通告报文,那么默认路由器会超时。
只要有一般的默认路由器,该路由器就会每隔1 0分钟发送通告报文,报文的生命周期是3 0分钟。这说明主机的默认表项是不会超时的,即使错过一份或两份通告报文。
以上都是默认情况下。
如WINDOWS98默认情况下 配置使用IRDP,WINNT需要手工配置支持IRDP环境,并在启动的时候广播3个ICMP Router Solicitation messages(ICMP路由请求消息)。
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B223756
将IRDP客户端支持添加到windows NT中。
====================================
实验
R1
:
interface Ethernet0
ip address 10.1.1.1 255.255.255.0
no ip proxy-arp
ip irdp
if
#ip irdp ?
r1(config-if)#ip irdp ?
<cr>
address addresses to proxy-advertise
holdtime how long a receiver should believe the information
maxadvertinterval maximum time between advertisements
minadvertinterval minimum time between advertisements
multicast advertisements are sent with multicasts
preference preference level for this interface
r1(config-if)#ip irdp
==========================
if
#ip irdp address 10.1.1.1 preference-value
当一个接口有多个地址时,如果打上
if#ip irdp 会以所有地址为源地址发送ICMP通告报文,但路由器可以选择发送哪些,以及哪些优先级设置为多少,这里的优先级越高越优先,
-2147483648代表不能成为网关。
===================================
r1(config-if)#ip irdp holdtime ?
<4-9000> holdtime (default 1800 seconds)
r1(config-if)#ip irdp holdtime
主机接收到ICMP通告报文后,保持多长时间,默认为1800秒=30分钟。最长可设置2个半小时。
====================================
r1(config-if)#ip irdp maxadvertinterval ?
0 advertise only when solicitated
<4-1800> maximum time between advertisements (default 600 seconds)
r1(config-if)#ip irdp min
r1(config-if)#ip irdp minadvertinterval ?
<3-1800> minimum time between advertisements (default 450 seconds)
r1(config-if)#ip irdp minadvertinterval
icmp通告报文发送的时间间隔。
ip irdp maxadvertinterval 0
-----这时路由器不会周期性的发送icmp通告报文,只有当主机请求的时候才会发送。
ip irdp minadvertinterval/maxadvertinterval
---这两个是路由器发送两个icmp通告报文之间的间隔,如果有了默认路由器了,就10分钟(600秒)发送一次。相对于holdtime正好是maxadvertinterval的3倍。
============================================
if)#ip irdp multicast
icmp的报文默认以广播形式发送,打上这句话,以组播形式发送,发送地址为224.0.0.1,本条链路上的所有节点。
默认情况下。
debug ip icmp
debug ip packet detail
*Mar 1 10:03:41.405: IP: s=10.1.1.1 (local), d=255.255.255.255 (Ethernet0), len 36, sending broad/multicast
*Mar 1 10:03:41.409: ICMP type=9, code=0
*Mar 1 09:24:19.777: ICMP: src=10.1.1.1, dst=255.255.255.255, irdp advertisement sent
*Mar 1 09:24:19.781: IRDP: entries=1, size=2, lifetime=12, bytes=36
*Mar 1 09:24:19.781: IRDP: address=10.1.1.1 preference=0
可以看到icmp报告报文发往255.255.255.255。
entries=1 ,条目1,代表只通告了一个地址
size=2 ,代表每个地址有2个32bit。
lifetime=12,因为我刚才设置了
ip irdp maxadvertinterval 4
,所以holdtime自动改成了它的3倍。12秒了。
bytes=36,因为icmp基本报文头部=8字节,然后加上一个条目,一个条目又是4字节的地址+4字节的优先级,再加上20字节的IP包头。所以一共36字节。
address
=10.1.1.1 e0
口地址
preference
=0
默认优先级
输入
if)#ip irdp multicast
debug ip icmp
*Mar 1 09:32:01.777: ICMP: src=10.1.1.1, dst=224.0.0.1, irdp advertisement sent
*Mar 1 09:32:01.781: IRDP: entries=1, size=2, lifetime=12, bytes=36
*Mar 1 09:32:01.781: IRDP: address=10.1.1.1 preference=0
目的地址变为224.0.0.1了。
========================================
if)#ip irdp preference
改变接口地址的整体优先级,前面有一个是可以改特定地址的优先级的。
=============================================
将R4配置成主机
no ip routing
int e0
ip add 10.1.1.4 255.255.255.0
不写网关
,
这时候
ping R1
上的环回口
ping
不通。
在
R4
上必须配置
cisco
私有的
GDP
协议
(gateway discovery protocol)
才能够将
icmp
的报告报文识别为网关。
r4(config)#ip gdp irdp ?
multicast IRDP solicitations are multicast
<cr>
・
第一种情况
:R1 irdp broadcast R4 ip gdp irdp
r4#sh ip route
Gateway Using Interval Priority Interface
10.1.1.1 IRDP 3 0 Ethernet0
Default gateway is 10.1.1.1
Host Gateway Last Use Total Uses Interface
ICMP redirect cache is empty
R4会自动学习到一条默认网关。gateway为10.1.1.1 用IRDP学习到的。interval=minadvertinterval
priority=preference
这时删除ip gdp irdp,show run时,命令会自动添加一条ip default-gateway 10.1.1.1命令。
这时将R1的接口shutdown
R1
*Mar 1 10:24:16.365: ICMP: src=10.1.1.1, dst=255.255.255.255, irdp advertisement sent
*Mar 1 10:24:16.369: IRDP: entries=1, size=2, lifetime=0, bytes=36
*Mar 1 10:24:16.373: IRDP: address=10.1.1.1 preference=0
*Mar 1 10:24:16.373: IP: s=10.1.1.1 (local), d=255.255.255.255 (Ethernet0), len 36, sending broad/multicast
*Mar 1 10:24:16.377: ICMP type=9, code=0
R1会发lifetime=0的报文,让R4删除网关。
第二种情况 R1 ip irdp multicast R4 ip gdp irdp multicast
这时R4收不到对方发来的icmp通告报文。因为R1发往224.0.0.1
show ip int e0-------发现R4的E0口没有加入组224.0.0.1,所以收不到(可能由于路由器模拟主机的原因)
在
R4
的
E0
口
if
#ip irdp
在
E0
口上使能
irdp
,
这样再
show ip int e0
发现
R4
的
E0
口加入了
224.0.0.1 ,224.0.0.2
两个保留组。
这样R4还是发现不了网关。有待进一步研究
第三中情况 R1 multicast R4 ip gdp irdp
一个组播,一个接收广播,不行
第四种情况 R1 ip irdp R4 ip gdp irdp multicast
一个组播,一个接收广播,不行
=======================================
R4上发现
ip gdp 后面还有rip和eigrp的参数
eigrp没有测试出来
ip gdp rip测试结果,R4只能接受RIP组播的更新,并自动生成网关。
如果ip gdp irdp和ip gdp rip同时输入,生效的是哪个呢?
===================================
实验二:如果R1、R2都向同一网段发送ICMP通告报文,R4选谁为网关呢?
应该是优先级谁大,谁抢占网关的位置,但GDP却是先到先得,后到的当备份网关。
show ip irdp
本文出自 “学习网络知识” 博客,转载请与作者联系!