基于 UDP 的穿越 NAT 设备的方法及系统 【技术领域】
本发明涉及计算机网络通信技术领域, 特别涉及一种基于 UDP 的穿越 NAT 设备的 方法及系统。背景技术
计算机网络技术是通信技术与计算机技术相结合的产物。近年来, 计算机网络通 信在人们的日常生活中有着越来越重要的地位, 用户可以在计算机网络上进行文字、 声音 和视频的交流, 共享文件、 图片和视频信息等, 从而方便用户的生活、 工作和学习。 在使用计 算机网络进行沟通交流的过程中, 服务器压力非常巨大, 为了降低服务器的压力, 文件传输 及音视频传输常采用端到端 (peer to peer, P2P) 的传输方式。如果两个节点间存在 NAT 设备, 就会给传输造成很大障碍, 因此需要在 NAT 设备之间建立通路, 而 ITEF RFC3489 制定 了一些分类方法并对 NAT 进行了简单分类, 但是并未针对不同的 NAT 设备及其组合给出可 建立通路的方法。 发明内容 ( 一 ) 要解决的技术问题
本发明要解决的技术问题是 : 如何穿越 NAT 设备, 并在不同的 NAT 类型设备之间建 立通路。
( 二 ) 技术方案
为解决上述技术问题, 本发明提供了一种基于 UDP 的穿越 NAT 设备的方法, 其特征 在于, 包括以下步骤 :
S1 : 客户端通过位于公网的探测服务器获取经过 NAT 映射后的 IP 地址和端口, 并 探测自身的 NAT 类型 ;
S2 : 发送方客户端将经过 NAT 映射后的 IP 地址和端口及 NAT 类型通过位于公网的 SIP 服务器发送给接收方客户端 ;
S3 : 所述接收方客户端根据双方的 NAT 类型决策出双方各自的穿越策略, 并将穿 越策略通过所述 SIP 服务器发送给发送方客户端 ;
S4 : 发送方客户端和接收方客户端根据穿越策略进行穿越, 以建立发送方客户端 和接收方客户端的 UDP 连接。
其中, 所述步骤 S1 中对 NAT 类型的探测在所述客户端登录服务端时进行, 并将探 测到的 NAT 类型缓存到客户端本地。
其中, 所述步骤 S1 中获取经过 NAT 映射后的 IP 地址和端口的步骤包括 :
所述客户端向所述探测服务器发送数据包 ;
所述探测服务器收到所述数据包后将所述经过 NAT 映射后的 IP 地址和端口发送 给所述客户端。
其中, 所述 NAT 类型包括 : 开放型、 防火墙型、 堵塞型、 对称型、 全锥型、 IP 限制锥型
及端口限制锥型, 所述步骤 S1 中客户端探测自身 NAT 类型的步骤包括 :
S101 : 向所述探测服务器发送探测请求, 要求探测服务器返回给客户端数据所使 用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都相同 ;
S102 : 判断是否收到探测服务器的回应数据包, 若未收到探测服务器的回应数据 包, 则 NAT 类型为堵塞类型, 若收到探测服务器的回应数据包, 则执行步骤 S103 ;
S103 : 检查所述回应数据包中的 IP 是否和客户端本地 IP 相同, 若相同, 则执行步 骤 S104, 否则执行步骤 S106 ;
S104 : 再次向所述探测服务器发送探测请求, 要求探测服务器返回给客户端数据 所使用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都不相同 ;
S105 : 判断是否收到探测服务器的回应数据包, 若收到回应数据包, 则 NAT 类型为 开放类型, 否则为防火墙型 ;
S106 : 记录步骤 S103 的回应数据包中的端口, 并检测 NAT 属性 ;
S107 : 再次向所述探测服务器发送探测请求, 要求探测服务器返回给客户端数据 所使用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都不相同 ;
S108 : 判断是否收到探测服务器的回应数据包, 若收到回应数据包, 则 NAT 类型为 全锥形, 否则执行步骤 S109 ; S109 : 向另一台探测服务器发送探测请求, 要求探测服务器返回给客户端数据所 使用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都相同 ;
S110 : 判断端口是否和步骤 S106 记录的端口相同, 若端口和步骤 S106 记录的端口 不相同, 则 NAT 类型为对称型, 否则执行步骤 S111 ;
S111 : 再次向所述另一台探测服务器发送探测请求, 要求探测服务器返回给客户 端数据所使用的 IP 和端口, 与客户端连接的探测服务器的 IP 相同但端口不相同 ;
S112 : 判断是否收到探测服务器的回应数据包, 若收到回应数据包, 则 NAT 类型为 IP 限制锥型, 否则为端口限制锥型。
其中, 所述步骤 S4 中根据穿越策略穿越过程中, 当客户端 A 的 NAT 为开放型, 客户 端 B 的 NAT 为除了防火墙型的其它类型时, 包括以下步骤 :
B 端向 A 端发送探测包, 等待探测回应 ;
A 端收到探测包后向 B 端发送探测回应 ;
B 端收到探测回应后, 探测结束。
其中, 所述步骤 S4 中根据穿越策略穿越过程中, 当客户端 A 的 NAT 为全锥型或 IP 限制锥形, 客户端 B 的 NAT 为除了防火墙型的其它类型时, 包括以下步骤 :
A 端向 B 端任一端口发送打洞包, 以在 NAT 设备上建立 A 到 B 的路由表 ;
B 端向 A 端发送探测包, 等待探测回应 ;
A 端收到探测包后向 B 端发送探测回应 ;
B 端收到探测回应后, 探测结束。
其中, 所述步骤 S4 中根据穿越策略穿越过程中, 当客户端 A 和 B 的 NAT 都为端口 限制锥型或防火墙型时, 包括以下步骤 :
B 端向 A 端对应的应用程序端口发送打洞包, 以在 NAT 设备上建立 B 到 A 的路由 表;
A 端向 B 端发送探测包, 等待探测回应 ;
B 端收到探测包后向 A 端发送探测回应 ;
A 端收到探测回应后, 探测结束。
其中, 所述步骤 S4 中根据穿越策略穿越过程中, 当客户端 A 的 NAT 为端口限制锥 形或防火墙型, 客户端 B 的 NAT 为对称型时, 包括以下步骤 :
A 端向 B 端对应的应用程序端口及所述应用程序端口的临近端口发送打洞包, 以 在 NAT 设备上建立 A 到 B 的路由表, 所述临近端口为按端口号顺序在所述应用程序端口的 前后各 5 个端口 ;
B 端向 A 端发送探测包, 等待探测回应 ;
A 端收到探测包后向 B 端发送探测回应 ;
B 端收到探测回应后, 探测结束。
本发明还提供了一种基于 UDP 的穿越 NAT 设备的系统, 包括 :
探测模块, 用于客户端通过位于公网的探测服务器获取经过 NAT 映射后的 IP 地址 和端口, 并探测自身的 NAT 类型 ;
地址及 NAT 类型传输模块, 用于发送方客户端将经过 NAT 映射后的 IP 地址和端口 及 NAT 类型通过位于公网的 SIP 服务器发送给接收方客户端 ; 穿越策略制定模块, 用于所述接收方客户端根据双方的 NAT 类型决策出双方各自 的穿越策略, 并将穿越策略通过所述 SIP 服务器发送给发送方客户端 ;
穿越模块, 用于发送方客户端和接收方客户端根据穿越策略进行穿越, 以建立发 送方客户端和接收方客户端的 UDP 连接。
( 三 ) 有益效果
本发明通过公网的探测服务器和 SIP 服务器获得经过 NAT 转换后的 IP 和端口, 并 制定不同 NAT 类型之间了穿越策略, 建立了不同 NAT 类型的通路, 以该通路传输大文件 ( 如 音视频文件 ) 时降低了服务器的负荷, 提高了传输效率。
附图说明
图 1 是本发明实施例的一种基于 UDP 的穿越 NAT 设备的方法流程图 ;
图 2 是图 1 方法中探测 NAT 类型的流程图 ;
图 3 是图 1 方法中穿越不同 NAT 类型设备建立通路的流程图 ;
图 4 本发明实施例的一种基于 UDP 的穿越 NAT 设备的系统结构示意图。 具体实施方式
下面结合附图和实施例, 对本发明的具体实施方式作进一步详细描述。以下实施 例用于说明本发明, 但不用来限制本发明的范围。
如图 1 所示, 本发明实施例的基于用户数据报协议 (User DatagramProtocol, UDP) 的跨网络地址转换 (Network Address Translation, NAT) 设备的文件传输方法流程 图。包括 :
步骤 S1, 客户端通过位于公网的探测服务器获取经过 NAT 映射后的 IP 地址和端 口, 并探测自身的 NAT 类型, NAT 类型包括 : 开放型 (open)、 防火墙型 (firewall)、 堵塞型(block)、 对称型 (symmetrical)、 全锥型 (full cone)、 IP 限制锥型 (IP restrict cone) 及端口限制锥型 (portrestrict cone)。其中, 探测服务器为 STUN(Simple Traversal of UDPover NATs) 服务器。获取经过 NAT 映射后的 IP 地址和端口的步骤包括 : 客户端向 STUN 服务器发送 stun 格式数据包 ; STUN 服务器收到该数据包后将经过 NAT 映射后的 IP 地址和 端口发送给客户端, 具体地, 发送一个 stun 格式数据包, 其中包含经过 NAT 映射后的 IP 地 址和端口, 客户端收到该数据包后就可得到经过 NAT 映射后的 IP 地址和端口。探测 NAT 类 型时, 客户端通过与 STUN 服务器的多次交互, 获得自己的 NAT 类型, 具体步骤如图 2 所示, 包括 :
S201 : 向所述探测服务器发送探测请求, 要求探测服务器返回给客户端数据所使 用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都相同 ( 探测服务器可以配置多 个 IP 和端口, 客户端也可以要求探测服务器将已配置的其他 IP 和端口返回数据给客户 端 )。
S202 : 判断是否收到探测服务器的回应数据包, 若未收到探测服务器的回应数据 包, 则 NAT 类型为堵塞类型, 若收到探测服务器的回应数据包, 则执行步骤 S203。
S203 : 检查所述回应数据包中的 IP 是否和客户端本地 IP 相同, 若相同, 表明客户 端没有位于 NAT 设备之后, 则检查防火墙, 即执行步骤 S204, 否则执行步骤 S206。 S204 : 再次向所述探测服务器发送探测请求, 要求探测服务器返回给客户端数据 所使用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都不相同。
S205 : 判断是否收到探测服务器的回应数据包, 若收到回应数据包, 则 NAT 类型为 开放类型, 否则为防火墙型。
S206 : 记录步骤 S203 的回应数据包中的端口, 并检测 NAT 属性。
S207 : 再次向所述探测服务器发送探测请求, 要求探测服务器返回给客户端数据 所使用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都不相同。
S208 : 判断是否收到探测服务器的回应数据包, 若收到回应数据包, 则 NAT 类型为 全锥形, 否则执行步骤 S209。
S209 : 向另一台探测服务器发送探测请求, 要求探测服务器返回给客户端数据所 使用的 IP 和端口, 与客户端连接的探测服务器的 IP 和端口都相同。
S210 : 判断端口是否和步骤 S206 记录的端口相同, 若端口和步骤 S206 记录的端口 不相同, 则 NAT 类型为对称型, 否则执行步骤 S211。
S211 : 再次向所述另一台探测服务器发送探测请求, 要求探测服务器返回给客户 端数据所使用的 IP 和端口, 与客户端连接的探测服务器的 IP 相同但端口不相同。
S212 : 判断是否收到探测服务器的回应数据包, 若收到回应数据包, 则 NAT 类型为 IP 限制锥型, 否则为端口限制锥型。
客户端获得自身的经过 NAT 映射后的 IP 地址和端口优选在登录服务器时进行, 并 把 NAT 类型缓存在本地, 避免重复探测。
步骤 S2, 发送方客户端将经过 NAT 映射后的 IP 地址和端口及 NAT 类型通过位于公 网的 SIP 服务器发送给接收方客户端。
步骤 S3, 接收方客户端根据双方的 NAT 类型决策出双方各自的穿越策略, 并将穿 越策略通过 SIP 服务器发送给发送方客户端。
步骤 S4, 发送方客户端和接收方客户端根据穿越策略进行穿越。穿越步骤如图 3所示。 当客户端 A 的 NAT 为开放型, 客户端 B 的 NAT 为除了堵塞型的其它类型时, 如图 3 中 (a) 所示, 包括步骤 :
B 端向 A 端发送探测包, 等待探测回应 ;
A 端收到探测包后向 B 端发送探测回应 ;
B 端收到探测回应后, 探测结束。
当客户端 A 的 NAT 为全锥型或 IP 限制锥形, 客户端 B 的 NAT 为除了堵塞型的其它 类型时, 如图 3 中 (b) 所示, 包括步骤 :
A 端向 B 端任一端口发送打洞包, 以在 NAT 设备上建立 A 到 B 的路由表, 发送打洞 包是因为 NAT 下的客户端 A 必须向客户端 B 发送过数据或建立过连接, 否则, NAT 会过滤 B 发给 A 的所有数据包 ;
B 端向 A 端发送探测包, 等待探测回应 ;
A 端收到探测包后向 B 端发送探测回应 ;
B 端收到探测回应后, 探测结束。
当客户端 A 和 B 的 NAT 都为端口限制锥型或防火墙型时, 如图 3 中 (c) 所示, 包括 步骤 :
B 端向 A 端对应的应用程序端口发送打洞包, 以在 NAT 设备上建立 B 到 A 的路由 表;
A 端向 B 端发送探测包, 等待探测回应 ;
B 端收到探测包后向 A 端发送探测回应 ;
A 端收到探测回应后, 探测结束。
当客户端 A 的 NAT 为端口限制锥形或防火墙型, 客户端 B 的 NAT 为对称型时, 如图 3 中 (d) 所示, 包括步骤 :
A 端向 B 端对应的应用程序端口及对应的应用程序端口的临近端口发送打洞包, 以在 NAT 设备上建立 A 到 B 的路由表, 所述临近端口为按端口号顺序在对应的应用程序端 口的前后各 5 个端口, 如: 80 端口的前后为 : 75、 76、 77、 78、 79 和 81、 82、 83、 84、 85 端口 ;
B 端向 A 端发送探测包, 等待探测回应 ;
A 端收到探测包后向 B 端发送探测回应 ;
B 端收到探测回应后, 探测结束。
其中, 上述打洞包, 探测包, 探测回应都为 stun 格式数据包。上述探测结束后即建 立了客户端 A 和 B 的跨 NAT 设备的 UDP 连接。
本发明还公开了一种基于 UDP 的穿越 NAT 设备的系统, 如图 4 所示, 包括 : 探测模 块, 用于客户端通过位于公网的探测服务器获取经过 NAT 映射后的 IP 地址和端口, 并探测 自身的 NAT 类型 ; 地址及 NAT 类型传输模块, 用于发送方客户端将经过 NAT 映射后的 IP 地 址和端口及 NAT 类型通过位于公网的 SIP 服务器发送给接收方客户端 ; 穿越策略制定模块, 用于所述接收方客户端根据双方的 NAT 类型决策出双方各自的穿越策略, 并将穿越策略通 过所述 SIP 服务器发送给发送方客户端 ; 穿越模块, 用于发送方客户端和接收方客户端根 据穿越策略进行穿越, 以建立发送方客户端和接收方客户端的 UDP 连接。
本发明广泛用在位于 NAT 设备后的计算机节点大量交互数据的情形, 尤其用于即 时通信软件的客户端位于 NAT 设备之后, 且要传输视频、 音频等文件时能够穿越 NAT 设备建 立 UDP 连接, 以传输文件。
以上实施方式仅用于说明本发明, 而并非对本发明的限制, 有关技术领域的普通 技术人员, 在不脱离本发明的精神和范围的情况下, 还可以做出各种变化和变型, 因此所有 等同的技术方案也属于本发明的范畴, 本发明的专利保护范围应由权利要求限定。