1、摘 要摘 要伴随着网络环境的发展,网络通信所遇到的问题也越发明显。而最根本的问题仍旧是通信双方能否互相通信。在当前网络环境中,大多采用了网络地址转换(NAT ) ,出现了私有地址和公网地址等概念。解决了地址不足的问题。却又引申了另一个问题的出现跨局域网通信问题。不同局域网中的主机彼此无法直接通信,而本文通过 UDP 打洞的 NAT 穿透方法,阐述了实现跨局域网通信的解决方案。该方案使得处在不同局域网 NAT设备后面的主机能够借助中介服务器穿透彼此的 NAT 设备,实现直接通信。并且,对于不同类型的 NAT 设备采取了各自不同的针对性的解决办法。本文所阐释的技术能够基本解决跨局域网主机间的通信问
2、题。通过采用Netty 这款高性能 NIO 通信框架,也使得服务器的性能方面得到了保证。将跨局域网通信与 Netty 通信框架相结合,这正是本文的核心技术。关键词:Netty UDP 打洞 跨局域网通信基于 Netty 的高性能 NAT 穿透通信系统ABSTRACTABSTRACTWith the development of the internet,the problem we face up to emerges. But the most essential problem is still that the computers in internet communication co
3、uld receive message from each other.In modern internet environment,we use the Network Address Translator(NAT),and we can also heard of the concept of private address and public address.Although NAT makes IP address enough to use.It also lead to another pronlemcommunication across the LAN.Host machin
4、e in different LAN can not communicate directly.This paper introduces UDP punch to strike the NAT device,and it also states the solution to achieve communication across the LAN.The solution make sure that Host machine in different LAN could communicate directly with each other with the help of media
5、tion server.What is more,we could take different approaches to strike the NAT when we face diverse NAT device.The technology in this paper we discuss could almost solve the problem of communication across the LAN.It also take Netty into use which is a kind of high-performance NIO communication frame
6、work.Netty makes sure the performance of the server.The combination between Netty and the communication across the LAN is also indeed core technology stated in the paper.Keywords:Netty UDP punch communication across the LAN基于 Netty 的高性能 NAT 穿透通信系统目 录 i目 录第一章 绪论 .11.1 项目背景 .11.2 国内外研究现状 .1第二章 相关概念 .3
7、2.1 NAT.32.2 Netty 的高性能 .42.2.1 异步非阻塞通信 .42.2.2 高效的 Reactor 线程模型 .4第三章 需求分析 .73.1 局域网环境 .73.2 公网环境 .83.2.1 客户端 .83.2.2 物联网网关 .93.2.3 公网服务器 .9第四章 总体设计 .114.1 系统结构 .114.2 局域网环境 .124.3 公网环境 .134.3.1 直接通道设计 .154.3.2 转发通道设计 .16第五章 详细设计与实现 .195.1 公网服务器 .195.1.1 局域网环境 .195.1.2 公网环境 .195.1.3 类的设计 .205.1.4 方
8、法接口 .225.2 物联网网关 .225.2.1 局域网环境 .235.2.2 公网环境 .23ii 目 录5.2.3 类的设计 .235.2.4 方法接口 .255.3 客户端 .265.3.1 局域网环境 .265.3.2 公网环境 .265.3.3 类的设计 .265.3.4 方法接口 .28第六章 部署与测试 .296.1 系统部署 .296.1.1 公网环境模拟 .296.1.2 运行环境部署 .306.2 系统测试 .316.2.1 功能测试 .316.2.2 性能测试 .34第七章 总结与展望 .377.1 工作总结 .377.2 未来展望 .37致谢 .39参考文献 .41第
9、一章 绪论 1第一章 绪论本文主要讨论基于 Netty 的高性能 NAT 穿透通信系统 即跨局域网通信系统。采用了目前最流行的 Netty 高性能通信框架 1。1.1 项目背景随着物联网 2的兴起与发展,智能家居有关的项目也随之逐渐出现。智能家居是利用先进的计算机技术、网络通讯技术、综合布线技术、医疗电子技术依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统如安防、灯光控制、窗帘控制、煤气阀控制、信息家电、场景联动、地板采暖、健康保健、卫生防疫、安防保安等有机地结合在一起,通过网络化综合智能控制和管理,实现“以人为本”的全新家居生活体验。其项目的总体思想是使用户在日常生活中获得更大
10、的方便。用户能够通过自己身边随身携带的移动通信设备,与自己家中的智能家居设备远程通信,实现远程访问、监测与控制等功能。而这就需要一套适应于不同网络环境的通信系统。另一方面由于用户集群庞大,通信系统为了追求系统效率和性能,通过采用Netty 等高性能的通信框架为基础,开发出了多种跨局域网通信系统。而本文要介绍的正式以此为背景,研究并实现的一套基于 Netty 的高性能 NAT 穿透通信系统。实现了局域网环境与公网环境两种通信方式。基本解决了人们日常生活中,对于智能家居的远程访问等功能的需求。大大方便了人们的日常工作和生活。1.2 国内外研究现状虽然物联网还是一个新兴产业,然而就其系统中所采用的通
11、信系统而言,国内目前在跨局域网通信方面的研究已经相对成熟。下面介绍一些国内外开发的两个成功案例。首先是 Maze3 系统,它是由北京大学的实验室研究并且提出的一款基于中心控制和对等网络连接相结合的文件资源共享互传系统,其架构与 Napster4相类似,采用了类似于 Gnutella 的对等计算搜索方法。任何连入互联网的一台计算机,不论是连入了内部局域网还是外部公共网络,都能够通过配置并且启动 Maze 客户端来随2 基于 Netty 的高性能 NAT 穿透通信系统时随地的接入或者断开 Maze 系统。任何一个节点都能够本机上的多个文件传输到接入 Maze 系统的其他客户端主机 ,同样也能够从其
12、他客户端主机上获取自己所需要的资源。另外,Maze 系统还支持基于关键字的资源搜索和查找,甚至还能够通过网络好友关系直接获得资源的共享权。另外就是 BitTorrent 软件,用户首先从 Web 服务器上获得下载文件的种子文件,种子文件中包含下载文件名及数据部分的哈希值,还包含一个或者多个的索引(Tracker)服务器地址。它的工作过程如下:客户端向索引服务器发一个超文本传输协议(HTTP) 的 GET 请求,并把它自己的私有信息和下载文件的哈希值放在GET 的参数中;索引服务器根据请求的哈希值查找内部的数据字典,随机地返回正在下载该文件的一组节点,客户端连接这些节点,下载需要的文件片段。因此
13、可以将索引服务器的文件下载过程简单地分成两个部分:与索引服务器通信的HTTP,与其他客户端通信并传输数据的协议,称为 BitTorrent 对等协议。BitTorrent 协议也处在不断变化中,可以通过数据报协议(UDP) 和 DHT 的方法获得可用的传输节点信息,而不是仅仅通过原有的 HTTP,这种方法使得 BitTorrent应用更加灵活,提高 BitTorrent 用户的下载体验。第二章 相关概念 3第二章 相关概念2.1 NAT常说的 NAT5的全称叫做 “网络地址转换”(Network Address Translator) 。一般是应用于路由器设备上。NAT 分两大类,一类是 NA
14、T,通常只进行网络地址的转换;而另一类则是 NAPT6(Network Address Port Translator)更为复杂些,不仅会转换网络地址,并且还会将端口进行转换,如今大多使用的是NAPT。 NAT 设备的工作方式如图 2.1 所示。图 2.1 NAT 设备地址转换根据 NAT 设备的地址转换方式可分为不同的类型。最常见的四种类型的NAT7设备完全圆锥型的 NAT、地址限制型的 NAT、端口限制型的 NAT 以及对称型 NAT。这几种类型各有特点。完全圆锥型的 NAT 设备,将自己局域网下的每一台主机映射为 NAT 设备的某一个随机端口,无论是局域网内部主机还是局域网外的主机,对彼
15、此间的数据来往没有任何的限制。因为这种类型的 NAT 设备对外部请求的来源并没有任何的限制,所以这种方式的 NAT 设备特别的简单,但是另一方面也就造成了内部主机极其不安全。地址限制型的 NAT 设备,它是完全圆锥型的受限版本,顾名思义,不再是对内外部互相访问毫无限制,而是对其地址进行了识别与判断。相对于完全圆锥4 基于 Netty 的高性能 NAT 穿透通信系统型的 NAT 设备,该类型的 NAT 设备的安全性有所提高。事实上 NAT 设备只会向内部主机转发那些来自于目前已经访问过的外部主机的数据包,在一定程度上也保证了外部主机的数据来源的安全性。端口限制型的 NAT 设备,它是地址受限圆锥
16、型设备的更进一步的受限版本。它的限制更加严格,限制到了端口层次。这一限制更进一步的加强了对外部主机发送来的数据报的源地址的限制,和地址限制型 NAT 设备比较而言其更具安全性。对称型 NAT8设备,这种 NAT 设备比之前任何圆锥型 NAT 设备的地址转换方式都要更为灵活,限制作用也更强:任何圆锥型 NAT 设备,内部主机的内部私有地址和外网地址的转换映射关系都是独立于内部主机发送出来的数据包的目的地址的,也就是说这种转换方式与目的地址并无任何关联;然而对于对称型NAT 设备来说,目的地址却成了 NAT 设备实施地址转换时的一个主要辨识方法,即对于来自于相同内网地址并且拥有相同目的地址的数据访
17、问发生的时候,NAT设备才会将内网地址转换成同一个外网地址,如果不是这样,NAT 设备将会转换为一个新的外网地址。2.2 Netty 的高性能2.2.1 异步非阻塞通信在 IO 编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者 IO 多路复用技术进行处理。IO 多路复用技术通过把多个 IO 的阻塞复用到同一个 select 的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O 多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节省了系统资源 9。2.2.2 高效的 Reactor 线程模型常用的 Reactor 线程模型有三种,分别为 Reactor 单线程模型、Reactor 多线程模型以及主从 Reactor 多线程模型。