这个ARP代理检查用最简单的拓扑、场景来显示ARP怎么能够跨路由器找到其它局网里的MAC地址。案例有两个版本:仿真、图解。图解版本是从仿真截图,并加标注释,说明每一个步骤的关键。

-          背景:计算机经互联网相连而传递信息,信息标明发送行、接收方的IP地址,而具体的传送是经过链路而实现的。若两个计算机都在同一个局网内,发送方还需要知道接收方的MAC地址(硬件地址)。如果发送方不知道接收方的MAC地址, 就无法发送信息,得问ARP ARP会在局网里向所有的计算机广播:你的地址是这个接收方的地址吗?如果是,请告诉我你的MAC地址。但 ARP只适用于局网,如果目的计算机位于另一个局网,两者得用路由器相连,而路由器的一个重要作用是把洪泛局限在一个局网之内,防止洪泛蔓延到其他局网。所以ARP不能跨过路由器查询。这个矛盾可用ARP代理解决。

-          ARP代理原理:如果ARP查询的对象位于不同的局网,ARP的查询又不能跨过路由器在另一个局网广播,路由器就成为另一个局网的代表,回复ARP Request, 这就是ARP代理 (Proxy ARP)..

-          预备知识ARPIP地址,子网划分, 路由表,请见参考资料。

 

1.     拓扑: 两个主机经一个路由器相连


1) 路由器连接了两个局网,每个局网有一个子网。主机H1 在子网10.1.1.0/24 , H2在子网10.1.2.0/24, 它们位于不同的子网,经路由器R1相连。

2) 在初始化时,H1, R1, H2 ARP表都只有本身的MAC地址。

3) H1 的路由表用“show ip route” 命令显示:

- “Gateway of last resort is not ser”  这是说H1没有配置命令网关。

- 10.0.0.0/24 is subnetted, 2 subnetsl  C 10.1.2.0 is directly connected, Ethernet0/0; C 10.1.1.0 is directly connected, Ethernet0/0  意思是10.0.0.0  A类网络子网地址被划分出两个子网:10.1.2.0, 10.1.1.0, 它们的接口都是E0/0.

4R1的路由表有两个条目:(10.1.1.0, E0/0), (10.1.2.0, E0/1)。作用是把目的IP地址在子网10.1.1.0的数据包从接口E0/0转发,把目的IP地址在子网10.1.2.0的数据包从接口E0/1转发.

【注】这个拓扑是从Proxy ARP仿真 截图而来,仿真用动画显示ARP代理的演变过程,读者可以观察数据包-路由器间的因果关系,控制时间轴,检查数据包内容、ARP表演变等细节。

 

2. H1 ping H2. H1不知道H2MAC地址,所以H1发送 ARP Request查询.


 

H1 ping, H2, 查看它是否在线。图上显示了几个信息:

1H1的命令窗口:”H1#ping 10.1.2.2; Sending 5 …”. 意思是H1要发送5ping H2, 一收到回复就发送下一个ping 如果两秒还没收到回复,H1就再发一个ping

2) H1发送Ping包时,因为不知道H2IP地址,得问ARP

3)但ARP 也不知道,就发送 ARP Request, 在局网内查询。同时,H1ARP表添加了一个条目 (10.1.2.2, Incomplete) 表示正在查问H2MAC地址,还没有结果。.

ARP Request 的目的是向所有的节点查询MAC,所以它的Link报头里的目的MAC地址是广播地址 ff.ff.ff.ff.ff.ff

ARP Request H1发送的, 所以在它的报文里, sender mac, sender ip 分别是H1 MAC地址, IP 地址。

ARP Request 是因为H1不知道H2MAC而发送的, 所以在它的报文里, target mac 0 target ip H2 IP 地址。

【注】若要观察ARP Request数据包的细节,可运行从Proxy ARP仿真 点击ARP Request.



3. R1 回复ARP Reply H1, 告诉“H2 MAC地址 R1H2的代理)


1R1怎么扮演ARP 代理?

R1收到 ARP Request 后,看到target ipsender ip在不同的局网 (H1 E0/0局网,  H2 E0/1局网),而这两个局网都和R1连接,R1就代理第二个局网,替H2, 发送 ARP Reply, 回答H1的查询。

2) ARP Reply 的结构是什么?

在这个案例,R1 作为ARP代理, H2发送ARP ReplyH1,报文里的sender macR1接口 E0/0 MAC, 不是H2MAC

 

 

 

