首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

客户端和服务器的通信,protobuf和协议格式

游戏服务器和客户端的通信有很多种形式,有的用http,有的用websocket,不过最常见的还是socket服务器,socket 服务器在游戏中是最常见的,至于为什么和怎么创建,等以后再说,今天先来聊聊服务器和客户端交谈的协议...协议的定义是服务端和客户端沟通的结果,形成一致的数据格式,这样大家才好解析,知道对方在说什么,在做什么。 在最初的时候有的人自定义格式,虽然紧凑,但是可能会存在一些问题,不够稳定。...有符号的整型值。编码时比通常的int32高效。 sint64 long 使用可变长编码方式。有符号的整型值。编码时比通常的int64高效。...: len + 加密的 [headMsgId + proto二进制数据] 常用的加密算法:AES和rsa,DES,选择一个简单的效率高的,如果游戏大火了可以换一个稍微复杂的加密算法,小事情,不重要 客户端解析出根据长度读出数据长度进行解析...,服务端同样的规则。客户端和服务器通信就是这么简单。

1.7K10

Go语言基于Socket编写服务器端与客户端通信的实例

中自带的net包即可很方便的完成连接等操作~ 在这里,给出一个最最基础的基于Socket的Server的写法: package main import ( "fmt" "...能够响应来自不同Client的请求,我们只要在Server端的代码的main入口中, 在 handleConnection(conn net.Conn) 这句代码的前面加上一个 go,就可以让服务器并发处理不同的...唔,答案就是这篇文章的主题啦:在Server和Client交互的时候,加入一个通讯协议(protocol),让二者的交互通过这个协议进行封装,从而使Server能够判断收到的信息是否为完整的一段。...(也就是解决分包的问题) 因为主要目的是为了让Server能判断客户端发来的信息是否完整,因此整个协议的核心思路并不是很复杂: 协议的核心就是设计一个头部(headers),在Client...下面是协议部分的代码,主要分为数据的封装(Enpack)和解析(Depack)两个部分,其中Enpack用于Client端将传给服务器的数据封装,而Depack是Server用来解析数据,其中Const

4.9K71
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    转--Go语言基于Socket编写服务器端与客户端通信的实例

    中自带的net包即可很方便的完成连接等操作~ 在这里,给出一个最最基础的基于Socket的Server的写法: 代码如下: package main import ( "fmt"...能够响应来自不同Client的请求,我们只要在Server端的代码的main入口中, 在 handleConnection(conn net.Conn) 这句代码的前面加上一个 go,就可以让服务器并发处理不同的...唔,答案就是这篇文章的主题啦:在Server和Client交互的时候,加入一个通讯协议(protocol),让二者的交互通过这个协议进行封装,从而使Server能够判断收到的信息是否为完整的一段。...(也就是解决分包的问题) 因为主要目的是为了让Server能判断客户端发来的信息是否完整,因此整个协议的核心思路并不是很复杂: 协议的核心就是设计一个头部(headers),在Client...下面是协议部分的代码,主要分为数据的封装(Enpack)和解析(Depack)两个部分,其中Enpack用于Client端将传给服务器的数据封装,而Depack是Server用来解析数据,其中Const

    1.2K50

    你还没有迁移到 HTTPS 吗?

    ,并为浏览器和服务器之间的通信加密。...2、WEB 服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。 3、客户端的浏览器与 WEB 服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级。...4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。 5、WEB 服务器利用自己的私钥解密出会话密钥。...6、WEB 服务器利用会话密钥加密与客户端之间的通信。 2、不迁移能行吗? 如果网站仅做信息展示,不传输敏感信息,迁移不迁移都影响不大。...为了提高 HTTPS 的安全系数和性能,你还可以强制 Nginx 只支持 TLS1.2 以上的协议,打开 Session Ticket 会话复用: ssl_protocols

    69120

    一种新型的TLS 1.2降级攻击被发现

    本文主要介绍降级攻击的机制,以及应对措施。 TLS1.2签名哈希算法降级 过去,SSL/TLS协议中曾经出现漏洞,使攻击者强制客户端/服务器使用弱SSL/TLS协议版本和加密套件。...但是SLOTH不同:它迫使客户端/服务器使用弱哈希算法,降低应对攻击的计算能力。主要有两种可能的降级攻击方式: 1、客户端:发生在客户端允许使用服务器端的弱哈希算法。...TLS 1.2在ServerKeyExchange报文中引入了一个新的字段SignatureAndHashAlgorithm,允许服务器指定客户端使用的签名和哈希算法,同样的,也允许攻击者强制客户端使用弱哈希算法...下面的过程展示了降级攻击的发生过程: 在握手的初期,客户端将Client Hello数据包发生给服务器;数据包中声明了服务器可以使用的签名和加密算法。...同时,如果使用的是第三方通信设备,那么应该检查当前配置和供应商更新信息。

    2.9K100

    HTTPS 协议简述

    HTTPS流程 ---- 第一次握手: • Client Hello:是客户端告诉服务端,它支持什么样的加密协议版本,比如 TLS1.2,使用什么样的加密套件,比如最常见的RSA,同时还给出一个客户端随机数...第二次握手: • Server Hello:服务端告诉客户端,服务器随机数 + 服务器证书 + 确定的加密协议版本(比如就是TLS1.2)。...• Encrypted Handshake Message:客户端会把迄今为止的通信数据内容生成一个摘要,用”会话秘钥“加密一下,发给服务器做校验,此时客户端这边的握手流程就结束了,因此也叫Finished...此时服务器告诉客户端,后面会用这个”会话秘钥”进行加密通信。...对称加密还是非对称加密 ---- 为什么不都用非对称加密呢? 因为非对称加密慢,对称加密相对来说快一些。 第二次握手里的服务器证书是什么?怎么从里面取出公钥?

    41840

    HTTPS 协议简述

    HTTPS流程 ---- 第一次握手: • Client Hello:是客户端告诉服务端,它支持什么样的加密协议版本,比如 TLS1.2,使用什么样的加密套件,比如最常见的RSA,同时还给出一个客户端随机数...第二次握手: • Server Hello:服务端告诉客户端,服务器随机数 + 服务器证书 + 确定的加密协议版本(比如就是TLS1.2)。...• Encrypted Handshake Message:客户端会把迄今为止的通信数据内容生成一个摘要,用"会话秘钥"加密一下,发给服务器做校验,此时客户端这边的握手流程就结束了,因此也叫Finished...此时服务器告诉客户端,后面会用这个"会话秘钥"进行加密通信。...对称加密还是非对称加密 ---- 为什么不都用非对称加密呢? 因为非对称加密慢,对称加密相对来说快一些。 第二次握手里的服务器证书是什么?怎么从里面取出公钥?

    48860

    基于 HTML5 WebGL 的 3D 服务器与客户端的通信

    这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子。...添加的方式是这样的:为了最外层组件加载填充满窗口的方便性,HT 的所有组件都有 addToDOM 函数,其实现逻辑如下,其中 iv 是 invalidate 的简写: addToDOM = function...*data.a('flow.direction'))); } } }; dm.addScheduleTask(flowTask);//添加flowTask动画 以下是界面上出现的所有的服务器以及客户端的节点的声明...300, -400], [200, 20, 150], 'H3C 核心交换机', 'models/机房/机柜相关/机柜设备6.json');//交换机 //五台不同作用的服务器 service1 =...); service5 = createNode([400, 140, 0], [100, 260, 100], '受理', 'models/机房/机柜相关/机柜2.json'); //创建交换机与服务器之间的连线

    1.3K20

    真正“搞”懂HTTPS协议18之TLS特性解析

    在早期的试验中发现,一旦变更了记录头字段里的版本号,也就是由 0x303(TLS1.2)改为 0x304(TLS1.3)的话,大量的代理服务器、网关都无法正确处理,最终导致 TLS 握手失败。   ...算法精简后带来了一个意料之中的好处:原来众多的算法、参数组合导致密码套件非常复杂,难以选择,而现在的 TLS1.3 里只有 5 个套件,无论是客户端还是服务器都不会再犯“选择困难症”了。    ...而 ECDHE 算法在每次握手时都会生成一对临时的公钥和私钥,每次通信的密钥对都是不同的,也就是“一次一密”,即使黑客花大力气破解了这一次的会话密钥,也只是这次通信被攻击,之前的历史消息不会受到影响,仍然是安全的...在第一次传递记录的时候,就把支持的版本号吖、key_share等等传递给了服务器,服务器就可以根据这些字段处理数据返回给客户端,换句话说,其实就是打个提前量,减少请求次数。   ...在算出主密钥后,服务器立刻发出“Change Cipher Spec”消息,比 TLS1.2 提早进入加密通信,后面的证书等就都是加密的了,减少了握手时的明文信息泄露。

    1.5K20

    C# 解决“因为算法不同,客户端和服务器无法通信”的问题

    在调试过程中为增添返回调试信息属性,重新对.net FrameWorkd 类库进行编译并部署,调试一切正常,但再次覆盖的时候,调用显示为 “ 因为算法不同,客户端和服务器无法通信。”...开发工具:VS2019 C# 解决 System.Net.ServicePointManager.SecurityProtocol 属性可选择安全套接字层 (SSL) 或传输层安全 (TLS) 协议的版本...,可能是由于协议版本不匹配造成的此原因,通过在Page_Load 服务器事件添加如下语句,问题解决: void Page_Load(Object sender, EventArgs e) {...API URL调用 PostXmlAndCertToUrl 实现了携带安全证书访问 API 的能力,说明见下表: 序号 参数名 类型 说明 1 url string 要访问的 API URL 地址 2...post_data string 要 POST 的指定规则内容 3 cert string API 安全证书存放存储的全路径地址 4 password string 证书密码 实现代码如下: public

    9610

    HTTP面试题 - HTTPS优化

    PS:本文内容较长,不建议碎片化阅读,建议“阅读原文”。...但是因为 OCSP 说白了又是回到过去,也要多出一次网络请求的消耗,而且还依赖于 CA 服务器本身性能是否能及时响应,如果 CA 服务器繁忙的阶段并且如果还是校验跨地域的证书,那响应延迟是等不起的。...会话i密钥获取过程 客户端发送支持的参数; 服务器选择参数,并将证书与 (EC)DHE 密钥交换的前半部分一起发送; 客户端发送 (EC)DHE 交换的后半部分,计算会话密钥并切换到加密通信; 服务器计算会话密钥并切换到加密通信...当客户端支持会话票证时,服务器将使用只有服务器拥有的密钥(会话票证加密密钥 (STEK))加密会话密钥,并将其发送到客户端。客户端收到之后需要保存好会话票证以及如何还原会话密钥的必要参数。...这一块可能比较绕,不是很好理解,这里举一个不恰当的例子。 角色:老师和学生。

    66240

    HTTP - TLS1.3 初次解读

    Handshake:协议负责协商使用的TLS版本、加密算法、哈希算法、密钥材料和其他与通信过程有关的信息,对服务器进行身份认证,对客户端进行可选的身份认证,最后对整个握手阶段信息进行完整性校验以防范中间人攻击...和TLS1.2不同的是TLS1.3 删除了变更密码规范协议(Change Cipher Spec Protocol) ,密钥的使用和改变随着服务器和客户端状态的改变自然进行。...RFC规定如果客户端选择 psk_key_exchange_modes ,但是并没有在扩展字段中传递 pre_shared_key(或者模式指定为psk_ke),则服务器应该立刻停止握手步骤,确保服务器不会使用客户端并没有指定的密钥交换而出现信息泄漏的风险...依然是对于TLS1.2的扩展,这里举两个新增的例子:unrecognized_name(112):当没有识别出服务器时,由服务器通过“server_name”扩展名发送给客户端提供的名称(参考 RFC6066...,服务端会立马返回Change Cipher Spec”消息告知后面的内容都是密文传输,比 TLS1.2 提早进入加密通信这意味着后面的证书等信息都是加密的了,减少了握手时的明文信息泄露。

    3.6K10

    Go语言基于Socket编写服务器端与客户端通信的实例

    中自带的net包即可很方便的完成连接等操作~ 在这里,给出一个最最基础的基于Socket的Server的写法: package main import ( "fmt" "net...能够响应来自不同Client的请求,我们只要在Server端的代码的main入口中, 在 handleConnection(conn net.Conn) 这句代码的前面加上一个 go,就可以让服务器并发处理不同的...唔,答案就是这篇文章的主题啦:在Server和Client交互的时候,加入一个通讯协议(protocol),让二者的交互通过这个协议进行封装,从而使Server能够判断收到的信息是否为完整的一段。...(也就是解决分包的问题) 因为主要目的是为了让Server能判断客户端发来的信息是否完整,因此整个协议的核心思路并不是很复杂: 协议的核心就是设计一个头部(headers),在Client...下面是协议部分的代码,主要分为数据的封装(Enpack)和解析(Depack)两个部分,其中Enpack用于Client端将传给服务器的数据封装,而Depack是Server用来解析数据,其中Const

    1.4K50

    Go语言基于Socket编写服务器端与客户端通信的实例

    中自带的net包即可很方便的完成连接等操作~ 在这里,给出一个最最基础的基于Socket的Server的写法: package main import ( "fmt" "...能够响应来自不同Client的请求,我们只要在Server端的代码的main入口中, 在 handleConnection(conn net.Conn) 这句代码的前面加上一个 go,就可以让服务器并发处理不同的...唔,答案就是这篇文章的主题啦:在Server和Client交互的时候,加入一个通讯协议(protocol),让二者的交互通过这个协议进行封装,从而使Server能够判断收到的信息是否为完整的一段。...(也就是解决分包的问题) 因为主要目的是为了让Server能判断客户端发来的信息是否完整,因此整个协议的核心思路并不是很复杂: 协议的核心就是设计一个头部(headers),在Client...下面是协议部分的代码,主要分为数据的封装(Enpack)和解析(Depack)两个部分,其中Enpack用于Client端将传给服务器的数据封装,而Depack是Server用来解析数据,其中Const

    2.2K40

    常见弱密钥以及修复建议

    DHE需要在服务端TLS协议中启用TLS1.2,推荐配置:TLSv1 TLSv1.1 TLSv1.2;服务器只使用SSL3作为最好的协议ssl3 存在POODLE漏洞,并且最新浏览器的兼容性较差,不支持最新的安全特性...尽管许多程序使用SSLv3作为后备,但它已经到了应禁用的地步-因为许多客户端可能被迫使用SSLv3。强制客户端进入SSLv3会增加发生攻击的机会。...网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。HSTS可以用来抵御SSL剥离攻击。...HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。...服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议(HTTP)响应头中包含Strict-Transport-Security字段。

    11500

    通过CURL请求示例详解HTTPS协议

    基于HTTPS通信是当前互联网最通用便捷的通信方式,简单理解来看可以视为HTTP协议 + SSL/TLS协议,通过一个curl的示例阐述一下HTTPS协议。...curl第一步请求如下 服务端响应SeverHello 服务器的回应包含以下内容: 1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。...还有一种形式是服务端会校验客户端的证书,比如金融类一般金融机构以前网银key即包含一张客户端证书 客户端回应 一个随机数。该随机数用服务器公钥加密,防止被窃听。...编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。...此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。 服务器的最后回应 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

    2.2K100

    【HTTP】HTTPS TLS 1.2

    这样也就实现了双保险,但是这样的双保险还是存在风险,我们可以看看下面这个攻击过程:客户端向服务端索取公钥进行通信,此时黑客从中间插手,伪造一对公钥和私钥,然后继续向服务器获取公钥。...服务端使用私钥解开之后,得知对称加密算法,然后开始和黑客进行正常通信。黑客鸠占鹊巢,成功破解,这时候黑客既可以利用伪造的身份从服务器获取信息,也能伪装成服务器向客户端发送一些虚假信息,这样实在是危险。...无论如何认证,CA 认证最终总会走 ROOT 根证书,ROOT也可以叫做自签名证书,这个是需要强制相信的, 否则自证明的体系是走不下去的。...TLS1.2 协议握手流程#HTTPS通信步骤这里有必要强调是TLS1.2协议握手流程,因为TLS1.3协议对于很多细节和内容进行了简化,这些内容将在后续内容继续介绍。...注意ACK是可以携带数据的,但是如果不携带数据则不消耗序列号。最后一步:当服务器收到客户端的确认,也进入已连接状态。

    1.2K30

    HTTPS 原理浅析及其在 Android 中的使用

    1.HTTP协议的不足   HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,存在的问题如下: 通信使用明文(不加密),内容可能会被窃听; 不验证通信方的身份,有可能遭遇伪装...(2) 不验证通信方的身份可能遭遇伪装   在HTTP协议通信时,由于不存在确认通信方的处理步骤,因此任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应。...因此不确认通信方,存在以下隐患: 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。...有可能是已伪装的 Web 服务器; 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端; 无法确定正在通信的对方是否具备访问权限。...有两种解决方案: (1) 重新生成服务器的证书,用真实的域名信息; (2) 自定义HostnameVerifier,在握手期间,如果URL的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接

    3.8K40

    截获TLS密钥——Windows Schannel

    对于不同的方向(客户端到服务器和服务器到客户端)有不同的密钥。与服务器TLS证书密钥等长期密钥相对,这些密钥称为临时密钥以强调它们是短期的。...在TLS1.2中,开始时服务器和客户端一起生产一些关键素材,称之为Pre-Master Secret,再扩充到Master Secret,然后依次生成一组用于加密和认证的密钥和IV——write keys...因此后来提出了TLS session tickets(rfc5077),服务器向客户端发送一个加密的会话状态,使用只有服务器知道的密钥进行加密,然后客户端在下一个连接上发送回来,并由服务器解密。...你至少需要四个secrets: 客户端和服务器握手secret 客户端和服务器通信secret 一个keylog文件示例: CLIENT_HANDSHAKE_TRAFFIC_SECRET 服务器接受非PFS加密套件的连接时并不会调用SslGenerateMasterKey函数,用于9中的ncrypt!NCryptDeriveKey也不例外。

    4.2K10
    领券