网络通信 频道

ICMP地址掩码请求与应答

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文(这一过程与无盘系统在引导过程中用RARP获取IP地址是类似的)。无盘系统获取子网掩码的另一个方法是BOOTP协议,ICMP地址掩码请求和应答报文的格式如图6-4所示。

图6-4 ICMP地址掩码请求和应答报文
I C M P报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。这样,发送端就可以把应答与请求进行匹配。
我们可以写一个简单的程序(取名为i c m p a d d r m a s k),它发送一份I C M P地址掩码请求报文,然后打印出所有的应答。由于一般是把请求报文发往广播地址,因此这里我们也这样做。目的地址(1 4 0 . 2 5 2 . 1 3 . 6 3)是子网1 4 0 . 2 5 2 . 1 3 . 3 2的广播地址(见图3 - 1 2)。sun % icmpaddrmask 140.252.13.63 received mask = ffffffe0, from 140.252.13.33 来自本机received mask = ffffffe0, from 140.252.13.35 来自b s d i received mask = ffff0000, from 140.252.13.34 来自s v r 4 在输出中我们首先注意到的是,从s v r 4返回的子网掩码是错的。显然,尽管s v r 4接口已经设置了正确的子网掩码,但是S V R 4还是返回了一个普通的B类地址掩码,就好像子网并不存在一样。svr4 %ifconfig emd0 emd0: flags=23> inet 140.252.13.34 netmask ffffffe0 broadcast 140.252.13.63 S V R 4处理I C M P地址掩码请求过程存在差错。我们用t c p d u m p命令来查看主机b s d i上的情况,输出如图6 - 5所示。我们用-e选项来查看硬件地址。

图6-5 发到广播地址的ICMP地址掩码请求

主机在内(参见图2 - 4,当以太网驱动程序识别出目的地址是广播地址后,它就把分组送到网络上,同时传一份拷贝到环回接口)。
接下来,b s d i广播应答,而s v r 4却只把应答传给请求主机。通常,应答地址必须是单播地址,除非请求端的源I P地址是0 . 0 . 0 . 0。本例不属于这种情况,因此,把应答发送到广播地址是B S D / 3 8 6的一个内部差错。
R F C规定,除非系统是地址掩码的授权代理,否则它不能发送地址掩码应答(为了成为授权代理,它必须进行特殊配置,以发送这些应答。参见附录E)。但是,正如我们从本例中看到的那样,大多数主机在收到请求时都发送一个应答,甚至有一些主机还发送差错的应答。
最后一点可以通过下面的例子来说明。我们向本机I P地址和环回地址分别发送地址掩码请求:sun % icmpaddrmask sun received mask= ff000000, from 140.252.13.33 sun % icmpaddrmask localhost received mask= ff000000, from 127.0.0.1
上述两种情况下返回的地址掩码对应的都是环回地址,即A类地址1 2 7 . 0 . 0 . 1。还有,我们从图2 - 4可以看到,发送给本机I P地址的数据报(1 4 0 . 2 5 2 . 1 2 . 3 3)实际上是送到环回接口。I C M P地址掩码应答必须是收到请求接口的子网掩码(这是因为多接口主机每个接口有不同的子网掩码),因此两种情况下地址掩码请求都来自于环回接口。

文章转载地址:http://www.cnpaf.net/Class/TCPANDIP/0532918532796647.html

0
相关文章