1.dubbo头部协议
1.1.协议图
image1.2.协议说明
- 1.2.1 描述:
dubbo的协议头部是16字节的定长数据 - 1.2.2 wireshark抓包: 1.png
-
2字节的Magic 【da bb】 其实就是标志改协议就是dubbo协议
-
1个字节的消息标志位【c2】其二进制的表示 1100 0010 从左到右解释如下
2.1 左1位 表示请求/响应 1/0
2.2 左2位 表示双向/单向 1/0 (意思就是请求是否需要返回值,有些请求是不需返回值)
2.3 左3位 表示心跳/正常 1/0
2.4 左4~8位 0 0010 表示使用的是Hessian2序列化协议 dubbo序列化0 0001、fastjson序列化0 0110、java序列化0 0011 - 1个字节的消息标志位【00】只有响应的消息才会设置这个值,20表示响应成功 下图是响应数据抓包 2.png
- 8个字节的消息ID 3.png
-
4个字节的数据长度【00 00 01 9e】= 414
-
剩下的【05 32 2e....一直到最后】都是实际序列化的内容。
2.dubbo 包体协议
2.1.协议说明
- 【05 32 2e 35 2e 32】【05】 表示【32 2e 35 2e 32】<<==>>[2.5.2] 的长度为5 (dubbo版本) 4.png
-
【30 3c ...63 65】【30】 表示标志位 【3c】表示 【63 6f ... 65】<<==>>[com.xxx.xxx.xxx.api.xxx.service.XXXService] 的长度60 (类路径)
5.png
-
-
【05 30 2e 30 2e 30】【05】 表示【30 2e 30 2e 30】<<==>>[0.0.0] 的长度为5 (协议版本)
6.png
-
-
【0f 63 68 .. 65 77】【0f】 表示【30 63 68 .. 65 77】<<==>>[checkXXXNew] 的长度为15 (类方法名称)
7.png
-
-
【30 22 4c...67 3b】【30】 表示标志位 【22】表示 【4c...67 3b】<<==>>[Ljava/lang/Long;Ljava/lang/String;] 的长度34 (参数类型)
8.png
-
-
【59 01 ae 6c d7】【59】 表示实际是long类型但是用int表示第一位参数 【01 ae 6c d7】<<==>>[28208343] (参数值)
9.png
-
-
【10 73 ... 64 64】【10】 表示 【73 ... 64 64】<<==>>[stock.income.add] 的长度16 (参数值)
10.png
-
-
【48 04 ... 30 50】【48】 表示 map 属性 (参数值)
11.png
12.png
-
网友评论