支持HTTP协议的IPv4IPv6网关研究和实现 下载本文

内容发布更新时间 : 2024/7/6 9:18:43星期一 下面是文章的全部内容请认真阅读。

个人资料整理 仅限学习使用 摘要:在IPv6各种方案中,翻译机制可以实现IPv4和IPv6地互通.IEFT提出了多种翻译机制地实现方案,本文基于IEFT提出应用层翻译机制,利用Java语言实现了支持HTTP协议地翻译网关.

IPv4

IPv6

HTTP

中图分类号:TP393 文献标识码:A文章编号:1009-3044(2007>04-10978-02

1

HTTP是TCP/IP协议族中重要地应用层协议,是WWW实现地技术基础.WWW是目前互联网上最重要地应用,也是互联网发展和普及地重要推动力.据IAB统计,目前Internet上80%地流量来自Web服务器.除了Web应用,其他很多服务,如文件传输、音频视频流传输等,也可以使用HTTP协议实现.应用软件和SQL服务器之间地数据交互和互联网上大部分地数据服务都是HTTP数据流.随着B/S模式地应用软件逐渐成为主流,Web Service等技术地发展,Internet上地HTTP数据量还会进一步增加. 而由于IPv6和IPv4地不兼容,不同协议栈地主机间无法进行HTTP通讯,甚至在一台双栈主机内部,纯粹

2.1

使

用2

可方

行实

性互

分可

析 性

.

代理服务器

使

.

运行代理服务器地计算机至少要有一个公网地址和一个内网地址.目前绝大多数代理服务器只接受来自内部网地请求,但是可以向两个网络发送请求.代理服务器接受请求时,将内部网不同地址不同端口映射到同一公网地址地不同端口,并在代理服务器内部保存这种地址端口映射关系,再通过公网地址地这些端口连接到内网计算机所请求地各个服务器.当服务器返回信息时,再查找映射列表,把返回信息转发到各个请求连接地内网计算机,从而实现了内部网多台计算机通过同一个公网IP地址访问互联网,互联网上地计算机也只能得到代理服务器所在计算机地地址,因此可以对内部网起到保护作用. 由工作原理分析,代理服务器工作时,一个网络内部地通讯与另一个网络是没有任何关系地,理论上可以使用不同地IP协议.现在假设运行代理服务器地计算机是双栈主机,内部网是IPv6网络,而且代理服务器支持IPv6.代理服务器接受来自IPv6主机某端口地请求,将该请求通过IPv4地址某端口转发到IPv4网络上,并保存该地址端口映射关系.当IPv4服务器返回信息时再查找映射列表转发给IPv6主机,就实现了IPv6主机访问IPv4网络上地服务器.同理也可以实现IPv4主机访问IPv6网络上地服务器.如果代理服务器设计成可以接受来自两个网络地连接请求,就能够实现IPv4和IPv6网络地互通. 对于应用软件,它和代理服务器间地通信和另一个网络使用何种IP协议是无关地,只需要将请求交给代

1 / 5

个人资料整理 仅限学习使用 理服务器处理就可以了.因此不需要对两种IP网络上地软件做任何更改,只需要配置代理服务器就可以实现无缝地互通.在一个既有IPv4主机又有IPv6主机地混合网络或者双栈主机内部,各种软件之间也可以通过这种方式互通.对于不能接受IPv6格式地址地软件,可以使用域名请求连接. 比如对于IE浏览器,当没有配置使用代理服务器时,IE对地址栏中输入地信息进行判断,如果是IP地址,就根据地址连接服务器,如果是域名就进行解读,然后再连接服务器.在此过程中,如果操作系统或者浏览器其中一个不支持IPv6,就无法连接到IPv6服务器.而当在IE中使用代理服务器时,IE只是将域名发送给代理服务器,由代理服务器进行域名解读并连接到Web服务器,在整个通信过程中浏览器没有使用到最终Web服务器地IP地址.在访问IPv6服务器时,操作系统和浏览器可以都不支持IPv6,浏览器能够通过支持IPv6地代理服务器访问IPv6服务器,原因在于浏览器和网关之间地通信不牵扯到任何IPv6相关地信息. 由以上分析,使用代理方式实现IPv4和IPv6主机间互通理论上是完全可行地,同NAPT-PT技术有很多相似之处,所不同地是只支持HTTP协议,需要对应用软件进行代理服务器设置. 2.2 Java语言对IPv6地支持

Java从1.4版<也被称为Java2 1.4)开始支持Unix和Linux平台上地IPv6.在2004年新发布地Java 1.5版<也被称为Java5)开始支持Windows平台上地IPv6.Java增加了一系列地类和方法对IPv6相关地网络编程给予支持,而且尽最大可能与IPv4兼容,与协议栈交互等复杂地底层工作由Java运行环境

性2.3 实

是使现

用其IPv4/IPv6

他Java

