Generic routing encapsulation

{{Short description|Cisco tunneling protocol}}

{{Infobox networking protocol

| title = Generic routing encapsulation

| logo =

| logo alt =

| image =

| image alt =

| caption =

| is stack = no

| purpose = Network tunneling

| developer = Cisco Systems

| date = 1994{{Ref RFC|1701}}

| based on =

| influenced =

| osilayer =

| ports =

| rfcs = {{IETF RFC|1701|1702|2784|plainlink=yes}}

| hardware =

}}

Generic routing encapsulation (GRE) is a tunneling protocol developed by Cisco Systems that can encapsulate a wide variety of network layer protocols inside virtual point-to-point links or point-to-multipoint links over an Internet Protocol network.{{Cite patent|title=Generic routing encapsulation tunnel keepalives|country=US|number=7801021B1|invent1=Nikolaos Triantafillis|invent2=Robert J. Ordemann|invent3=Simon D. Barber|assign1=Cisco Technology Inc.|gdate=2010-09-21|fdate=2002-07-01|url=https://patents.google.com/patent/US7801021B1/en}}

Example uses

  • In conjunction with PPTP to create VPNs.
  • In conjunction with IPsec VPNs to allow passing of routing information between connected networks.
  • In mobility management protocols.
  • In A8/A10 interfaces to encapsulate IP data to/from Packet Control Function (PCF).
  • Linux and BSD can establish ad-hoc IP over GRE tunnels which are interoperable with Cisco equipment.
  • Distributed denial of service (DDoS) protected appliance to an unprotected endpoint.

=Example protocol stack=

class="wikitable"

!OSI model layer

!Protocol example

7. Application

|HTTP

4. Transport

|TCP

3. Network (GRE-encapsulated)

|IPv4

Encapsulation

|GRE

3. Network

|IPv6

2. Data link

|Ethernet

1. Physical

|Ethernet physical layer

Based on the principles of protocol layering in OSI, protocol encapsulation, not specifically GRE, breaks the layering order. It may be viewed as a separator between two different protocol stacks, one acting as a carrier for another.

Delivery protocols

GRE packets that are encapsulated within IP directly, use IP protocol type 47 in the IPv4 header's Protocol field{{Ref RFC|1702}} or the IPv6 header's Next Header field.{{Ref RFC|7676}}

For performance reasons, GRE can also be encapsulated in UDP packets.{{Ref RFC|8086}} Better throughput may be achieved by using Equal-cost multi-path routing.

Packet header

=Extended GRE packet header (RFC 2890)=

The extended version of the GRE packet header{{Ref RFC|2890}} is represented below:

:

class="wikitable" style="text-align: center"

|+Extended GRE header format

style="border-bottom:none; border-right:none;"|Offsets

!style="border-left:none;"|Octet

!colspan="8"|0

!colspan="8"|1

!colspan="8"|2

!colspan="8"|3

style="border-top: none"|Octet

!Bit

!style="width:2.75%;"|0

!style="width:2.75%;"|1

!style="width:2.75%;"|2

!style="width:2.75%;"|3

!style="width:2.75%;"|4

!style="width:2.75%;"|5

!style="width:2.75%;"|6

!style="width:2.75%;"|7

!style="width:2.75%;"|8

!style="width:2.75%;"|9

!style="width:2.75%;"|10

!style="width:2.75%;"|11

!style="width:2.75%;"|12

!style="width:2.75%;"|13

!style="width:2.75%;"|14

!style="width:2.75%;"|15

!style="width:2.75%;"|16

!style="width:2.75%;"|17

!style="width:2.75%;"|18

!style="width:2.75%;"|19

!style="width:2.75%;"|20

!style="width:2.75%;"|21

!style="width:2.75%;"|22

!style="width:2.75%;"|23

!style="width:2.75%;"|24

!style="width:2.75%;"|25

!style="width:2.75%;"|26

!style="width:2.75%;"|27

!style="width:2.75%;"|28

!style="width:2.75%;"|29

!style="width:2.75%;"|30

!style="width:2.75%;"|31

0

!0

|C

|

|K

|S

|colspan="9"|Reserved 0

|colspan="3"|Version

|colspan="16"|Protocol Type

4

!32

|colspan="16"|Checksum (optional)

|colspan="16"|Reserved 1 (optional)

8

!64

|colspan="32"|Key (optional)

12

!96

|colspan="32"|Sequence Number (optional)

; C (1 bit): Checksum bit. Set to 1 if a checksum is present.

; K (1 bit): Key bit. Set to 1 if a key is present.

; S (1 bit): Sequence number bit. Set to 1 if a sequence number is present.

; Reserved 0 (9 bits): Reserved bits; set to 0.

; Version (3 bits): GRE Version number; set to 0.

; Protocol Type (16 bits): Indicates the ether protocol type of the encapsulated payload. (For IPv4, this would be hex 0800.)

; Checksum (16 bits): Present if the C bit is set; contains the checksum for the GRE header and payload.

; Reserved 1 (16 bits): Present if the C bit is set; is set to 0.

; Key (32 bits): Present if the K bit is set; contains an application-specific key value.

; Sequence Number (32 bits): Present if the S bit is set; contains a sequence number for the GRE packet.

=Standard GRE packet header (RFC 2784)=

A standard GRE packet header structure{{Ref RFC|2784}} is represented in the diagram below.

:

class="wikitable" style="text-align: center"

|+Standard GRE header format

style="border-bottom:none; border-right:none;"|Offsets

!style="border-left:none;"|Octet

!colspan="8"|0

!colspan="8"|1

!colspan="8"|2

!colspan="8"|3

style="border-top: none"|Octet

!Bit

!style="width:2.75%;"|0

!style="width:2.75%;"|1

!style="width:2.75%;"|2

!style="width:2.75%;"|3

!style="width:2.75%;"|4

!style="width:2.75%;"|5

!style="width:2.75%;"|6

!style="width:2.75%;"|7

!style="width:2.75%;"|8

!style="width:2.75%;"|9

!style="width:2.75%;"|10

!style="width:2.75%;"|11

!style="width:2.75%;"|12

!style="width:2.75%;"|13

!style="width:2.75%;"|14

!style="width:2.75%;"|15

!style="width:2.75%;"|16

!style="width:2.75%;"|17

!style="width:2.75%;"|18

!style="width:2.75%;"|19

!style="width:2.75%;"|20

!style="width:2.75%;"|21

!style="width:2.75%;"|22

!style="width:2.75%;"|23

!style="width:2.75%;"|24

!style="width:2.75%;"|25

!style="width:2.75%;"|26

!style="width:2.75%;"|27

!style="width:2.75%;"|28

!style="width:2.75%;"|29

!style="width:2.75%;"|30

!style="width:2.75%;"|31

0

!0

|C

|colspan="12"|Reserved 0

|colspan="3"|Version

|colspan="16"|Protocol Type

4

!32

|colspan="16"|Checksum (optional)

|colspan="16"|Reserved 1 (optional)

; C (1 bit): Checksum bit. Set to 1 if a checksum is present.

; Reserved 0 (12 bits): Reserved bits; set to 0.

; Version (3 bits): GRE Version number; set to 0.

; Protocol Type (16 bits): Indicates the ether protocol type of the encapsulated payload. (For IPv4, this would be hexadecimal 0x0800; for IPv6, it would be 0x86DD.{{Ref RFC|7676}})

; Checksum (16 bits): Present if the C bit is set; contains the checksum for the GRE header and payload.

; Reserved 1 (16 bits): Present if the C bit is set; its contents is set to 0.

=Original GRE packet header (RFC 1701)=

The newer structure superseded the original structure:{{Ref RFC|1701}}

:

class="wikitable" style="text-align: center"

|+Original GRE header format

style="border-bottom:none; border-right:none;"|Offsets

!style="border-left:none;"|Octet

!colspan="8"|0

!colspan="8"|1

!colspan="8"|2

!colspan="8"|3

style="border-top: none"|Octet

!Bit

!style="width:2.75%;"|0

!style="width:2.75%;"|1

!style="width:2.75%;"|2

!style="width:2.75%;"|3

!style="width:2.75%;"|4

!style="width:2.75%;"|5

!style="width:2.75%;"|6

!style="width:2.75%;"|7

!style="width:2.75%;"|8

!style="width:2.75%;"|9

!style="width:2.75%;"|10

!style="width:2.75%;"|11

!style="width:2.75%;"|12

!style="width:2.75%;"|13

!style="width:2.75%;"|14

!style="width:2.75%;"|15

!style="width:2.75%;"|16

!style="width:2.75%;"|17

!style="width:2.75%;"|18

!style="width:2.75%;"|19

!style="width:2.75%;"|20

!style="width:2.75%;"|21

!style="width:2.75%;"|22

!style="width:2.75%;"|23

!style="width:2.75%;"|24

!style="width:2.75%;"|25

!style="width:2.75%;"|26

!style="width:2.75%;"|27

!style="width:2.75%;"|28

!style="width:2.75%;"|29

!style="width:2.75%;"|30

!style="width:2.75%;"|31

0

!0

|C

|R

|K

|S

|s

|colspan="3"|Recur

|colspan="5"|Flags

|colspan="3"|Version

|colspan="16"|Protocol Type

4

!32

|colspan="16"|Checksum (optional)

|colspan="16"|Offset (optional)

8

!64

|colspan="32"|Key (optional)

12

!96

|colspan="32"|Sequence Number (optional)

16

!128

|colspan="32"|Routing (optional, variable length)

The original GRE RFC defined further fields in the packet header which became obsolete in the current standard:

; C (1 bit): Checksum bit. Set to 1 if a checksum is present.

; R (1 bit): Routing Bit. Set to 1 if Routing and Offset information are present.

; K (1 bit): Key bit. Set to 1 if a key is present.

; S (1 bit): Sequence number bit. Set to 1 if a sequence number is present.

; s (1 bit): Strict source route bit.

; Recur (3 bits): Recursion control bits.

; Flags (5 bits): Reserved for future use, set to 0.

; Version (3 bits): Set to 0.

; Protocol Type (16 bits): Indicates the ether protocol type of the encapsulated payload.

; Checksum (16 bits): Present if the C bit is set; contains the checksum for the GRE header and payload.

; Offset (16 bits): Present if R bit or C bit is set; contains valid information, only if R bit is set. An offset field indicating the offset within the Routing field to the active source route entry.

; Key (32 bits): Present if the K bit is set; contains an application-specific key value.

; Sequence Number (32 bits): Present if the S bit is set; contains a sequence number for the GRE packet.

; Routing (variable): Present if R bit is set; contains a list of source route entries, therefore is of variable length.

=PPTP GRE packet header=

The Point-to-Point Tunneling Protocol (PPTP) {{Ref RFC|2637}} uses a variant GRE packet header structure, represented below. PPTP creates a GRE tunnel through which the PPTP GRE packets are sent.

:

class="wikitable" style="text-align: center"

|+PPTP GRE header format

style="border-bottom:none; border-right:none;"|Offsets

!style="border-left:none;"|Octet

!colspan="8"|0

!colspan="8"|1

!colspan="8"|2

!colspan="8"|3

style="border-top: none"|Octet

!Bit

!style="width:2.75%;"|0

!style="width:2.75%;"|1

!style="width:2.75%;"|2

!style="width:2.75%;"|3

!style="width:2.75%;"|4

!style="width:2.75%;"|5

!style="width:2.75%;"|6

!style="width:2.75%;"|7

!style="width:2.75%;"|8

!style="width:2.75%;"|9

!style="width:2.75%;"|10

!style="width:2.75%;"|11

!style="width:2.75%;"|12

!style="width:2.75%;"|13

!style="width:2.75%;"|14

!style="width:2.75%;"|15

!style="width:2.75%;"|16

!style="width:2.75%;"|17

!style="width:2.75%;"|18

!style="width:2.75%;"|19

!style="width:2.75%;"|20

!style="width:2.75%;"|21

!style="width:2.75%;"|22

!style="width:2.75%;"|23

!style="width:2.75%;"|24

!style="width:2.75%;"|25

!style="width:2.75%;"|26

!style="width:2.75%;"|27

!style="width:2.75%;"|28

!style="width:2.75%;"|29

!style="width:2.75%;"|30

!style="width:2.75%;"|31

0

!0

|C

|R

|K

|S

|s

|colspan="3"|Recur

|colspan="1"|A

|colspan="4"|Flags

|colspan="3"|Version

|colspan="16"|Protocol Type

4

!32

|colspan="16"|Key Payload Length

|colspan="16"|Key Call ID

8

!64

|colspan="32"|Sequence Number (optional)

12

!96

|colspan="32"|Acknowledgement Number (optional)

; C (1 bit): Checksum bit. For PPTP GRE packets, this is set to 0.

; R (1 bit): Routing bit. For PPTP GRE packets, this is set to 0.

; K (1 bit): Key bit. For PPTP GRE packets, this is set to 1. (All PPTP GRE packets carry a key.)

; S (1 bit): Sequence number bit. Set to 1 if a sequence number is supplied, indicating a PPTP GRE data packet.

; s (1 bit): Strict source route bit. For PPTP GRE packets, this is set to 0.

; Recur (3 bits): Recursion control bits. For PPTP GRE packets, these are set to 0.

; A (1 bit): Acknowledgment number present. Set to 1 if an acknowledgment number is supplied, indicating a PPTP GRE acknowledgment packet.

; Flags (4 bits): Flag bits. For PPTP GRE packets, these are set to 0.

; Version (3 bits): GRE Version number. For PPTP GRE packets, this is set to 1.

; Protocol Type (16 bits): For PPTP GRE packets, this is set to hex 880B.

; Key Payload Length (16 bits): Contains the size of the payload, not including the GRE header.

; Key Call ID (16 bits): Contains the Peer's Call ID for the session to which the packet belongs.

; Sequence Number (32 bits): Present if the S bit is set; contains the GRE payload sequence number.

; Acknowledgement Number (32 bits): Present if the A bit is set; contains the sequence number of the highest GRE payload packet received by the sender.

Standards

  • {{IETF RFC|1701|link=no}}: Generic Routing Encapsulation (GRE) (informational)
  • {{IETF RFC|1702|link=no}}: Generic Routing Encapsulation over IPv4 networks (informational)
  • {{IETF RFC|2637|link=no}}: Point to Point Tunneling Protocol (informational)
  • {{IETF RFC|2784|link=no}}: Generic Routing Encapsulation (GRE) (proposed standard, updated by RFC 2890)
  • {{IETF RFC|2890|link=no}}: Key and Sequence Number Extensions to GRE (proposed standard)
  • {{IETF RFC|8086|link=no}}: GRE-in-UDP Encapsulation (proposed standard)

See also

References

{{reflist}}