Ping与Loopback

来源:互联网 发布:淘宝网官方网站羽绒服 编辑:程序博客网 时间:2024/04/28 14:40

                       Ping与Loopback
                                      ——由一个有趣现象说起

-------------------------------
转摘请保留以下信息:
BaiShi<baishi54_at_126.com
>
54baishi.126.com
2007-2-17
-------------------------------

我们经常使用Ping命令来解决 Windows 的 TCP/IP 连接问题,比如 使用以下命令:
 ping 127.0.0.1
Ping 环回地址以检查本地计算机上是否安装并正确配置了 TCP/IP。
如果环回测试失败,则 IP 栈不响应。(TCP 驱动程序损坏、网络适配器不工作或另一个服务正在干预 IP 都会导致不响应。)
在应用中,我遇到一个有趣的现象, ping127.0.0.1 ~127.255.255. 254都从127.0.0.1 回响应答。而在ping 127.255.255.255是不通的。
 


这是怎么回事呢?
打开本地计算机上的路由表看看:


 由图中高亮显示的路由规则得知,127.0.0.0/8这个网段内所有地址都指向127.0.0.1。这个路由规则是TCP/IP安装后默认添加的。
为什么这样指向呢?
RFC3330 [Page 1]
127.0.0.0/8 - This block is assigned for use as the Internet host
loopback address.  A datagram sent by a higher level protocol to an
address anywhere within this block should loop back inside the host.
This is ordinarily implemented using only 127.0.0.1/32 for loopback,but no addresses within this block should ever appear on any network anywhere [RFC1700, page 5].
可知,127.0.0.0/8是规定的Internet host loopbackaddress。应用中大多数系统(包含WINDOWS)把IP地址127.0.0.1 作为loopback address,这里有这样的路由规则是来保证127.0.0.0/8的网段地址不出现在网络上。
那么,为什么PING 127.255.255.255是不通的呢?
这是因为在127.0.0.0/8中127.255.255.255是指向子网的广播地址,ICMP ECHO报文在广播上比较特殊,RFC并没有规定在收到广播地址的icmp echo包后该如何处理:
RFC1122 Section 3.2.2.6  Echo Request/Reply: RFC-792
An ICMP Echo Request destined to an IP broadcast or IP multicast address MAY be silently discarded.
Windows和linux对发给广播地址的icmp echo的处理就不一样,为了防止利用广播信息泛滥堵塞局域网的古老Smurf 攻击, windows系统对广播ping不做响应②,Novell 3.12 服务器会发送一个回响应答,UNIX几乎都可以设置(默认为否)。
所以,windows下ping 127.255.255.255是不通的。
 
注释:
Loopback(环回):将一个讯号由网络上的一台机器送出,经过网络的传输路径之后,再回到原来机器上的动作称为Loopback。回路又可分为本地环回(local loopback)与远程环回(remote loopback)两种,前者所指的是回路不经过传输网络,直接在本地网络卡或者是传输端接收讯号,用来测试本端传输设备是否正常工作;远程回路是由远程机器来执行回路的动作,本地机器所发出讯号会经过传输网络达到远程,远程机器再将所收到的讯号传回以测试整个传输网络。
实现TCP/IP的产品大多数都支持环回接口,以允许同一主机上的C/S程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的。  
    根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。(以上信息摘自TCPIP协议详解卷一:协议)
在不同的系统loopback接口作用有所不同,比如在操作系统中作为开发期间的一个测试台,而且实际上在正常操作时也被用于某些应用程序。
例外的是,路由器在此的基础上根据需要业务需要增加了另外的环回接口,与普通接口使用同样的IP地址配置原则,用户可以根据需要在系统启动后动态创建和删除自己使用的该类型的接口,Loopback接口一旦被创建,将一直保持Up状态,直到被删除,这个“有勃传统”的环回接口在远程访问、记录信息、BGP配置等方面有广泛的应用。而传统的环回接口此时在路由器也是存在的,是系统在启动TCP/IP时自动创建一个使用环回地址127.0.0.1的接口,该接口是系统使用,不可配置也不可删除,使用display ip routing-table命令看到的inLoopback接口就是这一类接口。
《PING to Broadcast Address May Get Response 》http://support.microsoft.com/kb/137421/en-us
《Loopback Null0接口揭秘http://www.net130.com/huawei/tech/022-01.rar