GRE报文格式
GRE报文封装格式
+-------------------------------------+
| Payload Packet | Passenger Protocol
+-------------------------------------+
| GRE Header | Carrier Protocol/Encapsulation Protocol
+-------------------------------------+
| Deliver Header | Transport Protocol
+-------------------------------------+
-
净荷(Payload Packet):系统收到的需要封装和路由的数据报称为净荷。
-
乘客协议(Passenger Protocol):封装前的报文协议称为乘客协议。
-
封装协议(Encapsulation Protocol):上述的GRE协议称为封装协议,也称为运载协议(Carrier Protocol)。
-
传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
GRE首部格式(RFC 2784)
GRE首部格式(RFC 2784)
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|C| Reserved0 | Ver | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum (optional) | Reserved1 (Optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
GRE首部字段解释(RFC 2784)
| 字段 | 长度 | 描述 |
|---|---|---|
| C | 1比特 | 校验和验证标识位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。 |
| Reserved0 | 12比特 | 如果比特1–5不是全0,则该报文会被丢弃。比特6-12为预留字段,设置为0,接收者忽略此字段。 |
| Ver | 3比特 | 版本字段,必须置为0。 |
| Protocol Type | 16比特 | 乘客协议的协议类型,取值及含义与中的“ETHER TYPES”相同。 |
| Checksum | 16比特 | 对GRE头及其负载的校验和字段。 |
| Reserved1 | 16比特 | 预留字段,设置为0。此字段只在校验和验证标识位(C位)置位时出现。 |
GRE首部格式(RFC 1701)
GRE首部格式(RFC 1701)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|C|R|K|S|s|Recur| Flags | Ver | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum (optional) | Offset (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Routing (optional)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
GRE首部字段解释(RFC 1701)
| 字段 | 长度 | 描述 |
|---|---|---|
| C | 1bit | 校验和验证标识位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。 |
| R | 1bit | 路由标识位。如果该位置1,表示GRE头插入了偏移字段和源路由字段。如果校验和验证位或者路由位其中一位置1,或两位都置1,则表示GRE头插入了校验和(Checksum)字段和偏移字段。 |
| K | 1bit | 关键字标识位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。 |
| S | 1bit | 序列号标识位。如果该位置1,表示GRE头插入了报文序列号字段。否则,表示GRE头没有序列号字段。 |
| s | 1bit | 严格源路由标识位。RFC1071推荐此标识位仅在路由信息域包含了严格源路由信息的情况下置1。 |
| Recur | 3bits | 用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 |
| Flags | 5bits | 预留字段。当前必须设为0。 |
| Ver | 3bits | 版本字段,必须置为0。Version为1是使用在RFC2637的PPTP中。 |
| Protocol Type | 16btis | 乘客协议的协议类型,取值及含义与中的“ETHER TYPES”相同。 |
| Checksum | 16bits | 对GRE头及其负载的校验和字段。 |
| Offset | 16bits | 偏移字段,表示活跃的路由信息域中的起始字节到活跃的源路由实体SRE(Source Route Entry)的字节偏移量。该字段只有在路由标识位或者校验和验证标识位置1时携带,并在路由标识位置1时才有效。 |
| Key | 32bits | 关键字字段,隧道接收端用于对收到的报文进行验证。 |
| Sequence Number | 32bits | 报文序列号字段,是由封装节点插入的一个32位的无符号整数。 |
| Routing | 32bits | 路由信息字段,是可选字段。只在路由标识位置1时出现。路由信息字段包含了一系列的源路由实体SRE(Source Route Entry)。单个SRE格式详见。 |
SRE格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family | SRE Offset | SRE Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Routing Information ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
路由信息字段以一个“Null”SRE为结尾,该SRE是一个长度为0,只包含一个类型为0x0000的Address Family子字段。
参考标准
| 标准 | 描述 |
|---|---|
| Generic Routing Encapsulation (GRE) | |
| Generic Routing Encapsulation (GRE) |
No comments to display
No comments to display