曲径通幽论坛

标题: ARP 协议基本原理介绍与分析 [打印本页]

作者: beyes    时间: 2012-5-7 13:43
标题: ARP 协议基本原理介绍与分析
IP 地址(逻辑地址)和 MAC 地址(物理地址)都是网络上的唯一标识。当主机或路由器将数据包发送到另一个主机或路由器时,它必须有接收端的逻辑地址( IP 地址),IP 数据包必须封装成帧才能通过物理网络,也就是说,发送端必须有接收端的物理地址,因此需要有从逻辑地址到物理地址的映射。

如果将逻辑地址和物理地址之间的关联以静态方式存储在表中,那么发送端只要查表就能找出对应于逻辑地址的物理地址。但是这样的不足是,当物理地址发生变化时,这个表也需要随之更新,如果是频繁的在所有的机器上进行更新将是非常麻烦的任务。

如果上述的映射关系做成动态的,即发送端在需要时可以请求接收端宣布它的物理地址,那么这样就方便多了,ARP 正是为这个目的而设计的协议。

ARP 把 IP 地址和它的物理地址关联起来,在典型的物理网络上,如局域网,链路上的每个设备都用通常写在 NIC 中的物理地址或站点地址来标识。

下图是 ARP 在 TCP/IP 协议族中的位置:
[attach]405[/attach]


注意,MAC 地址是以太网地址形式,在其他网络实体层技术中都会有其特有的地址形式,因此 “MAC 地址只在单一的以太网上有效,故而 MAC 地址不会跨越路由器设备”。

下面使用 wireshark 软件来观察 ARP 工作的工程:

1. 在一台主机上打开 Wireshark 软件,然后在 Capture Options 里单击 Capture Filter,如下图所示:
[attach]406[/attach]


2. 在弹出的列表框中选择 “ Ethernet type 0x0806 (ARP)
[attach]407[/attach]


3. 按下 OK 后,启动 Wireshark 开始监听

4. 开启一个终端窗口,运行 ping 命令,所 ping IP 为 192.168.1.107 (本机 IP 为 192.168.1.106) ,与此同时,会看到 Wireshark 捕捉到了相应的数据包,如下图所示:
[attach]409[/attach]

在上图中,我们可以看到数据包的发往目的地(Destination) 为 Broadcast (广播),协议为 ARP,在 Info 一栏可以看到:
[quoe]who has 192.168.1.107? Tell 192.168.1.106[/quote]
也就是,106 这台主机向整个局域网广播”谁是 107 啊,是的话就告诉我“。

从第 1 条数据可以看到:
[attach]410[/attach]

这里的 Dst MAC 为:ff:ff:ff:ff:ff:ff ,这个就是广播 MAC 地址,ARP 请求包即发往它从而被广播出去。

展开 ARP 协议包可以看到:
[attach]411[/attach]

发送端的 MAC 为 08:00:27:6a:42:71 ,而 IP 地址为 192.168.1.106 ;目的 IP 地址为 192.168.1.107 ,而此时 MAC 地址还未知,因此为 00:00:00:00:00:00 。

ARP 请求数据包被广播到网络上,所有在这个网络上的主机都会收到该数据包,它们都会做相应的检查,如果不是自己的 IP ,那么不理会该包,如果是自己的 IP,那么发送一个应答包,该应答包可以从捕获的第 2 条数据的 "Info" 一栏可以看到:
192.168.1.107 is at 00:21:70:fe:5c:c3
同样可以展开第 2 条数据中的 ARP 包部分:
[attach]412[/attach]

在上图中看到,发送方的 IP 为 192.168.1.107,其对应 MAC 为 00:21:70:fe:5c:c3 。正是这样,两个 ARP 数据包一来一往,便交换了两台主机的 MAC 地址信息。

下面两个图是 ARP 的工作原理图:
[attach]413[/attach]




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2