当 host 主机通过 NAT 访问外网的 B 主机时,就会在 NAT 上打个“洞”,所谓的“打洞”就是在 NAT 上建立一个内外网的映射表。 四元组 大多数打洞都是使用的 UDP 协议。之所以会这样,是因为 UDP 是无连接协议,它没有连接状态的判断,也就是说只要你发送数据给它,它就能收到。 IP 限制锥型要比完全锥型 NAT 严格得多,它主要的特点是,host 主机在 NAT 上“打洞”后,NAT 会对穿越洞口的 IP 地址做限制。只有登记的 IP 地址才可以通过,也就是说,只有 host 主机访问过的外网主机才能穿越 NAT。 如果发现发来数据的 IP 地址没有登记,则直接将该数据包丢弃。 5 元组 6 元组 该 6 元组中,不光包括了 host 主机内外网的映射关系,还包括了要访问的主机的 IP 地址及提供服务的应用程序的端口地址。 host 主机访问 B 主机的 p1 端口时,只有 B 主机的 p1 端口发送的消息才能穿越 NAT 与 host 主机通信。而其他主机,甚至 B 主机的 p2 端口都无法穿越 NAT。 与端口限制型 NAT 最大的不同在于,如果 host 主机访问 A 时,它会在 NAT 上重新开一个“洞”,而不会使用之前访问 B 时打开的“洞”。也就是说对称型 NAT 对每个连接都使用不同的端口,甚至更换 IP 地址,而端口限制型 NAT 的多个连接则使用同一个端口,这对称型 NAT 与端口限制型 NAT 最大的不同。 主机向服务器 #1 的某个 IP 和端口发送一个请求,服务器 #1 收到请求后,会通过同样的 IP 和端口返回一个响应消息。 如果能收到包,则判断返回的主机的外网 IP 地址是否与主机自身的 IP 地址一样。如果一样,说明主机就是一台拥有公网地址的主机.
普通NAT是通过修改UDP或TCP报文头部地址信息实现地址的转换,但对于VOIP应用,在TCP/UDP净载中也需带地址信息,ALG方式是指在私网中的VOIP终端在净载中填写的是其私网地址,此地址信息在通过NAT时被修改为NAT上对外的地址。语音和视频协议(H323、SIP、MGCP/H248)的识别和对NAT/Firewall的控制,同时每增加一种新的应用都将需要对 NAT/Firewall进行升级。在安全要求上还需要作一些折衷,因为ALG 不能识别加密后的报文内容,所以必须保证报文采用明文传送,这使得报文在公网中传送时有很大的安全隐患。NAT/ALG是支持VOIP NAT穿透的一种最简单的方式,但由于网络实际情况是已部署了大量的不支持此种特性的NAT/FW设备,因此,实际应用中,很难采用这种方式。 与NAT/ALG不同的是,MIDCOM的基本框架是采用可信的第三方(MIDCOM Agent)对Middlebox (NAT/FW)进行控制,VOIP协议的识别不由Middlebox完成,而是由外部的MIDCOM Agent完成,因此VOIP使用的协议对Middlebox是透明的 .由于识别应用协议的功能从Middlebox移到外部的MIDCOM Agent上,根据MIDCOM 的构,在不需要更改Middlebox基本特性的基础上,通过对MIDCOM Agent的升级就可以支持更多的新业务,这是相对NAT/ALG方式的一个很大的优势。在VOIP实际应用中,Middlebox功能可驻留在NAT/Firewall,通过软交换设备(即MIDCOMAgent)对IP语音和视频协议(H323、SIP、MGCP/H248)的识别和对NAT/Firewall的控制,来完成VOIP应用穿越 NAT/Firewall .在安全性上,MIDCOM方式可支持控制报文的加密,可支持媒体流的加密,因此安全性比较高。如果在软交换设备上实现对SIP/H323/MGCP/H248协议的识别,就只需在软交换和NAT/FW设备上增加MIDCOM协议即可,而且以后新的应用业务识别随着软交换的支持而支持,此方案是一种比较有前途的解决方案,但要求现有的NAT/FW设备需升级支持MIDCOM协议,从这一点上来说,对已大量部署的NAT/FW设备来说,也是很困难的,同NAT/ALG方式有相同的问题。 解决穿透NAT问题的另一思路是,私网中的VOIP终端通过某种机制预先得到出口NAT上的对外地址,然后在净载中所填写的地址信息直接填写出口NAT上的对外地址,而不是私网内终端的私有IP地址,这样净载中的内容在经过NAT时就无需被修改了,只需按普通NAT流程转换报文头的IP地址即可,净载中的 IP地址信息和报文头地址信息是一致的。STUN协议就是基于此思路来解决应用层地址的转换问题。STUN的全称是Simple Traversal of UDP Through Network Address Translators,即UDP对NAT的简单穿越方式。 应用程序(即STUN CLIENT)向NAT外的STUN SERVER通过UDP发送请求STUN 消息,STUN SERVER收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN CLIENT在NAT上对应的外部端口。然后响应消息通过NAT发送给STUN CLIENT,STUN CLIENT通过响应消息体中的内容得知其NAT上的外部地址,并将其填入以后呼叫协议的UDP负载中,告知对端,本端的RTP接收地址和端口号为NAT 外部的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越协议最大的优点是无需现有NAT/FW设备做任何改动。由于实际应用中,已有大量的NAT/FW,并且这些NAT/FW并不支持VoIP的应用,如果用MIDCOM或NAT/ALG方式来解决此问题,需要替换现有的NAT/FW,这是不太容易的。而采用STUN方式无需改动NAT/FW,这是其最大优势,同时STUN方式可在多个NAT串联的网络环境中使用,但MIDCOM方式则无法实现对多级NAT的有效控制。STUN的局限性在于需要VOIP终端支持STUN CLIENT的功能,同时STUN并不适合支持TCP连接的穿越,因此不支持H323.另外STUN方式不支持对防火墙的穿越,不支持对称NAT (Symmetric NAT)类型(在安全性要求较高的企业网中,出口NAT通常是这种类型)穿越。 TURN方式解决NAT问题的思路与STUN相似,也是私网中的VOIP终端通过某种机制预先得公网上的服务地址(STUN方式得到的地址为出口NAT上外部地址,TURN方式得到地址为TURN Server上的公网地址),然后在报文净载中所要求的地址信息就直接填写该公网地址。[Page]TURN的全称为Traversal Using Relay NAT,即通过Relay方式穿越应用模型通过分配TURN Server的地址和端口作为私网中VOIP终端对外的接受地址和端口,即私网终端发出的报文都要经过TURN Server进行Relay转发,这种方式除了具有STUN方式的优点外,还解决了STUN应用无法穿透对称NAT(SymmetricNAT)以及类似的Firewall设备的缺陷,同时TURN支持基于TCP的应用,如H323协议。此外TURN Server控制分配地址和端口,能分配RTP/RTCP地址对(RTCP端口号为RTP端口号加1)作为私网终端用户的接受地址,避免了STUN方式中出口NAT对RTP/RTCP地址端口号的任意分配,使得客户端无法收到对端发来的RTCP报文(对端发RTCP报文时,目的端口号缺省按RTP端口号加 1发送)。TURN的局限性在于需要VOIP终端支持TURN Client,这一点同STUN一样对网络终端有要求。此外,所有报文都必须经过TURN Server转发,增大了包的延迟和丢包的可能性。 应该说ICE是目前在NAT穿透中最常用的方式。ICE(交互式连接建立)- Interactive Connectivity Establishment 是一种综合性的NAT穿越的技术。交互式连接建立是由IETF的MMUSIC工作组开发出来的一种framework,可整合各种NAT 穿透技术,如STUN、TURN(Traversal Using Relay NAT)、RSIP(Realm Specific IP,特定域IP)等。该framework可以让SIP的客户端利用各种NAT穿透方式打穿远程的防火墙。
网络安全技术研究》毕业论文 毕业设计(论文)中文摘要 网络安全技术研究摘要:近几年来,Internet技术日趋成熟,已经开始了从以提供和保证网络联通性为主要目标的第一代Internet技术向以提供网络数据信息服务为特征的第二代Internet技术的过渡。与此同时,数以万计的商业公司、政府机构在多年的犹豫、观望之后,意识到采用Internet技术并使企业数据通信网络成为Internet的延伸已成为发展趋势。这使得企业数据网络正迅速地从以封闭型的专线、专网为特征的第二代技术转向以Internet互联技术为基础的第三代企业信息网络。所有这些,都促使了计算机网络互联技术迅速的大规模使用。众所周知,作为全球使用范围最大的信息网,Internet自身协议的开放性极大地方便了各种计算机连网,拓宽了共享资源。但是,由于在早期网络协议设计上对安全问题的忽视,以及在管理和使用上的无政府状态,逐渐使Internet自身安全受到严重威胁,与它有关的安全事故屡有发生。对网络安全的威胁主要表现在:非授权访问,冒充合法用户,破坏数据完整性,干扰系统正常运行,利用网络传播病毒,线路窃听等方面。这以要求我们与Internet互连所带来的安全性问题予以足够重视。关键词 网络、安全、VPN、加密技术、防火墙技术 毕业设计(论文)外文摘要 Title The Document Of Computer Network Security Abstract With the computer network development. Internet has already turned from the first generation the second. Meanwhile, thousands of company and governments realize the importance of Internet and take measures to build their own Network , so that extend the development of the Internet . This makes the Internet transfer from the second generation to the third which feature’s basis of Inter connecting. All of this above contributes to the large scale use of Interconnecting. As it is known to us all, Internet has the largest information net ,It is the openness of the protocol that convinent the link of variety nets and extend the sharing resources. However, because of the neglecting of Network security and the government management seriously threats the safety of Internet. The dangers appears: illegeal visiting, prentending the managerment , destroying the database, interrupting the setup of system, spreading the virus and so on . This asks us to pay more attention to the safety of Internet twister. Keywords Network 、Network security 、VPN 、Ipsec 、Firework 目 次 1 绪论 ………………………………………………………………5 2 方案目标 ……………………………………………………………5 3 安全需求 ……………………………………………………………6 4 风险分析 ……………………………………………………………6 5 解决方案 ……………………………………………………………7 设计原则 …………………………………………………………7 安全策略 ……………………………………………………………7 防御系统 …………………………………………………………8 物理安全 ………………………………………………………8 防火墙技术 ………………………………………………………8 VPN技术 ………………………………………………………10 网络加密技术(Ipsec) ……………………………………………11 身份认证 ………………………………………………………12 多层次多级别的防病毒系统 ……………………………………13 入侵检测 ……………………………………………………14 虚拟专用网技术虚拟专用网 …………………………………14 安全服务 ………………………………………………………15 安全技术的研究现状和动向 ………………………………………16 结论 ……………………………………………………………………18 致谢 …………………………………………………………………19 参考文献 …………………………………………………………20 1 绪论 随着互联网的飞速发展,网络安全逐渐成为一个潜在的巨大问题。网络安全性是一个涉及面很广泛的问题,其中也会涉及到是否构成犯罪行为的问题。在其最简单的形式中,它主要关心的是确保无关人员不能读取,更不能修改传送给其他接收者的信息。此时,它关心的对象是那些无权使用,但却试图获得远程服务的人。安全性也处理合法消息被截获和重播的问题,以及发送者是否曾发送过该条消息的问题。 大多数安全性问题的出现都是由于有恶意的人试图获得某种好处或损害某些人而故意引起的。可以看出保证网络安全不仅仅是使它没有编程错误。它包括要防范那些聪明的,通常也是狡猾的、专业的,并且在时间和金钱上是很充足、富有的人。同时,必须清楚地认识到,能够制止偶然实施破坏行为的敌人的方法对那些惯于作案的老手来说,收效甚微。 网络安全性可以被粗略地分为4个相互交织的部分:保密、鉴别、反拒认以及完整性控制。保密是保护信息不被未授权者访问,这是人们提到的网络安全性时最常想到的内容。鉴别主要指在揭示敏感信息或进行事务处理之前先确认对方的身份。反拒认主要与签名有关。保密和完整性通过使用注册过的邮件和文件锁来实现。 2 方案目标 本方案主要从网络层次考虑,将网络系统设计成一个支持各级别用户或用户群的安全网络,该网在保证系统内部网络安全的同时,还实现与Internet或国内其它网络的安全互连。本方案在保证网络安全可以满足各种用户的需求,比如:可以满足个人的通话保密性,也可以满足企业客户的计算机系统的安全保障,数据库不被非法访问和破坏,系统不被病毒侵犯,同时也可以防止诸如反动淫秽等有害信息在网上传播等。 需要明确的是,安全技术并不能杜绝所有的对网络的侵扰和破坏,它的作用仅在于最大限度地防范,以及在受到侵扰的破坏后将损失尽旦降低。具体地说,网络安全技术主要作用有以下几点: 1.采用多层防卫手段,将受到侵扰和破坏的概率降到最低; 2.提供迅速检测非法使用和非法初始进入点的手段,核查跟踪侵入者的活动; 3.提供恢复被破坏的数据和系统的手段,尽量降低损失; 4.提供查获侵入者的手段。 网络安全技术是实现安全管理的基础,近年来,网络安全技术得到了迅猛发展,已经产生了十分丰富的理论和实际内容。 3 安全需求 通过对网络系统的风险分析及需要解决的安全问题,我们需要制定合理的安全策略及安全方案来确保网络系统的机密性、完整性、可用性、可控性与可审查性。即, 可用性: 授权实体有权访问数据 机密性: 信息不暴露给未授权实体或进程 完整性: 保证数据不被未授权修改 可控性: 控制授权范围内的信息流向及操作方式 可审查性:对出现的安全问题提供依据与手段 访问控制:需要由防火墙将内部网络与外部不可信任的网络隔离,对与外部网络交换数据的内部网络及其主机、所交换的数据进行严格的访问控制。同样,对内部网络,由于不同的应用业务以及不同的安全级别,也需要使用防火墙将不同的LAN或网段进行隔离,并实现相互的访问控制。 数据加密:数据加密是在数据传输、存储过程中防止非法窃取、篡改信息的有效手段。 安全审计: 是识别与防止网络攻击行为、追查网络泄密行为的重要措施之一。具体包括两方面的内容,一是采用网络监控与入侵防范系统,识别网络各种违规操作与攻击行为,即时响应(如报警)并进行阻断;二是对信息内容的审计,可以防止内部机密或敏感信息的非法泄漏 4 风险分析 网络安全是网络正常运行的前提。网络安全不单是单点的安全,而是整个信息网的安全,需要从物理、网络、系统、应用和管理方面进行立体的防护。要知道如何防护,首先需要了解安全风险来自于何处。网络安全系统必须包括技术和管理两方面,涵盖物理层、系统层、网络层、应用层和管理层各个层面上的诸多风险类。无论哪个层面上的安全措施不到位,都会存在很大的安全隐患,都有可能造成网络的中断。根据国内网络系统的网络结构和应用情况,应当从网络安全、系统安全、应用安全及管理安全等方面进行全面地分析。 风险分析是网络安全技术需要提供的一个重要功能。它要连续不断地对网络中的消息和事件进行检测,对系统受到侵扰和破坏的风险进行分析。风险分析必须包括网络中所有有关的成分。 5 解决方案 设计原则 针对网络系统实际情况,解决网络的安全保密问题是当务之急,考虑技术难度及经费等因素,设计时应遵循如下思想: 1.大幅度地提高系统的安全性和保密性; 2.保持网络原有的性能特点,即对网络的协议和传输具有很好的透明性; 3.易于操作、维护,并便于自动化管理,而不增加或少增加附加操作; 4.尽量不影响原网络拓扑结构,同时便于系统及系统功能的扩展; 5.安全保密系统具有较好的性能价格比,一次性投资,可以长期使用; 6.安全与密码产品具有合法性,及经过国家有关管理部门的认可或认证; 7.分步实施原则:分级管理 分步实施。 安全策略 针对上述分析,我们采取以下安全策略: 1.采用漏洞扫描技术,对重要网络设备进行风险评估,保证信息系统尽量在最优的状况下运行。 2.采用各种安全技术,构筑防御系统,主要有: (1) 防火墙技术:在网络的对外接口,采用防火墙技术,在网络层进行访问控制。 (2) NAT技术:隐藏内部网络信息。 (3) VPN:虚拟专用网(VPN)是企业网在因特网等公共网络上的延伸,通过一个私有的通道在公共网络上创建一个安全的私有连接。它通过安全的数据通道将远程用户、公司分支机构、公司业务伙伴等与公司的企业网连接起来,构成一个扩展的公司企业网。在该网中的主机将不会觉察到公共网络的存在,仿佛所有的机器都处于一个网络之中。公共网络似乎只由本网络在独占使用,而事实上并非如此。 (4)网络加密技术(Ipsec) :采用网络加密技术,对公网中传输的IP包进行加密和封装,实现数据传输的保密性、完整性。它可解决网络在公网的数据传输安全性问题,也可解决远程用户访问内网的安全问题。 (5) 认证:提供基于身份的认证,并在各种认证机制中可选择使用。 (6) 多层次多级别的企业级的防病毒系统:采用多层次多级别的企业级的防病毒系统,对病毒实现全面的防护。 (7)网络的实时监测:采用入侵检测系统,对主机和网络进行监测和预警,进一步提高网络防御外来攻击的能力。 3.实时响应与恢复:制定和完善安全管理制度,提高对网络攻击等实时响应与恢复能力。 4.建立分层管理和各级安全管理中心。 防御系统 我们采用防火墙技术、NAT技术、VPN技术、网络加密技术(Ipsec)、身份认证技术、多层次多级别的防病毒系统、入侵检测技术,构成网络安全的防御系统。
可以直接做一些相关期刊的了解,然后直接联系杂志社编辑沟通一下投稿的相关事宜。评职称发论文就是一个过场了,还是一个必经的过场,随便找一个地方发就行了 网上有很多的,只要别上当就行 ,期刊在新闻出版总署都是查一下,在品忧刊同样都是可以的发的。
课程地址:零声学院 WebRTC入门与提高
技术支持QQ群:782508536
最近介入测试P2P的相关逻辑,因此对NAT穿透原理做了一定程度的了解(当然也没有很深入)。本篇文章也是综合和参考了些网络上和文献里的一些资料(文中没有对引用处进行标记,请见谅)。写本文的目的就是,用自己的语言描述了这个过程,同时也在描述过程中加入了一些自己的理解,形成一篇文章作为要点的记录。对于这一块的知识,自己也有很多盲点,还请各路大神多多指教。
NAT(Network Address Translation,网络地址转换),也叫做网络掩蔽或者IP掩蔽。NAT是一种网络地址翻译技术,主要是将内部的私有IP地址(private IP)转换成可以在公网使用的公网IP(public IP)。
时光回到上个世纪80年代,当时的人们在设计网络地址的时候,觉得再怎么样也不会有超过32bits位长即2的32次幂台终端设备连入互联网,再加上增加ip的长度(即使是从4字节增到6字节)对当时设备的计算、存储、传输成本也是相当巨大的。后来逐渐发现IP地址不够用了,然后就NAT就诞生了!(虽然ipv6也是解决办法,但始终普及不开来,而且未来到底ipv6够不够用仍是未知)。
因此,NAT技术能够兴起的原因还是因为在我们国家公网IP地址太少了,不够用,所以才会采取这种地址转换的策略。可见,NAT的本质就是让一群机器公用同一个IP,这样就暂时解决了IP短缺的问题。
优势其实上面已经刚刚讨论过了,根据定义,比较容易看出,NAT可以同时让多个计算机同时联网,并隐藏其内网IP,因此也增加了内网的网络安全性;此外,NAT对来自外部的数据查看其NAT映射记录,对没有相应记录的数据包进行拒绝,提高了网络安全性。
那么,NAT与此同时也带来一些弊端:首先是,NAT设备会对数据包进行编辑修改,这样就降低了发送数据的效率;此外,各种协议的应用各有不同,有的协议是无法通过NAT的(不能通过NAT的协议还是蛮多的),这就需要通过穿透技术来解决。我们后面会重点讨论穿透技术。
简单的背景了解过后,下面介绍下NAT实现的主要方式,以及NAT都有哪些类型。
1)静态NAT:也就是静态地址转换。是指一个公网IP对应一个私有IP,是一对一的转换,同时注意,这里只进行了IP转换,而没有进行端口的转换。举个栗子:
2)NAPT:端口多路复用技术。与静态NAT的差别是,NAPT不但要转换IP地址,还要进行传输层的端口转换。具体的表现形式就是,对外只有一个公网IP,通过端口来区别不同私有IP主机的数据。再举个栗子。
通过上面NAT实现方式的介绍,我们其实不难看出,现实环境中NAPT的应用显然是更广泛的。因此下面就重点介绍下NAPT的主要类型有哪些。
对于NAPT我们主要分为两大类:锥型NAT和对称型NAT。其中锥型NAT又分:完全锥型,受限锥型和端口受限锥型。概括的说:对称型NAT是一个请求对应一个端口;锥型NAT(非对称NAT)是多个请求(外部发向内部)对应一个端口,只要源IP端口不变,无论发往的目的IP是否相同,在NAT上都映射为同一个端口,形象的看起来就像锥子一样。下面分别介绍这四种类型及其差异。
1)完全锥型NAT(Full Cone NAT,后面简称FC)
特点:IP和端口都不受限。
表现形式:将来自内部同一个IP地址同一个端口号(IP_IN_A : PORT_IN_A)的主机监听/请求,映射到公网IP某个端口(IP_OUT_B : PORT_OUT_B)的监听。任意外部IP地址与端口对其自己公网的IP这个映射后的端口访问(IP_OUT_B : PORT_OUT_B),都将重新定位到内部这个主机(IP_IN_A : PORT_IN_A)。该技术中,基于C/S架构的应用可以在任何一端发起连接。是不是很绕啊。再简单一点的说,就是,只要客户端,由内到外建立一个映射(NatIP:NatPort -> A:P1)之后,其他IP的主机B或端口A:P2都可以使用这个洞给客户端发送数据。见下图()。
2)受限锥型NAT(Restricted Cone NAT)
特点:IP受限,端口不受限。
表现形式:与完全锥形NAT不同的是,在公网映射端口后,并不允许所有IP进行对于该端口的访问,要想通信必需内部主机对某个外部IP主机发起过连接,然后这个外部IP主机就可以与该内部主机通信了,但端口不做限制。举个栗子。当客户端由内到外建立映射(NatIP:NatPort –> A:P1),A机器可以使用他的其他端口(P2)主动连接客户端,但B机器则不被允许。因为IP受限啦,但是端口随便。见下图(绿色是允许通信,红色是禁止通信)。
3)端口受限型NAT(Port Restricted Cone NAT)
特点:IP和端口都受限。
表现形式:该技术与受限锥形NAT相比更为严格。除具有受限锥形NAT特性,对于回复主机的端口也有要求。也就是说:只有当内部主机曾经发送过报文给外部主机(假设其IP地址为A且端口为P1)之后,外部主机才能以公网IP:PORT中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的IP必须是A,端口必须为P1(使用IP地址为A,端口为P2,或者IP地址为B,端口为P1都将通信失败)。例子见下图。这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性。
4)对称型NAT(Symmetric NAT)
特点:对每个外部主机或端口的会话都会映射为不同的端口(洞)。
表现形式:只有来自同一内部IP:PORT、且针对同一目标IP:PORT的请求才被NAT转换至同一个公网(外部)IP:PORT,否则的话,NAT将为之分配一个新的外部(公网)IP:PORT。并且,只有曾经收到过内部主机请求的外部主机才能向内部主机发送数据包。内部主机用同一IP与同一端口与外部多IP通信。客户端想和服务器A(IP_A:PORT_A)建立连接,是通过NAT映射为NatIP:NatPortA来进行的。而客户端和服务器B(IP_B:PORT_B)建立连接,是通过NAT映射为NatIP:NatPortB来进行的。即同一个客户端和不同的目标IP:PORT通信,经过NAT映射后的公网IP:PORT是不同的。此时,如果B想要和客户端通信,也只能通过NatIP:NatPortB(也就是紫色的洞洞)来进行,而不能通过NatIP:NatPortA(也就是黄色的洞洞)。
以上,就是NAPT的四种NAT类型。可以看出由类型1)至类型4),NAT的限制是越来越大的。
根据上面的介绍,我们可以了解到,在实际的网络情况中,各个设备所处的网络环境是不同的。那么,如果这些设备想要进行通信,首先判断出设备所处的网络类型就是非常重要的一步。举个例子来说:对于视频会议和VoIP软件,对位于不同NAT内部的主机通信需要靠服务器来转发完成,这样就会增加服务器的负担。为了解决这种问题,要尽量使位于不同NAT内部的主机建立直接通信,其中,最重要的一点就是要判断出NAT的类型,然后才能根据NAT的类型,设计出直接通信方案。不然的话,两个都在NAT的终端怎么通信呢?我们不知道对方的内网IP,即使把消息发到对方的网关,然后呢?网关怎么知道这条消息给谁,而且谁允许网关这么做了?
为了解决这个问题,也就是处于内网的主机之间能够穿越它们之间的NAT建立直接通信,已经提出了许多方法,STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)技术就是其中比较重要的一种解决方法,并得到了广泛的应用。在这个部分,我们将重点介绍下STUN技术的原理。(PS:除此之外,还有UPNP技术,ALG应用层网关识别技术,SBC会话边界控制,ICE交互式连接建立,TURN中继NAT穿越技术等等,本文不一一做介绍。)
STUN是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。该协议由RFC 5389定义。STUN由三部分组成:STUN客户端、STUN服务器端、NAT路由器。STUN服务端部署在一台有着两个公网IP的服务器上。大概的结构参考下图。STUN客户端通过向服务器端发送不同的消息类型,根据服务器端不同的响应来做出相应的判断,一旦客户端得知了Internet端的UDP端口,通信就可以开始了。
STUN协议定义了三类测试过程来检测NAT类型。
Test1: STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-S1:Port-S1}把它所看到的STUN Client的IP和端口{IP-M1,Port-M1}作为Binding Response的内容回送给STUN Client。 Test1#2:STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S2:Port-S2}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-S2:Port-S2}把它所看到的STUN Client的IP和端口{IP-M1#2,Port-M1#2}作为Binding Response的内容回送给STUN Client。
Test2: STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}发送一个Binding Request(设置了Change IP和Change Port属性)。STUN Server收到该请求后,通过端口{IP-S2:Port-S2}把它所看到的STUN Client的IP和端口{IP-M2,Port-M2}作为Binding Response的内容回送给STUN Client。
Test3: STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}发送一个Binding Request(设置了Change Port属性)。STUN Server收到该请求后,通过端口{IP-S1:Port-S2}把它所看到的STUN Client的IP和端口{IP-M3,Port-M3}作为Binding Response的内容回送给STUN Client。
STUN协议的输出是: 1)公网IP和Port 2)防火墙是否设置 3)客户端是否在NAT之后,及所处的NAT的类型
因此我们进而整理出,通过STUN协议,我们可以检测的类型一共有以下七种:
A:公开的互联网IP。主机拥有公网IP,并且没有防火墙,可自由与外部通信 B:完全锥形NAT。 C:受限制锥形NAT。 D:端口受限制形NAT。 E:对称型UDP防火墙。主机出口处没有NAT设备,但有防火墙,且防火墙规则如下:从主机UDP端口A发出的数据包保持源地址,但只有从之前该主机发出包的目的IP/PORT发出到该主机端口A的包才能通过防火墙。 F:对称型NAT G:防火墙限制UDP通信。
输入和输出准备好后,附上一张维基百科的流程图,就可以描述STUN协议的判断过程了。
STEP1:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后 -- Test1 客户端建立UDP socket,然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port,客户端发送请求后立即开始接受数据包。重复几次。 a)如果每次都超时收不到服务器的响应,则说明客户端无法进行UDP通信,可能是:G防火墙阻止UDP通信 b)如果能收到回应,则把服务器返回的客户端的(IP:PORT)同(Local IP: Local Port)比较: 如果完全相同则客户端不在NAT后,这样的客户端是:A具有公网IP可以直接监听UDP端口接收数据进行通信或者E。 否则客户端在NAT后要做进一步的NAT类型检测(继续)。
STEP2:检测客户端防火墙类型 -- Test2 STUN客户端向STUN服务器发送请求,要求服务器从其他IP和PORT向客户端回复包: a)收不到服务器从其他IP地址的回复,认为包前被前置防火墙阻断,网络类型为E b)收到则认为客户端处在一个开放的网络上,网络类型为A
STEP3:检测客户端NAT是否是FULL CONE NAT -- Test2 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回发一个数据包,客户端发送请求后立即开始接受数据包。 重复这个过程若干次。 a)如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。 b)如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信。
STEP4:检测客户端NAT是否是SYMMETRIC NAT -- Test1#2 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包。 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。 用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。 比较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)因为对称型NAT,每次连接端口都不一样,所以无法知道对称NAT的客户端,下一次会用什么端口。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。
STEP5:检测客户端NAT是Restricted Cone 还是 Port Restricted Cone -- Test3 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包。重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。
通过以上过程,至此,就可以分析和判断出客户端是否处于NAT之后,以及NAT的类型及其公网IP,以及判断客户端是否具备P2P通信的能力了。当然这是自己个人笔记的第一篇,后面,再作一篇笔记《NAT穿透原理浅析(二)》分析下不同NAT类型的穿透打洞策略。
152 浏览 4 回答
284 浏览 3 回答
157 浏览 4 回答
236 浏览 12 回答
114 浏览 2 回答
126 浏览 5 回答
321 浏览 5 回答
215 浏览 5 回答
256 浏览 3 回答
208 浏览 4 回答
111 浏览 3 回答
255 浏览 4 回答
350 浏览 7 回答
217 浏览 5 回答
219 浏览 4 回答