您的位置:首页 > 其它

ARP代理 教程图解 (案例、过程、分析,并有配套的仿真链接)

2010-10-21 21:24 639 查看
这个ARP代理检查用最简单的拓扑、场景来显示ARP怎么能够跨路由器找到其它局网里的MAC地址。案例有两个版本:仿真、图解。图解版本是从仿真截图,并加标注释,说明每一个步骤的关键。
- 背景[/b]:计算机经互联网相连而传递信息,信息标明发送行、接收方的IP地址,而具体的传送是经过链路而实现的。若两个计算机都在同一个局网内,发送方还需要知道接收方的MAC地址(硬件地址)。如果发送方不知道接收方的MAC地址, 就无法发送信息,得问ARP 。ARP会在局网里向所有的计算机广播:你的地址是这个接收方的地址吗?如果是,请告诉我你的MAC地址。但 ARP只适用于局网,如果目的计算机位于另一个局网,两者得用路由器相连,而路由器的一个重要作用是把洪泛局限在一个局网之内,防止洪泛蔓延到其他局网。所以ARP不能跨过路由器查询。这个矛盾可用ARP代理解决。
- ARP[/b]代理原理[/b]:如果ARP查询的对象位于不同的局网,ARP的查询又不能跨过路由器在另一个局网广播,路由器就成为另一个局网的代表,回复ARP Request, 这就是ARP代理 (Proxy ARP)..
- 预备知识[/b]:ARP,IP地址,子网划分, 路由表,请见参考资料。

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




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.
4)R1的路由表有两个条目:(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. [/b]但[/b]H1[/b]不知道[/b]H2[/b]的[/b]MAC[/b]地址,所以[/b]H1[/b]发送[/b] ARP Request[/b]查询[/b].[/b]





H1 要ping, H2, 查看它是否在线。图上显示了几个信息:
1)H1的命令窗口:”H1#ping 10.1.2.2; Sending 5 …”. 意思是H1要发送5个ping给 H2, 一收到回复就发送下一个ping。 如果两秒还没收到回复,H1就再发一个ping。
2) H1发送Ping包时,因为不知道H2的IP地址,得问ARP。
3)但ARP 也不知道,就发送 ARP Request, 在局网内查询。同时,H1的ARP表添加了一个条目 (10.1.2.2, Incomplete), 表示正在查问H2的MAC地址,还没有结果。.
ARP Request 的目的是向所有的节点查询MAC,所以它的Link报头里的目的MAC地址是广播地址 ff.ff.ff.ff.ff.ff。
ARP Request 是H1发送的, 所以在它的报文里, sender mac, sender ip 分别是H1的 MAC地址, IP 地址。
ARP Request 是因为H1不知道H2的MAC而发送的, 所以在它的报文里, target mac 为 0, target ip 是H2的 IP 地址。
【注】若要观察ARP Request数据包的细节,可运行从Proxy ARP仿真, 点击ARP Request.。

3. R1 [/b]回复[/b]ARP Reply [/b]给[/b]H1, [/b]告诉“[/b]H2”的 MAC[/b]地址[/b] [/b]([/b]R1[/b]是[/b]H2[/b]的代理)[/b]





1)R1怎么扮演ARP 代理?
R1收到 ARP Request 后,看到target ip,sender ip在不同的局网 (H1 在 E0/0局网, H2 在 E0/1局网),而这两个局网都和R1连接,R1就代理第二个局网,替H2, 发送 ARP Reply, 回答H1的查询。
2) ARP Reply 的结构是什么?
在这个案例,R1 作为ARP代理, 替H2发送ARP Reply给H1,报文里的sender mac是R1接口 E0/0 的MAC, 不是H2的MAC。

4. H1 [/b]收到[/b]ARP Reply, [/b]得到了“[/b]H2”[/b]的[/b] MAC[/b]。[/b]H1 [/b]再[/b]Ping H2.[/b]





H1收到了 ARP Reply,抽出报文的 (sender mac, sender ip),把它添加到ARP表。现在,H1知道了H2的MAC地址,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/0的MAC地址.
- 从拓扑可见,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地址应在同一个子网。例:Ping的Link报头中,H1是这一站,其MAC就是源MAC,R1是下一站,其E0/0接口的MAC就是Ping的目的MAC, H1及R1.E0/0的IP地址都在同一个子网10.1.1.0/24。
这一站出口的IP地址和下一站入口的IP地址,必须在同一个子网。
【注】Network层报头: 这个报头有两个IP地址, 源IP地址 (H1)及 目的IP地址 (H2)。要把数据包从源IP地址传送到目的IP地址,可能得经过好站转发。换言之,要经过好几个不同的局网。例,H1, H2之间有两个局网。

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





R1收到 ping, 做了三件事:
1) 用ping 的 Network 报头里 Dest IP (10.1.2.2) 来查索路由表,找到(10.1.2.0,E0/1) , 准备把ping 从 E0/1转发。
2) 转发前,R1得把:Link报头的目的MAC地址变为H2的MAC地址,但ARP表里没有H2的MAC地址,R1只好把Ping丢弃。
3) R1 发送ARP Request, 在子网10.1.2.0 中查询H2 的MAC地址。

6. H2 [/b]收到[/b]ARP Request, [/b]回复[/b]ARP Reply[/b]。[/b]R1 [/b]收到[/b]ARP Reply, [/b]更新[/b]ARP[/b]表[/b].[/b]





7. H1[/b]发送第三个[/b]ping[/b] ,抵达[/b] H2[/b]。[/b]H2[/b]要回复[/b]Echo[/b]失败,发送[/b] ARP Request[/b]查询[/b]H1[/b]的[/b]MAC[/b]地址[/b].[/b]





当H1的第二个Ping超时,H1在命令窗口打印一个”.” 并发送第三个ping. 这一次R1 有了H2的MAC地址, 转发成功。
H2收到了Ping,要发送ECHO回复,但不知道H1的MAC地址,就发送AROP Request查询。

8. H2 [/b]收到[/b]R1 ([/b]代理[/b]ARP) [/b]的[/b]ARP Reply, [/b]把[/b]“H1” MAC [/b]添加到[/b]ARP[/b]表。[/b]

[/b]




[/b]
[/b]
[/b]
9. H1[/b]第四次[/b] ping H2[/b],[/b]H2[/b]收到后回复[/b]Echo[/b]





- H1发送ping: [/b]Ping 的Dest MAC是 “H2” 的MAC (R1的 MAC)
- R1转发ping: [/b]Ping 的Dest MAC是 H2 的MAC
- H2回复Echo给H1: [/b]Echo 的Dest MAC是 “H1” 的MAC (R1.E0/1的 MAC)
- R1转发Echo: [/b]Echo 的Dest MAC是 H1 的MAC
【注】以上几步都牵涉到Ping/Echo Link报头的封装、ARP表的匹配、及路由表的搜索。和前面截图的主要相似,不再重复。读者可操作配套的仿真观察随时间轴而改变的不同、列表搜索。

10. H1[/b]收到第四个[/b]Ping[/b]的[/b]Echo[/b],现在第五次[/b]ping H2.[/b]





参考资料:[/b]
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息