一种用于提高应用程序网络穿透能力的系统和方法 技术领域 本发明涉及一种远程通讯的系统和方法, 具体涉及一种用于提高应用程序网络穿 透能力的系统和方法。
背景技术 目前多数网络通信实体, 都是通过 TCP/IP 协议进行通信。在 TCP/IP 协议的使用 上有很多方式 : 直接使用 TCP 连接后 ( 或是 UDP) 进行自定的二进制协议通信 ; 使用 HTTP 协 议进行通信 ; 使用 SOAP 协议, 或是 Web Service 之类的基于 XML 的高级通信方式。
现有技术主要有两方面的问题 : 效率和穿透能力。 要么效率高, 但穿透能力差 ( 如 直接基于 TCP 的自定二进制协议 ) ; 要么穿透能力强, 但效率底 ( 如使用 SOAP 等高级的基 于文本和 HTTP 的协议 )。 这里的效率主要指通信实体进行协议处理的时间效率和传输过程 中的数据量带来的空间效率。穿透能力则指在不同的网络拓扑环境下, 成功与远程通讯实 体进行通讯的可能性。
现有穿透能力强的技术如 SOAP( 应用 SOAP 协议的典型应用代表为 WebServices), 这种技术使用 HTTP 协议传输基于 XML 格式的数据。 这种技术问题在于传输的数据量大, XML 格式的数据在生成和解析时效率也很低。
现有的效率高的技术一般是使用自定的二进制数据格式, 直接基于 TCP 协议发 送。这种技术问题在于网络穿透能力差 : 要么连接远程通信实体时使用的端口号不是 Well-Known 端口, 容易被封 ; 要么使用 Well-Known 端口连接, 但由于发送的数据不符合相 应协议的格式, 导致被安全工具拦截。
发明内容
本发明的目的是提供一种用于提高应用程序网络穿透能力的系统和方法, 它引入 一种两者兼顾的方案, 使得应用能够使用现有的高效率的通讯方案, 又能最大可能的提高 网络的穿透能力, 做到对布署环境的依赖最小化。
本发明一种用于提高应用程序网络穿透能力的系统和方法的目的是通过以下技 术方案实现的 : 一种用于提高应用程序网络穿透能力的系统和方法, 所述的应用程序网络 包括发送端实体及远端实体 ; 所述的发送端实体中包括一次连接的 HTTP 封装组件、 SSL 封 装组件、 发送组件及穿透模块 ; 远端实体包括相连接的接收组件及判断 POST 请求组件。
所述的发送端实体及远端实体使用 TCP 协议传输数据。
所述的远端实体包括端口 80 及端口 443。
所述的 HTTP 封装组件封装在发送端实体与远端实体之间传输失败的数据, 传输 到远端实体的 80 端口。
所述的 SSL 封装组件封装在发送端实体与远端实体之间传输失败的数据, 传输到 远端实体的 443 端口。
上述的一种用于提高应用程序网络穿透能力的系统和方法, 其中, 所述的发送端实体与远端实体之间传输的数据是二进制数据。
上述的一种用于提高应用程序网络穿透能力的系统和方法, 其中, 所述的 HTTP 封 装组件及 SSL 封装组件封装后传输的数据是二进制数据, 作为 POST 请求的数据体, 判断 POST 请求组件判断接收到的数据是否有 HTTP POST 请求或 HTTPS POST 请求。
上述的一种用于提高应用程序网络穿透能力的系统和方法, 其中, 该方法至少包 括如下步骤 :
步骤 1, 发送端实体与远端实体开始创建连接。
步骤 2, 发送端实体向远端实体发送数据包。
步骤 3, 远端实体判断在设定的时间内是否收到数据包 :
步骤 3.1, 远端实体判断在设定的时间内是否收到数据包, 若收到数据包, 则继续 发送 ;
步骤 3.2, 接收组件若没有收到数据包, 则选择穿透方案 :
步骤 3.2.1, 应用使用 TCP 协议连接到远端实体的 80 端口时, 选择方案一 ; 若不 是, 则执行步骤 3.2.2 :
步骤 3.2.1.1, HTTP 封装组件将原始的数据封装到一个 HTTP 协议包中, 作为 POST 请求的数据体 ;
步骤 3.2.1.2, 发送组件向远端实体发送数据包 ;
步骤 3.2.1.3, 远端实体的判断 POST 请求组件识别数据是否有 HTTP POST 请求封 装, 若有, 则执行步骤 3.2.1.4, 若没有, 则重新连接 ;
步骤 3.2.1.4, 发送组件继续发送数据包 ;
步骤 3.2.2, 应用使用 TCP 协议连接到远端实体的 443 端口时, 选择方案二 :
步骤 3.2.2.1, 用 SSL 封装组件, 发送端实体与远端实体进行的 SSL 初始化过程, 并 完成握手过程 ;
步骤 3.2.2.2, 发送组件向远端实体发送数据包 ;
步骤 3.2.2.3, 远端实体的判断 POST 请求组件识别是否有 HTTPS POST 请求, 若是, 则发送组件根据 SSL 协议继续发送数据包, 若不是, 则重新连接。
步骤 4, 发送端实体判断传输是否完成 :
步骤 4.1, 发送端实体判断传输是否完成, 若完成, 则执行步骤 5 ;
步骤 4.2, 若传输没有完成, 则判断是否启动穿透模块, 若启动穿透模块, 则执行步 骤 3, 若不启动穿透模块, 远端实体向发送端实体提示出错信息, 发送失败后执行步骤 5。
步骤 5, 结束传输。
本发明一种用于提高应用程序网络穿透能力的系统和方法由于采用了上述方案, 使之与现有技术相比, 具有以下的优点和积极效果 :
1、 本发明一种用于提高应用程序网络穿透能力的系统和方法能使用现有的高效 率的通讯方案, 又能最大可能的提高网络的穿透能力。
2、 本发明一种用于提高应用程序网络穿透能力的系统和方法能做到对不熟环境 的依赖最小化。
3、 本发明一种用于提高应用程序网络穿透能力的系统和方法成本较低, 效益大, 易于普及应用。附图说明 图 1 是本发明一种用于提高应用程序网络穿透能力的系统和方法的流程图。
图 2 是本发明一种用于提高应用程序网络穿透能力的系统和方法选择方案一的 流程图。
图 3 是本发明一种用于提高应用程序网络穿透能力的系统和方法选择方案二的 流程图。
图 4 是本发明一种用于提高应用程序网络穿透能力的系统和方法的模块图。
具体实施方式
请参见附图 4 所示, 本发明用于提高应用程序网络穿透能力的系统和方法, 应用 程序网络包括发送端实体及远端实体 ; 发送端实体中包括一次连接的 HTTP 封装组件、 SSL 封装组件、 发送组件及穿透模块 ; 远端实体包括相连接的接收组件及判断 POST 请求组件 ; 发送端实体及远端实体使用 TCP 协议传输数据 ; 远端实体包括端口 80 及端口 443 ; HTTP 封 装组件封装在发送端实体与远端实体之间传输失败的数据, 传输到远端实体的 80 端口 ; SSL 封装组件封装在发送端实体与远端实体之间传输失败的数据, 传输到远端实体的 443 端口, 发送端实体与远端实体之间传输的数据是二进制数据, HTTP 封装组件及 SSL 封装组 件封装后传输的数据是二进制数据, 作为 POST 请求的数据体, 所述的判断 POST 请求组件判 断接收到的数据是否有 HTTP POST 请求或 HTTPSPOST 请求。 请参见附图 1 所示, 本发明用于提高应用程序网络穿透能力的系统和方法, 该方 法至少包括如下步骤 :
步骤 1, 发送端实体与远端实体开始创建连接。
步骤 2, 发送端实体向远端实体发送数据包。
步骤 3, 远端实体判断在设定的时间内是否收到数据包。
步骤 4, 发送端实体判断传输是否完成 :
步骤 4.1, 发送端实体判断传输是否完成, 若完成, 则执行步骤 5 ;
步骤 4.2, 若传输没有完成, 则判断是否启动穿透模块, 若启动穿透模块, 则执行步 骤 3, 若不启动穿透模块, 远端实体向发送端实体提示出错信息, 发送失败后执行步骤 5。
步骤 5, 结束传输。
请参见附图 2 所示, 附图 2 是本发明用于提高应用程序网络穿透能力的系统和方 法的穿透方案一 :
步骤 3.1, 远端实体判断在设定的时间内是否收到数据包, 若收到数据包, 则继续 发送 ;
步骤 3.2, 接收组件若没有收到数据包, 则选择穿透方案 :
步骤 3.2.1, 应用使用 TCP 协议连接到远端实体的 80 端口时, 选择方案一 ; 若不 是, 则执行步骤 3.2.2 :
步骤 3.2.1.1, HTTP 封装组件将原始的数据封装到一个 HTTP 协议包中, 作为 POST 请求的数据体 ;
步骤 3.2.1.2, 发送组件向远端实体发送数据包 ;
步骤 3.2.1.3, 远端实体的判断 POST 请求组件识别数据是否有 HTTP POST 请求封 装, 若有, 则执行步骤 3.2.1.4, 若没有, 则重新连接 ;
步骤 3.2.1.4, 发送组件继续发送数据包。
应用使用 TCP 协议连接到远端实体的 80 端口, 并在这条链接上发送端实体直接通 过 send 函数直接发送应用程序自定的二进制通信协议进行通信。但在安装了一些安全工 具后, 可能会对连接远端实体 80 端口进行通信的链接上发送的数据进行检验, 如果不符合 HTTP 标准协议, 就认为是不合法数据, 直接丢弃, 导致通讯失败, 接收组件在设定时间内没 有接收到相应的数据包。在这种情况下, 本发明的方案是将原始的二进制数据用 HTTP 封装 组件封装到一个 HTTP 协议包中, 作为 POST 请求的数据体。由于 HTTP POST 请求数据体可 以为二进制数据, 因此, 这个协议包是一个依法的 HTTP 请求, 将可以通过安全工具的检验。 另外, 由于在原始的数据包前只增加了很少的一个 HTTPPOST 请求头部, 只有几十个字节, 基本上带来的开销可以不计了。这种情况要求远端实体在处理通讯协议时, 判断 POST 请求 组件可以识别数据是否有 HTTP POST 请求封装。这可以在通信协议中指明第一个字节是额 外的协议类别字节, 用于指示是否有 HTTP 封装。
请参见附图 3 所示, 附图 3 是本发明用于提高应用程序网络穿透能力的系统和方 法的穿透方案二 : 步骤 3.2.2, 应用使用 TCP 协议连接到远端实体的 443 端口时, 选择方案二 :
步骤 3.2.2.1, 用 SSL 封装组件, 发送端实体与远端实体进行的 SSL 初始化过程, 并 完成握手过程 ;
步骤 3.2.2.2, 发送组件向远端实体发送数据包 ;
步骤 3.2.2.3, 远端实体的判断 POST 请求组件识别是否有 HTTPS POST 请求, 若是, 则发送组件根据 SSL 协议继续发送数据包, 若不是, 则重新连接。
应用使用 TCP 协议连接到远端实体的 443 端口, 并在这条链接上发送端实体直接 通过 send 函数直接发送应用程序自定的二进制通信协议进行通信。但在安装了一些安全 工具后, 可能会对连接远端实体 443 端口进行通信的链接上发送的数据进行检验, 如果不 符合 HTTPS(SSL) 标准协议, 就认为是不合法数据, 直接丢弃, 导致通讯失败, 接收组件在设 定时间内没有接收到相应的数据包。在这种情况下, 本发明的方案是首先与远端通信实体 进行标准的 SSL 初始化过程, 得到 SSL 的会话公钥, 之后, 可以直接在这个 SSL 链路上发送 二进制数据, 而不会被安全工具拦截 ( 因为 HTTPS 上传送的数据都是用公钥加密, 没有私钥 安全工具也无法解开传输的数据, 也就无法验证是否发送的是合法的 HTTP 请求 )。这种情 况要求远端实体在处理通讯协议时, 可以识别第一个请求是否是前导的 SSL 标准请求过程 的第一个请求, 判断 POST 请求组件判断是否有 HTTPS POST 请求, 如果是, 则进行标准的 SSL 公钥分发流程。这可以在通信协议中指明第一个字节是额外的协议类别字节, 用于指示是 否是 SSL 请求。
本发明一种用于提高应用程序网络穿透能力的系统和方法还可以针对其它的网 络环境进行穿透, 只要这种网络环境下, 至少有一种可用的支持传输二进制内容的网络协 议。 总体来说, 本发明一种用于提高应用程序网络穿透能力的系统和方法分为两部分 : 网络 识别和协议适配。网络识别部分主要是通过人工或自动测试得到当前网络支持的, 协议适 配部分可以支持的, 可以以某种方式传输二进制数据的协议。协议适配部分主要是指针对
特定的几种协议, 在互相通信的实体端以一定的标识方式可以识别协议种类, 并自动选择 合适的协议交互流程, 以相应协议下合法的数据包传输应用自定的数据。
本发明一种用于提高应用程序网络穿透能力的系统和方法主要是兼顾了效率和 网络穿透能力, 使用自定的二进制数据格式, 保证了数据生成的解析的高效率, 并且得到一 个紧缩, 节省带宽的数据包。 另一方面, 本发明一种用于提高应用程序网络穿透能力的系统 和方法主要使用基于 TCP 的 Well-Known 端口, 并进行网络识别, 如果没有特别的协议格式 限制, 会不做协议适配, 以最少代价发送数据 ; 不然, 进行协议适配, 以尽可能小的代价, 提 升应用通讯的网络穿透能力。
综上所述, 本发明一种用于提高应用程序网络穿透能力的系统和方法能使用现有 的高效率的通讯方案, 又能最大可能的提高网络的穿透能力 ; 本发明一种用于提高应用程 序网络穿透能力的系统和方法能做到对不熟环境的依赖最小化 ; 本发明一种用于提高应用 程序网络穿透能力的系统和方法成本较低, 效益大, 易于普及应用。