NAT穿越服务器概要设计文件
本作品内容为NAT穿越服务器概要设计文件,格式为 doc ,大小 140288 KB ,页数为 14页
('目录目录...............................................................................................................................11.引言.......................................................................................................................21.1编写目的..................................................................................................................21.2背景..........................................................................................................................21.3范围..........................................................................................................................21.4文档约定..................................................................................................................21.5参考资料..................................................................................................................22.总体设计...............................................................................................................32.1软件描述........................................................................................................................32.2设计约束........................................................................................................................32.2.1运行环境约束......................................................................................................32.2.2性能约束.............................................................................................................32.2.3功能约束.............................................................................................................32.2.4界面约束.............................................................................................................42.2.5开发工具约束......................................................................................................42.3设计原则........................................................................................................................42.4体系构架........................................................................................................................43.模块设计...................................................................................................................43.1Protocol模块.................................................................................................................43.2Server模块...................................................................................................................103.2.1STUN服务器....................................................................................................103.2.2TURN服务器....................................................................................................134.数据结构设计..........................................................................................................155.运行设计..................................................................................................................156.故障处理说明..........................................................................................................156.1故障信息......................................................................................................................156.2补救措施......................................................................................................................157.安全保密设计..........................................................................................................158.维护设计..................................................................................................................158.1NAT穿越服务器配置.................................................................................................158.2启动/停止NAT穿越服务器........................................................................................159.需求追溯..................................................................................................................1510.附录A:术语表....................................................................................................1511.附录B:设计模型.................................................................................................161.引言1.1编写目的多媒体会话信令协议是在准备建立媒体流传输的代理之间交换信息的协议,例如SIP、RTSP、H.323等。媒体流与信令流截然不同,它们所采用的网络通道也不一致。由于协议自身设计上的原因,使得媒体流无法直接穿透网络地址转换/防火墙(NAT/FW)。因为它们生存期的目标只是为了建立一个在信息中携带IP地址的分组流,这在遇到NAT/FW时会带来许多问题。而且这些协议的目标是通过建立P2P(PeertoPeer)媒体流以减小时延,而协议本身很多方面却与NAT存在兼容性问题,这也是穿透NAT/FW的困难所在。而NAT仍是解决当前公用IP地址紧缺和网络安全问题的最有力手段,它主要有四种类型:完全锥型NAT(FullConeNAT),地址限制锥型NAT(AddressRestrictedConeNAT),端口限制锥型NAT(PortRestrictedConeNAT),对称型NAT(SymmetricNAT)。前三种NAT,映射与目的地址无关,只要源地址相同,映射就相同,而对称型NAT的映射则同时关联源地址和目的地址,所以穿透问题最为复杂。不少方案已经被应用于解决穿越NAT问题,例如:ALGs(ApplicationLayerGateways)、MiddleboxControlProtocol、STUN(SimpleTraversalofUDPthroughNAT)、TURN(TraversalUsingRelayNAT)、ICE(InteractiveConnectivityEstablishment)、RSIP(RealmSpecificIP)、symmetricRTP等。本文档描述基于STUN/TURN协议解决穿越NAT的NAT穿越服务器(NatTraversalServer)的概要设计说明书。1.2背景产品/项目名称企业即时通讯系统项目代号IM项目任务提出者项目负责人、系统分析员、系统设计员程序设计员、程序员本项目开展工作直接有关的人员1.3范围本文档涉及NAT穿越服务器的总体设计、模块设计、数据结构设计、运行设计、故障处理说明、安全设计及维护设计等。1.4文档约定本文档依照以下文件标准进行编写:1)CX-WI-04概要设计说明书编写WI.Doc2)概要设计说明书模板(xxxxBRDS.Doc)1.5参考资料1)NAT穿越服务器需求规格说明书(EICSSPEC-NT.doc)2)即时通讯系统软件构架文档I.doc3)即时通讯系统软件构架文档II.doc4)Rosenberg,J.,Weinberger,J.,Huitema,C.andR.Mahy,"STUN-SimpleTraversalofUserDatagramProtocol(UDP)ThroughNetworkAddressTranslators(NATs)",RFC3489,March2003.5)Rosenberg,J.,"TraversalUsingRelayNAT(TURN)",draft-rosenberg-midcom-turn-08(workinprogress),September2005.2.总体设计2.1软件描述NAT穿越服务器实现STUN协议和TURN协议的服务器端逻辑。STUN是一个轻量级的协议,允许应用程序探测当前在它们与公网之间是否存在NAT、防火墙以及它们的类型,并且具备能够探测到NAT所分配的公网地址和端口的能力。STUN协议中定义了两个实体:STUNClient和STUNServer。STUNClient嵌入在终端系统的应用程序中,比如SIPUA,它向STUNServer发送请求;STUNServer接收请求并产生STUN响应,它是无状态的。SIPUA在建立呼叫之前,通过向处在公网上的STUN服务器发送STUN请求,得到信令和媒体流在NAT上的映射地址,并且将这些地址填写到SIP消息中的Via、Contact字段以及SDP中的媒体流传输地址,替代原有的私有地址。但是,STUN只能工作在完全锥形NAT、地址限制锥形NAT以及端口限制锥形NAT的网络环境下,在对称性NAT的情况下,SIPUA通过STUN请求得到的映射地址是无效的。TURN协议在语法和操作上均与STUN相似,其优点是提供了对对称性NAT的穿越。处在公网的TURN服务器为客户端提供本身的一个外部IP地址和端口,并且负责中转通信双方的媒体流。TURN协议虽然支持所有类型的NAT穿越,但是它需要中转通信双方的媒体流,使得媒体流在传输过程中增加了一跳,不可避免地增加了包的延迟和丢包的可能性,而且完全使用TURN方式需要大量的TURN服务器,在有大量用户时,TURN服务器会成为系统瓶颈,因此我们应该尽量避免使用这种方法。2.2设计约束2.2.1运行环境约束NAT穿越服务器运行于Linux和Windows环境下:CPU:双CPU,IntelPIII以上内存:1GB以上硬盘:10G以上网络接口卡:100M以上操作系统:Linux(内核版本2.4.18以上)Windows2000以上2.2.2性能约束支持7x24小时可靠运行;单台NAT穿越服务器支持10000个并发连接。2.2.3功能约束支持STUN协议。支持TURN协议。2.2.4界面约束NAT穿越服务器的启动只支持命令行方式的启动。2.2.5开发工具约束NAT穿越服务器使用标准的C++进行开发,使用g++进行编译。2.3设计原则可靠性:NAT穿越服务器采用Heartbeat技术保证提供7x24小时可靠运行。2.4体系构架参见“即时通讯系统软件构架文档I.doc”和“即时通讯系统软件构架文档II.doc”。3.模块设计NAT穿越服务器由两个模块组成:Server模块和Protocol模块。Server模块实现STUN/TURN协议的服务器端逻辑。Protocol模块实现STUN/TURN协议的消息编/解码。ServerProtocol图1NAT穿越服务器模块结构3.1Protocol模块3.1.1功能结构Protocol模块由STUN消息类StunMessage和STUN属性类(StunAttribute及其派生类)组成。StunMessageTypeStunByteStringAttributeStunErrorCodeAttributeStunUInt16ListAttributeStunUInt32AttributeStunAddressAttributeStunTransportPrefsAttribute0..11-addr_0..11StunAttributeTypeStunAttributeStunMessage-attrs_图2Protocol模块StunMessage实现对STUN消息类型(在枚举类型StunMessageType中定义)、事务ID和STUN属性操作以及STUN消息编/解码的方法。StunAttribute类是所有STUN属性类的基类,实现对STUN属性类型操作的方法。此外,StunAttribute类还定义了STUN属性编/解码的虚拟方法。根据STUN属性的语法,Protocol模块通过StunAttribute的6个派生类分别实现不同STUN属性的编/解码。Protocol模块实现的STUN属性语法包括:\uf06cStunAddressAttribute类:实现对MAPPED-ADDRESS、RESPONSE-ADDRESS、SOURCE-ADDRESS、CHANGED-ADDRESS、REFLECTED-FROM、ALTERNATE-SERVER、DESTINATION-ADDRESS及SOURCE-ADDRESS2等STUN属性的编/解码。\uf06cStunUInt32Attribute类:实现对CHANGE-REQUEST、LIFETIME、BANDWIDTH及OPTIONS等STUN属性的编/解码。\uf06cStunByteStringAttribute类:实现对USERNAME、PASSWORD、MESSAGE-INTEGRITY、MAGIC-COOKIE及DATA等STUN属性的编/解码。\uf06cStunErrorCodeAttribute类:实现对ERROR-CODE属性的编/解码。\uf06cStunUInt16ListAttribute类:实现对UNKNOWN-ATTRIBUTES属性的编/解码。\uf06cStunTransportPrefsAttribute类:实现对TRANSPORT-PREFERENCES属性的编/解码。3.1.2性能无。3.1.3内部接口3.1.3.1StunMessage(1)StunMessage()[功能简介]构造函数。[参数说明]无。[返回值]无。(2)~StunMessage()[功能简介]析构函数。[参数说明]无。[返回值]无。(3)StunMessageTypetype()const[功能简介]获取STUN/TURN消息类型。StunMessageType定义如下:enumStunMessageType{STUN_BINDING_REQUEST=0x0001,STUN_BINDING_RESPONSE=0x0101,STUN_BINDING_ERROR_RESPONSE=0x0111,STUN_SHARED_SECRET_REQUEST=0x0002,STUN_SHARED_SECRET_RESPONSE=0x0102,STUN_SHARED_SECRET_ERROR_RESPONSE=0x0112,STUN_ALLOCATE_REQUEST=0x0003,STUN_ALLOCATE_RESPONSE=0x0103,STUN_ALLOCATE_ERROR_RESPONSE=0x0113,STUN_SEND_REQUEST=0x0004,STUN_SEND_RESPONSE=0x0104,STUN_SEND_ERROR_RESPONSE=0x0114,STUN_DATA_INDICATION=0x0115};[参数说明]无。[返回值]返回STUN/TURN消息类型。(4)uint16length()const[功能简介]获取STUN/TURN消息长度。[参数说明]无。[返回值]返回STUN/TURN消息长度。(5)conststd::string&transaction_id()const[功能简介]获取STUN/TURN消息事务ID。[参数说明]无。[返回值]返回STUN/TURN消息事务ID。(6)voidSetType(StunMessageTypetype)[功能简介]设置STUN/TURN消息类型。[参数说明]type:STUN/TURN消息类型。[返回值]无。(7)voidSetTransactionID(conststd::string&str)[功能简介]设置STUN/TURN消息事务ID型。[参数说明]str:STUN/TURN消息事务ID。[返回值]无。(8)constStunAddressAttributeGetAddress(StunAttributeTypetype)const[功能简介]根据STUN/TURN属性类型获取StunAddressAttribute类的属性。[参数说明]type:STUN/TURN属性类型。[返回值]返回StunAddressAttribute类的属性对象。(9)constStunUInt32AttributeGetUInt32(StunAttributeTypetype)const[功能简介]根据STUN/TURN属性类型获取StunUInt32Attribute类的属性。[参数说明]type:STUN/TURN属性类型。[返回值]返回StunUInt32Attribute类的属性对象。(10)constStunByteStringAttributeGetByteString(StunAttributeTypetype)const[功能简介]根据STUN/TURN属性类型获取StunByteStringAttribute类的属性。[参数说明]type:STUN/TURN属性类型。[返回值]返回StunByteStringAttribute类的属性对象。(11)constStunErrorCodeAttributeGetErrorCode()const[功能简介]获取ERROR-CODE属性。[参数说明]无。[返回值]返回StunErrorCodeAttribute类的属性对象。(12)constStunUInt16ListAttributeGetUnknownAttributes()const[功能简介]获取UNKNOWN-ATTRIBUTES属性。[参数说明]无。[返回值]返回StunUInt16ListAttribute类的属性对象。(13)constStunTransportPrefsAttributeGetTransportPrefs()const[功能简介]获取TRANSPORT-PREFERENCES属性。[参数说明]无。[返回值]返回StunTransportPrefsAttribute类的属性对象。(14)voidAddAttribute(StunAttributeattr)[功能简介]添加STUN/TURN属性。[参数说明]attr:STUN/TURN属性对象。[返回值]无。(15)boolRead(ByteBufferbuf)[功能简介]分析给定缓冲区中的STUN/TURN数据包,并将分析结果保存在对象中。[参数说明]buf:STUN/TURN数据包。[返回值]成功返回true;失败返回false。(16)voidWrite(ByteBufferbuf)const[功能简介]将对象写入STUN/TURN数据包。[参数说明]buf:STUN/TURN数据包。[返回值]成功返回true;失败返回false。3.1.3.2StunAttribute(1)~StunAttribute()[功能简介]析构函数。[参数说明]无。[返回值]无。(2)StunAttributeTypetype()const[功能简介]获取STUN/TURN属性类型。StunAttributeType定义如下:enumStunAttributeType{STUN_ATTR_MAPPED_ADDRESS=0x0001,//AddressSTUN_ATTR_RESPONSE_ADDRESS=0x0002,//AddressSTUN_ATTR_CHANGE_REQUEST=0x0003,//UInt32STUN_ATTR_SOURCE_ADDRESS=0x0004,//AddressSTUN_ATTR_CHANGED_ADDRESS=0x0005,//AddressSTUN_ATTR_USERNAME=0x0006,//ByteString,multipleof4bytesSTUN_ATTR_PASSWORD=0x0007,//ByteString,multipleof4bytesSTUN_ATTR_MESSAGE_INTEGRITY=0x0008,//ByteString,20bytesSTUN_ATTR_ERROR_CODE=0x0009,//ErrorCodeSTUN_ATTR_UNKNOWN_ATTRIBUTES=0x000a,//UInt16ListSTUN_ATTR_REFLECTED_FROM=0x000b,//AddressSTUN_ATTR_TRANSPORT_PREFERENCES=0x000c,//TransportPrefsSTUN_ATTR_LIFETIME=0x000d,//UInt32STUN_ATTR_ALTERNATE_SERVER=0x000e,//AddressSTUN_ATTR_MAGIC_COOKIE=0x000f,//ByteString,4bytesSTUN_ATTR_BANDWIDTH=0x0010,//UInt32STUN_ATTR_DESTINATION_ADDRESS=0x0011,//AddressSTUN_ATTR_SOURCE_ADDRESS2=0x0012,//AddressSTUN_ATTR_DATA=0x0013,//ByteStringSTUN_ATTR_OPTIONS=0x8001//UInt32};[参数说明]无。[返回值]返回STUN/TURN属性类型。(3)uint16length()const[功能简介]获取STUN/TURN属性长度。[参数说明]无。[返回值]返回STUN/TURN属性长度。(4)virtualboolRead(ByteBufferbuf)=0[功能简介]分析给定缓冲区中的STUN/TURN属性数据包,并将分析结果保存在属性对象中。本方法是存虚方法,由派生类负责实现。[参数说明]buf:STUN/TURN属性数据包。[返回值]成功返回true;失败返回false。(5)virtualvoidWrite(ByteBufferbuf)const=0[功能简介]将属性对象写入STUN/TURN属性数据包。本方法是存虚方法,由派生类负责实现。[参数说明]buf:STUN/TURN属性数据包。[返回值]成功返回true;失败返回false。3.2Server模块3.2.1STUN服务器3.2.1.1功能结构StunServer类实现STUN服务器的功能。目前,StunServer只处理STUN协议的绑定请求(BindingRequest)。StunServerAsyncUDPSocket(fromUtil)-socket_StunMessage(fromProtocol)图3STUN服务器3.2.1.2性能无。3.2.1.3内部接口3.2.1.3.1StunServer(1)StunServer(AsyncUDPSocketsocket)[功能简介]创建一个StunServer,并在给定的套接口上侦听客户端的请求。[参数说明]socket:侦听套接口。[返回值]无。(2)~StunServer()[功能简介]析构函数。[参数说明]无。[返回值]无。(3)voidOnPacket(constcharbuf,size_tsize,constSocketAddress&remote_addr,AsyncPacketSocketsocket)[功能简介]当socket接收到客户端发送的请求消息时,本方法被调用。本方法先调用StunMessage的Read()方法对接收到的消息进行解码,然后根据消息类型进一步调用相应的消息处理函数。[参数说明]buf:从socket接收的消息缓冲区;size:从socket接收的消息大小;remote_addr:发送请求消息的客户端地址;socket:接收请求消息的套接口。[返回值]无。(4)voidOnBindingRequest(StunMessagemsg,constSocketAddress&addr)[功能简介]处理STUN协议的绑定请求(BindingRequest)。[参数说明]msg:绑定请求消息;addr:发送请求消息的客户端地址;[返回值]无。(5)voidSendErrorResponse(constStunMessage&msg,constSocketAddress&addr,interror_code,constcharerror_desc)[功能简介]发送STUN错误响应消息。[参数说明]msg:STUN请求消息;addr:响应消息的目标地址;error_code:错误码;error_desc:错误描述信息。[返回值]无。(6)voidSendResponse(constStunMessage&msg,constSocketAddress&addr)[功能简介]发送STUN响应消息。[参数说明]msg:STUN响应消息;addr:响应消息的目标地址;[返回值]无。3.2.2TURN服务器3.2.2.1功能结构RelayServer类实现TURN服务器的功能。目前,RelayServer只处理TURN协议的分配请求(AllocateRequest)和发送请求(SendRequest)。RelayServerConnection类维护TURN服务器连接的信息。每一个RelayServerConnection对象属于且只属于一个绑定对象(RelayServerBinding类实现)。RelayServerBinding类维护内部连接与外部连接之间的绑定关系。RelayServerBindingRelayServer0..10..n-server_0..1-bindings_0..nStunMessage(fromProtocol)RelayServerConnection0..11-binding_0..11-connections_AsyncPacketSocket(fromUtil)-internal_sockets_-external_sockets_-socket_图4TURN服务器3.2.2.2性能无。3.2.2.3内部接口3.2.2.3.1RelayServer(1)RelayServer(Threadthread)[功能简介]创建一个RelayServer,并通过给定的线程对象给自己发送消息、处理消息。[参数说明]thread:线程对象。[返回值]无。(2)~RelayServer()[功能简介]析构函数。[参数说明]无。[返回值]无。(3)voidAddInternalSocket(AsyncPacketSocketsocket)[功能简介]添加内部套接口。RelayServer通过内部套接口与内部客户端进行通讯。内部客户端指那些发送分配请求(AllocateRequest)的客户端。[参数说明]socket:内部套接口。[返回值]无。(4)voidRemoveInternalSocket(AsyncPacketSocketsocket)[功能简介]删除内部套接口。[参数说明]socket:内部套接口。[返回值]无。(5)voidAddExternalSocket(AsyncPacketSocketsocket)[功能简介]添加外部套接口。RelayServer通过外部套接口与外部客户端进行通讯。外部客户端是那些不发送分配请求(AllocateRequest)的客户端。它们不知道与自己通讯的是RelayServer。[参数说明]socket:外部套接口。[返回值]无。(6)voidRemoveExternalSocket(AsyncPacketSocketsocket)[功能简介]删除外部套接口。[参数说明]socket:外部套接口。[返回值]无。4.数据结构设计5.运行设计6.故障处理说明6.1故障信息错误/故障系统输出的信息含义6.2补救措施错误/故障补救措施7.安全保密设计8.维护设计8.1NAT穿越服务器配置通过配置文件配置NAT穿越服务器。8.2启动/停止NAT穿越服务器提供命令行工具启动/停止NAT穿越服务器。10.附录A:术语表NAT(NetworkAddressTranslation):网络地址翻译。就是这样一个过程,通过网络地址翻译设备(NetworkAddressTranslator)在两个地址域(Realm如公网和私网)之间进行地址的翻译和映射。NAPT(NetworkAddress/PortTranslation):在地址翻译的基础上,还需要进行端口的映射。不同的应用协议(如HTTP、RTP等),采用不同的TCP或者UDP端口。在很多情况下,映射不但是地址映射也是端口的映射。静态NAT:采用静态的地址/端口映射,即公网地址和私网地址之间存在一对一的映射关系。动态NAT:采用动态的地址/端口映射,这种情况下NAT是可以配置的,根据使用需求和会话流来启发式地决定这种动态映射关系。一个动态映射关系将随着最后一个使用该绑定关系的会话结束而被释放,从而使得全局公网地址能够循环使用,提高资源的利用率。完全锥形NAT:这是一种形象的说法,来自IETF的定义。完全锥形NAT把所有来自同一个内部私网地址/端口的请求,都映射到同一个外部公网地址/端口。并且,任何外部主机可以通过向映射得到的该外部地址发送数据包,从而发送数据包到该内部主机。地址限制锥形NAT:地址受限锥形NAT把所有来自同一个内部私网地址/端口的请求,都映射到同一个外部公网地址/端口。并且,只有当该内部主机曾经向某个外部主机发送过数据包时,这个外部主机才能向该内部主机发送数据包,即通信只能首先由私网上的终端发起。端口限制锥形NAT:类似于受限锥形NAT,但是限制更加严格。只有当内部主机曾经向某个外部主机地址上的某个特定端口发送过数据包,这个外部主机地址上的特定端口才能向该内部主机发送数据包,即通信只能首先由私网上的终端发起。对称NAT:这种NAT的限制是最严格的。所有来自于同一个内部地址/端口并且要发送到某个特定目的地址/端口的请求将被映射到同一个外部地址/端口。如果同一个内部主机从同一端口上发送了一个数据包,只是目的地址/端口不同,那么映射关系也将是不同的。并且,只有曾经收到过来自内部主机数据包的外部主机才能向该内部主机发送数据包。',)
提供NAT穿越服务器概要设计文件会员下载,编号:1700877705,格式为 docx,文件大小为14页,请使用软件:wps,office word 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。