eMule协议规范 附录 A - 消息编码 一般消息编码要点

来源:互联网 发布:java 和maven环境变量 编辑:程序博客网 时间:2024/05/04 15:07

译自 Yoram Kulbak and Danny Bickson 《The eMule Protocol Specification》

翻译:lzcx

QQ:402722857

EMail: lzcx_cn@yahoo.com.cn

供学习用,转载请注明出处

 

6.1 一般消息编码要点
本章描述了在TCP/UDP有效负载中消息编码的一般方法。
 
6.1.1 字节序
所有消息都是用 little-endian 编码,而不是 big-endian, big-endian 是约定的网络字节序。这个很容易解释,事实上客户端/服务器都是基于微软窗口的应用程式,运行在Intel处理器上。
 
6.1.2 消息头
所有的消息有一个6字节的头,头有着下面的结构:
1. 协议 - 一个字节,协议ID - 0xE3是eDonkey,0xC5是eMule
2. 大小 - 4字节消息大小 - 消息大小,以字节为单位,不包含头,例如,如果消息不包含任何有效负载,如6.4.11节中,则消息长度是零。
3. 类型 - 一个字节,类型 - 独一无二的消息ID
 
6.1.3 消息标签
标签类似TLV(类型,长度,值)结构,用来增加可选的数据到eMule消息中。有几种类型的标签,本章中列出了所有的标签。当提及到协议消息里特定的标签时,只有标签类型是指定的,读者应该把本章作为一个参考来确定协议消息的准确的结构。每个标签拥有4个域,在消息中它们并不都是连续的:
 
1.类型 - 1字节整型
2.名称 - 可以是以下之一
l         可变长度字符串
l         1字节整型
3.值 - 可以是以下之一
l         4字节整型
l         4字节浮点数
l         可变长度字符串
4.专用的 - 1字节整型,专用的标签指定者
 
带有整型值的标签叫做整型标签,类似的我们有字符串标签和浮点数标签。字符串标签的类型值是2,整型标签的类型值是3和浮点数标签的类型值是4。当标签被编码来发送时,是按照上面的次序编码,例如,类型,然后名称,最后是值。类型被编码成一个字节。名称被编码成2个字节长度值,可以是字符串名称和整型名称。例如,整型名称0x15编码顺序是0x01 0x00 0x15。
固定的值域(好像整型和浮点数字)正如它们这样写入,字符串值就以相同的长度值方式编码。
注意:标签给出的名称是没有特定的协议意义的,只是易于在以后的协议消息描述中引用。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=621564

原创粉丝点击