近些年随着互联网的高速发展, 网络规模的不断扩大,全球边界网关协议路由表呈现出超线性增长的势态。数据显示全球BGP 路由表已从20 世纪90 年代末的5 万余条飞速增长为2011 年的约35 万条。BGP路由表的高速膨胀导致互联网路由系统的可扩展性面临严峻的挑战。产生这一问题的关键就在于随着多宿主站点的普及以及PI 地址的分配,大量不可聚合IP 地址前缀被通告至核心路由表。

此外, 在传统的TCP/IP 协议中,IP 地址既可作为节点的身份标识用于建立通信连接, 同时又表示节点的位置用于报文的寻址和路由。IP 地址的语义过载这一特性使得互联网表现出对移动性支持的先天不足。思科提出的LISP 协议作为一种基于身份和位置分离的解决方案,它将边缘网络(一般是用户网络)与传输网络(通常指运营商网络)进行分离,进而引入两类地址:EID(End Identifier)和RLOC(Routing Locator)。EID 用于全局唯一标识站点内的主机,属于PI 地址,不可全局路由,因此不会出现在核心路由表中。而RLOC主要用在传输网络中,可表示边缘网络的接入点位置,属于PA 地址,须严格按照网络拓扑进行分配,因此便于按拓扑聚合,从而减小了核心路由表的规模。同时,LISP 作为一种渐变的方案,无须对现有的终端协议栈做任何修改, 并可在目前网络设施的基础上增量地部署,开销低。LISP 这一优点也带来了一个问题:在部署初期, 必须实现LISP 站点与非LISP 站点之间的交互,以实现LISP 机制的增量式部署。

本文为对Proxy-ITR 和Proxy-ETR 这两种交互机制进行分析与研究,详细介绍这两种机制的工作原理,并实验模拟了部署Proxy-ITR 和Proxy-ETR 的通信环境。

1 LISP 站点与非LISP 站点间的交互

在LISP 部署初期, 传统的非LISP 站点与新兴的LISP 站点并存于互联网中。主机到主机如何发送单播报文有四种基本情形,分别是:传统非LISP 站点间的通信,新兴LISP 站点间的通信,新兴LISP 站点与传统非LISP 站点间通信以及传统非LISP 站点与新兴LISP站点间通信。本文重点研究第三种和第四种情形下的交互机制。

传统非LISP 站点中的地址前缀一般是可路由的,所以通常LISP 站点根据目的地址可以正常转发报文到传统非LISP 站点中, 非LISP 站点不需要做任何改变就可以接收报文。而LISP 站点唯一要做的是确定何时无需LISP 封装即可转发报文。当LISP 站点的ITR对报文中目的地址进行映射查询, 如果所匹配的负映射缓存项中的action 位为Natively-Forward, 则意味着目的地址为一个非LISP 地址, 因此即可立即转发报文。

不过有两种情况下,LISP 站点所生成的报文,未经LISP 封装, 是不能通过传输网络转发到非LISP 站点中。第一,为了避免反路径转发检查失败,某些提供商的接入网要求发出的报文, 其源地址必须位于接入网的编址范围内。第二,LISP 站点与非LISP 站点通信路线上的中间网络并不支持未封装报文所用的特定IP层协议。为了实现这两种情况下LISP 站点与非LISP站点间正常通信, 本文分析了Proxy-ETR 机制的工作原理,利用LISP 协议的封装功能,改写源地址,使源地址符合接入网的要求。同时LISP 协议对混合协议封装的支持,可使报文跳过中间网络。

当非LISP 站点中的主机希望发送报文到LISP 站点中, 如果源主机使用一个不可路由的EID 作为目的地址,数据报文会在源站点(非LISP 站点)内转发,直到边缘路由器因为缺少默认路由而丢弃它。为了实现非LISP 站点能够向LISP 站点发送报文, 可以采用Proxy-ITR 这种机制。它使得目的EID 变得可路由,从而可以转发报文到目的LISP 站点中。

1.1 Proxy-ITR

Proxy-ITR 是一种新型的网络设备,拥有很多LISPITR 的特性。在传输网络中部署了Proxy-ITR 后,非LISP 站点无需做任何协议上或设备上的改变, 就可以发送数据报文给LISP 站点。Proxy-ITR 主要实现两大基本功能:第一,Proxy-ITR 将代表LISP 站点通告那些高度聚合过的EID 前缀; 第二,Proxy-ITR 会封装非LISP 站点发出的报文, 然后转发到目的LISP 站点的ETR 上。

