如何使用ARP实现透明的子网网关?

如何使用ARP实现透明的子网网关?

Network Working Group Smoot Carl-Mitchell
Request for Comments: 1027 Texas Internet Consulting
John S. Quarterman
Texas Internet Consulting
October 1987

使用ARP实现透明的子网网关

备忘录状态

这个RFC描述了子网网关通过使用以太网地址解析协议(ARP),允许主机在不知道另一
个网络是否存在的情况下和另一网络内的主机直接通讯,使用的这种技术称为ARP代理
(ARP PROXY)。它是基于RFC-950[1],RFC922[2],和RFC-826[3],并且是RFC-925[4]机制
的一个有限子集。分发该备忘录是不受限制的。

Acknowledgment

The work described in this memo was performed while the authors were
employed by the Computer Sciences Department of the University of
Texas at Austin.

介绍

这篇备忘录的目的是描述透明子网ARP网关使用ARP代理(ARP Proxy)技术的执行细节。旨
在纪录这一被广泛使用的技术。

1. 动机

德克萨斯大学奥斯汀分校的以太网是一个分布在10座大楼的大型安装连接。目前已经有超过
100台主机连接在该网络上[5]。这个以太网络的型号和它所要处理的通信流量决定了不能通
过使用转发器把他们连接起来。通过子网的使用把网络分解成小区域模块提供了一种有吸引
力的解决方案。

这种情形和RFC-950中描述的互联网子网相符合。不幸的是,一些用户并没有执行子网,而且
调整运行在本地网上的主机的超过半打不同的操作系统也是不可行的。

因此,一种对主机隐藏已存在的子网的方法是非常有必要的。因为所有的本地网络都支持ARP,
所以一种基于ARP的方法(通常被认为是"Proxy ARP" 或者"ARP hack")就被选择了。在这个备
忘录中,无论何时,当"子网"这个术语出现在"RFC-950"中时都是被假设的。

2. 设计
2.1 基本方法

在一个支持ARP的网络中,当主机A(出发地)广播一个ARP请求给具有相应网络地址的主机B(目的
地)的IP,主机B将确认自己的IP地址并发送一个点对点的ARP应答。主机A从应答中获取的IP
地址相应网络地址存入到一个本地缓存中而且在以后与主机B的通讯中使用到该网络地址。

如果主机A和B在不同的物理网络中,主机B将不会收到并相应发自主机A的ARP广播请求。然而,
如果主机A所在的物理网络和主机B所在的物理网络是通过一个网关连接在一起,网关就能够收
到发自主机A的ARP请求。假设子网号符合另一个物理网络,网关能够指出这个发送请求的主机
请求的是另一个不同物理网络的主机。网关就能替主机B相应,告知主机B的网络地址就是网关本
身的网络地址。主机A将能收到这个相应,取得网关的网络地址,把要送给主机B的IP封包发送
给网关。网关会把这些IP封包通过一般的路由机制转寄给主机B。网关扮演了一个主机B代理的
角色,这也是为什么这种技术被称为"ARP代理"(Proxy ARP)的原因;我们将因此称该网关为
透明的子网网关或ARP子网网关。

当主机B相应来自主机A的数据流时,相同算法的反向实现成立:网关相应主机B发送的寻找主机A
网络地址的请求,主机B将需要送给主机A的IP包送给网关。主机A所在的物理网络和主机B所在的
网络并不需要连接到一台相同的网关。所有需要的只是对于网关而言这些网络都是可达的。

用这种方法,所有ARP子网的处理都在ARP子网网关被完成。源和目的主机的ARP协议或路由都不需
要改变。从主机的观点看,子网是不存在,他们的物理网络可以被看成是一个简单的大型IP网络。
如果一个主机在一个子网内,它的网络掩码必须被设置成覆盖IP网络号,为了系统的正常工作,
需要完全排除子网号。

2.2 路由

