外部网关协议( EGP)
1介绍
DARPA卫星网Catenet应该是一个不断地发展的系统,有越来越多的主机和越来越多的网络参予其中。当然,这将需要越来越多的网关。过去,象这样的扩充以一种相对无组织的方式进行的。新网关--往往包含与现存网关截然不同的软件--会不断的增加,而且将通过GGP协议迅即参予公共的路由选择算法。然而,随着国际互联网络发展的越来越大,这种简单的扩充方式亦变得越来越行不通。存在很多理由∶
-路径选择算法的开销变得过于庞大;
-由于参予单一公共的路径选择算法的各种迥然不同的网关不断增加,致使无法进行维修和故障隔离,因为再也不能将国际互联网络作为一个综合通信系统来对待。
-网关软件和算法非凡是路径选择算法,变得太严格和不灵活,因为任何被提议的改变必须由太多不同的地点与太多不同的人员来完成。
将来,国际互联网络应该发展成一组独立的域或"自治系统",每个包含一套相对同构的网关(有一或多个)。协议非凡是这些网关在它们自身当中使用的协议,将要成为专用的事物,而且决不需要在特定的域或系统外面的网关中实现。
在最简单的情况下,一个自治系统可能仅包含单个(例如)将一个局域网连接到ARPANET上的网关。象这样的网关多半称作"支线网关",因为它唯一的用途是将局域网与国际互联网络的其他部分连接起来,而不是打算用于处理任何发自或去往那个特定局域网的通信。在不久的将来,我们将把国际互联网络视为一组自治系统,其中一个由位于ARPANETandSATNET上的DARPA网关组成,并且其余的是到局域网的支线网关。前面的系统,我们应该称作"核心"系统,将被后面的系统作为一个运输或"长途"运输系统。
然而,国际互联网络最终可能由很多平等的自治系统组成,他们中的任何一个都能用作为(具有某些约束,将在以后讨论)发自于任何系统并且驶往任何系统的通信的一个传播介质。当更加复杂的组合产生时,将任何一个自治系统视作一个"核心"系统显然是不合适的。然而为了具体起见,以及因为外部网关协议的初期实现应该集中在将"支线网关"连接到位于ARPANETandSATNET上的DARPA网关上,所以我们将在我们的实例与讨论中时常使用术语"核心"网关。
外部网关协议(EGP)的宗旨是,当答应最终用户将所有自治系统的复合物看作单个国际互联网络时,利用一个固定的、统一的地址空间,使一个或多个自治系统能够作为发自于其它的自治系统和驶往其它的自治系统的通信的传播介质使用。数据报穿越国际互联网络的路由与跨过的自治系统的数目,对最终用户来说是透明的(当然,除非最终用户使用IP"源路由"选项)。
在外部网关协议的描述中,我们故意给非凡的自治系统的设计师与实现者留下了许多活动余地,非凡在计时器大小方面。我们之所以这样做是因为我们料到不同的网关实现与不同的国际互联网络环境会产生不同的需求与目标,所以没有适用于所有情况的单一的明确的实现规范。然而,这并不意谓着符合这规范的任何实现都能正常工作,或我们已经留下活动余地对性能来说使无关紧要的。
事实上(例如)这里没有规定某些超时值却并不意味着指定一个任意值都能工作得很好。
自治系统将被指定一个16位的标识号码(现在很多时候也用同样的方法给网络和协议分配编码),并且每个EGP报头为这个号码贮有一个字。零不会分配给任何自治系统;更确切些,在这个域中存在一个零将表明当前没有号码。
我们必须引进一个网关是另一个网关的邻机(NEIGHBOR)这一概念。在最简单而且最普遍的情况中,假如存在一个每个网关都具有一个到达此网络的接口的网络的话,我们将这两个网关称作"邻机"。然而,为了容许以下两个情况,我们需要一个更广义的"邻机(neighbor)"概念∶
a)两个网关可认为是邻机,尽管他们并不是通过一个(在一般意义上的术语)网络直接连接,而是通过单根链路、HDLC线路、或某些类似物"直接连接"。b)两个网关可认为是邻机,尽管他们是通过一个对他们来说是透明的"internet"进行连接的。
也就是说,我们希望能够说两个网关是邻机,即使他们通过一个internet连接,只要该网关在他们的包转发算法中没有利用internet的内部结构方面的知识。
为了处理所有这些情况,我们说两个网关是邻机,假如他们是通过某种内部结构对他们来说是透明的传播介质连接的。(邻机概念更全面的讨论参见IEN184.)
假如两个邻机属于同一个自治系统,我们把他们叫做内部邻机;假如两个邻机不属于同一个自治系统,我们把他们叫做外部邻机。为了一个系统能将另一个作为传播介质使用,互为外部邻机的网关必须能够找出哪些网络经由其他网络是可以到达的。外部网关协议能使这些信息在外部邻机之间传送。因为它是一个轮询协议,它也能使每个网关去控制它发送和接收网络可达性信息的速度,容许每个系统控制它的自己的开销。它也能使每个系统拥有一个独立的路由算法,它的运行不会由于其他的系统的故障而受干扰。
它必须清楚地知道所有的自治系统,路由将在这些拥有自己的路由算法实现的系统内部的网关之间完成。(由单个支线网关组成的单个自治系统通常不需要路由算法.)外部网关协议不是一个路由算法。它能使外部邻机交换所有的路由算法都可能需要的信息,不过未指定网关如何处理这些信息。某些自治系统的内部路由算法的"路由更新"可能(或可能不)在格式上于外部网关协议的报文相仿。在DARPA"核心"系统中的网关将开始使用GGP协议(旧的网关至网关协议)作为他们的路由算法,不过这些受变化的影响的。在其他自治系统中的网关可能使用他们自己的内部网关协议(IGPs),可能或可能不类似于任何其他自治系统的IGP。他们当然可以使用GGP,可是不答应用在其他自治系统中的网关交换GGP报文。
还必须清楚地知道,外部网关协议没有打算提供能被作为普通范围或分层路由选择算法的输入使用的信息。它是为连接成一个树的一组自治系统设计的,没有循环。它不能传递充分的信息去防止路由回路,假如循环存在于拓扑之中.外部网关协议有三部分∶(a)邻机探测协议,(b)邻机可达性协议,与(c)网络可达性判定。注重,EGP定义的所有报文仅用来传播单个"路程段"。也就是说,他们在一个网关发起并且去往一个邻机网关,没有介于其间的网关用作媒介。
所以,生存时间(TTL)域应该设成一个很小的值。在不是发给他们的报文流中碰到EGP报文的网关可能丢弃他们。
2邻机探测
从一个外部网关获得路由选择信息之前,必须将那个网关作为一个直接相邻获取。(直接和间接相邻之间的区别在后边的章节给出.)为了使两个网关变成直接相邻,按照前面定义的理解他们必须是邻机,并且他们必须运行只不过是一个标准的三次握手式的邻机探测协议。
一个网关希望与另一个网关启动邻机探测,则给它发送一个邻机探测请求。这个报文应该重复传送(以适当的速度,大约每30秒一次),直到接到一个邻机探测应答。该请求总是包含一个标识号码,用以拷贝到应答中,所以请求和应答能够进行配对。
收到一个“邻机探测请求”的网关必须决定它是否希望变成请求发起者的直接邻机。假如不,它可以通过它的选项响应以一个邻机探测拒绝报文,随意地规定拒绝的理由。否则,它应该发送一个“邻机探测应答”报文。它还必须发送一个“邻机探测请求”报文,除非它早已这样做了。
两个网关变成直接邻机,当每个已经发送一个邻机探测报文给另一个,并且来自另一个的对应的“邻机探测应答”已经收到时。
不匹配的应答或拒绝经过一段合理的时间之后应该被丢弃。然而,所有这些不匹配的报文方面的信息可能对诊断有用。来自一个已是直接邻机网关的“邻机探测报文”应该用一个“应答”和一个“邻机探测报文”给以响应。
假如从一个预期的邻机收到一个“邻机探测应答”,可是经过一段时间后,没有收到那个预期的邻机的“邻机探测报文”,邻机探测协议应该被认为还未完成。一个“邻机终止”报文(见下文)当即被发送。假如一个网关仍然希望获取另一个作为一个邻机,该协议必须从头开始重来。
假如一个网关希望终止作为某个外部网关的邻机,它发送一个“邻机终止”报文。
收到“邻机终止”报文的网关应该总是响应以一个“邻机终止”确认。它应该停止将该报文的发送者视为一个任何方面的邻机。因为有众多的的协议运行在直接邻机(见下文)间,假如某网关已不需要是其它的的直接邻机,它用一个“邻机终止”报文"有礼貌的"指出这个事实。该“邻机终止”报文应该被重复传输(直到某些次数),直到收到它的确认为止。
一旦一个“邻机终止”报文已经被收到,邻机可达性协议(在下面)应该停止运行。
注重,我们没有规定一个网关开始决定想要变成另一个的邻机的方式。
因为这仅是个平常的问题,它不属于外部网关协议。
3邻机可达性协议
为网关保持关于它的邻机的可达性实时信息是很重要的。假如一个网关推断出某个邻机不可达,它会停止向那个网关转发通信。为了进行判定,邻机可达性协议是必须的。外部网关协议为此提供两个消息类型--一个"Hello"报文和一个"IHeardYou"报文。
当从一个直接邻机收到一个"Hello"报文时,
必须"立即"给那个邻机返还一个"IHeardYou"。收到一个“Hello”和返回一个"IHeardYou"之间的延迟决不会大于几秒。
当时,可达性判定算法留给特定网关的设计师去完成。我们理想中的算法如下所示:
一个可以达到的邻机应该公布为不可达,假如我们最近发送的n个"Hello"而在此期间仅收到的响应少于k个"IHeardYou"。一个不可达邻机应该公布为可以达到的,假如我们最近发送了m个"Hello"而在此期间至少收到J个"IHeardYou"响应。
然而,这里没有规定“Hello”的发送频率以及参数k、n、j和m的值。至于如何得到最佳的效果,这取决于该邻机的特性和各邻机的共享网络的特性。这意味着恰当的参数要由这两个邻机网关的设计师和实现者共同地决定。不考虑该邻机的特性和所连网络而孤立地选择算法和参数,就没有希望产生最恰当的可达性判定。
“Hello”和"IHeardYou"报文具有一个状态域,“发送”网关用以指出他认为“接受”网关是可以达到的或是不可达的?这些信息能够用于诊断。另一方面,它还答应一个网关进行附加的可达性判定:事实上仅一个网关需要发送"Hello"报文,而另一个能够根据“Hello”中的状态域声明它开机或停机。也就是说,当来自主动网关的"主动的"Hello"指出它已经声明被动的网关是可以达到的的时候,被动的"网关(只发送"IHeardYou")声明"主动的"网关(只发送“Hello”)是可以达到的.
当然,只有事先确定出哪一个邻机作为主动后才能工作。(这里的事先协定不属于外部网关协议.)
直接邻机网关还应该声明为不可达,假如能够从所连网络的底层协议信息推断出该情况的话。因此,比如,一个网关从ARPANET收到一个指出一个直接邻机熄火的1822目的地熄灭报文,它应该公布那个邻机不可达。直到已经交换了所需数量的hello/ihello/iHeard-You包,该邻机才被再一次声明为可以达到的。
已经变成不可达的直接邻机不再是一个直接邻机。不需要再一次经历邻机探测协议,邻机能够再一次被声明为可以达到的。然而,假如邻机保持不可达极长一段时间例如一个小时,该网关应该停止视它为邻机,那就是说,应该停止发送“Hello”报文给它。邻机探测协议于是在它再一次变成一个直接邻机之前将需要重传。
来自网关G转到gatewayG"的“Hello”和"IHeardYou"报文还要携带G最近从G"收到的NR轮询报文(见下文)的标识号码。
来自网关G转到gatewayG"的“Hello”和"IHeardYou"报文还要携带G的可能是由G"为NRmessages(见下文)轮询的以分钟为单位的最小时间间隔。
来自非直接邻机的"Hello"报文应该简单地忽略。然而,记录任何象这样的报文可以提供有用的判定性信息。一个网关停机或者将它连接到某个邻机接口不能正常工作,应当发送一个网关停机报文给所有不能到达它的直接邻机。它应该重复传输那个报文(直至一定次数)直到它收到一个网关停机确认为止它为邻机提供了一个故障的提前报警,让他们能够预备好一种方法使现有通信的破坏程度达到最小。
术语:网关G具有一个到达网络N的接口。
我们说:G相对于网络N(M和N是不同的网络)来说是到达网络M的合理的第一战,当且仅当以下情况发生的时候:
去往网络M和通过它的网络N接口达到网关G的通信量总是由G通过一个未包含任何联接于网络N的网关的路径转发给M。
简而言之,对于网络N而言G是去往网络M的合适的初站,在这种情况下在网络N上不存在更好的网关用来路由去往网络M的通信量。为了进行最佳路由选择,网络N中去往网络M的通信量应该总是转发给是合适初站的网关。
为了使外部邻机G和G"(通过网络N是邻机)能够彼此作为转发通信量到远程网络的包交换机,每个必须知道另一个的网络列表,以便成为去往它的合适的初站。外部网关协议定义了一个报文,称作NetworkReachabilityMessage(或NR报文),供传递这些信息。
让G成为网络N上的一个网关。G发送的关于网络N的NR报文必须包含以下信息:列出对于网络N而言G是合适的初站的所有网络。
假如G"能够从外部邻机G获得这些信息,这样它就知道驶往那些不在列表中的网络的通信量不应该转发给G。(然而,不能简单地断定位于该列表中的网络上的所有通信量都应当通过G转发,因为G"还可能拥有其他邻机,而这些邻机也是到达网络N的合适初站。比如,G和G"可能都是G"的邻机,但是对于networkM他们可能是"等距离的"。那么每个都可以成为一个合适的初站.)
对于列表中的每个网络,NR报文也包含一个字节,说明从G到那个网络的"距离"(按照某些公制,这些公制留给包含网关G的自治系统的设计师去设计)。
这些信息可能(或可能不)对诊断或内部路由算法顶事。
距离最大值(255.)意指该网络是不可达的。其他所有值意指网络是可以达到的。
假如一个来自某网关G的NR报文没有记载在前一来自G的NR报文中提到某网络N,应该假定对于G他仍然是可以达到的。然而,假如N没有在来自G的两个连续的NR报文中提到,意指对于G来说N已不可达。
为了确保那些已不可达但是从未明确地声明为不可达的网络超时并从可以达到的网络列表上去掉,这个方法是必须的。
G和G"是网络N上的外部邻机,G知道很多的在网络N上的网关邻机,而且知道这些邻机是那些网络的合适的初站。因为G"可能不知道所有这些邻机,能够从G获得这些信息对它是更便利的和更有效率的。所以,外部网关协议NR报文也包含容许G说明以下信息的域∶
a)一个列表,包含G已经可靠地判定为可以达到的所有邻机(既包括内部邻机也包括外部邻机)。只有当G主动地用他们运行邻机可达性协议时才将这网关包括在这个列表内。
b)那些邻机中间每一个邻机,都有一个相应的网络列表,对于网络N而言这个邻机就是这些网络的合适初站。c)对每个象这样的<neighbor,network>对,表示从那个邻机到达那个网络的"距离"。
因此NR报文提供一种方法,通过查看一个已知的邻机在同一个网络上是否具有其他的邻机,答应一个网关去发现新的邻机。
这些信息使得在下面定义的间接邻机策略成为可能。
以下是NR报文更精确地说明。
报文中的数据部分包含大量的数据块。每个块总是以一个网关地址为首,它可能是发送该报文的网关的地址或那个网关的邻机中的某个的地址。每个网关地址后面可能有一个网络列表以及从那个网关到每个网络的距离,对于那些网络该网关是一个合适的初站。
放在该数据块列表之前的是:
于这个报文相关的那个网络的地址。
假如G和G"是网络N上的邻机,那么在从G去往G"的NR报文中,它是网络N地址。
为了方便起见,四个字节已经配给这个地址--末尾的一、两、或三字节应该为零。
b)的内部邻机的总数是这个报文包含的数据块数。按照惯例,总数将包含G本身的数据块,它应该是第一个出现。c)G的外部邻机的总数是这个报文包含的数据块数。
那么数据块本身之后,首先是G本身,然后是G的所有内部邻机的块,再后边是外部邻机块。因为所有提到的在同一个网络上的网关地址已经给出,这些网关地址的网络地址部分(一个、两个或三个字节)被省略,以便节省空间。
每一个数据块包含一个字节用来计算可以将这个网关可以作为合适初站的网络的数目。在这个网络表中,每一个网络地址是一个、二个、或三个字节,这取决于它是一个A类、B类地址或者是C类地址。其后跟随的字节没有使用。
有时必须将NR报文进行分段。NR包含有一个字节用来指出片段的数目(片断从零开始编码),还有一个字节与用来包含最后一个片断的编码(并非片段的数量)。假如没有使用分段,这些字节必须全部为0。每一个片段必须是一个完整的独立的NR报文。也就是说,每一个片段从内部网关和外部网关开始计算,将是据块的整数倍。每一个片段中的数据块的数目,必须与从那个碎片开始计算的数目对应。然而,只有第一个片段使用一个描述这个发送网关的数据块作为开始。
这个方案使得每一个片段能够独立地处理,并且不需要复杂的装配机制。它还能够处理所有片断都还没有收到的报文。假如说经过一段时间之后或者重传轮询一定数量后还没有收到所有片断,就应当处理现有的分段假如他们能够组成完整的NR报文。(这意味着仅在差错分段中提及的网络将保持贮存在前一来自那个网关的NR报文中的"距离"值。然而假如这个网络在下一个来自那个网关的NR报文中没有受到一个新的值,该网络就会被声明为不可达。)
5NR报文轮询NR报文轮询
没有网关会要求发送NR报文给以任何其他网管,除非作为一个响应来自一个直接邻机的NR轮询。然而,一个网关被要求在几秒内响应来自直接邻机的NR轮询(根据下面两个段落所描述的),即使这个网关确信那个邻机已经停机。
EGPNR轮询报文为了这个目的而定义对于一个NR报文网关不会用高于每分钟一次的频率进行轮询。假如网关在一分钟内收到多个轮询,它简单地丢弃额外的轮询,也许会返回一个错误报文。网关G发送给网关G"的“Hello”和IHeardYou报文指出G从G"接受轮询间隔的最小时间间隔。也就是说,G"不能保证响应来自G小于那个间隔的轮询。
轮询必须发送给邻机可达性协议声明为可达的直接邻机。?
一个NR轮询报文包含一个标识号码,它通过轮询网关所选定。
被轮询网关将会返回在NR报文中的这个序列号,将他的轮询作为响应发送,能使轮询网关匹配收到的NR报文。选择一个独一无二的标识号码从而答应检测过时的可能还在网络中传播的NR报文,这是“轮询”网关的职责。因为轮询是比较少见的,所以不会有更多的问题。然而,为了帮助选择一个标示号码!癏ello”和IHeardYou报文携带来源于该邻机上次NR轮询的标识号码。
通常,轮询应该被重复传输一定次数(用一定的时间间隔进行传输)直到一个NR报文被收到。经过最大次数的重传之后仍然没有收到NR报文,轮询网关应该假定被轮询网关对于任何网络而言都不是合适的初站。轮询/重传算法最佳参数取决于两个邻机的特征以及连接他们的网络的特性。
只要一个NR报文的某分段在最大重传之后收到,该分段应该当做整个的NR报文的组成。
收到标识号码与最近发送的轮询不相配的NR报文应该忽略。没有规定多种突出轮询给同一个邻机。
6发送NR报文
通常,NR报文只作为一个轮询发送。然而,来自一个外部邻机的两个连续的轮询之间,网关可能发送唯一的一个未经请求的NR报文给那个邻机。这使他能够具有有限的能力去迅速地公布网络可达性改变,它可能在上次轮询之后的间隔之内已经存在。过多的未经请求的NR报文会被丢弃,或者返回一个错误报文。
NR报文应该在收到一个为轮询之后几秒钟内发送出去。假如不及时地响应一个NR轮询会导致轮询网关断定被轮询网关不是任何网络的合适初站。?*}
作为轮询的响应发送的NR报文在他们的标示号码域中带有该轮询的的标识号码。未经请求NR报文携带上次收到的轮询的标识号码,以及"未经请求"位设置。(注重它答应每个轮询周期仅有一个未经请求的NR报文.)
为了易于发送未经请求NR报文,NR轮询报文拥有一个字节指出轮询间隔以分钟为单位。
来自非邻机的轮询以及来自没有声明为可达的邻机或者具有一个非法的IP源网络域的轮询应该由具有适当的"理由"域的EGP错误信息去响应。假如G发送了一个具有IP源网络N的NR轮询给G",同时G"不是G在网络N上的的一个邻机,(或G"没有到达网络N的接口)所以所以源网络域被认为是非法的。
被复制的轮询(连续的轮询具有相同的标识号码)应该由同样报文的复制品给以响应。假如那个报文被分段,每次应当发送相同的分段数目。注重没有处理来自单个邻机的突出轮询的规定。注重假如同一个分段没有发送响应复制品的轮询,错误的再装配将很可能发生。假如没有用分割,,那么用一个不同的(估计可能更近来的)NR报文响应一个复制轮询应该不会引起损害。
7间接邻机
变成一个外部网关的"直接邻机"需要三个步骤:(a)邻机探测,(b)运行一个邻机可达性协议,和(c)为NR报文定期轮询邻机。然而,假定网关G从G"收到一个NR报文,其中G"指出存在其他邻机G1,...,Gn,对于某组G"不是其合适的初站的网络每个都是一个合适的初站。那么G应该答应转发那些网络的通信量直接给G1,...,Gn中恰当的一个,而不必必须首先发送到G"。既然这样,G可能被认为是一个G1,...,Gn的间接邻机,因为它是为了转发通信量,但是未执行邻机探测,邻机可达性,或用他们交换NR报文这些其他网关的一个邻机。邻机和网络可达信息可以通过G"间接地获得,因此称为“间接邻机”。我们说G是G1,...,Gn经由G"的一个间接邻机。
假如G是G"经由G"的一个间接邻机,并且G收到一个来自G"未提及G"的一个NR报文,G应该把G"看作已经变成不可达。
8怎样成为一个支线网络
最常见到的外部网关协议的应用可能就是能够使一个支线网关与一个国防高级研究项目治理局核心网关进行通信,从而使网络间的数据流--从前只能通过支线或者只能通过核心网关系统--可以能够互相访问。如上所述,一个支线网关可以看成是一个一级国际互联网络系统,它没有内部邻机。他经常用于局域网或者是网络到达一个具有一个核心网关的长途运输网络(例如阿帕网和卫星网)的接口。在这种情况下,这个支线网络不需要核心网关转发他的任何去往只有通过这个支线网络才能够到达的东西。通常,支线网络不会给国际互联网络运输系统提供任何服务,不需要给来自或者是去往那些是否可达到网络的通信量进行传送。
支线应当具有一个网络表其中包含有少量核心网关地址(不会超过二个或三个),这些网关具有一个公用网络。支线网关的责任运用这些网关启动邻机探测。当一个支线网关和一个核心网关成为直接邻机的时候,核心网关就会开始发送hello报文。
当支线网关声明已经成为直接邻机的核心网关是可以到达的时候,他应该为那些每分钟不超过一次的NR报文轮询这些网关(或者按照在来自核心网关的Hello报文所说明的)。核心网关应当为NR报文轮询支线网关。
支线发送的NR报文应该是最简单的答应。>也就是说,它应该仅拥有单个数据块,由它的自己的(经由它于核心网关邻接的网络的上的)地址开头,仅仅列出它是合适的初站的网络。通常这些正可能是无其它方式可以到达的网络。
核心网关发送完整的NRmessages,包含有关所有其他在公用网络上的网关的介绍,核心网关(应该列入内部邻机)和其它网关(应该列入外部邻机,而且可能包含支线本身)。这些信息可能能使支线变成所有这些其他网关的一个间接邻机。
也就是说,支线应该转发通信量直接给这些其他网关,但是将不会和他们变成直接邻机。
核心网关总是报告距离小于128,假如该网络可以不经由核心系统(即,不穿越任何非核心网关的网关)到达,而且否则大于或等于128。
支线决不会把任何(直接或间接地邻机核心网关任何通信量送给到不是合适的初站的网关,在一个NR报文中指出的那样。当然这么做不适用于使用源路由选项的数据报;凡是象这样的数据报应该总是被像在源路由任选字段中指出的一样转发,即使需要转发给不是一个合适的初站的网关。
假如支线的直接邻机全部失灵,它的职责是至少获取一个新直接邻机。它通过选择一个已经成为间接邻机的核心网关然后用它执行邻机探测协议来完成。(不超过一个核心网关将同意变成一个在任一时刻给定的支线网关的直接邻机是可能的.)
假如该支线网关不及时响应来自核心网关的“Hello”报文,可能被声明为不可达。假如该支线网关不及时响应来自核心网关的NR轮询报文,它的网络可能被声明为不可达。在这些情况中,核心网关可能丢弃驶往那些网络的通信量,给源主机返回ICMP"目的地网络不可达"。
支线网关应该完全地运行ICMP协议,以及外部网关协议。非凡是,它必须响应ICMPecho请求,而且必须酌情发送ICMP目的地熄灭报文。它也要求酌情发送ICMP重定向报文。
9局限性
不在本身里的组成一个网络路径选择算法。另外,它不能提供实现通用路由算法必须的全部信息。假如自治系统集的拓扑不是树形结构的(即,假如它拥有循环),外部网关协议未提供足够的拓扑的信息去防止回路。
假如任何网关发送了一个假信息NR报文,自称是去一个网络的合适的初站,但事实上根本不能到达,浦网那个网络的通信永不可能被送达。Implementersmustbearthisinmind.
“邻机探测报文”
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!EGPVersion#!Type!Code!Info!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Checksum!AutonomousSystem#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Identification#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
说明
内部和外部网关用“邻机探测报文”变成邻机。EGP版本1
类型
3
代码
Code=0“邻机探测请求”
Code=1“邻机探测应答”
Code=2邻机探测拒绝(参见信息字段)
Code=3“邻机终止”报文(参见信息字段)
Code=4“邻机终止”确认
校验和
EGP校验和是从EGP版本号域开始的EGP报文中16位字二进制反码和的16位二进制反码值。为了计算该校验和,校验和域应该为零。
独立系统#_
这个16位数标识该独立系统,它包含作为报文的源的网关。
Info
对于拒绝报文,给与拒绝理由:
0未指定的
1不在潜在邻机表内
2因治理设定而禁止
3对于停止报文,给与不再成为邻机的理由∶
0未指定
1关机
2不再需要作邻机通信
否则,这个域必须是零。
标识号码
帮助匹配请求和应答的标识号码。
邻机HELLO/IHEARDYOU报文
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!EGPVersion#!Type!Code!Status!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Checksum!AutonomousSystem#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Sequence#!MinPollIntvl!Zero!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!LastPollId#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
说明
外部邻机运用EGP邻居“Hello”和IHeardYou报文去判定相邻连通性。当一个网关收到来自邻机的EGP邻居“Hello”报文时它应该响应以一个EGPIHeardYou报文。外部网关协议版本
1
类型
5
代码
Code=0用于“Hello”
Code=1用于IHeardyou
校验和
EGP校验和是从EGP版本号域开始的EGP报文中16位字二进制反码和的16位二进制反码值。为了计算该校验和,校验和域应该为零。
自治系统#
这个16位数标识该独立系统,它包含作为报文的源的网关。
顺序号
帮助匹配请求和应答的序列号。
状态
0没有状态信息
1看起来我能访问到你
22根据邻机可达性协议我访问不到你
33根据网络可达性信息我访问不到你(例如来自阿帕网的1822"目的地熄灭"报文)
44由于我的网络接口问题我访问不到你
上一次轮询标识号
从此刻正预备给它发送报文的邻机那里最近收到的NR轮询报文的标识号码,。
最小轮询间隔
一个分钟数,在此期间网关不应该为NR报文轮询多于一次。
NR轮询报文
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!EGPVersion#!Type!Code!Unused!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Checksum!AutonomousSystem#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!IPSourceNetwork!Interval!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Identification#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
说明
想要接受来自外部网关的NR报文的网关将发送一个NRPoll报文。在该NR报文中提到的各网关在位于IP源网络域中的网络上具有一个接口。外部网关协议版本#
1
类型
2
代码
0
校验和
EGP校验和是从EGP版本号域开始的EGP报文中16位字二进制反码和的16位二进制反码值。为了计算该校验和,校验和域应该为零。自治系统#
这个16位数标识该独立系统,它包含作为报文的源的网关。
标识号码
帮助匹配请求和应答的标识号码。
IP源网络
在该NR报文中提到的各网关在位于IP源网络域中的网络上具有一个接口。IP源网络被标记为一字节的网络号码后面是两个字节的零为了A类网络两个字节的网络号码后面是一字节的零用于B类网络并且三字节的网络号码用于C类网络。
时间间隔
以分钟为单位的轮询间隔。
网络可达性报文
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!EGPVersion#!Type!Code!U!Zeroes!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Checksum!AutonomousSystem#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Fragment#!#oflastfrg.!Identification#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!IPSourceNetwork!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!#ofIntGwys!#ofExtGwys!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!#ofNets!;#ofnetsfor
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Gateway1
!Gateway1IPaddress(withoutnetwork#)!;1,2or3bytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!net1,1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;1,2or3bytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!distance!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!net1,2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;1,2or3bytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!distance!
+-+-+-+-+-+-+-+-+
.
.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!net1,m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;mnetsreachable
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+;viaGateway1
.
.
+-+-+-+-+-+-+-+-+
!#ofnets!;numberofnetsforGatewayn
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!GatewaynIPaddress(withoutnetwork#)!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!netn,1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;1,2or3bytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!distance!
+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!netn,2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;1,2or3bytes
+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!distance!.
+-+-+-+-+-+-+-+-+.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!netn,m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;mnetsreachable
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+;viaGatewayn
!distance!
+-+-+-+-+-+-+-+-+
说明
网络可达性报文(NR)用来发现通过外部网关可能到达的网络。发送NR报文响应一个NRPoll报文。^yxok90
外部网关协议版本#
1
类型
1
代码
0
校验和
EGP校验和是从EGP版本号域开始的EGP报文中16位字二进制反码和的16位二进制反码值。为了计算该校验和,校验和域应该为零。
自治系统#
这个16位数标识该独立系统,它包含作为报文的源的网关。
U(未经请求)位
这个位被设定假如NR报文正在未经请求的发送。
标识号码
上一个由邻居发送的给这个正在发送的NR报文的NRpoll报文的标识号码。这个号码用来帮助匹配轮询和答复。
分段数
在该NR报文中的分段。假如未用分段,零。
最后的分段号数
在该NR报文中的上个分段的号数。假如未用分段,零。IP源网络
在该NR报文中提到的各网关在位于IP源网络域中的网络上具有一个接口。
内部网关#_
在这个报文中提到的内部网关。
外部网关#_
在这个报文中提到的外部网关。
网络#_
是合适初站的网关IP地址跟随的是网络的数目。
网关IP地址
网关IP地址的1、2或3字节(没有网络#_)。
网络地址
通过前面的网关能够到达的网络的网络地址的1、2或3字节。在站点#_中的1字节距离。
EGP错误信息
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!EGPVersion#!Type!Code!Unused!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Checksum!AutonomousSystem#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!ErrorType!ErrorCode!Id.#ofErroneousMsg.!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!Sequence#!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
说明
EGP错误信息被作为具有非法的校验和或在它的一个域中具有不正确的值的EGP报文的响应递送。
外部网关协议版本#
1
类型
8
代码
0
校验和
EGP校验和是从EGP版本号域开始的EGP报文中16位字二进制反码和的16位二进制反码值。为了计算该校验和,校验和域应该为零。
自治系统#
这个16位数标识该独立系统,它包含作为报文的源的网关。
顺序号
通过网关发送错误信息赋予的序号。
差错类型
错误的EGP报文的类型
错误代码
错误的EGP报文的代码
不正确的报文的标识号码
错误的EGP报文的序列号
原因
EGP报文错误原因下列理由已经被定义∶
0-未指定
11-非法的EGP校验和
22-在NR轮询或响应中的非法的IP源地址
33-3-未定义的EGP类型或代码
44-收到的来自非邻居的轮询
55-收到过多未经请求的NR报文
66-收到过多轮询
77-错误的计算收到的NR报文
88-没有收到NR轮询应答
99-未全部收到NR报文分段