概述
在简单网络通信中,通信协议的设计应坚持以下原则:向下兼容、安全、纠错能力、精简、可扩充。
以下是我初步设计的一个通信协议,请大家过目,指正。以方便我完善之。谢谢!!!!
协议格式如下:
4bit | 4bit | 8bit | |||||
主版本 | 副版本 | 子版本 | 模块 | 命令 | |||
标志位(32bit) | |||||||
序号(16bit) | 预定序号(16bit) | ||||||
扩展位(32bit) | |||||||
报头长度 | 数据长度 | CRC校验位(16bit) | |||||
数据字段...... | |||||||
字段说明:
1.主版本/副版本/子版本:标识此数据包所使用通信协议版本信息,用于通信双方统一语言或选择不同的解析代码。
2.模块:可以设置成应用所涉及到的功能模块或信息类型,如:远程桌面、数字白板、服务器控制信息等,再比如:文字、视频、音频、文件等。
3.命令:其实就是通信约定。一般由#define COMM_SEARCH_LINK 0xFF,这样的实现,用于标识通信协议的主体内容
4.标志位:用于以位的形式标识协议内容的解析方式。可由用户自行设计。
5.序号:用于标识,本数据包在整体通信过程中所传递的数据包的序号;
6.预定序号:由通信的另一端给出,说明另一端将要接收的数据库的序号,序号必须与预定序号相同,同时要与另一端保存的预定序号相同,这样做是为了尽可能的保证不被中间人截获,攻击通信双方。
7.扩展位:用于扩展控制信息,在前面1到6项不能完全描述或不方便描述的情况下使用。
8.报头长度/数据长度:就不用说了吧。报头长度是固定的,20Byte。数据长度在每次填充数据时计算。
9.CRC校验位:主要是报文的校验,防止传输错误。
10.数据字段:就不介绍了,是主要的传输内容。
说明:
1.协议最大长度为:一个页面分配单元的长度、磁盘扇区大小或报文最大不分割长度。在这里我比较了一下,4K是最合适的设置,不知道对不对。
优点:减少磁盘读写次数;防止出现内存碎片。
2.协议报头长度为20字节,则数据字段最大长度为:协议最大长度-协议报头长度(20)-数据校验位(2)。
3.加密与解密方式:由发起方向服务器注册公匙,在发起通信时,并保持到通信结束。
4.压缩与解压缩:采用无损压缩方式。对整体进行压缩。
这里有几个地方我正在犹豫,
1.对于加解密操作,是所有数据均加密还是区别对待,像视频,图像,音频等。
2.压缩操作是否要整体,还是只压缩数据字段就够了。
3.以上两个操作对性能的影响是不是很大,可不可以忽略。
4.在通信过程中,协议报文的总体长度很难达到协议最大长度,这个主要是涉及到包的重组与分包传输问题,UDP协议的理论长度是65535,但在不同的网络环境中对IP数据包的最大长度要求又是不一样的。所以在传输过程中,数据包会被系统及所经过的网络设备分包或重组,我所说的就是这个问题。
5.对于存在大量短报文应该怎么处理呀。比如报文内容是消息信息:如果鼠标位置信息。
以上的分析肯定存在不足,还请大家多多帮助,尽可能的完善他。
最后
以上就是激动书包为你收集整理的网络通信中的协议设计的全部内容,希望文章能够帮你解决网络通信中的协议设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复