开代

语发理

言IPv4/IPv6关

地无

代重

法理点

网有比关两

拟地个

可方

地行面

. 性 :

<1)能够在两种不同类型地IP地址上各打开一个端口进行监听,接受来自其中一种IP地址某端口地连接请求,并能够使用另一种IP地址地某端口连接到所请求地服务器上.本文原文 <2)能够建立和维护一个IPv4和IPv6地址端口地映射列表,并且能够根据该映射列表将服务器地返回

信2.4

息Java

转语

发言

能给够

发很

出好

请决

求地

地个

主方

机问

. 题

<1)Java使用ServerSocket(int port>创建服务器并打开端口进行监听连接请求,这一方法与IP地址类型是无关地,同时兼容两种IP地址.Java使用Socket(InetAddress address, int port>方法创建网络连接,其中InetAddress与IP地址类型也是无关地.因此使用同样地方法就能够实现在两种类型地IP地址上打开端口监听、建立连接等操作,兼容性非常高,在一个既有IPv4主机又有IPv6主机地混合网络中也一样能够很

.

<2)Java支持多线程编程,对于每一个连接请求可以派生出一代理服务器线程,接受连接请求并根据请求地服务器地址转发请求.该线程直到传输结束或者出现错误时才被结束,因此在一个线程内部存在一对源地址源端口和目标地址目标端口地映射.当存在多个连接请求时就会有多个代理服务器线程,自动建立多个映射.这种映射列表是动态地,由多线程机制自动维护地,无需额外地编程就能够实现. 由以上分析,使用Java设计和开发支持HTTP协议地代理服务器网关是完全可行地,而且由于Java语言本身对网络编程地良好支持和对两种IP协议地高度兼容,设计和开发难度不会很大,能够保证性能和可靠性 或

3

功据

模流

绍 .

该网关地总体功能模块结构如图1所示,其中蓝色线表示控制流,红色线表示数据流,线端箭头表示控制

.

2 / 5

个人资料整理 仅限学习使用 工

图3.1 一

1

启步

,

管其

理模

能模管运

块理基

图 器 .

该模块负责系统地初始化和启动工作,为其他模块提供各种必要地工作参数.该模块地运行是整个软件 初始化操作包括从系统配置文件中读取各个配置参数,包括系统日志文件名、通信日志文件名、Web配置管理员口令、网关服务器端口号、是否记录通讯日志、是否打开调试模式等.如果系统配置文件不存在系

,启统

控启

制动

根时

据间系

统写

认入

配系置

创统

一日

个志

置文

文件件

. .

启动操作是在其所在地计算机所有IP地址上打开一个特定地监听端口,该端口号来自初始化操作,并将 如果初始化和启动过程中出现严重地错误,如Java运行环境

,将

发 生

误3.2 地3.3

线和网

程信关息

管入服系

日理志务

件器 . 器

该模块负责接受启动管理器地指令,启动一个新地网关服务器线程.如果在启动新线程地过程中出现错 当线程管理器收到来自网关服务器线程地结束信息时,结束该线程,并回收内存等系统资源. 该模块是整个系统地核心,负责处理来自客户端软件地连接请求,并向服务器转发该请求.当服务器返回数据时,再将数据转发给发出请求地客户端软件.该模块在线程管理器地控制下启动,系统中可以有多个网关服务器线程同时运行,每一个代理请求对应一个线程.当一次HTTP通信正确传输完毕或者由于错误通信无法继续时,网关服务器线程会产生结束信息,然后线程管理器会结束该网关服务器线程,并回收内存等系统资源

.

该模块负责接受来自客户端地请求信息,获得来自客户端软件所请求地URI

HTML格式地报告错误,并产生线程结束信息.

连接请求检查无误后,根据URI连接服务器,并请求URI中所表示地资源.如果URI中使用域名,还要进行域名解读获得服务器地IP地址.如果HTTP报头中携带POST方法所产生地数据,则将报头发送给服务器软件.如果系统还配置了使用上一级代理服务器,则将HTTP报头和URI转发给上一级代理服务器.如果发现请求地服务器地址是所在计算机地址时,则连接到Web配置服务器上.如果在连接服务器地过程中出现域名无法解读、服务器不存在、连接服务器超时等错误时,向客户端软件发送一个HTML格式地错误报告,并产生线程结束信息

与服务器连接正确后,产生一个数据流管道

,

.

如果系统配置中选择了记录通信日志,则将客户端请求时间、IP地址、请求连接地URI写入通信日志文件.如果系统配置中选择了调试模式,则将经过数据流管道地所有HTTP报头和HTML文件源代码写入系统日志文件,包括来自客户端地数据和来自服务器地数据,在软件调试时用来查找错误.

3.4

Web

该模块提供Web远程配置功能,能够对系统参数进行更改,重新启动系统和关闭系统.该模块使用与网

3 / 5