客户端/服务器 架构
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。
传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件, 加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高, 效率低。如我院使用的上海超兰公司“案件统计”管理软件就是典型的C/S体系结构管理软件。
surface pro 3怎么样?和笔记本比 值得买吗? 本人学生 要买个电脑 看中surfac
关键要看你用来干嘛了,surface这个中二合一平板,你要是和平板电脑比,那他说第一,没有那个平板敢说第二,X86架构的酷睿I系列CPU,性能相对于ARM架构的平板一个天一个地,但是对于笔记本而言这个只有CPU和自带的核显,只能满足日常办公和普通小娱乐,大型游戏这个配置远远不够
B/S C/S架构中,服务器端可以主动向客户端发送信息吗
C/S 架构C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。
C/S 架构也可以看做是胖客户端架构。因为客户端需要实现绝大多数的业务逻辑和界面展示。这种架构中,作为客户端的部分需要承受很大的压力,因为显示逻辑和事务处理都包含在其中,通过与数据库的交互(通常是SQL或存储过程的实现)来达到持久化数据,以此满足实际项目的需要。C/S 架构的优缺点优点:
1.C/S架构的界面和操作可以很丰富。
2.安全性能可以很容易保证,实现多层认证也不难。
3.由于只有一层交互,因此响应速度较快。缺点:
1.适用面窄,通常用于局域网中。
2.用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户。
3.维护成本高,发生一次升级,则所有客户端的程序都需要改变。 B/S架构B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现,Browser客户端,WebApp服务器端和DB端构成所谓的三层架构。B/S架构的系统无须特别安装,只有Web浏览器即可。
B/S架构中,显示逻辑交给了Web浏览器,事务处理逻辑在放在了WebApp上,这样就避免了庞大的胖客户端,减少了客户端的压力。因为客户端包含的逻辑很少,因此也被成为瘦客户端。B/S架构的优缺点优点:
1)客户端无需安装,有Web浏览器即可。
2)BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。
3)BS架构无需升级多个客户端,升级服务器即可。缺点:
1)在跨浏览器上,BS架构不尽如人意。
2)表现要达到CS程序的程度需要花费不少精力。
3)在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题。
4)客户端服务器端的交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的。(在Ajax风行后此问题得到了一定程度的缓解)转自: http://www.blogjava.net/junglesong/archive/2008/04/29/197270.html
如何实现用户认证授权系统
一旦用户注册之后,用户信息就保存在服务器端(DB/Cache)。关键在于用户需要提供身份凭证,一般是用户名和密码。即常见的登陆页面:用户输入username和password,勾选Remember Me(可选,一般是记住一周),点击登陆,提交请求到服务端(这里一般是走HTTPS)。服务端根据用户名和密码到数据库查询是否匹配,如果匹配的话,说明身份认证成功。这是一次普通的身份认证过程。非常好理解。
关键在于HTTP是无状态的,用户登陆过一次,但是如果你没有做一些状态管理操作的话,用户登陆后请求同一个页面,服务器仍然要求其登陆。这时候就需要做一些状态处理了。一般是通过服务器颁发一个登陆凭证(sessionkey/token/ticket)实现的。那么这个登陆凭证是怎么生成的?又是怎样安全的颁发给客户端呢?
方案一:session集群 + 随机sessionId
用户登陆成功之后,服务器为其随机生成的一个sesionId,保存在session服务器中,将这个sessionId与用户关联起来:sessionId=>userId。然后通过cookies方式将sessionId颁发给客户端,浏览器下次请求会自动带上这个sessionId。服务器根据sessionId从session服务器中拿到关联的userId,比较是否与请求的userId相同,如果是则认为是合法请求。
sessionId是随机生成的,基本来说是不可能被猜测出来的,所以这方面的安全还是有一定保障的。
方案二:session-less + 加密算法
上面的Authentication方式其实是用到了session和cookies。我们知道session这东西是服务端状态,而服务端一旦有状态,就不是很好线性扩展。其实对于身份验证来说,服务端保留的也这是一个简单的value而已,一般是userId,即session['sessionId']==>userId。然后再根据userId去DB获取用户的详细信息。如果我们把userId作为一个cookies值放在客户端,然后把用几个cookies值(比如userId)做一个特殊的签名算法得到的token也放在cookie中,即f(userId, expireTime)==>token。这样服务端得到用户请求,用同样的签名算法进行计算,如果得到的token是相等,那么证明这个用户是合法的用户。注意这个签名算法的输入因子必须包含过期时间这样的动态因子,否者得到的token永远是固定的。这种实现方式其实是仿造CSRF防御机制anti-csrf.md。是笔者自己想出来的,不清楚有没有人用过,个人感觉行得通。
然而上面的做法安全性取决于签名算法的隐蔽性,我们可以更进一步的,可以参考API中的签名验证方式,把password作为secretKey,把userId, expireTime, nonce, timestamp作为输入参数,同样用不公开的算法(这个与API签名不同)结合password这个secretKey进行计算,得到一个签名,即f(userId, expireTime, nonce, timestamp, password)==>sign。每次客户端传递userId, expireTime, nonce, timestamp和sign值,我们根据userId获取到password,然后进行f(userId, expireTime, nonce, timestamp, password)==>sign计算,然后比较两个sign是否一致,如果是,表示通过。这种方式比起上面的方式其实区别在于增加了password作为输入参数。这样首先增加签名的破解难度。还带来一个额外的好处,就是当用户修改了password之后,这个token就失效了,更合理安全一些。
具体步骤如下:
1. 客户端 >>>
用户输入userId和password,form表单提交到后台进行登录验证(这里最好走HTTPS)。
2. <<< 服务端
服务端根据userId,从用户信息表中得到用户注册时保存的密码签名:S=md5(password)。
服务器验证用户信息:userId == DB.userId; md5(password) == DB.S。
如果验证通过,说明用户身份认证通过。这时候服务器会为客户端分配一个票据(签名):token=md5(userId;tokenExpiryTime;S;secretKey)。其中secretKey是一个后台统一的密钥,而且跟DB是分开的,一般是写在配置文件中。目的很明显,就是避免将鸡蛋放在同一个篮子中。然后服务端将这个token值存放在cookies中。同样放入cookies中的还有userId和tokenExpiryTime。这些cookies的过期时间都是tokenExpiryTime。
3. 客户端 >>>
客户端每次请求都要带上这个三个cookies(浏览器自动会带上)。
4. <<< 服务端
服务器首先检查tokenExpiryTime是否过期了,如果过期就要求用户重新登录。否则,根据userId cookie从用户信息表中获取用户信息。然后计算expectedToken=md5(userId;tokenExpiryTime;S;secretKey)。然后比较expectedToken是否跟用户提交的token相同,如果相同,表示验证通过;否则表示验证失败。
说明
为了增加安全性,可以进一步将userId, tokenExpiryTime; token 这个三个cookies进行一次对称加密: ticket=E(userId:tokenExpiryTime:token)。
虽然cookies的值是没有加密的,但是由于有签名的校验。如果黑客修改了cookie的内容,但是由于他没有签名密钥secretKey,会导致签名不一致。
google了一下,发现这篇文章跟我的观点不谋而合Sessionless_Authentication_with_Encrypted_Tokens。另外看了一下Spring Security的Remember Me实现,原来这种方式是5.2. Simple Hash-Based Token Approach方式。他的hash因子中也有password,这样当用户修改了password之后,这个token就失效了。
这种基于password和secretKey做token的鉴权方式实现非常简单,而且客户端没有任何计算和验证逻辑,非常适合于BS架构的。不过这种方式在安全性方面还有一些问题:
客户端没法验证服务器的真实性。域名劫持的情况很容易伪造服务器。
token放在cookies中,还是容易被盗取(比如XSS漏洞,或者网络窃听)。使用动态token可以避免这个问题,但是需要持久化token,比较麻烦,而且对性能有消耗5.3 Persistent Token Approach。
一个简单而有效的解决方案就是使用HTTPS。HTTPS使用CA证书验证服务器的合法性,全程会话(包括cookies)都是经过加密传输,刚好解决了上面的两个安全问题。很多网站都是使用这种鉴权认证方案。比如GitHub。不过安全性要求不是很高的网站还是采用的是登陆认证的时候HTTPS,其他情况HTTP的方式,比如新浪微博、亚马逊、淘宝、quora等。
TIPS SSO
上面的鉴权方式依赖于Cookies来传递sessionId,而我们知道Cookies具有跨域限制。不过可以通过一些方式解决。具体可以看一下这篇文章,写的非常好。Building and implementing a Single Sign-On solution。
上面的想法是把password作为一个secretKey或者Salt进行签名。还有另一种思路,就是把password作为对称密钥来进行加密解密。具体步骤如下:
1. 客户端 >>>
用户输入userId和password
客户端用userId和password 计算得到一个签名:H1=md5(password), S1'=md5(H1 + userId)
客户端构造一个消息:message=randomKey;timestamp;H1;sigData。其中randomKey是一个16位的随机数字;SigData为客户端的基本信息,比如userId, IP等。
客户端用对称加密算法(推荐使用性能极高的TEA)对这个消息进行加密:A1=E(S1', message),对称密钥就是上面的S1',然后将userId和A1发送给服务端。
2. <<< 服务端
接收客户端发送的userId和A1。
根据userId,从用户信息表中得到用户注册时保存的签名S1=md5(H1 + userId)。注意服务器保存的不是H1。这个签名就是前面对称加密(TEA)的对称密钥。而且正常情况应该跟客户端根据用户输入的userId和password计算出来的S1'是一样的。
服务端尝试用S1解密A1。如果解密异常,则提示登陆失败。如果解密成功,则按照约定格式,得到message=randomKey;timestamp;H1;sigData
服务器对message中的用户信息进行验证
比较 message.sigData.userId == DB.userId; 如果不一样,那么很有可能数据曾被篡改,或者这是一个伪造的登录的请求,提示登录失败;
比较 message.timestamp与服务器当前的时间,如果差距较大,则拒绝登录,可以从很大程度上防止重放攻击。大家可能都有过经验,当本地时间与真实时间有较大差距的时候,总是会登录失败,其实就是服务器对客户端时间进行校验的原因。
比较 md5(message.H1 + message.sigData.userId) == DB.S1。如果不一致,则登陆失败。
如果验证通过,说明用户身份认证通过,服务器同样构造了一个消息:serverMessage=whaterver you want,一般是登陆凭证,如sessionkey或者token. 然后用客户端发送过来的randanKey进行对称加密:A2=E(randanKey, serverMessage),然后把A2返回给客户端。
3. 客户端 >>>
客户端拿到A2,用randanKey进行解密,如果可以解密成功,则认为是来自真实服务器的数据,而不是一台伪造的服务器,整个登陆流程完成。这个步骤主要是为了防止服务器伪造。这个步骤很容易被忽略,客户端应该和服务器一样,要对接受的数据保持不信任的态度。
这个方案虽然没有使用HTTPS,但是思路跟HTTPS很类似。安全性也很高。
说明
上面的认证过程其实就是著名的网络认证协议Kerberos的认证过程。Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。它的设计主要针对客户-服务器模型,并提供了一系列交互认证——用户和服务器都能验证对方的身份。Kerberos协议可以保护网络实体免受窃听和重复攻击。QQ的登录协议都是基于Kerberos的思想而设计的。不过Kerberos也有一些安全性的问题。SRP协议Secure Remote Password protocol要更安全一些。据说是目前安全性最好的安全密码协议。
为什么DB保存S1而不是H1。这是为了提高批量暴力破解的成本。对经过两次MD5加密,再加上userId作为salt,得到的S1进行暴露反推pasword基本是不可能的。而反推H1的话,由于H1的是password的MD5值,相对于password来说强度要增强不少。这个读者可以自己试试md5('123456')看得到的H1就有直观的认识了。
为什么服务端解开对称加密后的message之后还要对message的内容进行验证。这是为了避免拖库后的伪造登录。假设被拖库了,黑客拿到用户的S1,可以伪造用户登录(因为我们的加密算法是公开的)。它能够通过服务器第一个验证,即服务端使用存储的S1能够解开消息;但是无法通过第二个验证,因为H1只能是伪造的,这是因为根据S1反推H1是很困难的(原因见上面Note.2)。
但是虽然上面的协议可以防止黑客拖库后伪造用户登陆,却无法防止黑客拖库后伪造服务器,以及进行中间人攻击。拖库之后,黑客拥有DB.S1,协议又是公开的,这相当于黑客拥有了伪造Server的能力。黑客通过DB.S1解开客户端发送的A1,得到userId, H1=MD5(pwd), 以及randomKey。这样,黑客就可以轻易的得到被监听用户的H1了,而不需要通过S1进行反推。黑客就可以直接用H1伪造合法的用户登录请求了。如果pwd不够复杂,那么还很容易被暴力破解。黑客拦截客户请求,利用破解得出的randomKey回复一个假的响应,达到伪造Server的目的。黑客还可以同时伪造用户和Server,进行中间人攻击,从而达到窃听用户会话内容的目的。美国“棱镜门”就是类似案例。甚者在必要的时候对会话内容进行篡改。当然,黑客拖库后只能破解他监听网络所截取到的受害用户的MD5(pwd),比起服务器存MD5(pwd)的影响面窄多了,所以建议服务器还是不要直接存MD5(pwd)。
可以在现有登陆流程基础上加上密钥交换算法(如ECDH)解决上面的问题。具体流程如下:
==前置条件==
服务端生成一对私钥serverPrivateKey和公钥serverPublicKey,公钥直接hardcode在客户端,而不是通过网络传输。
1. 客户端 >>>
用户输入userId和password
客户端用对称加密算法对消息进行加密:A1=TEA(S1', randomKey;timestamp;H1;userId),对称密钥S1'=md5(md5(password) + userId)`
客户端生成自己的一对公钥clientPublicKey和密钥clientPrivateKey。
客户端用serverPublicKey对A1和clientPublicKey进行非对称加密: ECDH(serverPublicKey, userId + A1 + clientPublicKey),然后将加密结果发送给服务端。
2. <<< 服务端
使用serverPrivateKey对客户端发送信息进行解密,得到userId, A1 和 clientPublicKey。
根据userId,得到DB.S1。然后尝试用DB.S1解密A1。如果解密异常,则提示登陆失败。如果解密成功,则按照约定格式,得到message=randomKey;timestamp;H1;userId
服务器对message中的用户信息进行验证:
比较 message.sigData.userId == DB.userId
比较 message.timestamp与服务器当前的时间,如果差距较大,则拒绝登录,可以从很大程度上防止重放攻击
比较 md5(message.H1 + message.sigData.userId) == DB.S1
如果验证通过,说明用户身份认证通过。服务器用客户端发送过来的randanKey进行对称加密:A2=TEA(randanKey, sessionKey + 业务票据)
服务端使用clientPublicKey对A2进行加密: ECDH(clientPublicKey, A2), 然后把加密结果返回给客户端。
3. 客户端 >>>
客户端使用clientPrivateKey对服务器回包进行解密,得到A2。
用randanKey对A2进行解密,如果可以解密成功,则认为是来自真实服务器的数据,而不是一台伪造的服务器,整个登陆流程完成。
4. ==后续通讯==
由于非对称加密算法(如RSA、ECC)的计算复杂度相比对称加密高3个数量级,不太可能用作通信数据的加密。所以验证通过之后,服务端和客户端利用ECDH交换密钥算法独自计算出一样的密钥,后面的通讯应该还是基于对称加密。这个跟HTTPS是类似的。
说明
加上非对称加密之后,即使黑客知道了S1,也没有办法伪造服务器,因为他不知道serverPrivateKey。黑客也不可能伪造客户端。因为即使黑客拖库知道S1,并且通过反编译客户端应用程序知道serverPublicKey,如果不是通过窃听网络得到A1,用S1解密A1从而得到A1中的H1的情况下,基本是不可能通过S1反推H1的。现在A1包在不对称加密算法上,黑客如果不知道serverPrivateKey和clientPrivateKey就无法解开会话信息。
这里看到serverPublickKey是HardCode在客户端的,而不是通过公钥推送下发的。这里是为了保证客户端的serverPublicKey是真正的serverPublicKey,而不是来自伪造服务器的。如果serverPublicKey通过网络传输下发给客户端的,那么伪造服务器在劫持网络的情况下,完全可以拦截客户请求,发回伪造服务器自己的fake_serverPublickKey,客户端在不知情的情况就用fake_serverPublickKey向伪造服务器发数据,因为fake_serverPublicKey是黑客构造的,他当然有对应的fake_serverPrivateKey解开。当然,黑客还需要知道S1才能解开A1。当然,将serverPublicKey硬编码在客户端会导致更换密钥需要强制客户端一起升级,否则老版本的客户端将无法登陆。
客户端自己也生成了公钥和私钥,目的是为了验证服务器是真正的服务器,这个得以成立的前提是公钥是真正的服务器公钥,如果是伪造服务器的公钥,那等于向黑客公开了自己加密的内容,黑客就知道了客户端的公钥,就能伪造服务器的返回数据。
采用ECDH非对称加密算法包裹后的登陆认证协议,安全级别已经跟SRP差不多。相对于SRP协议的问题是ECDH安全性依赖于私钥的保密性,如果私钥泄漏安全性回到跟未加ECDH的时候一样。ECDH的私钥保密有以下一些办法(考虑到实现成本,推荐方案2)
私钥加强保密,做到绝密,不用换,也不准备换;例如用USBKEY等硬件方式。
私钥密码级别安全,定期更换,换的时候让客户端拉取。具体实现方法是第一步验密的成功的以后,发现要更新公钥,在返回的加密信道中返回新的公钥。
使用Verisign等第三方证书,确保公钥的合法性,在2的基础上不会增加网络交互。
完全使用TLS的协议,会导致每次登录增加一次交互。
另外,采用不对称加密算法,会有一个服务器间共享密钥的安全VASKEY的问题:
换key困难,架构设计导致
网络上对称加密传输新密钥,可能被破解
可能的解决方案:
VASKEY的业务Key管理目前是对称加密的方式,可以考虑换成ECDH或类似的密钥交换协议来动态更新Key。
集中验证签名和解密,不共享密钥。
这里推荐采用方案2。
最后一个容易忽略的地方是注册。采用HTTP注册相当于明文传递用户名和密码,存在劫持、中间人攻击的危险。将注册入口全部改为HTTPS,封掉HTTP注册可以去掉上述危险。但是如果黑客劫持网络,给用户返回HTTP的页面,代理请求的HTTPS注册接口,也能窃取密码。
TIPS && THOUGHTS
基本上所有的安全的登陆鉴权协议都是采用HTTPS的思想:使用不对称密钥算法进行登陆验证以及对称密钥交换。通过之后,后续会话就用对称加密算法加密。但是与HTTPS采用CA证书不同的是,一般通过密钥本身来验证客户端和服务器的合法性。
对于对称加密算法安全性问题更好的解决办法是加密算法协商,而不在于寻找破解难度更大的算法。在验密码之前协商后续会话使用的对称加密算法,如果有安全性更好的算法或者正在使用的算法被破解了,只需要Server增加对更安全算法的支持,新版本的客户端就可以使用安全性更好的算法。支持对称加密算法协商以后可以随时动态的升级或替换加密算法,不用担心对称加密算法被破解的安全风险。HTTPS就是这样的一种思路。
HTTP登录无法防劫持,HTTPS登录可以防劫持,但是无法防止后续对业务会话的窃听。另外,CA也容易被伪造。
关于暴力登录。处理方式有几种:1. 验证码; 2. 一定时间内密码错误次数超过正常值,锁定账户; 3. 客户IP监控。
第三方爆库、钓鱼、扫号、撞库如果解决?这些问题等同于用户明文密码被盗,靠密码登录体系没有办法对抗,比较好的方式是对已知泄漏密码的用户进行封停,强制要求用户改密码等运营方式减少用户的财产损失。
上面所有的验证方式,每次请求都需要根据userId去数据库拉取用户信息(password)。所以最好结合缓存进行处理,毕竟用户信息变化频率还是比较小的。
这种鉴权认证方式,相对于前面的token方式而言,客户端有比较多的计算和验证逻辑,比较适合于CS架构,特别是手机App。而且,它不依赖于Cookies,所以天然具有SSO功能。
More about 密码强度 && 暴力破解
1. 加盐之外我们还可以做些什么?
加盐以后的密码存储体系已经有效的对抗批量暴力破解、彩虹表攻击、字典攻击。为了对抗针对单个密码的暴力破解,我们可以通过密钥加强(Key Stretching)、提高密码长度等方式来提高安全性。
密钥加强的基本思路是让每次鉴权的时间复杂度大到刚好不影响用户体验,但是黑客暴力破解或构建彩虹表的成本大幅度提高,目前标准的算法有BCRYPT、SCRYPT、PBKDF2等。密钥加强算法的本质是通过加盐以及迭代计算多次增加计算量,迭代次数增加1000次计算量翻1000倍,这种方式对单个密码的暴力破解作用不大。
提高密码长度对构建彩虹表暴力破解的成本影响非常大,提高密码长度提升单个帐号的密码安全价值很大。以目前暴力破解MD5能力最强的FPGA NSA@home计算量来估算(大概用一台pc电脑的功耗,每秒钟可进行30亿次的8位密码(密码空间64个字符)尝试),假设有1万个NSA@home集成电路,19秒就能破解8字符的密码(70个字符的密码空间),所以现在的很多密钥检验要求的最小长度6个字符其实是不安全的,如果把密码长度增加到12个字符,则需要1年才能破解。
2. GPU,FPGA,ANIC对上述密码强度有何挑战?
FPGA MD5暴力破解工具目前比较成熟的是NSA@home,大概用一台pc电脑的功耗,每秒钟可进行30亿次的8位密码(密码空间64个字符)尝试。Lightning Hash Cracker[7]使用9800GX2 GPU每秒能够完成密码MD5计算608M次。
类似FPGA,GPU这种暴力破解方式受密码字符空间、密码长度、密码计算强度影响比较大,可以通过提升密码长度、密码计算强度来提升安全性。只替换密码Hash算法对这种破解作用不大,SHA2的计算量不到MD5计算量的一倍,把MD5换成SHA2只是让暴力破解的计算量增加了一倍,但是如果密码长度增加1位对计算量的提升是非常巨大的。
对于对称加密算法,没有专门针对TEA的硬件设计,针对AES算法,有一篇论文针对AES128专门设计的类似GPU的硬件计算速度能达到1012次/秒(约240次/s),AES128暴力破解需要288秒,这个计算量目前也是安全的。这种对称加密算法的暴力破解只能通过提升密钥长度来对抗。128位的AES与TEA安全级别差不多,AES支持最长256位密钥,长远来看对抗暴力破解AES更有优势。然而,对于对称加密算法安全性问题更好的解决办法是加密算法协商,而不在于寻找破解难度更大的算法。
有关c/s架构的简单问题 谢谢
C/S Client/Server
B/S Browser/Server
区别其实还是挺大的。
找篇文章给你看看,写的不错--
当今世界科学技术飞速发展,尤其以通信、计算机、网络为代表的互联网技术更是日新月异,令人眼花燎乱,目不睱接。 由于计算机互联网在政治、经济、生活等各个领域的发展、运用以及网络的迅速普及和全社会对网络的依赖程度,计算机网络已经成为国家的经济基础和命脉,成为社会和经济发展强大动力,其地位越来越重要。但是,由于主流技术研发企业和用户对“B/S”和“C/S”技术谁优谁劣、谁代表技术潮流发展等等问题的争论不休,已经给检察机关使用“OA(办公)”和“案件管理”软件工作开展带来困惑,本文就此两项技术发展变化和应用前景做些探讨,供同行参考。
一、什么是C/S和B/S
要想对“C/S”和“B/S”技术发展变化有所了解,首先必须搞清楚三个问题。
第一、什么是C/S结构。
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。
传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件, 加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高, 效率低。
第二、什么是B/S结构。
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
第三、管理软件主流技术。
管理软件技术的主流技术与管理思想一样,也经历了三个发展时期。首先,界面技术从上世纪DOS字符界面到Windows图形界面(或图形用户界面GUI),直至Browser浏览器界面三个不同的发展时期。其次,今天所有电脑的浏览器界面,不仅直观和易于使用,更主要的是基于浏览器平台的任何应用软件其风格都是一样的,使用人对操作培训的要求不高,而且软件可操作性强,易于识别;再者,平台体系结构也从过去单用户发展到今天的文件/服务器(F/S)体系、客户机/服务器(C/S)体系和浏览器/服务器(B/S)体系。
二、C/S和B/S 之比较
C/S和B/S是当今世界开发模式技术架构的两大主流技术。C/S是美国 Borland公司最早研发,B/S是美国微软公司研发。目前,这两项技术以被世界各国所掌握,国内公司以C/S和B/S技术开发出产品也很多。这两种技术都有自己一定的市场份额和客户群,各家企业都说自己的管理软件架构技术功能强大、先进、方便,都能举出各自的客户群体,都有一大群文人墨客为自己摇旗呐喊,广告满天飞,可谓仁者见仁,智者见智。
1、C/S架构软件的优势与劣势
(1)、应用服务器运行数据负荷较轻。
最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。
(2)、数据的储存管理功能较为透明。
在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络。在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。
(3)、C/S架构的劣势是高昂的维护成本且投资大。
首先,采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。
其次,传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。在JAVA这样的跨平台语言出现之后,B/S架构更是猛烈冲击C/S,并对其形成威胁和挑战。
2、B/S架构软件的优势与劣势
(1)、维护和升级方式简单。
目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。
(2)、成本降低,选择更多。
大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位。现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。
比如说很多人每天上“网易”(原文为新浪)网,只要安装了浏览器就可以了,并不需要了解“网易”的服务器用的是什么操作系统,而事实上大部分网站确实没有使用windows操作系统,但用户的电脑本身安装的大部分是windows操作系统。
(3)、应用服务器运行数据负荷较重。
由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库存储服务器,以防万一。
3,C/S 与 B/S 区别
Client/Server是建立在局域网的基础上的,Browser/Server是建立在广域网的基础上的。
(1)、硬件环境不同:
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务。
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例如电话上网, 租用设备, 信息自己管理, 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行。
(2)、对安全要求不同
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强。 一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息。
B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群。
(3)、对程序架构不同
C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上。 比C/S有更高的要求,B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持网络的构件搭建的系统。SUN和IBM推的JavaBean构件技术等,使B/S更加成熟。
(4)、软件重用不同
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好。
B/S 对的多重结构,要求构件相对独立的功能。 能够相对较好的重用。就如买来的餐桌可以再利用,而不是做在墙上的石头桌子。
(5)、系统维护不同
系统维护是软件生存周期中,开销大,相当重要
C/S 程序由于整体性,必须整体考察,处理出现的问题以及系统升级难, 可能是再做一个全新的系统。
B/S 构件组成方面构件个别的更换,实现系统的无缝升级。 系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
(6)、处理问题不同
C/S 程序可以处理用户面固定,并且在相同区域, 安全要求高的需求,与操作系统相关, 应该都是相同的系统。
B/S 建立在广域网上, 面向不同的用户群,分散地域, 这是C/S无法作到的,与操作系统平台关系最小。
(7)、用户接口不同
C/S 多是建立在Window平台上,表现方法有限,对程序员普遍要求较高。
B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流, 并且大部分难度减低,降低开发成本。
(8)、信息流不同
C/S 程序一般是典型的中央集权的机械式处理,交互性相对低。
B/S 信息流向可变化, B-B、 B-C、 B-G等信息流向的变化, 更象交易中心
参考资料:http://zhidao.baidu.com/question/12962713.html
请问龙与地下城是讲什么的
艾伯伦的历史,其起源年代,已然不可考。但我们可以肯定地是,在漫长而悠久的历史长夜中,发生了如此丰富多彩的历史事件。了解这些事件,就是了解我们的过去。而只有了解我们的过去,我们才能知道,我们为什么会在这儿。
尽管迦利法王国已经不复存在,但我们的纪年方式,仍然采用YK年,也就是说,以迦利法王国诞生之日,为YK元年。今年是YK998年,哦,再过两年,就是伟大王国诞生千年的纪念日了——只是不知道彼时候,还会有多少人仍然记得迦利法陛下为我们带来的往日荣光呢?
而对于更久远的年代,我们采用距今多少年来记录,比如五万年前发生的事件,我们便以-50,000来记录,以此类推。为了便于区分,我们通常把整个艾伯伦的历史划分为五个时代。下面,我们从这五个时代来详细了解,这个世界的历史。 巨龙时代(???—-10,000,000)
在遥远而未知的过去,这世界混沌不清。最早的龙类统治着一切。三条最强大的龙——希伯瑞斯、艾伯伦和吉伯尔,创造了龙族预言。据说,在一场惊天动地的创世大战中,代表善良的希伯瑞斯与代表邪恶的吉伯尔同归于尽。
天穹巨龙希伯瑞斯升上天空,诞下了普通的龙类,并化身成为围绕世界的圆环。当您旅行到世界的南方——比如希恩德瑞克大陆,就会在天空中发现希伯瑞斯之环,肉眼所见,仿佛一条金色的光带,挂在苍穹之中,指引着善良的种族。
而黄泉巨龙吉伯尔,则坠入黑暗深渊,诞下了各种恶魔和邪恶的生物,并化身为这世界的地底部分。包括蜿蜒曲折的隧道和洞穴,暗暗流淌的地下河流,以及缭绕着热气的熔岩巨湖。而那里,也成为了吉伯尔邪恶子民的栖息地和隐蔽所。
最后,是大地巨龙艾伯伦,医治了整个世界,并化身为我们所在的世界——高山、大湖、海洋和平原。而这也是我们这个世界被称为艾伯伦的原因。艾伯伦创造了所有其他的生物,包括我们。
这一时期,被称为巨龙之年代。
恶魔时代(-10,000,000—-80,000)
在大约一千万年前,吉伯尔邪恶的后裔从地底涌出,轻易征服了地表的弱小的种族,把整个世界变得犹如地狱一般。在随后的八百多万年间,恶魔和鬼婆们统治了世界。善良和中立的种族,则在黑暗中祈盼着光明的重来。
大约一百五十万年前,希伯瑞斯的后裔,龙类重新发现了龙族预言,并籍此恢复了她们古老的强大能力。龙族开始与另一些伟大的古老善族,包括羽蛇,一起对抗邪恶的恶魔统治着。而其他一些普通的种族,则远远地躲开了这些仿佛天神一般的战士,在可怕的战争中寻求苟活。
战争整整持续了一百四十万年。直到距今约十万年前,羽蛇们最终牺牲了自己,把最强大的恶魔领主和魔鬼们送回了吉伯尔的地底世界,并把它们封印起来。而她们自己也遭遇毁灭,所剩无几。而剩余的龙类则放弃了整个艾伯伦世界,退回到了阿贡尼森大陆,开始潜心思索龙族预言。并试图与那些“次要种族”保持距离。
这段年代,被称为恶魔之年代。
巨人时代(-80,000—-38,000)
直到距今大约八万年前,巨人们最先开始从龙族—恶魔战争的废墟中成长起来,逐渐在希恩德瑞克大陆建立了一个辽阔而强大的巨人文明。巨人们奴役着白精灵和卓尔精灵,并在无意中,逐渐让这些普通种族摆脱了蒙昧状态。
两万年以后,阿贡尼森的龙类主动与希恩德瑞克的巨人王国接触,并开始教导巨人们如何使用奥术魔法。巨人们很快就熟练地掌握了奥术魔法的知识,并创造了许多在今天看来仍然无与伦比的巨大奇迹。而白精灵与卓尔精灵努力们也偷偷跟在巨人身后,学习奥术魔法,并把所学的知识,延续至今。
经过了两万年的黄金年代,到距今约四万年前,梦境位面达拉库尔运行到了近艾伯伦轨道。魇灵们从位于希恩德瑞克的界域之门蜂拥而出,入侵了艾伯伦。经过了数十年艰苦卓绝的抵抗战争,巨人们最终不得不动用龙类教导他们的最强大的毁灭魔法,摧毁了连接梦境位面和艾伯伦的界域之门。魇灵最终失去了入侵的通道,但这一法术也造成了可怕的灾难。希恩德瑞克大陆地动山摇,大片陆地陷入海中。
在随后的一千年中,残存的巨人王国再也没有从这一灾难中恢复过来。可怕的诅咒与瘟疫横扫大陆,精灵奴隶趁机发动了起义,企图推翻巨人的统治。在绝望中,巨人们试图再次使用曾用来摧毁界域之门的强大魔法来打击精灵。但这次他们没有成功。一直在一边旁观的龙类介入了战争,在巨人施展那可怕魔法之前发动了进攻。巨人王国随之分崩离析,遭到了彻底毁灭。卓尔精灵们遁入了希恩德瑞克大陆深处,建立了自己的部落。而白精灵则离开希恩德瑞克,逃到了艾伦诺大陆,逐渐建立了自己的领地。
巨人们至今仍然生活在希恩德瑞克,但是他们逐渐退化成了一种原始而野蛮的种族,再也不复往日荣光。
这一段时期,被称为巨人之年代。
怪兽时代(-38,000—-4,100)
到了三万八千年前,巨人们已经彻底退化到了原始的野蛮生活状态。精灵们在艾伦诺岛陆建立了自己的殖民领地。龙类在毁灭了巨人王国以后,重新退回了阿贡尼森大陆。而在北方的科瓦雷大陆,一些弱小种族的文明,也开始逐渐兴起。
经过一万多年的发展,到距今两万五千年时精灵在艾伦诺逐渐建立了一个强大而稳固的王国。精灵的最高统治机构——不朽评议会逐渐成形。第一次精灵与龙类的冲突爆发。在随后的几千年中,精灵与龙类始终不时爆发小规模的冲突。而在距今大约一万年前,艾伦诺的精灵甚至入侵了科瓦雷大陆,在大陆东南部建立了自己的殖民地。并与当时统治科瓦雷大陆的地精帝国爆发了冲突。但是与地精和龙类的双线作战最终使精灵们不堪重负。最后他们不得不放弃了科瓦雷大陆,退回了本土艾伦诺。
在北方的科瓦雷大陆,在大约三万六千年前,第一个地精王国就在大陆南部逐渐兴起。到了前三万年,第一个兽人国家也兴起于科瓦雷大陆西部,并与地精王国展开了不那么文明的竞争。直道一万六千年前,伟大的地精达卡尼联合了所有的地精王国,建立起了已知最庞大的地精帝国。
在此期间,大约一万二千年前,矮人们也从极北之地——霜落故地迁徙来到了科瓦雷,并逐渐在铁根山脉一代定居下来,并逐渐建立了自己的国家。
达卡尼的地精帝国在经过了七千余年的统治(期间还击退了精灵的骚扰)之后,到距今约九千年时,疯狂位面瑟瑞奥特运行到了靠近艾伯伦的位置。与巨人们的遭遇类似,疯狂位面的居民,邪恶的达尔吉(Daelkyr)也入侵了科瓦雷大陆。地精帝国和西方的兽人王国进行了数千年的抵抗,直到瑟瑞奥特位面逐渐远离艾伯伦,入侵逐渐终止了。但是战争也令地精们大伤元气。直到五千年前,地精帝国终于分崩离析,地精文明也步巨人文明之后尘,遭到了灭亡。
这一段时期,被称为野兽之年代。
当代(-4,100—至今)
随着地精帝国的消亡,科瓦雷大陆逐渐恢复了各种族间的平衡。矮人、半身人、侏儒以及其他种族逐渐成长为大陆上一支支不可忽视的力量。
从-3,200年开始,龙纹逐渐出现在科瓦雷和艾伦诺大陆的诸种族之间。龙纹帮助各种族拥有了自己独特的力量。从医护龙纹直到探索龙纹,十三个龙纹先后现世。在大约一千五百年前,爆发了龙纹战争,各龙纹家族籍此厘清了各自家族的血统,消灭了变异和混杂的龙纹,并成立了拾贰学会,最后,十二龙纹家族逐渐定型并发展各自领域的生意,至今已成为世界上一股超越国界的、不可忽视的力量。
在三千年前,发源于索隆娜大陆的人类在拉扎尔大君的带领下,穿越怒海,在科瓦雷大陆东岸登陆,建立了第一个人类殖民地。经过了五百年的发展,人类在科瓦雷的五个殖民地逐渐演变为五个各有不同的国家。在前二千年,征服者坎恩建立了坎纳斯国,并最终击垮了残存的地精政权。他接着尝试征服其余的四个国家,但最终遭到了失败。
直到-1022年,迦利法继承了坎纳斯的统治权,并在-1012年开始了统一五国的战争。在-1005年,迦利法与各龙纹家族达成了一项协议,允许他们拥有超脱于国家之外的独立地位,以换取各龙纹家族对战争的支持。
在各龙纹家族的支持下,迦利法最终于-998年统一了五国,并建立了迦利法王国。迦利法的五个子女——塞尔、坎恩(与一千年前的征服者坎恩同名)、瑟雷恩、安黛尔和布雷分别统治五个属国。是年即为YK元年。
在32YK年,五个属国分别以五位统治者的名字命名——塞尔、坎纳斯、瑟雷恩、安黛尔和布雷兰。迦利法国王在40YK年将王位交给了最年长的子嗣塞尔,并在53YK年去世。迦利法王国逐渐定下了不成文的规定,即先王的五个子女及其后裔分别统治五国,而其中最年长者则统治整个迦利法王国。
经过了相对和平的八百年统治,人类的迦利法王国成为了科瓦雷大陆上最强大的王国,连摩洛领的矮人和塔兰塔平原的半身人亦臣服与之。历任国王大兴土木,建立起了联通整个大陆的闪电铁路,以及其他的奇迹。
其中,在802YK年,迦利法王国与龙纹家族合作,在神秘的希恩德瑞克大陆北方建立了贸易城市暴风湾。人类开始探索过去的巨人领土、神秘的希恩德瑞克大陆。
经过了近九百年的和平,直到894YK年,迦利法王国末代国王嘉奥特驾崩。按照传统,应由最大的女儿——统治塞尔的蜜莎安继承王位。但遭到了瑟雷恩的瑟林、坎纳斯的坎埃斯和布鲁兰的沃恩的联合反对。而安黛尔的沃加则支持蜜莎安。终末战争于是爆发。
战争持续了整整一百年。随着五国的彼此征伐,统一的迦利法王国实际上已不复存在。而过去被五国统治的一些弱小种族纷纷起兵,宣布独立。摩洛领的矮人、吉拉哥的侏儒、塔兰塔平原的半身人以及达贡的地精分别在过去人类的领土上建立了自己的国家。而艾伦诺来的精灵也在塞尔的南部建立了自己的精灵国家。
在965YK年,拥有创造龙纹的坎尼斯家族制造出了现代机关人——一种活的拥有思想的构装体,作为雇佣兵参加终末战争。机关人这个全新的种族踏上了世界。
经过了一百年的征战,五国的实力已大受损失。直到四年前,也就是994YK年,塞尔发生了神秘的灾难,整个国家被完全摧毁。没有人知道这场灾难的起因是什么,又是谁制造的。只是塞尔从此被完全从地图上抹去,成为了今天的哀伤故地。
两年之后,996YK年,各参展国签订了王座协定,终止了战争——也正式终止了迦利法王国的存在。条约正式承认了十二个主权国家——安黛尔、布雷兰、瑟雷恩、坎纳斯、塔兰塔平原、吉拉哥、夸巴拉、拉扎尔联邦、摩洛领、艾鲁登原野、达贡和维伦娜的独立。同时,王座协定还命令坎尼斯家族销毁未制成的机关人并不得再制造机关人。而已制成并参加了终末战争的机关人被正式承认为一个有生命的种族。
转载请注明出处51数据库 » cs架构软件升级推送 CS架构指什么