4. H1 收到ARP Reply, 得到了“H2 MACH1 Ping H2.


H1收到了 ARP Reply,抽出报文的 (sender mac, sender ip),把它添加到ARP表。现在,H1知道了H2MAC地址,ARP表里有H2的地址: (10.1.2.2,  cc00.7c87.0000)

此时H1的命令窗口显示H1仍在等待第一个Ping的回复。H1会等到超时,然后再发送下一个Ping

 

等到H1发送的第一个ping 超时后, H1做了几件事:

-          Ping 命令行打印了 一个 .”表示失败,同时发送下一个Ping.

-          第二个Ping的网络目的IP地址是H2, 但目的MAC地址是代理ARP (R1) 的接口E0/0MAC地址.

-          从拓扑可见,R1 E0/0 (中间)代理 H2 (右边)。R1 接口E0/0 IP地址是10.1.1.2, H1 IP 地址是10.1.1.1 二者在同一个职位10.1.1.1.0/24

【注】 Link层报头:互联网传送数据包是经路由器一站一站的转发,数据包的Link报头是用来指定两站的发、收关系,源MAC地址及目的MAC地址就是这一站及下一站接口的MAC地址, 这两个MAC地址相应的IP地址应在同一个子网。例:PingLink报头中,H1是这一站,其MAC就是源MACR1是下一站,其E0/0接口的MAC就是Ping的目的MAC, H1R1.E0/0IP地址都在同一个子网10.1.1.0/24

这一站出口的IP地址和下一站入口的IP地址,必须在同一个子网。

【注】Network层报头: 这个报头有两个IP地址, IP地址 (H1) 目的IP地址 (H2)。要把数据包从源IP地址传送到目的IP地址,可能得经过好站转发。换言之,要经过好几个不同的局网。例,H1, H2之间有两个局网。

 

 

 

5. R1 转发第二个ping失败,R2 发送ARP Request查询。


 

R1收到 ping, 做了三件事:

1)  ping Network 报头里 Dest IP (10.1.2.2) 来查索路由表,找到(10.1.2.0E0/1) , 准备把ping E0/1转发。

2)  转发前,R1得把:Link报头的目的MAC地址变为H2MAC地址,但ARP表里没有H2MAC地址,R1只好把Ping丢弃。

3)  R1 发送ARP Request, 在子网10.1.2.0 中查询H2 MAC地址。

 

 

6. H2 收到ARP Request, 回复ARP ReplyR1 收到ARP Reply, 更新ARP.


 

 

 

 

 

 

7. H1发送第三个ping ,抵达 H2H2要回复Echo失败,发送 ARP Request查询H1MAC地址.


H1的第二个Ping超时,H1在命令窗口打印一个”.” 并发送第三个ping. 这一次R1 有了H2MAC地址, 转发成功。

H2收到了Ping,要发送ECHO回复,但不知道H1MAC地址,就发送AROP Request查询。

 

 

 

 

8.  H2 收到R1 (代理ARP) ARP Reply, “H1” MAC 添加到ARP表。


 

 

 

9. H1第四次 ping H2H2收到后回复Echo


-          H1发送ping:  Ping Dest MAC “H2” MAC (R1 MAC)

-          R1转发ping: Ping Dest MAC H2 MAC

-          H2回复EchoH1: Echo Dest MAC “H1” MAC R1.E0/1 MAC

-          R1转发Echo: Echo Dest MAC H1 MAC

【注】以上几步都牵涉到Ping/Echo Link报头的封装、ARP表的匹配、及路由表的搜索。和前面截图的主要相似,不再重复。读者可操作配套的仿真观察随时间轴而改变的不同、列表搜索。

 

 

 

10. H1收到第四个PingEcho,现在第五次ping H2.


 

参考资料:

[a] ARP

Visualland  ARP仿真目录 ( Overview)

谢希仁 计算机网络第五版 4.2.4 b地址解析协议ARP

RFC 826 http://www.faqs.org/rfcs/rfc826.html

[b]    谢希仁 计算机网络第五版 3.4.3 MAC

Wikipedia MAC address http://en.wikipedia.org/wiki/MAC_address

 [c] 路由器怎么转发数据包?

Visualland 仿真:IP Address > 2. How Internet forwards packers?  

IP Address > 4. Classful IP address     

IP Address > 5.  Subnetting       

谢希仁 计算机网络第五版 4.3  划分子网

Wikipedia:  IP address . http://en.wikipedia.org/wiki/Ip_address