《FGCP草案》(2010-04-16修改)



低字节
0 15   16 31
高字节
IP协议
4位
版本
4位首部
长度
8位服务类型
(TOS)
16位总长度(字节数)
16位标识 3位
标志
13位片偏移
8位生存时间 8位协议 16位首部检验和
32位源IP地址
32位目的IP地址
20字节
TCP协议
16位源端口号 16位目的端口号
32位序号
32位确认序号
4位首部
长度
保留6位 U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
16位窗口大小
16位检验和 16位紧急指针
20字节
FGCP协议
16位总长度(字节数) M
A
P
- - - M
I
N
C
Y
T
C
M
P
C
R
C
- - - - S
T

D
T

F
R
D
I
N
X
8位首部长度
(字节数)
8位预留字段
(字节数)
4位事件
规则
12位事件类型
8个字节


从上面图表中我们可以清楚地看到处于IP层上的各层协议结构,从协议占的字节数来看,基于FGCP协议的数据包最少是
20 + 20 + 8 = 48个字节.

FGCP协议设计遵从的四个基本点:
  一、占用最少字节数,减少网络传送;
  二、提供灵活扩展性,满足使用者需求;
  三、依据游戏交互特点设计;
  四、依据Flash特点设计;

略过已知的IP和TCP协议层,我们来看下FGCP各字段的作用:
16位总长度 表达整个数据包的长度,利用总长度和首部长度字段就可以计算出数据包中内容的起始地址和长度,最高数据包字节数为2 ^ 16 - 1 = 65535个字节
16位标志位

定制数据包扩展的内容,

目前已经定制的标志位有
MAP:映射标志,当该标志位为1时,16位标志位中剩下的低15位数值(2 ^ 15 = 32768)将作为映射编号(用于自定义数据解析)
MIN:最小长度标志(当此标志位置1时,如果数据包未达到最小长度,则填充数据0直到达到最小长度,填充的字节数将写入预留字段中)
CYT:加密标志(当此标志位置1时,包体数据将被加密)
CMP:压缩标志(当此标志位置1时,包体数据将被压缩)
CRC:检验标志(当此标志位置1时,检验码将被包含在首部中)

INX:转发标志(当此标志位置1时,发送方索引将被包含在首部中)
FRD:转发标志(当此标志位置1时,转发对象索引将被包含在首部中)
DT :数据类型标志(当此标志位置1时,包体数据类型将被包含在首部中)
ST :服务器时间标志(当此标志位置1时,服务器时间将被包含在首部中)

8位首部长度 表示数据包首部的长度,最高首部字节数为2 ^ 8 - 1 = 256个字节
8位预留字段 预留字段
4位事件规则 发送事件的规则(如普通,私有,紧急)
12位事件类型 发送事件的类型(最多表示2 ^ 12 = 4096条命令)