(1)Proxy-ITR 对EID 的通告

实现Proxy-ITR 关键在于如何向全球路由系统的局部区域通告那些高度聚合EID 前缀的路由。一方面,EID 前缀的主动聚合有利于减少通告路由项的数目。另一方面, 慎重地部署Proxy-ITR 的位置可以缩小路由项的通告范围。出于这个目的,Proxy-ITR 应当部署在靠近非LISP 站点的位置, 而不是更接近于LISP 站点。这样的部署安排不仅可以很好地限制EID 前缀路由的通告范围, 还可以允许数据流负载分流到多个Proxy-ITR 中去。

(2)Proxy-ITR 机制下的数据流

使用Proxy-ITR 机制,数据报文传输的流程。

①源主机查询DNS,得到目的EID 地址192.0.2.1。

②源主机有一条到CE 路由器的默认路由,于是转发报文到CE。

③CE 也有一条到PE 路由器的默认路由, 再次转发给PE。

④PE 有一条到192.0.2.0/24 的路由, 且下一条就是Proxy-ITR。

⑤Proxy-ITR 缓存有或从映射系统获得EID 为192.0.2.1 的映射项,然后LISP 封装报文。其外IP 首部中的目的地址为目的站点ETR 的RLOC。外首部中的源地址为Proxy-ITR 的RLOC。

⑥传输网络基于目的RLOC 查询路由表, 最终转发到目的站点的ETR 上。

⑦ETR 对报文进行解封装, 并根据目的EID 在站点内路由至目的主机。

⑧主机192.0.2.1 的返回报文将通过LISP 站点的ITR。ITR 通过查询映射数据库,知道目的地址不在EID地址空间内,从而无需封装即可本地路由。

(3)Proxy-ITR 的扩展性

通过通告LISP EID 地址前缀,Proxy-ITR 吸收那些目的地址为EID 的数据流。这里,本文介绍两种方法来控制数据报文的流向, 以防止Proxy-ITR 收到超出处理能力的流量。

第一,Proxy-ITR 中的聚合地址路由项可以被选择性的通告。某些路由的通告范围因提供商的路由策略而受限,这样就可以控制Proxy-ITR 的接收流量。

第二, 相同的EID 地址可能会被多个Proxy-ITR通告, 这样目的地址为此EID 的数据报文会流向离自己最近的Proxy-ITR,从而达到分流的目的。

1.2 Proxy-ETR

LISP 站点需要发送报文到非LISP 站点, 当LISP站点的接入网并不接受源地址为LISP 站点EID 的数据包时, 需要引入Proxy-ETR 机制来实现正常通信。Proxy-ETR 也是一种新型的网络设备。它一般充当非LISP 站点的ETR, 接收发往此非LISP 站点的数据报文。同时,部署Proxy-ETR 可以避免源LISP 站点中的ITR 决定是否封装报文。因为ITR 总是要封装报文,然后转发到ETR 或Proxy-ETR。当目的地址为LISP EID时,ITR 封装并转发报文到目的站点的ETR 上。而目的地址为传统IP 的报文将被ITR 封装并转发到所配置的Proxy-ETR 上。

通常的情况下, 源站点的ITR 无需封装即可本地转发目的地址为传统IP 的报文。在某些时候接入网限制源地址的范围或接入网不支持特定协议, 可以配置ITR 封装并转发非LISP 数据包到Proxy-ETR 上。当ITR 通过Map-Resolver 来请求映射信息, 映射查找匹配一个Negative Map-Cache,此时ITR 会封装并转发报文到所配置的Proxy-ETR。还有一种情况,ITR 直接连接到映射数据库系统上,ITR 对数据库的查找并无对应的映射项, 这些报文也会被封装并转发到所配置的Proxy-ETR 上。注意,封装后报文使用的IP 层协议可能不同于被封装的数据报文。路由器将会根据LISP 首部中的目的地址来路由报文至所配置的Proxy-ETR 上。

