Linux-协议设计和分析的基本方法?
工作中经常遇到协议的设计,游戏、通信、视频、加密等等,协议设计和分析有什么基本方法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
工作中经常遇到协议的设计,游戏、通信、视频、加密等等,协议设计和分析有什么基本方法吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
关于协议设计和分析一直都都是在工作遇到,说到协议我想在这个网络的时代,没有人可以离开它了,他存在我们生活中的任何角落,只不过我们都是平凡的人,并没有注意到它的存在,可以这么说如果没有协议人类的生活和日常的工作生产都不能进行,如果仔细想想你生活中用到的所有东西,协议已经包含其中。那到第什么协议呢?说的简单一点就是双方达成的共识,以便更好的交流,理论上协议是什么呢?如果学过《信号与系统》的人都知道有个简单的道理,就是信息在经过一个管道的符号集,到另一个符号集时信息不会丢失。
大繁至简任何复杂的事物都有个最简单的本质,网络上的协议也是这样,有个最基本的本质。除去上下层的概念,协议就只剩下通信双方实体的规则。
一般的协议都包含最基本的协议头,不管是物理层、链路层还是网络层,这个头就构成了协议的本质东西。通常协议头要包含一下最基本的三项信息:
双方实体的唯一标示,用来标示通信双方的实体。
类型描述或者是静核描述,标志着静核和内容。
协议静核的长度,用来在萃取静核的内容应用。
其中,前两项是必须要有的没有他们,通信双方的交互根本得不到保证,第三项在不太灵活的通信中可以去掉,而有第二项的类型推出。
协议的丰富性,有静核的多样性体现。
协议头除了以上的三项,还可以加更多的信息(比如控制信息、时间信息等),取决于具体的应用,在这里这部分我不做描述,我只描述本质不变的东西。我想找到这些基本的东西,再去看协议的时候,能够更好的抓住协议的主体进行分析和设计了。
协议设计:
1.借鉴TCP/IP。TCP/IP是一个博大精深的协议设计和实现方案,有很多值得学习和借鉴的东西。为什么要分为“链路层、网络层、传输层、应用层”?各层有哪些协议?各有什么应用背景?
最重要的是TCP、UDP两个协议,两个协议的应用和区别?为什么TCP要设计连接建立的3次握手和连接关闭的4此握手?滑动窗口是什么概念?
2.设计自己的协议。对于传输速度要求很高,而且传输相对稳定,这时需要自己实现协议栈,可以参考 @如何加快两端之间的文件传输速度?。或者使用TTCP,即TCP事务协议,TCPIP为了实现满足上述要求设计的协议。
3.安全性协议。不光是网络上传输数据的协议TCP/IP,加密认证也需要协议。比如如何实现安全的密钥交换?怎么抵御密钥交换协议的中间人攻击?如何实现双向认证?和好的一个例子是https协议,需要双向认证,但也会遭到中间人攻击。
协议分析:
协议分析主要应用在对网络数据的解析和还原,比如公安部门使用的还原网民的数据、分析游戏通信的协议。
可以使用WireShare、Ethereal来抓包分析,主要是分析传输层(TCP、UDP)和应用层协议(HTTP、FTP等)。
难点是一般数据通信都是加过密的,所以需要对数据进行解密。加密不强的数据,直接凭经验可以识别出,拿到解密的网站解密。对于高强度加密,比如对称和非对称,需要获得密钥。若能拿到软件,可以进行逆向分析,找到"拼包的地方"(加密之前)。可以使用OD,在内存中查找要发送的数据,对其下内存访问断点,跟踪在哪几个地方会断下,就可以找到"拼包的地方",之后都可以获得加密之前的明文数据。
问题比较大,设计好的协议需要考虑这些方面:
a. 安全性
b. 开发速度
c. 可靠性
d. 易维护性
e. 扩展性
f. 实时性
g. 兼容性 (好像知道的特性都来了)
协议设计通俗点来说先分清楚几点:
1. 文本/二进制。文本协议能自解析,维护起来非常容易;二进制效率高,但是维护起来挺麻烦,兼容性也不容易做。
2. 性能优先/开发速度优先。定制的协议相对来说肯定性能最好,如果开发速度优先,直接以比较成熟的协议为基础,比如protobuf, xmlrpc