IRDPicmp router discovery protocol   icmp路由器发现协议
 
icmp的路由器通告和请求报文。
 
主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。
 
 
 
 IRDP试验参考_职场
 
ICMP请求报文格式,这个由于没有接主机所以没有测试发现。
 
IRDP试验参考_gateway-discovery_02
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中。
 
 
====================================
 
实验
 
IRDP试验参考_IRDP_03
 
R1
interface Ethernet0
 ip address 10.1.1.1 255.255.255.0
 no ip proxy-arp
 ip irdp
 
ifip 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
 
==========================
 
ifip irdp  address 10.1.1.1 preferencevalue
 
当一个接口有多个地址时,如果打上
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字节。
address10.1.1.1  e0口地址
preference0  默认优先级
 
输入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,所以收不到(可能由于路由器模拟主机的原因)
 
R4E0
ifip irdp   E0口上使能irdp这样再show ip int e0
发现R4E0口加入了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同时输入,生效的是哪个呢?
 
===================================
 
IRDP试验参考_IRDP_04
 
实验二:如果R1、R2都向同一网段发送ICMP通告报文,R4选谁为网关呢?
 
应该是优先级谁大,谁抢占网关的位置,但GDP却是先到先得,后到的当备份网关。
 
show ip irdp