Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1946604
  • 博文数量: 1647
  • 博客积分: 80000
  • 博客等级: 元帅
  • 技术积分: 9980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:15
文章分类

全部博文(1647)

文章存档

2011年(1)

2008年(1646)

我的朋友

分类:

2008-10-28 17:51:59


  随着无线传输和个人信息终端技术的发展,市场对广义的移动通信的需求也越来越强烈。人们希望连在网上的通信设备不会因为改变了物理地址而中断与其他设备的已经建立的连接,从而实现各种通信设备在上的自由漫游 ,譬如,一台电脑在改变IP地址的同时仍然保持着与其它机器的通信连接。然而,当前的对移动性能支持甚少。现在普遍采用的网际互连标准——IP族假设了连在网上的每台设备都是静止不动的;高层的传输如TCP、UDP以及各种应用程序都遵循了这种假设。例如,TCP以IP地址标识建立连接的两个终端,应用程序通过IP地址和端口号建立socket连接,执行I/O任务。由于连接是与物理地址紧密相关的,在改变物理地址时必须断开连接。由此看来,要想克服这一缺点,似乎需要对整个网络体系及作大的改动。
  
  虚拟网址转换(Virtual Network Address Translation,缩写为VNAT)技术是应用于动态IP互连的崭新技术。VNAT能使连接双方在漫游时仍保持连接状态,适用于从个人通信终端到的各种设备,而其最大的优点在于不用对现有设备及协议作任何改动。当两个终端(endpoint)建立连接之后,VNAT用虚拟地址替换物理地址,同时建立从虚拟地址到物理地址的映射。传输层协议看到的只是连接双方的虚拟地址,而不用考虑低层物理地址的变化。这样,当任一终端改变其物理地址时,VNAT更新映射信息,由于虚拟地址保持不变,连接得以持续。
  
  相关的研究
  
  人们针对互联网的移动通信需求已经作过大量的研究工作。在这其中,移动IP(Mobile IP)是最著名的移动问题解决方案。移动IP允许主机在保留其地址的同时在网间漫游。这样的移动对于应用程序和传输层协议是透明的。移动IP允许单个计算机拥有一个主地址和一个辅地址。当主机在原始位置,即“家网”时,获得的是主地址;当它移动到一个“外网”并获得辅地址时,必须把辅地址发送给位于家网的一个代理,该代理同意截取发送给主地址的数据包,把每个数据包以隧道方式传输到辅地址。然而,移动IP提供的移动性能的粒度(granularity)仅限于整台主机,不像VNAT的粒度达到了点对点连接的两个应用程序或进程。而且,使用移动IP的主机在每次移动后需要相当大的系统开销,这样就不适用于频繁移动和高速移动。
  
  
  VNAT技术的体系结构
  
  
  VNAT的基本思想很简单,就是用一个虚拟地址标识一个连接终端。前面已经提到过,由于传输协议用物理地址标识一个连接,当物理地址改变时,连接必然断开。VNAT打破了传输协议和物理地址之间的这种联系,用一个虚拟地址代替了物理地址。这样,一旦连接建立,VNAT便为连接终端生成各自固定的虚拟地址,并且独立于物理地址,其生存期与这个连接的生存期相同,这个连接也不在受制于双方物理地址的变化。
  
  首先我们来定义一下本文中我们所指的“移动”。我们可以将一个通信终端的移动或转移归纳为两种情况:一种是运行该终端的硬件设备的网络地址发生变化,另一种是该终端所属的进程从一台主机转移到另一台主机。不管是那种情况,其实质都是通信终端的物理地址发生了变化。在TCP/IP互联网中,就是终端的IP地址和端口发生了变化。
  
  如图1所示,VNAT由三部分构成:虚拟连接(virtualization)是让通信终端以虚拟地址建立连接;地址转换(translation)为虚拟地址和物理地址建立映射关系;连接转移(migration)为发生移动的通信终端维护其连接,并且在移动过后更新虚拟地址和物理地址的映射。这三个组件可以集成为一个模块在终端上运行,并不需要对现有配置作任何改动。
   
  图1 VNAT的体系结构
  
  
  1 虚拟连接
  
  VNAT的虚拟连接为建立连接的通信终端生成一个虚拟标识(virtual identification)。我们把由一对虚拟标识建立的点对点的连接称为虚拟连接(virtual connection),把由一对物理标识建立的点对点的连接称为物理连接(physical connection)。在一次虚拟连接中,物理标识可以任意改变,但虚拟标识是恒定的。由于虚拟连接并不绑定在一对物理终端上,它可以在物理网间任意漫游。
  
  从TCP/UDP协议来看,一个虚拟标识是由一个虚拟IP地址和一个虚拟端口号组成的。为简便起见,我们在下面的讨论中省去了端口号,并用“虚拟地址”指代虚拟标识,用“物理地址”指代物理标识。下面我们通过一个TCP的例子来理解虚拟连接。
  
  图2演示了TCP环境下的虚拟连接。VNAT截取从应用程序发往TCP的建立连接的请求,把请求中包含的物理地址转换为虚拟地址。如图2所示,上的一个应用程序向TCP请求以主机物理地址10.10.10.10开启服务,监听所有来自客户端的连接。VNAT截取了这个请求并且用一个虚拟地址1.1.1.1替换了物理地址10.10.10.10。类似地,客户机上的一个应用程序请求连接到地址为10.10.10.10的主机,并且将自己绑定到客户机地址20.20.20.20;而VNAT截取了这个请求并且用虚拟地址1.1.1.1替换了10.10.10.10,用2.2.2.2替换了20.20.20.20。
   
  
  图2 VNAT的虚拟连接
  
  
  这一过程完成后,服务器端和客户端的TCP建立的连接都是一个虚拟连接(1.1.1.1,2.2.2.2)而不是物理地址连接(10.10.10.10,20.20.20.20)。如上文所述,这里我们省去了定义一个TCP连接所需要的端口号。这个连接一旦建立,就不会在因为“移动”而发生变化。例如,将客户机上应用程序的进程转移到另一台机器,或者将客户机IP地址改为(30.30.30.30),这个连接仍然为(1.1.1.1,2.2.2.2)。
  
  通过这个例子我们可以看到,VNAT对连接的“虚拟化”过程对TCP是不可见的;也即,TCP并不知道所建立的连接采用的是虚拟地址,它仍然把虚拟地址当作真实的物理地址来执行操作。同样,“虚拟化”过程对应用程序也是不可见的,因为它并不关心低层的信息传输。通过比较我们可以发现,移动IP技术是通过对应用程序隐藏地址的变化来实现移动,而VNAT则通过对传输层隐藏地址的变化来实现移动。
  
  由于虚拟连接的双方共用一对虚拟地址,势必应建立某种机制,使任何一方在连接建立时告知对方自己使用的虚拟地址。然而,使用这种机制可能会造成时延,这个问题在广域网的实时通信中显得尤为突出。一种解决方法是,双方在建立连接时默认使用此时的物理地址作为虚拟地址,这样就省去了额外的通信开销。如果采用这种机制,无论连接双方如何“移动”,在传输层建立的连接总是使用连接最初建立时双方的物理地址。
  
  
  2 地址转换
  
  通过建立虚拟连接,传输层就可以不必顾及通信终端物理地址的变化了。然而,仅仅建立了虚拟连接并不足以传输数据包。仍然以图2为例,从客户机20.20.20.20发出的首部包含(2.2.2.2,1.1.1.1)的TCP数据包永远也不会到达服务器10.10.10.10。为了使数据包能够在虚拟连接上顺利传输,VNAT采用了地址转换机制,将虚拟连接中的一对虚拟地址同通信终端的一对物理地址关联起来。也就是说,VNAT首先建立虚拟连接,然后通过地址转换将虚拟地址和物理地址建立起一一对应的关系。
  
  VNAT地址转换机制类似著名的NAT(Network Address Translation,网络地址转换)技术。NAT技术通过维护一张NAT转换表来建立本地专用网内的主机同外部网的主机的映射,从而使得拥有专用地址的主机能同外界网络进行通信。VNAT的地址转换对传输层是透明的,而且完全在终端内部实现,因此不需要对传输协议作任何修改。下面我们继续图2的例子来讨论地址转换。
  
  如图3所示,来自客户端TCP的首部包含(2.2.2.2,1.1.1.1)的TCP数据包经过VNAT地址转换,其首部的源地址和目的地址变为(20.20.20.20,10.10.10.10),然后发往服务器10.10.10.10。当该数据包到达服务器后,再一次经过地址转换,其首部的源地址和目的地址又变回(2.2.2.2,1.1.1.1),最后被服务器端TCP接收。
   
  图3 VNAT的地址转换
  
  
  如果我们采用连接双方最初的物理地址作为虚拟地址,在通信终端未发生移动时,由于虚拟地址同物理地址相吻合,就不需要进行地址转换,从而节省开销。因此,在这种机制下,VNAT地址转换仅在终端的物理地址变动时才进行。
  
  
  3 连接转移
  
  VNAT的虚拟连接和地址转换使连接终端可以自由移动和传输数据。在这基础上,VNAT的连接转移机制使得通信双方在保持连接的同时可以自由移动。VNAT连接转移能使连接在一个地点被挂起,在另一个地点被唤醒。当连接终端的地址发生变动时,该连接随着所属进程一起被转移。同时VNAT采用密钥的机制,在移动后唤醒连接时首先需要通过验证,然后更新从虚拟地址到物理地址的映射。限于篇幅,这里简要介绍一下VNAT连接转移的相关内容。
  
  我们在前面已经定义了移动的两种情况,即主机移动和进程移动。当任何一个终端发生移动时,该连接被挂起。当一个终端转移到一个新的地点后,VNAT将通知另一个终端更新从虚拟地址到物理地址的映射信息。鉴于这样可能会让恶意攻击有机可乘,VNAT提供了安全机制。当连接被挂起时,连接双方约定一个安全码。在唤醒这个连接时,双方首先验证这个安全码,然后再更新地址信息。
  
  现在我们来看一个完整的动态连接转移的例子。如图4所示,主机20.20.20.20上的客户端程序建立了一个同主机10.10.10.10上的服务器端程序的TCP连接。VNAT虚拟化了这个连接,并采用双方最初的IP地址作为虚拟地址。这样,双方的TCP看到的连接都是(20.20.20.20,10.10.10.10)。此时,由于客户端进程发生转移或者客户端主机发生移动,连接被挂起。挂起之前,客户端VNAT向服务器端发送信息,约定安全码。客户端移动到新的主
【责编:admin】

--------------------next---------------------

阅读(322) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~