452 lines
15 KiB
Plaintext
452 lines
15 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group S. Hanks
|
|||
|
Request for Comments: 1701 NetSmiths, Ltd.
|
|||
|
Category: Informational T. Li
|
|||
|
D. Farinacci
|
|||
|
P. Traina
|
|||
|
cisco Systems
|
|||
|
October 1994
|
|||
|
|
|||
|
|
|||
|
Generic Routing Encapsulation (GRE)
|
|||
|
|
|||
|
Status of this Memo
|
|||
|
|
|||
|
|
|||
|
This memo provides information for the Internet community. This memo
|
|||
|
does not specify an Internet standard of any kind. Distribution of
|
|||
|
this memo is unlimited.
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
This document specifies a protocol for performing encapsulation of an
|
|||
|
arbitrary network layer protocol over another arbitrary network layer
|
|||
|
protocol.
|
|||
|
|
|||
|
Introduction
|
|||
|
|
|||
|
A number of different proposals [RFC 1234, RFC 1226] currently exist
|
|||
|
for the encapsulation of one protocol over another protocol. Other
|
|||
|
types of encapsulations [RFC 1241, SDRP, RFC 1479] have been proposed
|
|||
|
for transporting IP over IP for policy purposes. This memo describes
|
|||
|
a protocol which is very similar to, but is more general than, the
|
|||
|
above proposals. In attempting to be more general, many protocol
|
|||
|
specific nuances have been ignored. The result is that this proposal
|
|||
|
is may be less suitable for a situation where a specific "X over Y"
|
|||
|
encapsulation has been described. It is the attempt of this protocol
|
|||
|
to provide a simple, general purpose mechanism which is reduces the
|
|||
|
problem of encapsulation from its current O(n^2) problem to a more
|
|||
|
manageable state. This proposal also attempts to provide a
|
|||
|
lightweight encapsulation for use in policy based routing. This memo
|
|||
|
explicitly does not address the issue of when a packet should be
|
|||
|
encapsulated. This memo acknowledges, but does not address problems
|
|||
|
with mutual encapsulation [RFC 1326].
|
|||
|
|
|||
|
In the most general case, a system has a packet that needs to be
|
|||
|
encapsulated and routed. We will call this the payload packet. The
|
|||
|
payload is first encapsulated in a GRE packet, which possibly also
|
|||
|
includes a route. The resulting GRE packet can then be encapsulated
|
|||
|
in some other protocol and then forwarded. We will call this outer
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 1]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
protocol the delivery protocol. The algorithms for processing this
|
|||
|
packet are discussed later.
|
|||
|
|
|||
|
Overall packet
|
|||
|
|
|||
|
The entire encapsulated packet would then have the form:
|
|||
|
|
|||
|
---------------------------------
|
|||
|
| |
|
|||
|
| Delivery Header |
|
|||
|
| |
|
|||
|
---------------------------------
|
|||
|
| |
|
|||
|
| GRE Header |
|
|||
|
| |
|
|||
|
---------------------------------
|
|||
|
| |
|
|||
|
| Payload packet |
|
|||
|
| |
|
|||
|
---------------------------------
|
|||
|
|
|||
|
Packet header
|
|||
|
|
|||
|
The GRE packet header has the form:
|
|||
|
|
|||
|
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)
|
|||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|||
|
|
|||
|
Flags and version (2 octets)
|
|||
|
|
|||
|
The GRE flags are encoded in the first two octets. Bit 0 is the
|
|||
|
most significant bit, bit 15 is the least significant bit. Bits
|
|||
|
13 through 15 are reserved for the Version field. Bits 5 through
|
|||
|
12 are reserved for future use and MUST be transmitted as zero.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 2]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
Checksum Present (bit 0)
|
|||
|
|
|||
|
If the Checksum Present bit is set to 1, then the Checksum field
|
|||
|
is present and contains valid information.
|
|||
|
|
|||
|
If either the Checksum Present bit or the Routing Present bit are
|
|||
|
set, BOTH the Checksum and Offset fields are present in the GRE
|
|||
|
packet.
|
|||
|
|
|||
|
Routing Present (bit 1)
|
|||
|
|
|||
|
If the Routing Present bit is set to 1, then it indicates that the
|
|||
|
Offset and Routing fields are present and contain valid
|
|||
|
information.
|
|||
|
|
|||
|
If either the Checksum Present bit or the Routing Present bit are
|
|||
|
set, BOTH the Checksum and Offset fields are present in the GRE
|
|||
|
packet.
|
|||
|
|
|||
|
Key Present (bit 2)
|
|||
|
|
|||
|
If the Key Present bit is set to 1, then it indicates that the Key
|
|||
|
field is present in the GRE header. Otherwise, the Key field is
|
|||
|
not present in the GRE header.
|
|||
|
|
|||
|
Sequence Number Present (bit 3)
|
|||
|
|
|||
|
If the Sequence Number Present bit is set to 1, then it indicates
|
|||
|
that the Sequence Number field is present. Otherwise, the
|
|||
|
Sequence Number field is not present in the GRE header.
|
|||
|
|
|||
|
Strict Source Route (bit 4)
|
|||
|
|
|||
|
The meaning of the Strict Source route bit is defined in other
|
|||
|
documents. It is recommended that this bit only be set to 1 if
|
|||
|
all of the the Routing Information consists of Strict Source
|
|||
|
Routes.
|
|||
|
|
|||
|
Recursion Control (bits 5-7)
|
|||
|
|
|||
|
Recursion control contains a three bit unsigned integer which
|
|||
|
contains the number of additional encapsulations which are
|
|||
|
permissible. This SHOULD default to zero.
|
|||
|
|
|||
|
Version Number (bits 13-15)
|
|||
|
|
|||
|
The Version Number field MUST contain the value 0. Other values
|
|||
|
are outside of the scope of this document.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 3]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
Protocol Type (2 octets)
|
|||
|
|
|||
|
The Protocol Type field contains the protocol type of the payload
|
|||
|
packet. In general, the value will be the Ethernet protocol type
|
|||
|
field for the packet. Currently defined protocol types are listed
|
|||
|
below. Additional values may be defined in other documents.
|
|||
|
|
|||
|
Offset (2 octets)
|
|||
|
|
|||
|
The offset field indicates the octet offset from the start of the
|
|||
|
Routing field to the first octet of the active Source Route Entry
|
|||
|
to be examined. This field is present if the Routing Present or
|
|||
|
the Checksum Present bit is set to 1, and contains valid
|
|||
|
information only if the Routing Present bit is set to 1.
|
|||
|
|
|||
|
Checksum (2 octets)
|
|||
|
|
|||
|
The Checksum field contains the IP (one's complement) checksum of
|
|||
|
the GRE header and the payload packet. This field is present if
|
|||
|
the Routing Present or the Checksum Present bit is set to 1, and
|
|||
|
contains valid information only if the Checksum Present bit is set
|
|||
|
to 1.
|
|||
|
|
|||
|
Key (4 octets)
|
|||
|
|
|||
|
The Key field contains a four octet number which was inserted by
|
|||
|
the encapsulator. It may be used by the receiver to authenticate
|
|||
|
the source of the packet. The techniques for determining
|
|||
|
authenticity are outside of the scope of this document. The Key
|
|||
|
field is only present if the Key Present field is set to 1.
|
|||
|
|
|||
|
Sequence Number (4 octets)
|
|||
|
|
|||
|
The Sequence Number field contains an unsigned 32 bit integer
|
|||
|
which is inserted by the encapsulator. It may be used by the
|
|||
|
receiver to establish the order in which packets have been
|
|||
|
transmitted from the encapsulator to the receiver. The exact
|
|||
|
algorithms for the generation of the Sequence Number and the
|
|||
|
semantics of their reception is outside of the scope of this
|
|||
|
document.
|
|||
|
|
|||
|
Routing (variable)
|
|||
|
|
|||
|
The Routing field is optional and is present only if the Routing
|
|||
|
Present bit is set to 1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 4]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
The Routing field is a list of Source Route Entries (SREs). Each
|
|||
|
SRE has the form:
|
|||
|
|
|||
|
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 ...
|
|||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|||
|
|
|||
|
The routing field is terminated with a "NULL" SRE containing an
|
|||
|
address family of type 0x0000 and a length of 0.
|
|||
|
|
|||
|
Address Family (2 octets)
|
|||
|
|
|||
|
The Address Family field contains a two octet value which indicates
|
|||
|
the syntax and semantics of the Routing Information field. The
|
|||
|
values for this field and the corresponding syntax and semantics for
|
|||
|
Routing Information are defined in other documents.
|
|||
|
|
|||
|
SRE Offset (1 octet)
|
|||
|
|
|||
|
The SRE Offset field indicates the octet offset from the start of the
|
|||
|
Routing Information field to the first octet of the active entry in
|
|||
|
Source Route Entry to be examined.
|
|||
|
|
|||
|
SRE Length (1 octet)
|
|||
|
|
|||
|
The SRE Length field contains the number of octets in the SRE. If
|
|||
|
the SRE Length is 0, this indicates this is the last SRE in the
|
|||
|
Routing field.
|
|||
|
|
|||
|
Routing Information (variable)
|
|||
|
|
|||
|
The Routing Information field contains data which may be used in
|
|||
|
routing this packet. The exact semantics of this field is defined in
|
|||
|
other documents.
|
|||
|
|
|||
|
Forwarding of GRE packets
|
|||
|
|
|||
|
Normally, a system which is forwarding delivery layer packets will
|
|||
|
not differentiate GRE packets from other packets in any way.
|
|||
|
However, a GRE packet may be received by a system. In this case, the
|
|||
|
system should use some delivery-specific means to determine that this
|
|||
|
is a GRE packet. Once this is determined, the Key, Sequence Number
|
|||
|
and Checksum fields if they contain valid information as indicated by
|
|||
|
the corresponding flags may be checked. If the Routing Present bit
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 5]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
is set to 1, then the Address Family field should be checked to
|
|||
|
determine the semantics and use of the SRE Length, SRE Offset and
|
|||
|
Routing Information fields. The exact semantics for processing a SRE
|
|||
|
for each Address Family is defined in other documents.
|
|||
|
|
|||
|
Once all SREs have been processed, then the source route is complete,
|
|||
|
the GRE header should be removed, the payload's TTL MUST be
|
|||
|
decremented (if one exists) and the payload packet should be
|
|||
|
forwarded as a normal packet. The exact forwarding method depends on
|
|||
|
the Protocol Type field.
|
|||
|
|
|||
|
Current List of Protocol Types
|
|||
|
|
|||
|
The following are currently assigned protocol types for GRE. Future
|
|||
|
protocol types must be taken from DIX ethernet encoding. For
|
|||
|
historical reasons, a number of other values have been used for some
|
|||
|
protocols. The following table of values MUST be used to identify
|
|||
|
the following protocols:
|
|||
|
|
|||
|
Protocol Family PTYPE
|
|||
|
--------------- -----
|
|||
|
Reserved 0000
|
|||
|
SNA 0004
|
|||
|
OSI network layer 00FE
|
|||
|
PUP 0200
|
|||
|
XNS 0600
|
|||
|
IP 0800
|
|||
|
Chaos 0804
|
|||
|
RFC 826 ARP 0806
|
|||
|
Frame Relay ARP 0808
|
|||
|
VINES 0BAD
|
|||
|
VINES Echo 0BAE
|
|||
|
VINES Loopback 0BAF
|
|||
|
DECnet (Phase IV) 6003
|
|||
|
Transparent Ethernet Bridging 6558
|
|||
|
Raw Frame Relay 6559
|
|||
|
Apollo Domain 8019
|
|||
|
Ethertalk (Appletalk) 809B
|
|||
|
Novell IPX 8137
|
|||
|
RFC 1144 TCP/IP compression 876B
|
|||
|
IP Autonomous Systems 876C
|
|||
|
Secure Data 876D
|
|||
|
Reserved FFFF
|
|||
|
|
|||
|
See the IANA list of Ether Types for the complete list of these
|
|||
|
values.
|
|||
|
|
|||
|
URL = ftp://ftp.isi.edu/in-notes/iana/assignments/ethernet-numbers.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 6]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
References
|
|||
|
|
|||
|
RFC 1479
|
|||
|
Steenstrup, M. "Inter-Domain Policy Routing Protocol
|
|||
|
Specification: Version 1", RFC1479, BBN Systems and Technologies,
|
|||
|
July 1993.
|
|||
|
|
|||
|
RFC 1226
|
|||
|
Kantor, B. "Internet Protocol Encapsulation of AX.25 Frames", RFC
|
|||
|
1226, University of California, San Diego, May 1991.
|
|||
|
|
|||
|
RFC 1234
|
|||
|
Provan, D. "Tunneling IPX Traffic through IP Networks", RFC 1234,
|
|||
|
Novell, Inc., June 1991.
|
|||
|
|
|||
|
RFC 1241
|
|||
|
Woodburn, R., and D. Mills, "Scheme for an Internet Encapsulation
|
|||
|
Protocol: Version 1", RFC 1241, SAIC, University of Delaware, July
|
|||
|
1991.
|
|||
|
|
|||
|
RFC 1326
|
|||
|
Tsuchiya, P., "Mutual Encapsulation Considered Dangerous", RFC
|
|||
|
1326, Bellcore, May 1992.
|
|||
|
|
|||
|
SDRP
|
|||
|
Estrin, D., Li, T., and Y. Rekhter, "Source Demand Routing
|
|||
|
Protocol Specification (Version 1)", Work in Progress.
|
|||
|
|
|||
|
RFC 1702
|
|||
|
Hanks, S., Li, T., Farinacci, D., and P. Traina, "Generic Routing
|
|||
|
Encapsulation over IPv4 networks", RFC 1702, NetSmiths, Ltd.,
|
|||
|
cisco Systems, October 1994.
|
|||
|
|
|||
|
Security Considerations
|
|||
|
|
|||
|
Security issues are not discussed in this memo.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 7]
|
|||
|
|
|||
|
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
|
|||
|
|
|||
|
|
|||
|
Acknowledgements
|
|||
|
|
|||
|
The authors would like to acknowledge Yakov Rekhter (IBM) and Deborah
|
|||
|
Estrin (USC) for their advice, encouragement and insightful comments.
|
|||
|
|
|||
|
Authors' Addresses
|
|||
|
|
|||
|
Stan Hanks
|
|||
|
NetSmiths, Ltd.
|
|||
|
2025 Lincoln Highway
|
|||
|
Edison NJ, 08817
|
|||
|
|
|||
|
EMail: stan@netsmiths.com
|
|||
|
|
|||
|
|
|||
|
Tony Li
|
|||
|
cisco Systems, Inc.
|
|||
|
1525 O'Brien Drive
|
|||
|
Menlo Park, CA 94025
|
|||
|
|
|||
|
EMail: tli@cisco.com
|
|||
|
|
|||
|
|
|||
|
Dino Farinacci
|
|||
|
cisco Systems, Inc.
|
|||
|
1525 O'Brien Drive
|
|||
|
Menlo Park, CA 94025
|
|||
|
|
|||
|
EMail: dino@cisco.com
|
|||
|
|
|||
|
|
|||
|
Paul Traina
|
|||
|
cisco Systems, Inc.
|
|||
|
1525 O'Brien Drive
|
|||
|
Menlo Park, CA 94025
|
|||
|
|
|||
|
EMail: pst@cisco.com
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hanks, Li, Farinacci & Traina [Page 8]
|
|||
|
|