‘壹’ 客户端如何与服务器进行通信
客户端与服务器进行通信的主要方式是通过网络协议来传输数据。这些协议定义了一系列的规则和标准,确保信息能够在不同的计算机系统之间准确、高效地交换。
在网络通信中,客户端通常是用户所使用的设备或软件,它发起与服务器的连接请求以获取或发送数据。服务器则是专门用于处理这些请求并提供相应服务的计算机系统。客户端与服务器之间的通信可以基于多种协议,其中最常见的是传输控制协议/互联网协议(TCP/IP),它提供了可靠的、面向连接的通信服务。
当客户端需要与服务器通信时,它会首先通过特定的端口向服务器发送连接请求。一旦连接建立,客户端就可以通过该连接发送和接收数据。这些数据可以是文本、图像、视频或任何其他类型的信息,具体取决于客户端和服务器所支持的应用层协议。例如,当我们在浏览器中访问一个网页时,客户端(浏览器)会向服务器发送HTTP请求,服务器则会返回相应的HTML文档,浏览器再将其解析并展示给用户。
此外,还有一些其他的通信协议和方式可用于客户端与服务器之间的交互。例如,WebSocket协议允许在客户端和服务器之间建立持久的连接,以便实时地交换数据。这对于需要实时更新的应用程序(如在线聊天或实时数据监控)非常有用。另外,随着物联网和移动互联网的发展,移动客户端与服务器之间的通信也变得越来越重要,这通常涉及到轻量级的通信协议和优化的数据传输方式以适应移动设备的特性和限制。
总之,客户端与服务器之间的通信是通过网络协议来实现的,这些协议确保了数据能够在不同的计算机系统之间准确、高效地传输。具体的通信方式和协议选择取决于应用程序的需求和网络环境的特点。
‘贰’ 网络游戏客户端和服务器之间数据怎么交互的
最简单的模式就是,
客户端接收键盘,鼠标等的消息,然后发送个服务器。
服务器收到这些消息后,发送给其他(指定或者所有的)客户端
就像你在WEB聊天室聊天一样。首先键盘输入了一大堆文字。然后按下“递交”按钮,于是客户端收集你填写的那些文字内容,然后发送给服务器。(也许里面有些色情暴力的字眼)
服务器在接收的这些消息后,发送给其他用户。(服务器可能和谐掉那些色情暴力的字眼,变成了XXOO)
网络游戏的客户端和服务器也是一样的道理
客户端纪录所有的消息指令,一般来说,如果该消息指令可能影响到其他人的,或者需要被其他人看到,这个消息就会需要被发送到服务器。
服务器处理这些消息进行处理,发送给其他相关的客户端。
直白点来说,服务器端与客户端分别处理哪些事情?你是老板,你说了算。
‘叁’ https交互过程
在这里整理一下最近这两天整理的https的相关知识。
大家都知道要使用https,需要在网站的服务器上配置https证书(一般是nginx,或者tomcat),证书可以使用自己生成,也可以向专门的https证书提供商进行购买。这两种的区别是自己生成的证书是不被浏览器信任的,所以当访问的时候回提示不安全的网站,需要点击信任之后才能继续访问
自己生成的
而购买的https证书会提示安全
DV,OV
EV
这是因为浏览器中预置了一些https证书提供商的证书,在浏览器获取到服务器的https证书进行验证的时候就知道这个https证书是可信的;而自己生成的证书,浏览器获取到之后无法进行验证是否可信,所以就给出不安全的提示。
下面对具体的一些知识点进行介绍
1. 什么是https
https简单的说就是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,为了安全传输敏感数据,网景公司设计了SSL(Secure Socket Layer),在http的基础上添加了一个安全传输层,对所有的数据都加密后再进行传输,客户端和服务器端收到加密数据后按照之前约定好的秘钥解密。
2. 加密和解密
Https的发展和密码学的发展是分不开的。大家应该知道加密方式可以大体分为对称加密和非对称加密(反正我就知道这两种)
对称加密,就是加密和解密都是用同一个秘钥,这种方式优点就是速度快,缺点就是在管理和分配秘钥的时候不安全。
非对称加密算法,非对称加密有一个秘钥对,叫做公钥和私钥,私钥自己持有,公钥可以公开的发送给使用的人。使用公钥进行加密的信息,只有和其配对的私钥可以解开。目前常见的非对称加密算法是RSA,非对称的加密算法的优点是安全,因为他不需要把私钥暴露出去。
在正式的使用场景中一般都是对称加密和非对称加密结合使用,使用非对称加密完成秘钥的传递,然后使用对称秘钥进行数据加密和解密
3. https证书的申请流程
1 在服务器上生成CSR文件(证书申请文件,内容包括证书公钥、使用的Hash算法、申请的域名、公司名称、职位等信息)
可以使用命令在服务器上生成;也可以使用线上的工具进行生成,线上的工具会把公钥加入到CSR文件中,并同时生成私钥。
CSR文件内容
2 把CSR文件和其他可能的证件上传到CA认证机构,CA机构收到证书申请之后,使用申请中的Hash算法,对部分内容进行摘要,然后使用CA机构自己的私钥对这段摘要信息进行签名,
CA机构进行签名
3 然后CA机构把签名过的证书通过邮件形式发送到申请者手中。
4 申请者收到证书之后部署到自己的web服务器中。下面会在写一篇关于部署的文章
当然这是不通过CA代理机构进行申请的流程,现在网上有好多CA的代理机构,像腾讯云,阿里云都可以申请https证书,流程都差不多。
阿里云申请证书流程
4. 客户端(浏览器)和服务器端交互流程
客户端服务端交互
client Hello,客户端(通常是浏览器)先向服务器发出加密通信的请求
(1) 支持的协议版本,比如TLS 1.0版。
(2) 一个客户端生成的随机数 random1,稍后用于生成"对话密钥"。
(3) 支持的加密方法,比如RSA公钥加密。
(4) 支持的压缩方法。
服务器收到请求,然后响应 (server Hello)
(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数random2,稍后用于生成"对话密钥"。
(3) 确认使用的加密方法,比如RSA公钥加密。
(4) 服务器证书。
证书内容
证书内容
客户端收到证书之后会首先会进行验证
验证流程
我们知道CA机构在签发证书的时候,都会使用自己的私钥对证书进行签名
证书里的签名算法字段 sha256RSA 表示,CA机构使用sha256对证书进行摘要,然后使用RSA算法对摘要进行私钥签名,而我们也知道RSA算法中,使用私钥签名之后,只有公钥才能进行验签。
如果我们使用的是购买的证书,那么很有可能,颁发这个证书的CA机构的公钥已经预置在操作系统中。这样浏览器就可以使用CA机构的公钥对服务器的证书进行验签。确定这个证书是不是由正规的CA机构颁发的。验签之后得到CA机构使用sha256得到的证书摘要,然后客户端再使用sha256对证书内容进行一次摘要,如果得到的值和验签之后得到的摘要值相同,则表示证书没有被修改过。
如果验证通过,就会显示上面的安全字样,如果服务器购买的证书是更高级的EV类型,就会显示出购买证书的时候提供的企业名称。如果没有验证通过,就会显示不安全的提示。
生成随机数
验证通过之后,客户端会生成一个随机数pre-master secret,然后使用证书中的公钥进行加密,然后传递给服务器端
PreMaster secret
PreMaster Secret是在客户端使用RSA或者Diffie-Hellman等加密算法生成的。它将用来跟服务端和客户端在Hello阶段产生的随机数结合在一起生成 Master Secret。在客户端使用服务端的公钥对PreMaster Secret进行加密之后传送给服务端,服务端将使用私钥进行解密得到PreMaster secret。也就是说服务端和客户端都有一份相同的PreMaster secret和随机数。
PreMaster secret前两个字节是TLS的版本号,这是一个比较重要的用来核对握手数据的版本号,因为在Client Hello阶段,客户端会发送一份加密套件列表和当前支持的SSL/TLS的版本号给服务端,而且是使用明文传送的,如果握手的数据包被破解之后,攻击者很有可能串改数据包,选择一个安全性较低的加密套件和版本给服务端,从而对数据进行破解。所以,服务端需要对密文中解密出来对的PreMaster版本号跟之前Client Hello阶段的版本号进行对比,如果版本号变低,则说明被串改,则立即停止发送任何消息。
pre-master secret
服务器收到使用公钥加密的内容,在服务器端使用私钥解密之后获得随机数pre-master secret,然后根据radom1、radom2、pre-master secret通过一定的算法得出session Key和MAC算法秘钥,作为后面交互过程中使用对称秘钥。同时客户端也会使用radom1、radom2、pre-master secret,和同样的算法生成session Key和MAC算法的秘钥。
生成session Key的过程中会用到PRF(Pseudorandom Function伪随机方法)来生成一个key_block,然后再使用key_block,生成后面使用的秘钥。
key_block = PRF(SecurityParameters.master_secret,"key expansion",SecurityParameters.server_random +SecurityParameters.client_random);
PRF是在规范中约定的伪随机函数
在信息交互过程中用到的秘钥有6个分别是。客户端和服务器端分别使用相同的算法生成。
秘钥名称秘钥作用
client_write_MAC_key[SecurityParameters.mac_key_length]客户端发送数据使用的摘要MAC算法
server_write_MAC_key[SecurityParameters.mac_key_length]服务端发送数据使用摘要MAC算法
client_write_key[SecurityParameters.enc_key_length]客户端数据加密,服务端解密
server_write_key[SecurityParameters.enc_key_length]服务端加密,客户端解密
client_write_IV[SecurityParameters.fixed_iv_length]初始化向量,运用于分组对称加密
server_write_IV[SecurityParameters.fixed_iv_length]初始化向量,运用于分组对称加密
然后再后续的交互中就使用session Key和MAC算法的秘钥对传输的内容进行加密和解密。
具体的步骤是先使用MAC秘钥对内容进行摘要,然后把摘要放在内容的后面使用sessionKey再进行加密。对于客户端发送的数据,服务器端收到之后,需要先使用client_write_key进行解密,然后使用client_write_MAC_key对数据完整性进行验证。服务器端发送的数据,客户端会使用server_write_key和server_write_MAC_key进行相同的操作。
链接:https://www.jianshu.com/p/b0b6b88fe9fe
‘肆’ 如何实现客户端与服务器的交互
C/S模式和B/S各有其有点也各有其缺点,B/S模式在开发中需要考虑数据如何从客户端提交到服务器端,数据又如何返回到客户端,这些是B/S模式所特有的,在去年之前,开发B/S模式的程序,我都是利用form来交互数据,当我看到XML之后,发现XML是个好冬冬,有很多优点,有好的东西当然不能独享啦,想当年为了实现XML交互数据,几乎把网络翻了个遍。咚,一块砖头上来了。呵呵,废话少说,下面我们就进入正题。
B/S模式分为服务器端和客户端,客户端接受用户的请求,客户端向应用服务提出请求,应用服务从数据库服务中获得数据,应用服务将数据进行计算并将结果提交给客户端,客户端将结果呈现给用户。这样,我们就看到了数据从客户到服务器,经过服务器的处理再返回到客户端,由客户端软件(如IE)显示结果。
(以ASP教本语言为例,其它的语言一样哈。)
1.Form方式
Form方式是最基本的向服务器提交数据的方式。
test.asp文件代码:
<%@ Language=VBScript %>
<%
Response.Expires=-1
Response.CharSet="UTF-8"
Session.CodePage="65001"
%>
<form name="frmTest" id="frmTest" action="test.asp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if
‘伍’ android客户端和服务器端怎么交互
android客户端和服务器端是基于IntentService的,具体如下:
后台使用简单的servlet,支持GET或POST。这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功。
然后在安卓的ADT上创建一个安卓项目,建立两个Activity,分别作为登录界面和登录成功界面。
HTTP的访问公共类,用于处理GET和POST请求。
IntentService服务,用于在后台以队列方式处理耗时操作。
在AndroidManifest.xml中注册IntentService。注意uses-permission节点,为程序开启访问网络的权限。
登陆界面处理,注意按钮监听事件中,使用Intent将要传递的值传给service。接收广播类中,同样使用Intent将要传递的值传给下一个Activity。在onCreate()中,动态注册接收广播类的实例receiver。在接收广播类中,不要使用完毕后忘记注销接收器,否则会报一个Are you missing a call to unregisterReceiver()? 的异常。
‘陆’ 客户端与服务器交互方式有几种
客户端与服务器交互方式一般 有socket和http两种方式
socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。Socket处于网络协议的传输层。
http协议传输的主要有http协议和基于http协议的Soap协议(web service),常见的方式是 http 的post 和get 请求,web 服务。