EGP 外部网关协议( 三 )


两个网关变成直接邻机,当每个已经发送一个邻机探测报文给另一个,并且来自另一个的对应的“邻机探测应答”已经收到时 。
不匹配的应答或拒绝经过一段合理的时间之后应该被丢弃 。然而,所有这些不匹配的报文方面的信息可能对诊断有用 。来自一个已是直接邻机网关的“邻机探测报文”应该用一个“应答”和一个“邻机探测报文”给以响应 。
假如从一个预期的邻机收到一个“邻机探测应答”,可是经过一段时间后,没有收到那个预期的邻机的“邻机探测报文”,邻机探测协议应该被认为还未完成 。一个“邻机终止”报文(见下文)当即被发送 。假如一个网关仍然希望获取另一个作为一个邻机,该协议必须从头开始重来 。
假如一个网关希望终止作为某个外部网关的邻机,它发送一个“邻机终止”报文 。
收到“邻机终止”报文的网关应该总是响应以一个“邻机终止”确认 。它应该停止将该报文的发送者视为一个任何方面的邻机 。因为有众多的的协议运行在直接邻机(见下文)间,假如某网关已不需要是其它的的直接邻机,它用一个“邻机终止”报文"有礼貌的"指出这个事实 。该“邻机终止”报文应该被重复传输(直到某些次数),直到收到它的确认为止 。
一旦一个“邻机终止”报文已经被收到,邻机可达性协议(在下面)应该停止运行 。
注重,我们没有规定一个网关开始决定想要变成另一个的邻机的方式 。
因为这仅是个平常的问题,它不属于外部网关协议 。
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包,该邻机才被再一次声明为可以达到的 。

推荐阅读