Generic Routing Encapsulation (GRE)通用路由封装 (GRE)本备忘录的状态本备忘录为 Internet 社区提供信息。本备忘录未指定任何类型的 Internet 标准。本备忘录的分发不受限制。梗概本文档规定了一种协议,用于在另一个任意网络层协议上执行任意网络层协议的封装。介绍目前存在许多不同的提案 [RFC 1234, RFC 1226] 用于将一种协议封装在另一种协议上。其他类型的封装 [RFC 1241、SDRP、RFC 1479] 已被提议用于在 IP 上传输 IP本备忘录的常规路由封装(GRE)状态本备忘录为互联网社区提供信息。本备忘录未指定任何类型的互联网标准。本备忘录的分发是不受限制的。
消息的整个封装数据包将具有以下形式:
密钥存在(第2位)如果密钥存在位设置为1,则表示GRE报头中存在密钥字段。否则,GRE头中不存在关键字字段。
地址系列(2个二进制八位数)地址系列字段包含两个二进制八位数的值,表示路由信息字段的语法和语义。该字段的值以及路由信息的相应语法和语义在其他文档中定义。
参见RFC 1479 steenstrup,m .“域间策略路由协议规范:版本1”,RFC 1479,BBN系统和技术,1993年7月。RFC 1226 Kantor,b .“ax . 25帧的互联网协议封装”,RFC 1226,加州大学圣地亚哥分校,1991年5月。RFC 1234 Provan,d .,“通过IP网络的隧道IPX通信”,RFC 1234,Novell公司,1991年6月。RFC 1241 Woodburn,r .和D. Mills,“因特网封装协议方案:版本1”,RFC 1241,SAIC,特拉华大学,1991年7月。RFC 1326 Tsuchiya,p .,“相互封装被认为是危险的”,RFC 1326,Bellcore,1992年5月。Estrin,d .,Li,t .,和Y. Rekhter,“源需求路由协议规范(第1版)”,工作正在进行中。RFC 1702 Hanks,s .,Li,t .,Farinacci,d .,和P. Traina,“IPv4网络上的通用路由封装”,RFC 1702,NetSmiths,Ltd .,cisco Systems,1994年10月。
通用路由封装(GRE)
本备忘录的常规路由封装(GRE)状态本备忘录为互联网社区提供信息。本备忘录未指定任何类型的互联网标准。本备忘录的分发是不受限制的。概述本文档规定了一种协议,用于将任何网络层协议封装在另一个任意网络层协议上。有许多不同的提议[RFC 1234,RFC 1226]将一个协议封装到另一个协议上。出于策略目的,已经提出了其他类型的封装[RFC 1241、SDRP、RFC 1479]来在IP上传输IP。这份备忘录描述了一份与上述提案非常相似但更具一般性的协议。为了更加通用,忽略了许多特定于协议的细微差别。因此,这个提议可能不适合已经描述的特定的“X over Y”包。该协议试图提供一个简单的通用机制,将封装问题从目前的O(n ^ 2)问题降低到一个更易管理的状态。该提案还试图为基于策略的路由提供轻量级封装。这份备忘录显然没有解决数据包何时应该封装的问题。该备忘录承认但没有解决相互封装的问题[RFC 1326]。
有许多不同的提议[RFC 1234,RFC 1226]将一个协议封装到另一个协议上。出于策略目的,已经提出了其他类型的封装[RFC 1241、SDRP、RFC 1479]来在IP上传输IP。这份备忘录描述了一份与上述提案非常相似但更具一般性的协议。为了更加通用,忽略了许多特定于协议的细微差别。因此,这个提议可能不适合已经描述的特定的“X over Y”包。该协议试图提供一个简单的通用机制,将封装问题从目前的O(n ^ 2)问题降低到一个更易管理的状态。该提案还试图为基于策略的路由提供轻量级封装。这份备忘录显然没有解决数据包何时应该封装的问题。该备忘录承认但没有解决相互封装的问题[RFC 1326]。
在最常见的情况下,系统有一个需要封装和转发的数据包。我们称之为有效载荷包。有效负载首先封装在GRE数据包中,其中可能还包含路由。那么GRE数据包可以封装在其他协议中,然后转发。我们称这种外部协议为转发协议。用于处理该数据包的算法将在后面讨论。
消息的整个封装数据包将具有以下形式:报头GRE数据包报头的格式是:并且标志版本的GRE标志(2个八位字节)被编码在前两个八位字节中。位0是最高有效位,位15是最低有效位,位13至15保留给版本字段,位5至12保留给将来使用,并且必须作为零发送。校验和存在(位0)如果校验和存在位设置为1,则校验和域存在并包含有效信息。
并且标志版本的GRE标志(2个八位字节)被编码在前两个八位字节中。位0是最高有效位,位15是最低有效位,位13至15保留给版本字段,位5至12保留给将来使用,并且必须作为零发送。校验和存在(位0)如果校验和存在位设置为1,则校验和域存在并包含有效信息。
如果设置了校验和存在位或路由存在位,则GRE数据包中同时存在校验和和偏移字段。
路由存在(第1位)如果路由存在位设置为1,则表示偏移和路由字段存在并包含有效信息。
如果设置了校验和存在位或路由存在位,则GRE数据包中同时存在校验和和偏移字段。
密钥存在(第2位)如果密钥存在位设置为1,则表示GRE报头中存在密钥字段。否则,GRE头中不存在关键字字段。序列号存在(第3位)如果序列号存在位设置为1,则表示序列号字段存在。否则,GRE报头中没有序列号字段。严格源路由(第4位)其他文档中定义了严格源路由位的含义。如果所有路由信息都由严格的源路由组成,建议仅将该位设为1。递归控制(第5-7位)递归控制包含一个三位无符号整数,它包含允许的附加包的数量。默认情况下,这应该为零。版本号(第13-15位)版本号字段必须包含值0,其他值超出了本文档的范围。类型(2个八位字节)协议类型字段包含有效载荷数据包的协议类型。通常,该值是数据包的以太网协议类型字段。下面列出了当前定义的协议类型。其他值可以在其他文档中定义。Offset (2个二进制八位数)Offset字段表示从路由字段的开头到要检查的活动源路由条目的第一个二进制八位数的偏移量。如果路由存在或校验和存在位设置为1,则只有当路由存在位设置为1时,该字段才存在并包含有效信息。校验和(2个八位字节)校验和字段包含有效载荷数据包的GRE报头和IP(一的补码)校验和。如果路由存在或校验和存在位设置为1,则只有当校验和存在位设置为1时,该字段才存在并包含有效信息。Key (4个八位字节)Key字段包含由包装器插入的四个八位字节。接收者可以用它来验证数据包的来源。确定真实性的技术超出了本文档的范围。仅当密钥存在字段设置为1时,密钥字段才存在。序列号(4个八位字节)序列号字段包含由封装器插入的无符号32位整数,接收器可以使用该整数来确定分组从封装器传输到接收器的顺序。生成序列号的确切算法及其接收的语义超出了本文的范围。路由(可变长度)路由字段是可选的,仅在路由存在位设置为1时存在。
严格源路由(第4位)其他文档中定义了严格源路由位的含义。如果所有路由信息都由严格的源路由组成,建议仅将该位设为1。递归控制(第5-7位)递归控制包含一个三位无符号整数,它包含允许的附加包的数量。默认情况下,这应该为零。版本号(第13-15位)版本号字段必须包含值0,其他值超出了本文档的范围。类型(2个八位字节)协议类型字段包含有效载荷数据包的协议类型。通常,该值是数据包的以太网协议类型字段。下面列出了当前定义的协议类型。其他值可以在其他文档中定义。Offset (2个二进制八位数)Offset字段表示从路由字段的开头到要检查的活动源路由条目的第一个二进制八位数的偏移量。如果路由存在或校验和存在位设置为1,则只有当路由存在位设置为1时,该字段才存在并包含有效信息。校验和(2个八位字节)校验和字段包含有效载荷数据包的GRE报头和IP(一的补码)校验和。如果路由存在或校验和存在位设置为1,则只有当校验和存在位设置为1时,该字段才存在并包含有效信息。Key (4个八位字节)Key字段包含由包装器插入的四个八位字节。接收者可以用它来验证数据包的来源。确定真实性的技术超出了本文档的范围。仅当密钥存在字段设置为1时,密钥字段才存在。序列号(4个八位字节)序列号字段包含由封装器插入的无符号32位整数,接收器可以使用该整数来确定分组从封装器传输到接收器的顺序。生成序列号的确切算法及其接收的语义超出了本文的范围。路由(可变长度)路由字段是可选的,仅在路由存在位设置为1时存在。
版本号(第13-15位)版本号字段必须包含值0,其他值超出了本文档的范围。类型(2个八位字节)协议类型字段包含有效载荷数据包的协议类型。通常,该值是数据包的以太网协议类型字段。下面列出了当前定义的协议类型。其他值可以在其他文档中定义。Offset (2个二进制八位数)Offset字段表示从路由字段的开头到要检查的活动源路由条目的第一个二进制八位数的偏移量。如果路由存在或校验和存在位设置为1,则只有当路由存在位设置为1时,该字段才存在并包含有效信息。校验和(2个八位字节)校验和字段包含有效载荷数据包的GRE报头和IP(一的补码)校验和。如果路由存在或校验和存在位设置为1,则只有当校验和存在位设置为1时,该字段才存在并包含有效信息。Key (4个八位字节)Key字段包含由包装器插入的四个八位字节。接收者可以用它来验证数据包的来源。确定真实性的技术超出了本文档的范围。仅当密钥存在字段设置为1时,密钥字段才存在。序列号(4个八位字节)序列号字段包含由封装器插入的无符号32位整数,接收器可以使用该整数来确定分组从封装器传输到接收器的顺序。生成序列号的确切算法及其接收的语义超出了本文的范围。路由(可变长度)路由字段是可选的,仅在路由存在位设置为1时存在。
Offset (2个二进制八位数)Offset字段表示从路由字段的开头到要检查的活动源路由条目的第一个二进制八位数的偏移量。如果路由存在或校验和存在位设置为1,则只有当路由存在位设置为1时,该字段才存在并包含有效信息。校验和(2个八位字节)校验和字段包含有效载荷数据包的GRE报头和IP(一的补码)校验和。如果路由存在或校验和存在位设置为1,则只有当校验和存在位设置为1时,该字段才存在并包含有效信息。Key (4个八位字节)Key字段包含由包装器插入的四个八位字节。接收者可以用它来验证数据包的来源。确定真实性的技术超出了本文档的范围。仅当密钥存在字段设置为1时,密钥字段才存在。序列号(4个八位字节)序列号字段包含由封装器插入的无符号32位整数,接收器可以使用该整数来确定分组从封装器传输到接收器的顺序。生成序列号的确切算法及其接收的语义超出了本文的范围。路由(可变长度)路由字段是可选的,仅在路由存在位设置为1时存在。
Key (4个八位字节)Key字段包含由包装器插入的四个八位字节。接收者可以用它来验证数据包的来源。确定真实性的技术超出了本文档的范围。仅当密钥存在字段设置为1时,密钥字段才存在。序列号(4个八位字节)序列号字段包含由封装器插入的无符号32位整数,接收器可以使用该整数来确定分组从封装器传输到接收器的顺序。生成序列号的确切算法及其接收的语义超出了本文的范围。路由(可变长度)路由字段是可选的,仅在路由存在位设置为1时存在。
路由(可变长度)路由字段是可选的,仅在路由存在位设置为1时存在。
路由字段是源路由条目(sre)的列表。每个SRE具有以下形式:
路由字段以包含0x0000类型和长度0的地址族的“空”SRE结束。
地址系列(2个二进制八位数)地址系列字段包含两个二进制八位数的值,表示路由信息字段的语法和语义。该字段的值以及路由信息的相应语法和语义在其他文档中定义。SRE偏移量(1个二进制八位数)SRE偏移量字段表示从路由信息字段的开头到要检查的源路由条目中活动条目的第一个二进制八位数的偏移量。SRE长度(1个二进制八位数)SRE长度字段包含SRE中的二进制八位数。如果SRE长度为0,则表示这是路由字段中的最后一个SRE。路由信息(可变长度)路由信息字段包含可用于路由该数据包的数据。该字段的确切语义在其他文档中定义。GRE数据包转发一般来说,转发交付层数据包的系统不会以任何方式将GRE数据包与其他数据包区分开。但是,系统可能会收到GRE数据包。在这种情况下,系统应该使用一些特定于传递的方法来确定这是一个GRE数据包。一旦确定,就可以检查密钥、序列号和校验和字段是否包含由相应标志指示的有效信息。如果路由存在位设置为1,则应检查地址族字段,以确定SRE长度、SRE偏移量以及路由信息字段的语义和用法。处理每个地址族的SRE的确切语义在其他文档中定义。
SRE长度(1个二进制八位数)SRE长度字段包含SRE中的二进制八位数。如果SRE长度为0,则表示这是路由字段中的最后一个SRE。路由信息(可变长度)路由信息字段包含可用于路由该数据包的数据。该字段的确切语义在其他文档中定义。GRE数据包转发一般来说,转发交付层数据包的系统不会以任何方式将GRE数据包与其他数据包区分开。但是,系统可能会收到GRE数据包。在这种情况下,系统应该使用一些特定于传递的方法来确定这是一个GRE数据包。一旦确定,就可以检查密钥、序列号和校验和字段是否包含由相应标志指示的有效信息。如果路由存在位设置为1,则应检查地址族字段,以确定SRE长度、SRE偏移量以及路由信息字段的语义和用法。处理每个地址族的SRE的确切语义在其他文档中定义。
GRE数据包转发一般来说,转发交付层数据包的系统不会以任何方式将GRE数据包与其他数据包区分开。但是,系统可能会收到GRE数据包。在这种情况下,系统应该使用一些特定于传递的方法来确定这是一个GRE数据包。一旦确定,就可以检查密钥、序列号和校验和字段是否包含由相应标志指示的有效信息。如果路由存在位设置为1,则应检查地址族字段,以确定SRE长度、SRE偏移量以及路由信息字段的语义和用法。处理每个地址族的SRE的确切语义在其他文档中定义。
处理完所有SRE后,源路由就完成了,GRE报头应该被删除,有效负载的TTL必须递减(如果有),有效负载数据包应该作为普通数据包转发。确切的转发方法取决于协议类型字段。
当前协议类型列表以下是当前分配给GRE的协议类型,未来的协议类型必须取自DIX以太网编码。由于历史原因,一些协议使用许多其他值。必须使用下表中的值来识别以下协议:
有关这些数值的完整列表,请参见IANA乙醚型号列表。
URL = FTP://FTP . isi . edu/in-notes/iana/assignments/Ethernet-numbers。