企业统一通信平台的设计.docx
《企业统一通信平台的设计.docx》由会员分享,可在线阅读,更多相关《企业统一通信平台的设计.docx(60页珍藏版)》请在冰豆网上搜索。
企业统一通信平台的设计
wirelessnetworkserviceproviders)toprovidemessagestotheproxyserverAPI,address,portandtotheachievementofcompetence.Video/audioconversationstoachieve,theuseofaforeignAxPhonecomponents,usedtocapturethevisualcompression/audioframes.
Keyword:
Instantmessaging、Unifiedcommunicationsplatform、Video/audioconference、WebService
一、引言
1.1软件开发背景
1.1.1社会背景
统一通信平台,将视频,语音、传真、电子邮件、WEB,移动短消息和多媒体数据等所有信息类型集合为一体,可用传统电话、IP电话,传真、手机、3G手机,PC、掌上电脑、Outlook,PDA等通信设备中的任何一种接收,在有线、无线、互联网之间架构起一个信息互联通道。
统一通信(简称UC即UnifiedCommunications)是指把计算机技术与传统通信技术融为一体的新通信模式,作为一种解决方案和应用,其核心内容是:
让人们无论任何时间、任何地点,都可以通过任何设备、任何网络,获得数据、图像和声音的自由通信。
也就是说,统一通信系统将语音、传真、电子邮件、移动短消息、多媒体和数据等所有信息类型合为一体,从而为人们带来选择的自由和效率的提升。
(例如,传统的电话将被取代以支持基于软电话屏幕的客户端软件。
)它区别于网络层面的互联互通,而是以人为本的应用层面的融合与协同,是更高一个层次的理念,新一代通信与IT产业。
统一通信带来的革命性未来:
三年后将有1亿人使用鼠标进行通讯,10年以后,当你在电影中看到一部桌面电话的时候,你会回忆起你的桌面曾经有过这种电话的时光。
统一通信是一种综合的信息服务,能够充分发挥两网的优势,以企业电视台,VoIP、视频通信、即时通信和协同办公等核心业务能力,通过多样化的终端,向用户提供随时随地、随心随意并可融合语音、数据和视频的多媒体通信手段。
统一通信有效地整合了各种通信设备、媒体和应用,并且使通信更加方便,更加具有组织性、计划性、可扩展性。
通信不仅仅是打电话,而是综合了即时通信、VoIP、视频会议、远程培训、网上客服等应用;通信不再局限于语音,而是融合即时消息、手机短信、邮件、语音、视频、数据等多种媒体;通信不再局限于电话机,而是扩展到PC、PDA、电话、手机、H323/SIP终端等设备;通信不再内外割断,而是以网站为桥梁实现内外通信的一体化。
统一通信的发展潜力巨大。
2008年,中国统一通信市场将达到51亿元人民币,而从2008年到2012年,未来五年的时间里,国内统一通信市场将保持较快的增长趋势,其年增长率将达到46.4%,截至2011年,世界统一通信市场份额有望突破145亿美元,国内统一通信市场的规模将达到212亿元人民币。
让人们轻松地通过统一通信来查询、联系和协作,促进创新,提高工作灵活性。
本平台通过提供开放的、可扩展的软件平台,对企业的感知、即时消息、电子邮件、统一消息、web、语音、视频进行整合,实现此目标。
1.1.2技术背景
本统一通信平台,目前有3种形式的客户端,PC上的C/S、PC上的B/S和无线通信设备,前两者依靠Internet的IP地址进行通信,后者无线网络运营商提供的“信号频端”。
本平台在C/S终端之间的通信中,采用了Socket协议,因为可控性最强,稳定性最高,从地层通信协议到通信格式都很灵活,而且值要遵守协议,跨平台/语言不是问题。
而在Web中的通信采用了WebService,通过HTTP协议进行通信,以XML为载体,所以跨平台特性和语言无关性是最好的,而且可以轻便地跨越不同的网络。
无线网络上的通信,主要通过SP(网络服务提供商)提供的网关端口和权限,从而传输信息。
如果将视频以图像的形式在网络上传播,那么传输的质量、效率、稳定性都是很差的,本系统将采用AVPhone组件,将在客户端的视频以帧的形式读取,然后经过压缩,再以数据包的形式在网络上传输。
在开发平台上,我选用.NET,一来自己熟悉.NET,二来.NET有其本身的优势,C#保留了对底层操作系统API的直接调用和指针。
普通应用都是调用.Net的程序集,对于速度敏感,或者平台相关型应用,直接通过特定声明来调用WindowsAPI。
这样就可以在功能,效率和速度都兼顾,解决各种各样的应用层问题和系统层问题,用一种语言来解决所有场合的大部分问题;而且在Windows平台上的.NetCLR,开发工具IDE,再加上C#的程序集,开发方便和快捷的难以想像,。
在数据库选择上也是用微软的产品MSSQL2005。
二、需求分析
2.1市场分析
统一通信不但是网络的融合,而且是应用的融合。
它不仅能改善企业的办公模式,更重要的是它可以渗透到企业的生产系统中,带来整个企业运作模式的变革。
中国通信标准协会网络交换技术工作委员会主席赵慧玲表示,统一通信带给用户的是成本的降低、工作效率的提升以及整个运行机制的改变。
据微软的抽样调查结果显示,80%的企业管理者认为,企业运行时出现的问题来自于企业的内部沟通问题。
员工日常工作所需的信息有50%到75%是直接从其他员工那里获得的。
企业有80%以上的数据化的信息分散在各个员工的设备上,如果没有良好的沟通,企业就不能正常运作。
随着信息技术的发展,企业员工拥有了越来越多的通信设备。
是不是通信手段越丰富通信效果就越好呢?
据Sage数据研究机构发布的报告显示,尽管目前平均每人拥有6.4种不同的通信设备(包括固定电话、手机、电子邮件、即时通信、办公电话等),但企业员工仍有36%的几率无法在第一时间与对方取得联系。
因为,这些通信设备往往是独自工作,它们之间没有建立起一个统一的通信体系。
可见,只有将各种通信手段有效地整合到一起,才能使企业内部的沟通更舒畅、资源共享更容易。
统一通信能够为企业打造一个综合信息服务的平台,整合多种通信手段,有效地提高员工的工作效率和企业对资源的利用率,降低生产成本。
同时,统一通信改变了传统的商业模式,企业可快速实现与客户及合作伙伴的即时沟通,这有助于企业抓住稍纵即逝的商业机会。
2.2功能分析
由于本系统是一个企业统一通信系统,系统对不同部门的用户进行分组,在C/S客户端,任何两个同事可以进行文字、视频会话、文件传输和邮件收发,当其中一个同事不在线的时候,文字信息将发送到不在线同事的手机。
而在B/S客户端,有一个大厅会议区,公开给所有用户,此外可以选择与某个用户单独会话。
而短信群发功能是提供给每一位用户的,可将短息发送到你选定的用户的移动电话。
而邮件群发功能是提供给每一位用户的,可对用户注册的邮箱进行邮件收发功能。
会议也是分部门的,其部门定义为创建该会议的同事的部门,创建该部门的同事作为该会议的管理员,可以命令会议中的任两个同事将他们的视频公开给所有同事,可以设置会议只对本部门公开还是对所有部门公开,拥有是设置用户进出会议的权限。
而在服务端,系统管理员可以管理用户、会议,设置系统,如服务端的地址、短信服务提供商的配置等。
2.3环境需求
1、硬件环境
CPU
内存
硬盘
其他
服务端
2.00GHz以上
1GB+RAM以上
SATA160G以上
客户端
500MH以上
64MB以上(推荐使用128MB)
安装需要50MB的硬盘空间
若要使用语音视频聊天功能,还需配置声卡、音箱、话筒、摄像头等多媒体设备
表2.1硬件环境表
2、软件环境
操作系统
数据库
其他软件
服务端
WindowsServer2003
MicrosoftSQLServer2005
IIS6.0、
NETFramework2.0
客户端
WindowsServer2000、WindowsServer2003、WindowsXP
表2.2软件环境表
3、网络环境
局域网使用
数据库
服务端
在局域网络中
互联网公网地址,2M/mps
客户端
在局域网络中
任何能连接到互联网的网络
表2.3网络环境表
三、主要技术概述
3.1面向对象
在这个部分,先概述面向对象,因为整个系统的系统都是基于面向对象分析和设计的,面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。
从面向对象分析到面向对象设计,是一个逐渐扩充模型的过程。
瀑布模型把设计进一步划分成概要设计和详细设计两个阶段,类似地,也可以把面向对象设计再细分为系统设计和对象设计。
系统设计确定实现系统的策略和目标系统的高层结构。
对象设计确定解空间中的类、关联、接口形式及实现操作的算法。
3.1.1面向对象设计的启发规则
1、设计结果应该清晰易懂
使设计结果清晰、易懂、易读是提高软件可维护性和可重用性的重要措施。
显然,人们不会重用那些他们不理解的设计。
要做到:
用词一致;使用已有的协议;减少消息模式的数量;避免模糊的定义。
2、设计简单类
应该尽量设计小而简单的类,这样便以开发和管理。
为了保持简单,应注意以下几点:
避免包含过多的属性;有明确的定义;尽量简化对象之间的合作关系;不要提供太多的操作。
3、.使用简单的协议
一般来说,消息中参数不要超过3个。
4、使用简单的操作
面向对象设计出来的类中的操作通常都很小,一般只有3至5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能
7、把设计变动减至最小
通常,设计的质量越高,设计结果保持不变的时间也越长。
即使出现必须修改设计的情况,也应该使修改的范围尽可能小。
3.2UDP协议
3.2.1UDP协议概述
用户数据报协议(UDP)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
是一个简单的面向数据报的传输层协议,IETFRFC768是UDP的正式规范。
UDP协议基本上是IP协议与上层协议的接口。
UDP协议适用端口分别运行在同一台设备上的多个应用程序。
与TCP不同,UDP并不提供IP协议的可靠机制、流控制以及错误恢复功能等。
由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。
3.2.2UDP协议的结构
UDP协议结构
16
32bit
Sourceport
Destinationport
Length
Checksum
Data
表3.1UDP协议结构表
∙SourcePort—16位。
源端口是可选字段。
当使用时,它表示发送程序的端口,同时它还被认为是没有其它信息的情况下需要被寻址的答复端口。
如果不使用,设置值为0。
∙DestinationPort—16位。
目标端口在特殊因特网目标地址的情况下具有意义。
∙Length—16位。
该用户数据报的八位长度,包括协议头和数据。
长度最小值为8。
∙Checksum—16位。
IP协议头、UDP协议头和数据位,最后用0填补的信息假协议头总和。
如果必要的话,可以由两个八位复合而成。
∙DATA层。
包含上层数据的信息。
3.2.3UDP协议的特点
1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。
2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。
3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。
4、UDP传送数据较TCP快速,系统开销也少。
5、由于缺乏拥塞控制(congestioncontrol),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。
3.3SOCKET编程技术
3.3.1Socket套接字
进程通信的概念最初来源于单机系统。
由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIXBSD中的管道(pipe)、命名管道(namedpipe)和软中断信号(signal),UNIXsystemV的消息(message)、共享存储区(sharedmemory)和信号量(semaphore)等,但都仅限于用在本机进程之间通信。
网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。
为此,首先要解决的是网间进程标识问题。
同一主机上,不同进程可用进程号(processID)唯一标识。
但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。
例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。
其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。
因此,网间进程通信还要解决多重协议的识别问题。
为了解决上述问题,TCP/IP协议引入了端口和地址的概念。
1、端口
网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。
按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。
从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。
为此,TCP/IP协议提出了协议端口(protocolport,简称端口)的概念,用于标识通信的进程。
2、地址
网络通信中通信的两个进程分别在不同同的机器上。
在互连网络中,两台机器可能位于不同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。
因此需要三级寻址:
a.某一主机可与多个网络相连,必须指定一特定网络地址;
b.网络上每一台主机应有其唯一的地址;
c.每一主机上的每一进程应有在该主机上的唯一标识符。
通常主机地址由网络ID和主机ID组成,在TCP/IP协议中用32位整数值表示;TCP和UDP均使用16位端口号标识用户进程。
3.3.3C#Socket编程原理
首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。
客户端在需要的时刻发出向服务端的连接请求。
这里为了便于理解,提到了一些调用及其大致的功能。
使用socket调用后,仅产生了一个可以使用的socket描述符,这时还不能进行通信,还要使用其他的调用,以使得socket所指的结构中使用的信息被填写完。
NetFrameWork为Socket通讯提供了System.Net.Socket命名空间,在这个命名空间里面有以下几个常用的重要类分别是:
•Socket类这个低层的类用于管理连接,WebRequest,TcpClient和UdpClient在内部使用这个类。
•NetworkStream类这个类是从Stream派生出来的,它表示来自网络的数据流
•TcpClient类允许创建和使用TCP连接
•TcpListener类允许监听传入的TCP连接请求
•UdpClient类用于UDP客户创建连接(UDP是另外一种TCP协议,但没有得到广泛的使用,主要用于本地网络)
本系统使用UDP协议,一旦创建Socket,在客户端,不用Connectd到服务端,但最好指定绑定一个端口,如果不事先Bind端口号的话,系统会默认在1024到5000随机绑定一个端口号,并通过Send方法向远程服务器发送数据,然后可以通过Receive从服务端接收数据;而在服务器端,也需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联,使用Receive等待接收来自客户端的数据。
使用完Socket后,使用Close方法关闭Socket。
3.4UDP穿透NAT
3.4.1NAT的概念和意义
NAT(NetworkAddressTranslators),网络地址转换:
网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。
NAT分为两大类,基本的NAT和NAPT(NetworkAddress/PortTranslator)。
最开始NAT是运行在路由器上的一个功能模块。
最先提出的是基本的NAT,它的产生基于如下事实:
一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这是在上世纪90年代中期提出的)。
那么这个子网中其实只有少数的节点需要全球唯一的IP地址,其他的节点的IP地址应该是可以重用的。
因此,基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。
子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。
如果这些节点需要访问外部网络,那么基本NAT就负责将这个节点的子网内IP转化为一个全球唯一的IP然后发送出去。
(基本的NAT会改变IP包中的原IP地址,但是不会改变IP包中的端口)
另外一种NAT叫做NAPT,从名称上我们也可以看得出,NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。
基本NAT的设备可能我们见的不多,NAPT才是我们真正讨论的主角。
看图3.1:
ServerS1
18.181.0.31:
1235
|
^ Session1(A-S1) ^ |
| 18.181.0.31:
1235 | |
v155.99.25.11:
62000v |
|
NAT
155.99.25.11
|
^ Session1(A-S1) ^ |
| 18.181.0.31:
1235 | |
v 10.0.0.1:
1234 v |
|
ClientA
10.0.0.1:
1234
图3.1NAPT工作表
3.4.2NAT的实现过程
有一个私有网络10.*.*.*,ClientA是其中的一台计算机,这个网络的网关(一个NAT设备)的外网IP是155.99.25.11(应该还有一个内网的IP地址,比如10.0.0.10)。
如果ClientA中的某个进程(这个进程创建了一个UDPSocket,这个Socket绑定1234端口)想访问外网主机18.181.0.31的1235端口,那么当数据包通过NAT时会发生什么事情呢?
首先NAT会改变这个数据包的原IP地址,改为155.99.25.11。
接着NAT会为这个传输创建一个Session(Session是一个抽象的概念,如果是TCP,也许Session是由一个SYN包开始,以一个FIN包结束。
而UDP呢,以这个IP的这个端口的第一个UDP开始,结束呢,呵呵,也许是几分钟,也许是几小时,这要看具体的实现了)并且给这个Session分配一个端口,比如62000,然后改变这个数据包的源端口为62000。
所以本来是(10.0.0.1:
1234->18.181.0.31:
1235)的数据包到了互联网上变为了(155.99.25.11:
62000->18.181.0.31:
1235)。
一旦NAT创建了一个Session后,NAT会记住62000端口对应的是10.0.0.1的1234端口,以后从18.181.0.31发送到62000端口的数据会被NAT自动的转发到10.0.0.1上。
(注意:
这里是说18.181.0.31发送到62000端口的数据会被转发,其他的IP发送到这个端口的数据将被NAT抛弃)这样ClientA就与ServerS1建立以了一个连接了。
那么再看看下面这些关键的部分:
ServerS1 ServerS2
18.181.0.31:
1235 138.76.29.7:
1235
| |
| |
+----------------------+----------------------+
|
^ Session1(A-S1) ^ | ^ Session2(A-S2) ^
| 18.181.0.31:
1235 | | | 138.76.29.7:
1235 |
v155.99.25.11:
62000v | v155.99.25.11:
62000v
|
ConeNAT
155.99.25.11
|
^ Session1(A-S1) ^ | ^ Session2(A-S2) ^
| 18.181.0.31:
1235 | | | 138.76.29.7:
1235 |
v 10.0.0.1:
1234 v | v 10.0.0.1:
1234 v
|
ClientA
10.0.0