IRDP icmp router discovery protocol   icmp 路由器发现协议 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

icmp 的路由器通告和请求报文。

 

主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。

 

 

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 

 

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 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字节。

address 10.1.1.1  e0 口地址

preference 默认优先级

 

输入 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