Proxy-ETR 在对接收报文进行解封装之前, 可能会检查源EID 是否位于所配置的LISP 站点内。这是为了防止源站点由于欺骗而封装并发送报文到Proxy-ETR。使用Proxy-ETR 机制后,假设网络拓扑如下描述。LISP-NR 站点的EID 前缀为192.0.2.0/24,目的非LISP站点的IP 前缀为198.51.100.0/24。LISP 站点希望同非LISP 站点内主机交互。核心路由表中存在传统目的IP地址(198.51.100.0/24)。报文的具体流程如下:

①源主机查询DNS, 得到目的地址为198.51.100.100。

②源主机有一条到CE 路由器的默认路由,于是转发报文到CE。

③CE 作为LISP 站点的ITR,它会封装那些目的地址为传统IP 的报文到所配置的Proxy-ETR。

④Proxy-ETR 解封装收到的报文, 随后根据目的IP 地址198.51.100.100 路由到目的主机。注意到返回流不经过Proxy-ETR, 这意味着为了返回报文到源LISP 站点, 目的非LISP 站点需要部署Proxy-ITR。

2 实验模拟Proxy-ITR 和Proxy-ETR

实验环境如下所述。LISP 站点与非LISP 站点通过传统IP 网连接起来。其中LISP 站点的EID-Prefix 为192.168.1.0/24, 而非LISP 站点的地址块为56.56.56.0/24。Proxy-ITR 与Proxy-ETR 合成一台设备PxTR。PxTR和MS/MR 都位于传统IP 网中。

R1 模拟LISP 站点,其Loopback0 接口模拟EID 地址块(192.168.1.0/24)。R5 和R6 模拟非LISP 站点,其中R5 作为CE,R6 模拟非LISP 站点内的主机。R2,R3和R4 共同模拟传统IP 网,R3 作为PxTR,R4 作为MS/MR。LISP 站点的xTR 需定时向MS/MR 注册EID 信息。网段规划如图所示,路由器的接口地址的最后一位使用设备名。例如R1 的接口地址为12.12.12.1,而R2左接口地址为12.12.12.2。

为了验证LISP 站点与非LISP 站点之间能否正常通信,我们从LISP 站点中源主机(192.168.1.1) ping 非LISP 站点中的Host(56.56.56.6)。结果如下所示。

R1#ping 56.56.56.6 source 192.168.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 56.56.56.6, timeout is

2 seconds:

Packet sent with a source address of 192.168.1.1..!!!

Success rate is 60 percent (3/5), round-trip min/avg/max =

136/157/168 ms

可以看到源主机一共发了5 个报文, 在前两个报文失败后,后三个报文都ping 通了。通过在各条链路上抓包分析,可知第一个ICMP 请求报文引发了一个发往MS/MR 的map-request 报文, 请求目的地址56.56.56.6的RLOC。MS/MR 直接返回给R1 一个negative mapreply报文, 表明目的地址是一个普通的IP。第二个ICMP 请求报文在xTR 上LISP 封装后, 转发到Proxy-ETR(R3)上。R3 解封装后本地转发到目的Host。随后Host 构造一个ICMP 应答报文, 其中源地址为56.56.56.6,目的地址为192.168.1.1。因为Proxy-ITR 会生成到达EID 前缀(192.168.1.0/24)的路由,并通告局部网络,所以R5 会转发ICMP 应答报文给Proxy-ITR。Proxy-ITR 收到ICMP 应答报文后,会向MS/MR 请求目的EID (192.168.1.1) 的RLOC。MS/MR 转发map-request到R1(xTR),由xTR 直接返回map-reply。Proxy-ITR 在收到map-reply 后缓存这条EID-to-RLOC 映射。随后的三个报文都可以根据map-cache 中的信息直接ping 通了。

这个模拟实验表明通过设置Proxy-ITR 和Proxy-ETR,可以很好地解决LISP 站点与非LISP 站点之间的通信问题。

3 结语

本文为了解决LISP 站点与非LISP 站点间的交互问题, 对Proxy-ITR 和Proxy-ETR 这两种机制的工作原理进行分析与研究。Proxy-ITR 和Proxy-ETR 一般相互配合使用, 充当LISP 站点与非LISP 站点之间的代理xTR,从而实现报文往返的正常通信。通过对ping 报文流程的分析,模拟实验表明Proxy-ITR 和Proxy-ETR可以很好地实现LISP 站点与非LISP 站点间的交互。