ARP协议工作原理简介】

ARP是Address Resolution Protocol(地址转换协议)的简称,是TCP IP协议中最底层的协议之一。它的作用是完成IP地址到MAC(物理地址)的转换。在局域网中两台计算机之间的通讯,或者局域网中的计算机将IP数据报转发给网关的时候,网卡都需要知道目标计算机的物理地址,以填充物理帧中的目的地址。

现在假设同一以太网中的计算机A(192.168.0.1)需要向计算机B(192.168.0.2)发送数据报,而此时A尚不知道B的物理地址。

为了获得B的物理地址,A在局域网上发送ARP广播,查询192.168.0.2这个物理地址,同时在ARP包中填入自己的物理地址Ma,相当于发出这样的询问“谁拿了192.168.0.2这个地址?请回Ma这个物理地址。"

计算机B在收到了这个查询以后,以Ma为目的地址发回一个ARP包,里面包含了自己的物理地址。这样通讯的双方都了解了对方的物理地址,通讯过程正式建立。 通常ARP协议都在支持广播的网络上使用,比方以太网,这种数据包不能跨物理网段使用,即不能跨越一个路由器(除路由器本身还用作ARP代理以外)。

在实际的ARP协议软件的实现中还有一些应该注意的事项:

每台计算机上都有一个ARP缓冲,它保存了一定数量的从IP地址到MAC地址的映射,同时当一个ARP广播到来时,虽然这个ARP广播可能与它无关,但ARP协议软件也会把其中的物理地址与IP地址的映射记录下来,这样做的好处是能够减少ARP报在局域网上发送的次数。

同时,ARP缓冲中IP地址与物理地址之间的映射并不是一但生成就永久有效,每一个ARP映射表项都有自己的时延,如果过了一定的时间还没有新的ARP到来,那么这个ARP映射就从缓冲中被删除了。那么下一次计算机向这个IP地址发送数据包的时候必须来一次新的查询。

本地网络IP 查找的原理 事实上Windows 本身就用ARP来确定自己的IP地址是否与网络上的另一台计算机发生了冲突。当一个ARP包到来时,Windows 如果检查到其中的IP地址与本机上的相同,而物理地址不同,这时Windows 就会向用户报告这个IP地址已经被别人占用。

非常有意思的是,Windows 对待IP地址是以先来后到的顺序分配,如果已经有人先占了,那么本机的网络接口就会被禁用。这也是非常恼人的“特色"因为一旦开机后有了第一次冲突,以后的任何网络操作就都无效了。

Windows XP 有了一定的进步,它在发现冲突以后并不禁用接口,而是允许用户进行修复。其实用sniffer可以看到所谓的“修复"也不过是发了几个ARP协议包出去,把IP“抢"回来。 在以前的文章中我描述了一个用ICMP 回送请求(类似PING)进行IP查找的程序。

这个程序用并发的几十个线程同时PING网络上的多台计算机,如果回送请求被正确的应答了,那么可以认为这个IP地址已经被占用,如果没有,我们就宣称它是空闲的。然而它有优点也有缺点,其优点是能够PING很远的计算机,即使不在同一个物理网段上,缺点是当目标计算机上安装了防火墙并禁止了ICMP包,或者采用了防ICMP flood 攻击的规则以后都有可能让ICMP回送请求得不到应答。


相关内容