作为子网执行的一部分,它希望路由表中的元素包含网络号,这个网络号能够包括适当的由子网
掩码指定的IP网络号和子网号。当一个ARP请求产生时,ARP子网网关能够确定它是否能够通过查
找当前的路由表得知通往目标主机的路由。如果对外域IP网络查询的尝试能够尽早排除(查阅下
文的推测检测),只要发送一个包含本地IP网络地址的请求就能到达目的点。我们假定相同的网络
掩码将提交给相同IP网络中所有的子网。接收到ARP请求的网络接口的网络掩码能够通过查找路由
表,将该ARP请求提交给目的IP地址所在的网络。

在4.3BSD(大概也在一些其它的操作系统中),一个缺省的路由是可能的。这个缺省的路由在没有
发现其他路由的情况下将封包转发给某一指定的地址。当该缺省路由是一个通向发送ARP请求的主
机的路由时,该路由一定不能被使用。如果缺省路由被使用,必须进行检查。如果被缺省路由指定
的主机对子网路由来说是未知的(因此它经常是一个internet网关),那么那些被送往该主机的封包
可能会被丢弃。这种路由查找方法中的特殊情形是路由机制中唯一需要修改的地方。

如果请求接受端的网络接口和到目标的路由经过的接口是相同的,网关将不会响应。在这种情况下,
或者目的主机和网关在同一物理网络内(主机应该自己响应),或者网关不是在连接网络的最直接
路径上。也就是说有另外一台网关在通往相同物理网络的最直接路径上,它应该响应。

RFC-925[4]描述了使用ARP代理的动态子网路由的一般机制和网关上的路由缓存。我们的技术是
RFC-925的一个限制子集,在RFC-925中我们使用由管理确定的静态子网路由。结果,我们的透明
子网路由不要求新的网络路由表入口,也不要求ARP缓存入口;只需要被假装的主机ARP缓存表。

在我们的执行过程中,是由网关中的子网路由表来预防路由回路。

2.3 多种类型的网关

最简单的子网组织是一个能够防止回路的树型结构。然而,在2个物理网络之间可能需要比1个更多
的网关来保证更可靠或者交换更方便。ARP子网网关可能在以下这种情况下使用:发送请求的主机
会使用接收到的第一个ARP响应,即使超过一个网关发送一个。这可能甚至提供一个根本的负载平
衡服务,因此如果2个网关其他方面都相似,最先装载的网关最有可能先响应。

更复杂的机制在网关对网关的协议中被建立,而且不容置疑的在拥有大量子网和网关的网络中将成
为必须,同样,在IP网关间使用网关对网关的协议也成为必须。

2.4 推理检测

网络和网关的管理员必须小心使网络掩码和所有子网网关保持一致。最常见的错误是在不包括子网号
的情况下去设置一台主机的网络掩码。这将导致主机尝试送封包给不在本地子网的主机时失败。调整
它的路由表也没有帮助,因为它不知道如何路由到子网。

如果一个ARP请求的源和目的主机所在的IP网络不同,ARP子网网关执行不应该响应。这可以阻止
ARP子网网关被用来到达外部IP网络,而且如果响应可能绕开IP网关提供的安全检查。

如果一个ARP请求的源和目的主机在同一个物理网络,ARP子网网关必须不能响应。在这种情况下,或
者目的主机和源主机在同一物理网络,目的主机可以自己响应;或者目的主机和源主机在网关的同一
方向,如果网关发送ARP响应可能导致回路。

尽管与源地址或物理网络有关,对一个广播地址发送的ARP请求必须无响应。如果在这种情况下网关
回应一个ARP响应,可能会邀请源主机发送实际的数据流给一个广播地址。这可能导致"Chernobyl
effect",网络上的任何一台机器都会响应该数据流,导致网络崩溃。

2.5 物理网络中的多种逻辑子网

一个接一个分配子网号是最直截了当的方式。在物理网络的多种逻辑子网环境是非常有用的。最普通
的一个是当计划把一组工作站放置在他们自己的物理网络中